Site Tools


javacard-api-samples

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

javacard-api-samples [2017/05/11 03:30]
jinbiao
javacard-api-samples [2017/05/13 02:30]
Line 1: Line 1:
-====== Hash Sample Code ====== 
- ​[[https://​javacardos.com/​javacardforum/​download/​file.php?​id=540|Download Sample Code]] ​                  [[ http://​javacardos.com/​javacardforum/​viewtopic.php?​f=31&​t=739|Discussion]] ​ 
  
- 
-<code java> 
- 
-/* 
- * @file  HashSample.java 
- ​* ​ @version v1.0 
- * Package AID: 4A617661436172644F53 
- * Applet AID:  4A617661436172644F5305 
- * @brief The ALgorithm of Hash Sample Code in JavaCard API Specification 
- * @comment The purpose of this example is only used to show the usage of API functions and there is no practical significance. 
- * @copyright Copyright(C) 2016 JavaCardOS Technologies Co., Ltd. All rights reserved. 
- */ 
-  ​ 
-package JavaCardOS.Sample.Algorithm;​ 
-  
-import javacard.framework.*;​ 
-import javacard.security.*;​ 
-import javacardx.crypto.*;​ 
-  
-public class HashSample extends Applet 
-{ 
-    private static final byte INS_GEN_HASH = (byte)0x50; 
-  
-    private byte[] flags; 
-    private static final short OFF_INS ​   = (short)0; 
-    private static final short OFF_P1 ​    = (short)1; 
-    private static final short OFF_P2 ​    = (short)2; 
-    private static final short OFF_LEN ​   = (short)3; 
-    private static final short FLAGS_SIZE = (short)5; 
-      
-    private InitializedMessageDigest sha1; 
-    private InitializedMessageDigest sha256; 
-    private InitializedMessageDigest sha512; 
-      
-    public HashSample() 
-    { 
-        flags = JCSystem.makeTransientByteArray(FLAGS_SIZE,​ JCSystem.CLEAR_ON_DESELECT);​ 
-        //Creates a InitializedMessageDigest object instance of the ALG_SHA algorithm. 
-        sha1 = MessageDigest.getInitializedMessageDigestInstance(MessageDigest.ALG_SHA,​ false); 
-        //Creates a InitializedMessageDigest object instance of the ALG_SHA_256 algorithm. 
-        sha256 = MessageDigest.getInitializedMessageDigestInstance(MessageDigest.ALG_SHA_256,​ false); 
-        //Creates a InitializedMessageDigest object instance of the ALG_SHA_512 algorithm. 
-        sha512 = MessageDigest.getInitializedMessageDigestInstance(MessageDigest.ALG_SHA_512,​ false); 
-        JCSystem.requestObjectDeletion();​ 
-    } 
-    public static void install(byte[] bArray, short bOffset, byte bLength) 
-    { 
-        new HashSample().register(bArray,​ (short) (bOffset + 1), bArray[bOffset]);​ 
-    } 
-  
-    public void process(APDU apdu) 
-    { 
-        if (selectingApplet()) 
-        { 
-            return; 
-        } 
-  
-        byte[] buf = apdu.getBuffer();​ 
-        short len = apdu.setIncomingAndReceive();​ 
-        switch (buf[ISO7816.OFFSET_INS]) 
-        { 
-        case (byte)INS_GEN_HASH:​ 
-            generateHash(apdu,​ len); 
-            break; 
-        default: 
-            ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);​ 
-        } 
-    } 
-      
-    //Generate Hash 
-    private void generateHash(APDU apdu, short len) 
-    { 
-        byte[] buffer = apdu.getBuffer();​ 
-        boolean hasMoreCmd = (buffer[ISO7816.OFFSET_P1] & 0x80) != 0; 
-        InitializedMessageDigest hash = null; 
-        short resultLen = 0; 
-        short offset = ISO7816.OFFSET_CDATA;​ 
-        switch (buffer[ISO7816.OFFSET_P1] & 0x7f) 
-        { 
-        case 0: 
-            hash = sha1; 
-            resultLen = MessageDigest.LENGTH_SHA;​ 
-            break; 
-        case 1: 
-            hash = sha256; 
-            resultLen = MessageDigest.LENGTH_SHA_256;​ 
-            break; 
-        case 2: 
-            hash = sha512; 
-            resultLen = MessageDigest.LENGTH_SHA_512;​ 
-            if (hash == null) 
-            { 
-                ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);​ 
-            } 
-            break; 
-        default: 
-            ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);​ 
-            break; 
-        } 
-  
-        if (buffer[ISO7816.OFFSET_P2] == 0) //first block 
-        { 
-            //Reset the MessageDigest object to the initial state. 
-            hash.reset();​ 
-        } 
-  
-        if (hasMoreCmd) 
-        { 
-            //​Accumulate a hash of the input data. 
-            hash.update(buffer,​ offset, len); 
-        } 
-        else 
-        { 
-            //Generate a hash of all the input data. 
-            short ret = hash.doFinal(buffer,​ offset, len, buffer, (short)0); 
-            Util.arrayFillNonAtomic(flags,​ (short)0, (short)flags.length,​ (byte)0); 
-            apdu.setOutgoingAndSend((short)0,​ ret); 
-        } 
-    } 
-  
-} 
-</​code>​ 
-The test script of Hash is as follows: ​                                    ​Download Test Script 
-<code java> 
- 
-//The test script of Hash 
-//​Copyright(C) JavaCardOS Technologies Co., Ltd. All rights reserved. 
-  
-//Hash Select Applet 
-00A404000B4A617661436172644F530500;​ 
-//SHA1 
-//​expect:​44ABF22AF275548BCE3639C5FE3CDFCFFFF305AA9000 
-80500000A36713E26AA669E98027D9FE54B457551A40599E921D39DB8970DA6FA2E18E785697375F3A63ADAE803B6021C1EB3FFFFA07D8AAD424C075284735B7C29E021E656EA345104DAA8880916117F608B1493AEA4233E00BE47ACA552E65EE76643659D69EBB74CC2720871124077B7576DAE4D0E1603F3C6D8F77810CA2AFD17E6B3BB672E9EF48EE1D9DA3F01AD998565CFFA3FB5A781D235E38B319958B17166212F565F8;​ 
-//SHA256 
-80508100C8ECE47FD746C16AD454D0D509979BF65DB051109F815EACBC8F3F2636AA956CD1D1780390500D4BDF2B5B0312BF5A0F0EA74D7946DD52B7EA21382C5A9F90F1E1CC07D4A091F3A1C8AB2BA10D521C61571819B4BA15F3FBA841CAA4652122F1BCA639FBF15299F6F69CE9B6E19608729ECD5DC9E17068025FB59D983E7973F6CA27B87F69DA27D1D1C63C4B78D447CD4C8CC0BEA538DA5478465A0FCDEFAA8773162968F273C6BBC1F0CD67B95300F7CA1EEA9DEDB3707759BCA912FACAF02D1F3C37BF73639E3B2E;​ 
-80508101C8E444128C5D5C797F4B846EA02B53F56CDF31A8AD546C6E3662888BD3F3D6D980684854D93883DCD2DA3637A8E6AA5618779BD9CED347D5204EC4D4FC6B961D1F458136882D9CA82D95A702EC2D9E20C44B8EAD4590A8E745C994A2D5130890744398BF8284D063F74280D6544757DDDA24B32DFAD3B82E0E9AA0FE463251B9E52935F8AD85469797AA68BCC87EFC14C1CAB260D6E49E31E18B8FEF37129C20DBC1FFE7F27827CB779508BA3018B64EE105324FBF0A83782762097E90F90F4EBFD19F963AA49A88FE;​ 
-//​expect:​959727571EE31D59A2F504A90B38B0103F350BAD27100844381C4B77609635789000 
-805001023CCB08DB745EAC12A29DDB009E8E8F8C49E8B8B23930D2CAF722BC0D6B52C85594130F247D9807E86C59577D5CB8E9F4ADE541931BFF0E1CED7CFF536E;​ 
- 
-Follow us 
- 
-</​code>​ 
javacard-api-samples.txt · Last modified: 2017/05/13 02:30 (external edit)