|
27 | 27 | import javax.crypto.SecretKey; |
28 | 28 | import javax.crypto.spec.SecretKeySpec; |
29 | 29 |
|
| 30 | +import com.amazonaws.AmazonWebServiceRequest; |
30 | 31 | import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException; |
31 | 32 | import com.amazonaws.services.dynamodbv2.datamodeling.encryption.EncryptionContext; |
32 | 33 | import com.amazonaws.services.dynamodbv2.datamodeling.encryption.materials.DecryptionMaterials; |
|
41 | 42 | import com.amazonaws.services.kms.model.GenerateDataKeyRequest; |
42 | 43 | import com.amazonaws.services.kms.model.GenerateDataKeyResult; |
43 | 44 | import com.amazonaws.util.Base64; |
| 45 | +import com.amazonaws.util.VersionInfoUtils; |
44 | 46 |
|
45 | 47 | /** |
46 | 48 | * Generates a unique data key for each record in DynamoDB and protects that key |
|
51 | 53 | * @see <a href="http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html">KMS Encryption Context</a> |
52 | 54 | */ |
53 | 55 | public class DirectKmsMaterialProvider implements EncryptionMaterialsProvider { |
| 56 | + private static final String VERSION_STRING = "1.0"; |
| 57 | + private static final String USER_AGENT = DirectKmsMaterialProvider.class.getName() |
| 58 | + + "/" + VERSION_STRING + "/" + VersionInfoUtils.getVersion(); |
54 | 59 | private static final String COVERED_ATTR_CTX_KEY = "aws-kms-ec-attr"; |
55 | 60 | private static final String SIGNING_KEY_ALGORITHM = "amzn-ddb-sig-alg"; |
56 | 61 | private static final String TABLE_NAME_EC_KEY = "*aws-kms-table*"; |
@@ -117,7 +122,7 @@ public DecryptionMaterials getDecryptionMaterials(EncryptionContext context) { |
117 | 122 |
|
118 | 123 | populateKmsEcFromEc(context, ec); |
119 | 124 |
|
120 | | - DecryptRequest request = new DecryptRequest(); |
| 125 | + DecryptRequest request = appendUserAgent(new DecryptRequest()); |
121 | 126 | request.setCiphertextBlob(ByteBuffer.wrap(Base64.decode(materialDescription.get(ENVELOPE_KEY)))); |
122 | 127 | request.setEncryptionContext(ec); |
123 | 128 | final DecryptResult decryptResult = kms.decrypt(request); |
@@ -148,7 +153,7 @@ public EncryptionMaterials getEncryptionMaterials(EncryptionContext context) { |
148 | 153 | ec.put("*" + SIGNING_KEY_ALGORITHM + "*", sigKeyDesc); |
149 | 154 | populateKmsEcFromEc(context, ec); |
150 | 155 |
|
151 | | - final GenerateDataKeyRequest req = new GenerateDataKeyRequest(); |
| 156 | + final GenerateDataKeyRequest req = appendUserAgent(new GenerateDataKeyRequest()); |
152 | 157 | req.setKeyId(encryptionKeyId); |
153 | 158 | req.setNumberOfBytes(256); |
154 | 159 | req.setEncryptionContext(ec); |
@@ -229,6 +234,11 @@ private static byte[] toArray(final ByteBuffer buff) { |
229 | 234 | return result; |
230 | 235 | } |
231 | 236 |
|
| 237 | + private final <X extends AmazonWebServiceRequest> X appendUserAgent(final X request) { |
| 238 | + request.getRequestClientOptions().appendUserAgent(USER_AGENT); |
| 239 | + return request; |
| 240 | + } |
| 241 | + |
232 | 242 | @Override |
233 | 243 | public void refresh() { |
234 | 244 | // No action needed |
|
0 commit comments