From 095aeff50bd0b9ab740eae028c12c08a0c1d054c Mon Sep 17 00:00:00 2001 From: rishav-karanjit Date: Thu, 16 Apr 2026 12:12:51 -0700 Subject: [PATCH 1/2] move put cache --- .../datamodeling/sdkv2/encryption/DynamoDBEncryptor.java | 4 +++- .../datamodeling/sdkv2/encryption/DynamoDbSigner.java | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) 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..981d095ebb 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 @@ -326,8 +326,9 @@ public Map decryptRecord( materials = encryptionMaterialsProvider.getDecryptionMaterials(context); decryptionKey = materials.getDecryptionKey(); + String signingAlg; if (materialDescription.containsKey(signingAlgorithmHeader)) { - String signingAlg = materialDescription.get(signingAlgorithmHeader); + signingAlg = materialDescription.get(signingAlgorithmHeader); signer = DynamoDbSigner.getInstance(signingAlg, Utils.getRng()); } @@ -355,6 +356,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. From 2fa7c983b12d6c9bbf1911101c07e1470afc7e5f Mon Sep 17 00:00:00 2001 From: rishav-karanjit Date: Thu, 16 Apr 2026 12:16:35 -0700 Subject: [PATCH 2/2] m --- .../datamodeling/sdkv2/encryption/DynamoDBEncryptor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 981d095ebb..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 @@ -326,9 +326,8 @@ public Map decryptRecord( materials = encryptionMaterialsProvider.getDecryptionMaterials(context); decryptionKey = materials.getDecryptionKey(); - String signingAlg; if (materialDescription.containsKey(signingAlgorithmHeader)) { - signingAlg = materialDescription.get(signingAlgorithmHeader); + String signingAlg = materialDescription.get(signingAlgorithmHeader); signer = DynamoDbSigner.getInstance(signingAlg, Utils.getRng()); }