Skip to content

Commit

Permalink
more changes, removing generic EncryptionHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
gbbafna committed Aug 30, 2023
1 parent 087c904 commit ae7d8c6
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* T - Encryption Metadata - crypto metadata instance.
* U - Parsed Encryption Metadata
*/
public interface CryptoHandler<T extends EncryptionHandler, U> {
public interface CryptoHandler<T , U> {

/**
* To initialise or create a new crypto metadata to be used in encryption. This is needed to set the context before
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@
package org.opensearch.encryption;

import org.opensearch.common.crypto.CryptoHandler;
import org.opensearch.common.crypto.EncryptionHandler;
import org.opensearch.common.util.concurrent.RefCounted;

/**
* Crypto plugin interface used for encryption and decryption.
*/
public interface CryptoManager<T extends EncryptionHandler, U> extends RefCounted {
public interface CryptoManager<T , U> extends RefCounted {

/**
* @return key provider type
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import com.amazonaws.encryptionsdk.caching.CachingCryptoMaterialsManager;
import com.amazonaws.encryptionsdk.caching.LocalCryptoMaterialsCache;
import org.opensearch.common.crypto.CryptoHandler;
import org.opensearch.common.crypto.EncryptionHandler;
import org.opensearch.common.crypto.MasterKeyProvider;
import org.opensearch.common.unit.TimeValue;
import org.opensearch.common.util.concurrent.AbstractRefCounted;
Expand Down Expand Up @@ -104,7 +103,7 @@ CachingCryptoMaterialsManager createMaterialsManager(MasterKeyProvider masterKey
}

// package private for tests
<T extends EncryptionHandler, U> CryptoManager<?, ?> createCryptoManager(CryptoHandler<T, U> cryptoHandler, String keyProviderType, String keyProviderName, Runnable onClose) {
<T, U> CryptoManager<?, ?> createCryptoManager(CryptoHandler<T, U> cryptoHandler, String keyProviderType, String keyProviderName, Runnable onClose) {
return new CryptoManagerImpl<T, U>(keyProviderName, keyProviderType) {
@Override
protected void closeInternal() {
Expand All @@ -128,7 +127,7 @@ public CryptoHandler<T, U> getCryptoProvider() {
};
}

private static abstract class CryptoManagerImpl<T extends EncryptionHandler, U> extends AbstractRefCounted implements CryptoManager<T, U> {
private static abstract class CryptoManagerImpl<T , U> extends AbstractRefCounted implements CryptoManager<T, U> {
public CryptoManagerImpl(String keyProviderName, String keyProviderType) {
super(keyProviderName + "-" + keyProviderType);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import com.amazonaws.encryptionsdk.model.ContentType;
import com.amazonaws.encryptionsdk.model.EncryptionMaterials;
import com.amazonaws.encryptionsdk.model.KeyBlob;
import org.opensearch.common.crypto.EncryptionHandler;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
Expand All @@ -47,7 +46,7 @@

@SuppressWarnings({ "rawtypes" })
// Move this to EncryptionHandler
public class EncryptionMetadata extends EncryptionHandler {
public class EncryptionMetadata {
private static final CiphertextType CIPHERTEXT_TYPE = CiphertextType.CUSTOMER_AUTHENTICATED_ENCRYPTED_DATA;

private final Map<String, String> encryptionContext_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import org.opensearch.common.StreamContext;
import org.opensearch.common.blobstore.stream.write.WriteContext;
import org.opensearch.common.crypto.CryptoHandler;
import org.opensearch.common.crypto.EncryptionHandler;
import org.opensearch.common.io.InputStreamContainer;
import org.opensearch.core.action.ActionListener;

Expand All @@ -23,7 +22,7 @@
*
* @opensearch.internal
*/
public class AsyncMultiStreamEncryptedBlobContainer<T extends EncryptionHandler, U> extends EncryptedBlobContainer<T, U> implements AsyncMultiStreamBlobContainer {
public class AsyncMultiStreamEncryptedBlobContainer<T , U> extends EncryptedBlobContainer<T, U> implements AsyncMultiStreamBlobContainer {

private final AsyncMultiStreamBlobContainer blobContainer;
private final CryptoHandler<T, U> cryptoHandler;
Expand All @@ -45,9 +44,9 @@ public boolean remoteIntegrityCheckSupported() {
return false;
}

static class EncryptedWriteContext<T extends EncryptionHandler, U> extends WriteContext {
static class EncryptedWriteContext<T, U> extends WriteContext {

private final Object encryptionMetadata;
private final T encryptionMetadata;
private final CryptoHandler<T, U> cryptoHandler;
private final long fileSize;

Expand All @@ -58,11 +57,11 @@ public EncryptedWriteContext(WriteContext writeContext, CryptoHandler<T, U> cry
super(writeContext);
this.cryptoHandler = cryptoHandler;
this.encryptionMetadata = this.cryptoHandler.initEncryptionMetadata();
this.fileSize = this.cryptoHandler.estimateEncryptedLengthOfEntireContent((T) encryptionMetadata, writeContext.getFileSize());
this.fileSize = this.cryptoHandler.estimateEncryptedLengthOfEntireContent(encryptionMetadata, writeContext.getFileSize());
}

public StreamContext getStreamProvider(long partSize) {
long adjustedPartSize = cryptoHandler.adjustContentSizeForPartialEncryption((T) encryptionMetadata, partSize);
long adjustedPartSize = cryptoHandler.adjustContentSizeForPartialEncryption(encryptionMetadata, partSize);
StreamContext streamContext = super.getStreamProvider(adjustedPartSize);
return new EncryptedStreamContext<>(streamContext, cryptoHandler, encryptionMetadata);
}
Expand All @@ -75,15 +74,15 @@ public long getFileSize() {
}
}

static class EncryptedStreamContext<T extends EncryptionHandler, U> extends StreamContext {
static class EncryptedStreamContext<T , U> extends StreamContext {

private final CryptoHandler<T, U> cryptoHandler;
private final Object encryptionMetadata;
private final T encryptionMetadata;

/**
* Construct a new encrypted StreamContext object
*/
public EncryptedStreamContext(StreamContext streamContext, CryptoHandler<T, U> cryptoHandler, Object encryptionMetadata) {
public EncryptedStreamContext(StreamContext streamContext, CryptoHandler<T, U> cryptoHandler, T encryptionMetadata) {
super(streamContext);
this.cryptoHandler = cryptoHandler;
this.encryptionMetadata = encryptionMetadata;
Expand All @@ -92,7 +91,7 @@ public EncryptedStreamContext(StreamContext streamContext, CryptoHandler<T, U>
@Override
public InputStreamContainer provideStream(int partNumber) throws IOException {
InputStreamContainer inputStreamContainer = super.provideStream(partNumber);
return cryptoHandler.createEncryptingStreamOfPart((T) encryptionMetadata, inputStreamContainer, getNumberOfParts(), partNumber);
return cryptoHandler.createEncryptingStreamOfPart(encryptionMetadata, inputStreamContainer, getNumberOfParts(), partNumber);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import org.opensearch.common.crypto.CryptoHandler;
import org.opensearch.common.crypto.DecryptedRangedStreamProvider;
import org.opensearch.common.crypto.EncryptedHeaderContentSupplier;
import org.opensearch.common.crypto.EncryptionHandler;
import org.opensearch.common.io.InputStreamContainer;
import org.opensearch.core.action.ActionListener;

Expand All @@ -25,7 +24,7 @@
/**
* EncryptedBlobContainer is a wrapper around BlobContainer that encrypts the data on the fly.
*/
public class EncryptedBlobContainer<T extends EncryptionHandler, U> implements BlobContainer {
public class EncryptedBlobContainer<T , U> implements BlobContainer {

private final BlobContainer blobContainer;
private final CryptoHandler<T, U> cryptoHandler;
Expand Down Expand Up @@ -65,9 +64,9 @@ private EncryptedHeaderContentSupplier getEncryptedHeaderContentSupplier(String

@Override
public InputStream readBlob(String blobName, long position, long length) throws IOException {
Object encryptionMetadata = cryptoHandler.loadEncryptionMetadata(getEncryptedHeaderContentSupplier(blobName));
U encryptionMetadata = cryptoHandler.loadEncryptionMetadata(getEncryptedHeaderContentSupplier(blobName));
DecryptedRangedStreamProvider decryptedStreamProvider = cryptoHandler.createDecryptingStreamOfRange(
(U) encryptionMetadata,
encryptionMetadata,
position,
position + length - 1
);
Expand All @@ -84,10 +83,10 @@ public long readBlobPreferredLength() {

private void executeWrite(InputStream inputStream, long blobSize, CheckedBiConsumer<InputStream, Long, IOException> writeConsumer)
throws IOException {
Object cryptoContext = cryptoHandler.initEncryptionMetadata();
T cryptoContext = cryptoHandler.initEncryptionMetadata();
InputStreamContainer streamContainer = new InputStreamContainer(inputStream, blobSize, 0);
InputStreamContainer encryptedStream = cryptoHandler.createEncryptingStream((T) cryptoContext, streamContainer);
long cryptoLength = cryptoHandler.estimateEncryptedLengthOfEntireContent((T) cryptoContext, blobSize);
InputStreamContainer encryptedStream = cryptoHandler.createEncryptingStream(cryptoContext, streamContainer);
long cryptoLength = cryptoHandler.estimateEncryptedLengthOfEntireContent(cryptoContext, blobSize);
writeConsumer.accept(encryptedStream.getInputStream(), cryptoLength);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@

import org.opensearch.common.crypto.CryptoHandler;
import org.opensearch.common.crypto.EncryptedHeaderContentSupplier;
import org.opensearch.common.crypto.EncryptionHandler;

import java.io.IOException;

/**
* Adjusts length of encrypted blob to raw length
*/
public class EncryptedBlobMetadata<T extends EncryptionHandler, U> implements BlobMetadata {
public class EncryptedBlobMetadata<T , U> implements BlobMetadata {
private final EncryptedHeaderContentSupplier encryptedHeaderContentSupplier;
private final BlobMetadata delegate;
private final CryptoHandler<T, U> cryptoHandler;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@

import org.apache.lucene.index.IndexCommit;
import org.opensearch.Version;
import org.opensearch.common.crypto.CryptoHandler;
import org.opensearch.common.crypto.EncryptionHandler;
import org.opensearch.core.action.ActionListener;
import org.opensearch.action.admin.cluster.crypto.CryptoSettings;
import org.opensearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
import org.opensearch.cluster.AckedClusterStateUpdateTask;
Expand All @@ -57,17 +54,19 @@
import org.opensearch.common.UUIDs;
import org.opensearch.common.blobstore.BlobPath;
import org.opensearch.common.blobstore.BlobStore;
import org.opensearch.common.crypto.CryptoHandler;
import org.opensearch.common.crypto.DecryptedRangedStreamProvider;
import org.opensearch.common.crypto.EncryptedHeaderContentSupplier;
import org.opensearch.common.io.InputStreamContainer;
import org.opensearch.common.lifecycle.Lifecycle;
import org.opensearch.common.lifecycle.LifecycleListener;
import org.opensearch.common.io.InputStreamContainer;
import org.opensearch.common.settings.Settings;
import org.opensearch.core.action.ActionListener;
import org.opensearch.core.common.Strings;
import org.opensearch.core.index.shard.ShardId;
import org.opensearch.core.xcontent.NamedXContentRegistry;
import org.opensearch.encryption.CryptoManager;
import org.opensearch.index.mapper.MapperService;
import org.opensearch.core.index.shard.ShardId;
import org.opensearch.index.snapshots.IndexShardSnapshotStatus;
import org.opensearch.index.snapshots.blobstore.RemoteStoreShardShallowCopySnapshot;
import org.opensearch.index.store.Store;
Expand Down Expand Up @@ -530,31 +529,31 @@ private void assertThrowsOnRegister(String repoName) {
expectThrows(RepositoryException.class, () -> repositoriesService.registerRepository(request, null));
}

private static class TestCryptoHandler implements CryptoHandler<EncryptionHandler, Object> {
private static class TestCryptoHandler implements CryptoHandler<Object, Object> {

@Override
public EncryptionHandler initEncryptionMetadata() {
return new EncryptionHandler();
public Object initEncryptionMetadata() {
return new Object();
}

@Override
public long adjustContentSizeForPartialEncryption(EncryptionHandler cryptoContextObj, long contentSize) {
public long adjustContentSizeForPartialEncryption(Object cryptoContextObj, long contentSize) {
return 0;
}

@Override
public long estimateEncryptedLengthOfEntireContent(EncryptionHandler cryptoContextObj, long contentLength) {
public long estimateEncryptedLengthOfEntireContent(Object cryptoContextObj, long contentLength) {
return 0;
}

@Override
public InputStreamContainer createEncryptingStream(EncryptionHandler encryptionMetadata, InputStreamContainer streamContainer) {
public InputStreamContainer createEncryptingStream(Object encryptionMetadata, InputStreamContainer streamContainer) {
return null;
}

@Override
public InputStreamContainer createEncryptingStreamOfPart(
EncryptionHandler cryptoContextObj,
Object cryptoContextObj,
InputStreamContainer stream,
int totalStreams,
int streamIdx
Expand Down Expand Up @@ -587,11 +586,11 @@ public long estimateDecryptedLength(Object cryptoContext, long contentLength) {
}
}

private static abstract class TestCryptoManager implements CryptoManager {
private static abstract class TestCryptoManager implements CryptoManager<Object, Object> {
private final String name;
private final AtomicInteger ref;

private final CryptoHandler cryptoHandler;
private final CryptoHandler<Object, Object> cryptoHandler;

public TestCryptoManager(Settings settings, String keyProviderName) {
this.name = keyProviderName;
Expand Down Expand Up @@ -625,7 +624,7 @@ public String name() {
return name;
}

public CryptoHandler getCryptoProvider() {
public CryptoHandler<Object, Object> getCryptoProvider() {
return cryptoHandler;
}
}
Expand Down

0 comments on commit ae7d8c6

Please sign in to comment.