diff options
| author | J08nY | 2019-07-16 11:44:17 +0200 |
|---|---|---|
| committer | J08nY | 2019-07-16 11:44:17 +0200 |
| commit | e0a4956cafcbb98bdf18c9a25fbf799e4de4a35e (patch) | |
| tree | 9803e4d0af26639d972bdeda06f935e051db8350 /src/cz/crcs/ectester/applet/AppletBase.java | |
| parent | 46c0a874e494d2311148700058f61b5d8d426f3c (diff) | |
| download | ECTester-e0a4956cafcbb98bdf18c9a25fbf799e4de4a35e.tar.gz ECTester-e0a4956cafcbb98bdf18c9a25fbf799e4de4a35e.tar.zst ECTester-e0a4956cafcbb98bdf18c9a25fbf799e4de4a35e.zip | |
Diffstat (limited to 'src/cz/crcs/ectester/applet/AppletBase.java')
| -rw-r--r-- | src/cz/crcs/ectester/applet/AppletBase.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/cz/crcs/ectester/applet/AppletBase.java b/src/cz/crcs/ectester/applet/AppletBase.java index 4669352..dc0f50d 100644 --- a/src/cz/crcs/ectester/applet/AppletBase.java +++ b/src/cz/crcs/ectester/applet/AppletBase.java @@ -39,6 +39,8 @@ public abstract class AppletBase extends Applet { public static final byte KEYPAIR_LOCAL = (byte) 0x01; public static final byte KEYPAIR_REMOTE = (byte) 0x02; public static final byte KEYPAIR_BOTH = KEYPAIR_LOCAL | KEYPAIR_REMOTE; + public static final byte BUILD_KEYPAIR = (byte) 0x00; + public static final byte BUILD_KEYBUILDER = (byte) 0x01; public static final byte EXPORT_TRUE = (byte) 0xff; public static final byte EXPORT_FALSE = (byte) 0x00; public static final byte MODE_NORMAL = (byte) 0xaa; @@ -352,17 +354,18 @@ public abstract class AppletBase extends Applet { * returns allocate SWs * * @param apdu P1 = byte keyPair (KEYPAIR_* | ...) - * P2 = + * P2 = byte build * DATA = short keyLength * byte keyClass * @return length of response */ private short insAllocate(APDU apdu) { byte keyPair = apduArray[ISO7816.OFFSET_P1]; + byte build = apduArray[ISO7816.OFFSET_P2]; short keyLength = Util.getShort(apduArray, cdata); byte keyClass = apduArray[(short) (cdata + 2)]; - return allocate(keyPair, keyLength, keyClass, apdu.getBuffer(), (short) 0); + return allocate(keyPair, build, keyLength, keyClass, apdu.getBuffer(), (short) 0); } /** @@ -657,22 +660,31 @@ public abstract class AppletBase extends Applet { /** * @param keyPair which keyPair to use, local/remote (KEYPAIR_* | ...) + * @param build whether to use KeyBuilder or Keypair alloc * @param keyLength key length to set * @param keyClass key class to allocate * @param outBuffer buffer to write sw to * @param outOffset offset into buffer * @return length of data written to the buffer */ - private short allocate(byte keyPair, short keyLength, byte keyClass, byte[] outBuffer, short outOffset) { + private short allocate(byte keyPair, byte build, short keyLength, byte keyClass, byte[] outBuffer, short outOffset) { short length = 0; if ((keyPair & KEYPAIR_LOCAL) != 0) { - localKeypair = keyGenerator.allocatePair(keyClass, keyLength); + if (build == BUILD_KEYPAIR) { + localKeypair = keyGenerator.allocatePair(keyClass, keyLength); + } else { + localKeypair = keyGenerator.constructPair(keyClass, keyLength); + } Util.setShort(outBuffer, outOffset, keyGenerator.getSW()); length += 2; } if ((keyPair & KEYPAIR_REMOTE) != 0) { - remoteKeypair = keyGenerator.allocatePair(keyClass, keyLength); + if (build == BUILD_KEYPAIR) { + remoteKeypair = keyGenerator.allocatePair(keyClass, keyLength); + } else { + remoteKeypair = keyGenerator.constructPair(keyClass, keyLength); + } Util.setShort(outBuffer, (short) (outOffset + length), keyGenerator.getSW()); length += 2; } |
