2323import java .util .Map ;
2424
2525import com .amazonaws .AmazonServiceException ;
26+ import com .amazonaws .AmazonWebServiceRequest ;
2627import com .amazonaws .auth .AWSCredentials ;
2728import com .amazonaws .auth .AWSCredentialsProvider ;
2829import com .amazonaws .encryptionsdk .AwsCrypto ;
3334import com .amazonaws .encryptionsdk .MasterKeyProvider ;
3435import com .amazonaws .encryptionsdk .exception .AwsCryptoException ;
3536import com .amazonaws .encryptionsdk .exception .UnsupportedProviderException ;
37+ import com .amazonaws .encryptionsdk .internal .VersionInfo ;
3638import com .amazonaws .services .kms .AWSKMS ;
3739import com .amazonaws .services .kms .model .DecryptRequest ;
3840import com .amazonaws .services .kms .model .DecryptResult ;
@@ -51,6 +53,12 @@ public final class KmsMasterKey extends MasterKey<KmsMasterKey> implements KmsMe
5153 private final String id_ ;
5254 private final List <String > grantTokens_ = new ArrayList <>();
5355
56+ private <T extends AmazonWebServiceRequest > T updateUserAgent (T request ) {
57+ request .getRequestClientOptions ().appendUserAgent (VersionInfo .USER_AGENT );
58+
59+ return request ;
60+ }
61+
5462 /**
5563 *
5664 * @deprecated Use a {@link KmsMasterKeyProvider} to obtain {@link KmsMasterKey}s.
@@ -93,13 +101,13 @@ public String getKeyId() {
93101 @ Override
94102 public DataKey <KmsMasterKey > generateDataKey (final CryptoAlgorithm algorithm ,
95103 final Map <String , String > encryptionContext ) {
96- final GenerateDataKeyResult gdkResult = kms_ .generateDataKey (
104+ final GenerateDataKeyResult gdkResult = kms_ .generateDataKey (updateUserAgent (
97105 new GenerateDataKeyRequest ()
98106 .withKeyId (getKeyId ())
99107 .withNumberOfBytes (algorithm .getDataKeyLength ())
100108 .withEncryptionContext (encryptionContext )
101109 .withGrantTokens (grantTokens_ )
102- );
110+ ) );
103111 final byte [] rawKey = new byte [algorithm .getDataKeyLength ()];
104112 gdkResult .getPlaintext ().get (rawKey );
105113 if (gdkResult .getPlaintext ().remaining () > 0 ) {
@@ -137,12 +145,12 @@ public DataKey<KmsMasterKey> encryptDataKey(final CryptoAlgorithm algorithm,
137145 throw new IllegalArgumentException ("Only RAW encoded keys are supported" );
138146 }
139147 try {
140- final EncryptResult encryptResult = kms_ .encrypt (
148+ final EncryptResult encryptResult = kms_ .encrypt (updateUserAgent (
141149 new EncryptRequest ()
142150 .withKeyId (id_ )
143151 .withPlaintext (ByteBuffer .wrap (key .getEncoded ()))
144152 .withEncryptionContext (encryptionContext )
145- .withGrantTokens (grantTokens_ ));
153+ .withGrantTokens (grantTokens_ ))) ;
146154 final byte [] edk = new byte [encryptResult .getCiphertextBlob ().remaining ()];
147155 encryptResult .getCiphertextBlob ().get (edk );
148156 return new DataKey <>(dataKey .getKey (), edk , encryptResult .getKeyId ().getBytes (StandardCharsets .UTF_8 ), this );
@@ -159,11 +167,11 @@ public DataKey<KmsMasterKey> decryptDataKey(final CryptoAlgorithm algorithm,
159167 final List <Exception > exceptions = new ArrayList <>();
160168 for (final EncryptedDataKey edk : encryptedDataKeys ) {
161169 try {
162- final DecryptResult decryptResult = kms_ .decrypt (
170+ final DecryptResult decryptResult = kms_ .decrypt (updateUserAgent (
163171 new DecryptRequest ()
164172 .withCiphertextBlob (ByteBuffer .wrap (edk .getEncryptedDataKey ()))
165173 .withEncryptionContext (encryptionContext )
166- .withGrantTokens (grantTokens_ ));
174+ .withGrantTokens (grantTokens_ ))) ;
167175 if (decryptResult .getKeyId ().equals (id_ )) {
168176 final byte [] rawKey = new byte [algorithm .getDataKeyLength ()];
169177 decryptResult .getPlaintext ().get (rawKey );
0 commit comments