Skip to content

Commit a85c9a4

Browse files
committed
Merge pull request #2 from awslabs/kms-userag
Include a user-agent tag when calling KMS
2 parents c09f4c2 + cb5e672 commit a85c9a4

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/DirectKmsMaterialProvider.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import javax.crypto.SecretKey;
2828
import javax.crypto.spec.SecretKeySpec;
2929

30+
import com.amazonaws.AmazonWebServiceRequest;
3031
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException;
3132
import com.amazonaws.services.dynamodbv2.datamodeling.encryption.EncryptionContext;
3233
import com.amazonaws.services.dynamodbv2.datamodeling.encryption.materials.DecryptionMaterials;
@@ -41,6 +42,7 @@
4142
import com.amazonaws.services.kms.model.GenerateDataKeyRequest;
4243
import com.amazonaws.services.kms.model.GenerateDataKeyResult;
4344
import com.amazonaws.util.Base64;
45+
import com.amazonaws.util.VersionInfoUtils;
4446

4547
/**
4648
* Generates a unique data key for each record in DynamoDB and protects that key
@@ -51,6 +53,9 @@
5153
* @see <a href="http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html">KMS Encryption Context</a>
5254
*/
5355
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();
5459
private static final String COVERED_ATTR_CTX_KEY = "aws-kms-ec-attr";
5560
private static final String SIGNING_KEY_ALGORITHM = "amzn-ddb-sig-alg";
5661
private static final String TABLE_NAME_EC_KEY = "*aws-kms-table*";
@@ -117,7 +122,7 @@ public DecryptionMaterials getDecryptionMaterials(EncryptionContext context) {
117122

118123
populateKmsEcFromEc(context, ec);
119124

120-
DecryptRequest request = new DecryptRequest();
125+
DecryptRequest request = appendUserAgent(new DecryptRequest());
121126
request.setCiphertextBlob(ByteBuffer.wrap(Base64.decode(materialDescription.get(ENVELOPE_KEY))));
122127
request.setEncryptionContext(ec);
123128
final DecryptResult decryptResult = kms.decrypt(request);
@@ -148,7 +153,7 @@ public EncryptionMaterials getEncryptionMaterials(EncryptionContext context) {
148153
ec.put("*" + SIGNING_KEY_ALGORITHM + "*", sigKeyDesc);
149154
populateKmsEcFromEc(context, ec);
150155

151-
final GenerateDataKeyRequest req = new GenerateDataKeyRequest();
156+
final GenerateDataKeyRequest req = appendUserAgent(new GenerateDataKeyRequest());
152157
req.setKeyId(encryptionKeyId);
153158
req.setNumberOfBytes(256);
154159
req.setEncryptionContext(ec);
@@ -229,6 +234,11 @@ private static byte[] toArray(final ByteBuffer buff) {
229234
return result;
230235
}
231236

237+
private final <X extends AmazonWebServiceRequest> X appendUserAgent(final X request) {
238+
request.getRequestClientOptions().appendUserAgent(USER_AGENT);
239+
return request;
240+
}
241+
232242
@Override
233243
public void refresh() {
234244
// No action needed

0 commit comments

Comments
 (0)