diff --git a/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDBEncryptor.java b/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDBEncryptor.java index 283469158b..0d720a5c3f 100644 --- a/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDBEncryptor.java +++ b/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDBEncryptor.java @@ -355,6 +355,7 @@ public Map decryptRecord( materials.getVerificationKey(), signature ); + DynamoDbSigner.putCacheIfEmpty(signer); itemAttributes.remove(materialDescriptionFieldName); actualDecryption( diff --git a/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDbSigner.java b/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDbSigner.java index d4ae37c717..6e91995251 100644 --- a/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDbSigner.java +++ b/DynamoDbEncryption/runtimes/java/src/main/sdkv2/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDbSigner.java @@ -62,11 +62,14 @@ static DynamoDbSigner getInstance(String signingAlgorithm, SecureRandom rnd) { DynamoDbSigner result = cache.get(signingAlgorithm); if (result == null) { result = new DynamoDbSigner(signingAlgorithm, rnd); - cache.putIfAbsent(signingAlgorithm, result); } return result; } + static void putCacheIfEmpty(DynamoDbSigner signer) { + cache.putIfAbsent(signer.getSigningAlgorithm(), signer); + } + /** * @param signingAlgorithm is the algorithm used for asymmetric signing (ex: SHA256withRSA). This * is ignored for symmetric HMACs as that algorithm is fully specified by the key.