20
20
import com .amazonaws .encryptionsdk .EncryptedDataKey ;
21
21
import com .amazonaws .encryptionsdk .exception .AwsCryptoException ;
22
22
import com .amazonaws .encryptionsdk .exception .ParseException ;
23
+ import com .amazonaws .encryptionsdk .internal .Constants ;
23
24
import com .amazonaws .encryptionsdk .internal .PrimitivesParser ;
24
25
25
26
/**
41
42
* </ol>
42
43
*/
43
44
public final class KeyBlob implements EncryptedDataKey {
44
- private short keyProviderIdLen_ = -1 ;
45
+ private int keyProviderIdLen_ = -1 ;
45
46
private byte [] keyProviderId_ ;
46
- private short keyProviderInfoLen_ = -1 ;
47
+ private int keyProviderInfoLen_ = -1 ;
47
48
private byte [] keyProviderInfo_ ;
48
- private short encryptedKeyLen_ = -1 ;
49
+ private int encryptedKeyLen_ = -1 ;
49
50
private byte [] encryptedKey_ ;
50
51
51
52
private boolean isComplete_ = false ;
@@ -77,6 +78,7 @@ public KeyBlob(final EncryptedDataKey edk) {
77
78
setKeyProviderId (edk .getProviderId ());
78
79
setKeyProviderInfo (edk .getProviderInformation ());
79
80
}
81
+
80
82
/**
81
83
* Parse the key provider identifier length in the provided bytes. It looks
82
84
* for 2 bytes representing a short primitive type in the provided bytes
@@ -98,7 +100,7 @@ public KeyBlob(final EncryptedDataKey edk) {
98
100
* length.
99
101
*/
100
102
private int parseKeyProviderIdLen (final byte [] b , final int off ) throws ParseException {
101
- keyProviderIdLen_ = PrimitivesParser .parseShort (b , off );
103
+ keyProviderIdLen_ = PrimitivesParser .parseUnsignedShort (b , off );
102
104
return Short .SIZE / Byte .SIZE ;
103
105
}
104
106
@@ -152,7 +154,7 @@ private int parseKeyProviderId(final byte[] b, final int off) throws ParseExcept
152
154
* length.
153
155
*/
154
156
private int parseKeyProviderInfoLen (final byte [] b , final int off ) throws ParseException {
155
- keyProviderInfoLen_ = PrimitivesParser .parseShort (b , off );
157
+ keyProviderInfoLen_ = PrimitivesParser .parseUnsignedShort (b , off );
156
158
return Short .SIZE / Byte .SIZE ;
157
159
}
158
160
@@ -205,7 +207,7 @@ private int parseKeyProviderInfo(final byte[] b, final int off) throws ParseExce
205
207
* if there are not sufficient bytes to parse the key length.
206
208
*/
207
209
private int parseKeyLen (final byte [] b , final int off ) throws ParseException {
208
- encryptedKeyLen_ = PrimitivesParser .parseShort (b , off );
210
+ encryptedKeyLen_ = PrimitivesParser .parseUnsignedShort (b , off );
209
211
return Short .SIZE / Byte .SIZE ;
210
212
}
211
213
@@ -302,13 +304,13 @@ public byte[] toByteArray() {
302
304
final int outLen = 3 * (Short .SIZE / Byte .SIZE ) + keyProviderIdLen_ + keyProviderInfoLen_ + encryptedKeyLen_ ;
303
305
final ByteBuffer out = ByteBuffer .allocate (outLen );
304
306
305
- out .putShort (keyProviderIdLen_ );
307
+ out .putShort (( short ) keyProviderIdLen_ );
306
308
out .put (keyProviderId_ , 0 , keyProviderIdLen_ );
307
309
308
- out .putShort (keyProviderInfoLen_ );
310
+ out .putShort (( short ) keyProviderInfoLen_ );
309
311
out .put (keyProviderInfo_ , 0 , keyProviderInfoLen_ );
310
312
311
- out .putShort (encryptedKeyLen_ );
313
+ out .putShort (( short ) encryptedKeyLen_ );
312
314
out .put (encryptedKey_ , 0 , encryptedKeyLen_ );
313
315
314
316
return out .array ();
@@ -332,7 +334,7 @@ public boolean isComplete() {
332
334
* @return
333
335
* the length of the key provider identifier.
334
336
*/
335
- public short getKeyProviderIdLen () {
337
+ public int getKeyProviderIdLen () {
336
338
return keyProviderIdLen_ ;
337
339
}
338
340
@@ -353,7 +355,7 @@ public String getProviderId() {
353
355
* @return
354
356
* the length of the key provider info.
355
357
*/
356
- public short getKeyProviderInfoLen () {
358
+ public int getKeyProviderInfoLen () {
357
359
return keyProviderInfoLen_ ;
358
360
}
359
361
@@ -374,7 +376,7 @@ public byte[] getProviderInformation() {
374
376
* @return
375
377
* the length of the encrypted data key.
376
378
*/
377
- public short getEncryptedDataKeyLen () {
379
+ public int getEncryptedDataKeyLen () {
378
380
return encryptedKeyLen_ ;
379
381
}
380
382
@@ -397,12 +399,12 @@ public byte[] getEncryptedDataKey() {
397
399
*/
398
400
public void setKeyProviderId (final String keyProviderId ) {
399
401
final byte [] keyProviderIdBytes = keyProviderId .getBytes (StandardCharsets .UTF_8 );
400
- if (keyProviderIdBytes .length > Short . MAX_VALUE ) {
402
+ if (keyProviderIdBytes .length > Constants . UNSIGNED_SHORT_MAX_VAL ) {
401
403
throw new AwsCryptoException (
402
- "Key provider identifier length exceeds the max value of a short primitive." );
404
+ "Key provider identifier length exceeds the max value of an unsigned short primitive." );
403
405
}
404
406
keyProviderId_ = keyProviderIdBytes ;
405
- keyProviderIdLen_ = ( short ) keyProviderId_ .length ;
407
+ keyProviderIdLen_ = keyProviderId_ .length ;
406
408
}
407
409
408
410
/**
@@ -413,12 +415,12 @@ public void setKeyProviderId(final String keyProviderId) {
413
415
* identifier.
414
416
*/
415
417
public void setKeyProviderInfo (final byte [] keyProviderInfo ) {
416
- if (keyProviderInfo .length > Short . MAX_VALUE ) {
418
+ if (keyProviderInfo .length > Constants . UNSIGNED_SHORT_MAX_VAL ) {
417
419
throw new AwsCryptoException (
418
- "Key provider identifier information length exceeds the max value of a short primitive." );
420
+ "Key provider identifier information length exceeds the max value of an unsigned short primitive." );
419
421
}
420
422
keyProviderInfo_ = keyProviderInfo .clone ();
421
- keyProviderInfoLen_ = ( short ) keyProviderInfo .length ;
423
+ keyProviderInfoLen_ = keyProviderInfo .length ;
422
424
}
423
425
424
426
/**
@@ -428,10 +430,10 @@ public void setKeyProviderInfo(final byte[] keyProviderInfo) {
428
430
* the bytes containing the encrypted data key.
429
431
*/
430
432
public void setEncryptedDataKey (final byte [] encryptedDataKey ) {
431
- if (encryptedDataKey .length > Short . MAX_VALUE ) {
432
- throw new AwsCryptoException ("Key length exceeds the max value of a short primitive." );
433
+ if (encryptedDataKey .length > Constants . UNSIGNED_SHORT_MAX_VAL ) {
434
+ throw new AwsCryptoException ("Key length exceeds the max value of an unsigned short primitive." );
433
435
}
434
436
encryptedKey_ = encryptedDataKey .clone ();
435
- encryptedKeyLen_ = ( short ) encryptedKey_ .length ;
437
+ encryptedKeyLen_ = encryptedKey_ .length ;
436
438
}
437
- }
439
+ }
0 commit comments