@@ -33,21 +33,17 @@ public class HmacSha512 {
33
33
public static final short HASHSIZE =64 ;
34
34
private static final short SW_UNSUPPORTED_KEYSIZE = (short ) 0x9c0E ;
35
35
private static final short SW_UNSUPPORTED_MSGSIZE = (short ) 0x9c0F ;
36
+ private static final short SW_UNSUPPORTED_FEATURE = (short ) 0x9c05 ;
36
37
private static byte [] data ;
37
38
38
39
private static MessageDigest sha512 ;
39
- private static boolean nativeSha512 = false ;
40
40
41
41
public static void init (byte [] tmp ){
42
42
data = tmp ;
43
-
44
43
try {
45
44
sha512 = MessageDigest .getInstance (MessageDigest .ALG_SHA_512 , false );
46
- nativeSha512 = true ;
47
45
} catch (CryptoException e ) {
48
- ISOException .throwIt ((short )0x9C05 );// debug: ensure that we use native sha512
49
- nativeSha512 = false ;
50
- Sha512 .init ();
46
+ ISOException .throwIt (SW_UNSUPPORTED_FEATURE );// unsupported feature => use a more recent card!
51
47
}
52
48
}
53
49
@@ -68,25 +64,17 @@ public static short computeHmacSha512(byte[] key, short key_offset, short key_le
68
64
}
69
65
Util .arrayFillNonAtomic (data , key_length , (short )(BLOCKSIZE -key_length ), (byte )0x36 );
70
66
Util .arrayCopyNonAtomic (message , message_offset , data , BLOCKSIZE , message_length );
71
- if (nativeSha512 ){
72
- sha512 .reset ();
73
- sha512 .doFinal (data , (short )0 , (short )(BLOCKSIZE +message_length ), data , BLOCKSIZE ); // copy hash result to data buffer!
74
- } else {
75
- Sha512 .resetUpdateDoFinal (data , (short )0 , (short )(BLOCKSIZE +message_length ), data , BLOCKSIZE ); // copy hash result to data buffer!
76
- }
67
+ sha512 .reset ();
68
+ sha512 .doFinal (data , (short )0 , (short )(BLOCKSIZE +message_length ), data , BLOCKSIZE ); // copy hash result to data buffer!
77
69
78
70
// compute outer hash
79
71
for (short i =0 ; i <key_length ; i ++){
80
72
data [i ]= (byte ) (key [(short )(key_offset +i )] ^ (0x5c ));
81
73
}
82
74
Util .arrayFillNonAtomic (data , key_length , (short )(BLOCKSIZE -key_length ), (byte )0x5c );
83
75
// previous hash already copied to correct offset in data
84
- if (nativeSha512 ){
85
- sha512 .reset ();
86
- sha512 .doFinal (data , (short )0 , (short )(BLOCKSIZE +HASHSIZE ), mac , mac_offset );
87
- } else {
88
- Sha512 .resetUpdateDoFinal (data , (short )0 , (short )(BLOCKSIZE +HASHSIZE ), mac , mac_offset );
89
- }
76
+ sha512 .reset ();
77
+ sha512 .doFinal (data , (short )0 , (short )(BLOCKSIZE +HASHSIZE ), mac , mac_offset );
90
78
91
79
return HASHSIZE ;
92
80
}
0 commit comments