@@ -122,7 +122,7 @@ public void importKey(byte[] buffer, short offset, short length) throws InvalidA
122
122
// focused on A5 tag
123
123
short innerPos = 0 , innerLen = 0 ;
124
124
short pos = 0 , len = 0 ;
125
- // keytype is missing for symetric key
125
+ // keytype is missing for symmetric key
126
126
byte keytype = 1 ;
127
127
byte keyref = 0 ;
128
128
if (buffer [offset ] != (byte ) 0xA5 ) {
@@ -140,7 +140,7 @@ public void importKey(byte[] buffer, short offset, short length) throws InvalidA
140
140
}
141
141
keytype = buffer [(short ) (pos +2 )];
142
142
} catch (NotFoundException e ) {
143
- // optional tag: default = symetric key
143
+ // optional tag: default = symmetric key
144
144
} catch (InvalidArgumentsException e ) {
145
145
ISOException .throwIt (ISO7816 .SW_DATA_INVALID );
146
146
}
@@ -167,7 +167,7 @@ public void importKey(byte[] buffer, short offset, short length) throws InvalidA
167
167
168
168
pos += 1 + UtilTLV .getLengthFieldLength (buffer , (short )(pos +1 ));
169
169
if (keytype == 1 ) {
170
- importSymetricKey (buffer , pos , len );
170
+ importSymmetricKey (buffer , pos , len );
171
171
} else if (keytype == 2 ) {
172
172
importRsaKey (buffer , pos , len );
173
173
} else {
@@ -247,11 +247,17 @@ private void importRsaKey(byte[] buffer, short offset, short length) throws Inva
247
247
}
248
248
len = UtilTLV .decodeLengthField (buffer , (short )(pos +1 ));
249
249
pos += 1 + UtilTLV .getLengthFieldLength (buffer , (short )(pos +1 ));
250
- // the minidriver may prepend a 00 before (len = len+1) and the javacard don't like it => remove the 00
250
+ // the minidriver may prepend a 00 before (len = len+1) and the javacards don't like it => remove the 00
251
251
if ((len & 0x0F ) == (byte ) 1 && buffer [pos ] == 0 ) {
252
252
len -= 1 ;
253
253
pos ++;
254
254
}
255
+ // one byte too small?
256
+ if ((len & 0x0F ) == (byte ) 0x0F ) {
257
+ len += 1 ;
258
+ pos --;
259
+ buffer [pos ] = (byte ) 0x00 ;
260
+ }
255
261
try {
256
262
rsaPrKey .setP (buffer , pos , len );
257
263
} catch (CryptoException e ) {
@@ -271,6 +277,11 @@ private void importRsaKey(byte[] buffer, short offset, short length) throws Inva
271
277
len -= 1 ;
272
278
pos ++;
273
279
}
280
+ if ((len & 0x0F ) == (byte ) 0x0F ) {
281
+ len += 1 ;
282
+ pos --;
283
+ buffer [pos ] = (byte ) 0x00 ;
284
+ }
274
285
rsaPrKey .setQ (buffer , pos , len );
275
286
pos += len ;
276
287
// d mod p-1
@@ -279,10 +290,15 @@ private void importRsaKey(byte[] buffer, short offset, short length) throws Inva
279
290
}
280
291
len = UtilTLV .decodeLengthField (buffer , (short )(pos +1 ));
281
292
pos += 1 + UtilTLV .getLengthFieldLength (buffer , (short )(pos +1 ));
282
- if ((len & 0x0F ) == (byte ) 1 && buffer [pos ] == 0 ) {
293
+ if ((( len & 0x0F ) == (byte ) 0x01 ) && ( buffer [pos ] == 0 ) ) {
283
294
len -= 1 ;
284
295
pos ++;
285
296
}
297
+ if ((len & 0x0F ) == (byte ) 0x0F ) {
298
+ len += 1 ;
299
+ pos --;
300
+ buffer [pos ] = (byte ) 0x00 ;
301
+ }
286
302
rsaPrKey .setDP1 (buffer , pos , len );
287
303
pos += len ;
288
304
// d mod q-1
@@ -295,6 +311,11 @@ private void importRsaKey(byte[] buffer, short offset, short length) throws Inva
295
311
len -= 1 ;
296
312
pos ++;
297
313
}
314
+ if ((len & 0x0F ) == (byte ) 0x0F ) {
315
+ len += 1 ;
316
+ pos --;
317
+ buffer [pos ] = (byte ) 0x00 ;
318
+ }
298
319
rsaPrKey .setDQ1 (buffer , pos , len );
299
320
pos += len ;
300
321
// q-1 mod p
@@ -307,6 +328,11 @@ private void importRsaKey(byte[] buffer, short offset, short length) throws Inva
307
328
len -= 1 ;
308
329
pos ++;
309
330
}
331
+ if ((len & 0x0F ) == (byte ) 0x0F ) {
332
+ len += 1 ;
333
+ pos --;
334
+ buffer [pos ] = (byte ) 0x00 ;
335
+ }
310
336
rsaPrKey .setPQ (buffer , pos , len );
311
337
pos += len ;
312
338
@@ -324,7 +350,7 @@ private void importRsaKey(byte[] buffer, short offset, short length) throws Inva
324
350
}
325
351
}
326
352
327
- private void importSymetricKey (byte [] buffer , short offset , short length ) {
353
+ private void importSymmetricKey (byte [] buffer , short offset , short length ) {
328
354
clearContents ();
329
355
byte [] key = new byte [length ];
330
356
Util .arrayCopyNonAtomic (buffer , offset , key , (short ) 0 , length );
0 commit comments