in TestVectors/runtimes/java/src/main/smithy-generated/software/amazon/cryptography/encryptionsdk/wrapped/KeyringToMasterKeyProvider.java [62:182]
public static MasterKeyProvider<?> createMasterKeyProvider(IKeyring keyring) {
if (keyring == null) {
throw new IllegalArgumentException("Keyring cannot be null");
}
if (keyring instanceof AwsKmsKeyring) {
// TODO: Get KMS Client if present for later
// TODO: Get Grant Token if present for later
AwsKmsKeyring kmsKeyring = (AwsKmsKeyring) keyring;
String kmsKeyArn = String(kmsKeyring.awsKmsKey());
return KmsMasterKeyProvider.builder().buildStrict(kmsKeyArn);
} else if (keyring instanceof AwsKmsMrkKeyring) {
// TODO: Get KMS Client if present for later
// TODO: Get Grant Token if present for later
AwsKmsMrkKeyring mrkKeyring = (AwsKmsMrkKeyring) keyring;
String kmsKeyArn = String(mrkKeyring.awsKmsKey());
return AwsKmsMrkAwareMasterKeyProvider
.builder()
.buildStrict(Collections.singletonList(kmsKeyArn));
} else if (keyring instanceof AwsKmsDiscoveryKeyring) {
AwsKmsDiscoveryKeyring discoveryKeyring =
(AwsKmsDiscoveryKeyring) keyring;
// TODO: Why is there always a discovery filter? Is there always a Discovery Filter?
if (discoveryKeyring.discoveryFilter().is_Some()) {
software.amazon.cryptography.materialproviders.model.DiscoveryFilter mplFilter =
ToNative.DiscoveryFilter(
discoveryKeyring.discoveryFilter().dtor_value()
);
return KmsMasterKeyProvider
.builder()
.buildDiscovery(
new DiscoveryFilter(mplFilter.partition(), mplFilter.accountIds())
);
}
return KmsMasterKeyProvider.builder().buildDiscovery();
} else if (keyring instanceof AwsKmsMrkDiscoveryKeyring) {
AwsKmsMrkDiscoveryKeyring mrkDiscoveryKeyring =
(AwsKmsMrkDiscoveryKeyring) keyring;
String mrkRegion = String(mrkDiscoveryKeyring.region());
if (mrkDiscoveryKeyring.discoveryFilter().is_Some()) {
software.amazon.cryptography.materialproviders.model.DiscoveryFilter mplFilter =
ToNative.DiscoveryFilter(
mrkDiscoveryKeyring.discoveryFilter().dtor_value()
);
return AwsKmsMrkAwareMasterKeyProvider
.builder()
.discoveryMrkRegion(Region.of(mrkRegion))
.buildDiscovery(
new DiscoveryFilter(mplFilter.partition(), mplFilter.accountIds())
);
}
return AwsKmsMrkAwareMasterKeyProvider
.builder()
.discoveryMrkRegion(Region.of(mrkRegion))
.buildDiscovery();
} else if (keyring instanceof RawAESKeyring) {
RawAESKeyring aesKeyring = (RawAESKeyring) keyring;
ByteBuffer keyByteBuffer = ByteBuffer(aesKeyring.wrappingKey());
ByteBuffer provider = ByteBuffer(aesKeyring.keyNamespace());
ByteBuffer keyId = ByteBuffer(aesKeyring.keyName());
return JceMasterKey.getInstance(
new SecretKeySpec(keyByteBuffer.array(), "AES"),
new String(provider.array(), StandardCharsets.UTF_8),
new String(keyId.array(), StandardCharsets.UTF_8),
"AES/GCM/NOPADDING"
);
} else if (keyring instanceof RawRSAKeyring) {
RawRSAKeyring rsaKeyring = (RawRSAKeyring) keyring;
PublicKey wrappingKey = null;
PrivateKey unwrappingKey = null;
ByteBuffer provider = ByteBuffer(rsaKeyring.keyNamespace());
ByteBuffer keyId = ByteBuffer(rsaKeyring.keyName());
if (rsaKeyring.publicKey().is_Some()) {
wrappingKey =
getPublicKeyFromPEM(ByteBuffer(rsaKeyring.publicKey().dtor_value()));
}
if (rsaKeyring.privateKey().is_Some()) {
unwrappingKey =
getPrivateKeyFromPEM(
ByteBuffer(rsaKeyring.privateKey().dtor_value())
);
}
String rsaWrappingAlg = getRsaWrappingAlg(rsaKeyring.paddingScheme());
if (wrappingKey == null && unwrappingKey == null) {
throw new NoSuchMasterKeyException(
"No Public Key or Private found to encrypt/decrypt with Master Key."
);
}
return JceMasterKey.getInstance(
wrappingKey,
unwrappingKey,
new String(provider.array(), StandardCharsets.UTF_8),
new String(keyId.array(), StandardCharsets.UTF_8),
rsaWrappingAlg
);
} else if (keyring instanceof MultiKeyring) {
MultiKeyring multiKeyring = (MultiKeyring) keyring;
List<MasterKeyProvider<?>> providers = new ArrayList<>();
// Convert generator keyring if present
if (multiKeyring.generatorKeyring().is_Some()) {
providers.add(
createMasterKeyProvider(multiKeyring.generatorKeyring().dtor_value())
);
}
// Convert child keyrings
for (IKeyring child : multiKeyring.childKeyrings()) {
providers.add(createMasterKeyProvider(child));
}
return MultipleProviderFactory.buildMultiProvider(providers);
} else {
// Log keyring that are not supported by Master Key Provider (MKP)
// These keyring will be skipped from conversion.
System.out.println("Keyring: " + keyring.getClass().getName());
return null;
}
}