newCachePartEncryptReader returns encrypted cache part reader, with part data encrypted with part encryption key
(ctx context.Context, bucket, object string, partID int, content io.Reader, size int64, metadata map[string]string)
| 1424 | |
| 1425 | // newCachePartEncryptReader returns encrypted cache part reader, with part data encrypted with part encryption key |
| 1426 | func newCachePartEncryptReader(ctx context.Context, bucket, object string, partID int, content io.Reader, size int64, metadata map[string]string) (r io.Reader, err error) { |
| 1427 | var key []byte |
| 1428 | var objectEncryptionKey, partEncryptionKey crypto.ObjectKey |
| 1429 | |
| 1430 | // Calculating object encryption key |
| 1431 | key, err = decryptObjectMeta(key, bucket, object, metadata) |
| 1432 | if err != nil { |
| 1433 | return nil, err |
| 1434 | } |
| 1435 | copy(objectEncryptionKey[:], key) |
| 1436 | |
| 1437 | partEnckey := objectEncryptionKey.DerivePartKey(uint32(partID)) |
| 1438 | copy(partEncryptionKey[:], partEnckey[:]) |
| 1439 | wantSize := int64(-1) |
| 1440 | if size >= 0 { |
| 1441 | info := ObjectInfo{Size: size} |
| 1442 | wantSize = info.EncryptedSize() |
| 1443 | } |
| 1444 | hReader, err := hash.NewReader(content, wantSize, "", "", size) |
| 1445 | if err != nil { |
| 1446 | return nil, err |
| 1447 | } |
| 1448 | |
| 1449 | pReader := NewPutObjReader(hReader) |
| 1450 | content, err = pReader.WithEncryption(hReader, &partEncryptionKey) |
| 1451 | if err != nil { |
| 1452 | return nil, err |
| 1453 | } |
| 1454 | |
| 1455 | reader, err := sio.EncryptReader(content, sio.Config{Key: partEncryptionKey[:], MinVersion: sio.Version20, CipherSuites: fips.DARECiphers()}) |
| 1456 | if err != nil { |
| 1457 | return nil, crypto.ErrInvalidCustomerKey |
| 1458 | } |
| 1459 | return reader, nil |
| 1460 | } |
| 1461 | |
| 1462 | // uploadIDExists returns error if uploadID is not being cached. |
| 1463 | func (c *diskCache) uploadIDExists(bucket, object, uploadID string) (err error) { |
no test coverage detected