From ad94bfad5c27bb31b5ab6bd09a6e20680c2286da Mon Sep 17 00:00:00 2001 From: petrs Date: Fri, 9 Sep 2016 13:57:54 +0200 Subject: [PATCH] removal of leftover code --- !uploader/simpleECC.cap | Bin 8364 -> 7849 bytes src/applets/EC_Consts.java | 4 - src/applets/SimpleECCApplet.java | 234 +++++++++++++------------------ 3 files changed, 101 insertions(+), 137 deletions(-) diff --git a/!uploader/simpleECC.cap b/!uploader/simpleECC.cap index 151531fed76bce962e8bee28b3c0651164b7a1f5..d5776429c3faffc4ac69557fa4ea756143b1a926 100644 GIT binary patch delta 3382 zcmbW44Nz3q703T?@B7+iVLyOnSzs3wkQGG)Vk}|`iZw{8jL4S~KZ#(RgmtQun8euy zOl?Yy%8QOh?KC>ZF}k!d%rs5YSdH~-OxsD;N-c5h^o}MYW719|)2P{=_YCNgcE)kv z-1mFuymQYz_uTvLy?dnM&~$4}H4~Gdsw%SDw^_@AwOxQ>>?NH- zbJ^3WlN^=3-Obgt+n2oe>h-cSN#8rOuW_IM$!l|aa~$)>Rcw6u49XSSN}$P!_0-7uHLCy8R&Su^6Mb?2tck<~9wkYkaiy!s;DAUdPm17Zw|wCeE*LLmmSZ2apd|dA0PW_ z$GVpm9JJi2U$b{!O|_z)zxl=U^90~!2I%Rv04gZG+8e?Xj;wZn)g#XYz8(WWFJ5hO zYO*%TYt?)v>*P0)YwnRtg)IP!pauC-mrDjS6kD};~< za;IGuI_!|Cunw!hI_!F3R7^6kQ|@q)-bFeWBl!UNlc|1)s8U@~0v6mKmA~q(FJCeF zDQvw69wYWeK69mvT!erqC{m!4B_dH2A+dAOC_BYI5`D@H<*e#6`(wR%oO@r}ZU*#X zBqI33r`EQ$w-l^c7EsJRPO%QDVgU7GT_{!TLW8&)PVtu{?+!V|6C{5HGsV~-eu{F* zNBU1geTY%{K3X)O`<8yCEAZqZ4w3d7Bo%I@cs-7H-VIn ztz>6d1hVsFQY6dWSTwA17%E5mu#N8JgzhDbZZtnwbw#{eU%M1n7;FxRc}iFcTQa<1 z`(`YOaUuF;3PRC?P-246Rk1;w)Pr!zOH2PpAjRKxk!h$L?K#683D|U(34i~#qa@f* zkMv9HwPv*}-DC^f!j^6fsXmfAZ=QUDC|w<*_t3YbMgIrHJ`Om*`d< z2zgv$H=e2(mVe<1#wvb4%HT?@EMSy8%Av_T@;;U6o>#u`-8dBcnh`5kt>{)9=(?vc zE5#$ zCDU{k8BMwM`{LJtDVr=|TdTz_vdy?R%V}W3Hjf^gF||dahw`TTNKO1Uf%h+{?{wSO z%f_xTcChhG53R*Lnj^)pY(Z-@8qL)zQd~k%TbD9Pn58wQq%$E~(IP1aq%1{IRPCU9 zzSiL$=f2;gziREc-t8A@8@$N0g4Em~i1Q|Szpn_Wo z7Vvn26+D5E0B$4L!R-VmxPy=c?j*Rt6A5ncB!UM#nUD_dB6z`5QV~QZxSPZ=;HiXc za1S9DJdKbCo=zAKo(nEJ6wR7{V0rv4pAM*@RN?96}j*F5xlo zafEX4Ji-icKOtBNKA!jk@O;AK;1dXQz$X%(052fS1)oHy0WT!X2M6tL_22@b5!^&r z2+j!2;38o$xI|bAPJ0uUheUK>8wNo;8*Q>?>=aTEr$3v_K^zzsq81#*4bw`)NT4iJ z7A>F_7f_2PU5*F@0TC0yga{)rL_~s!h(wUkFB4?+D+C4oDnUiRnP5ggRkBzx5J!l^ zfR$hkVj!LvkAVb20tRdZ8?M+1G^7rKgT|6TBa4m9LvwJC5uusAOV3vQSr*tSfl-X~ zqeb!@b(LNLioiY+BuX6pLJ)nz1eOH{C>zQQ(!WgVAUdI(C1HVX)CJWiNP&9PK&vuDYD)s<37UpcF^v%d10YQdC5Q{(Rc1Amo%wAI#TJZ7TPY+uG~ zb@()^F>j?I=!a8np0`3b=<&`TbqKxcosp?mx&IvKF>*e9`;(}>EhK7-e94Ak%n@(c z#$cgj81DDE^rn96OE-O!U}$>nHtm+rYE&Ot$S7r*G1b>68^)!XX@=pwbqess7*?ei OhCj*l%1@^0Z~hCa#2P#R delta 3955 zcmbW43vgA%8OQ(UoIQ_w?)xS=Np5oUg2Y_HBjjZu;P8kg2$cvJ5Fpfis5 z%@db}voZnLZ{K<1W_RKARVBhwW@9a%~cmJt!&+AVeoK$f`m*d3`|9brJqUJ7P z?VQ^)XZUIl_O4yB;-TgvyFZ?DDs|RtPd4_4Z#lp2;AH>uYihe!lr49D(EC-+9mdkz z{+EBg?v>9&>XA=RK7LS&Z0ve@%}X~wv1Qe&LC+gsoqPRkcIAB!Uw{3E*UEQJf9Tcj zKNbJ{-g|nce(~%SPuYrxw>_O!+lZHh_s;$CtxS35{Tt7&Fa|d-e|Gndb@86Y)kQ;| z%9_K+-`(Q>=il^_%pd+{cJni=vZrm|vDy=}XI#7g*kJcoV@K${z8k-IbpQGf@yg{d z);w0V>hz1Afv%1>E=KNdRqy)A2d6%qb?2`?YySJ6U;gE9>-L}CS$w=Ia_Zwx&W5)B z`^_W2D!#O4OVi0kcmM7$ThiYDk66D%)jru?|Ku_O*d+lxygHzP!fQSuEcKt*6kc57 z-g8$00G@Kp=Y&+VB-?G~imqwTW4az!W(#KkYPJC-a!eAEIteen;15>^sAa$$5Hiem zG0S~4X_QCACO04D=`a5kKTK{MHZO})r022OERoI&N6ZwqDpDYI>VniMNfPufO5K#A zlzJ%LOQ}PMiXaGUz7!v}?u)ZvpTiIfBd=%+e`Y&02IsdN}rZwQnmp~FRG7q^K~ zU!9b8P4qCl*!@7{)qiTJvHPr;QKCCXw*n>55wcPu$wg*AEkUfR-88P(YmR|ss<`K6cG@Ea`Qg%o#cfiU z#k@f+H|CRiv5^Fy6qLAI6*V*vvjWUG zINPFqa$ZB`TEe3 z)CCJGGr7$s(b}#SJ^N+75N`mj?*t}>L zWNyAX=;XFf;`<;atkOF8Btwn)?f7fFvx$NHPIE{eP#IlW^N_PBvN8PqdOX3WAcd9j z0N?4X%sn+UOg$UAl>uGlw>Mn8KaYi#teUd~w@d#WIy8d!gAjsbK76 zs*%bvrCffBNaK;J86R<-`MEpg#LS^)6Ju4M$UfSAvr|m6`8D1$(f&@U#B=k zT@*E0%QD|jn^C$zl<1MK$^#-9GTurQ*)mQwB-E;!S!C?j3RV8oG_xT68uM-Arpon9 zQ5EJ?n8w_?7LpyRtZ>2W^1JMB#>7WWc=7FZ8)9w-xS6>=y(q$Tar7U2CYYMZ|H>_m zAi{DG7%ZKjz;Y5aST2GN%S~{>@(?_*yaXRCA0YtCPe_FoAQ-Sx2pOWs0H)G~!AcQRMQFKoBq_5=0D11PMcoz%V2eWDF|=1;h01 zqpKL!2pWbR1P6wxk*;IJNpNDsMQ}wh;wHK=;vsl2;w5L>VVEeW);=#~oT zGx2fTLx*&f$}V131nEthmdML=p1(s=wLc0~K{_osaVytH!Db0gLE|+YkQb7^mDCY* zLLLyRrF{4ybU}NIDt7S(-EcHec_lCJf@44k-~cb*1HD10rX3<6&;xxZ*`#p&z0gf6 zZ{lTa#?aU^jKnj7#PbnN#(pA+!uRAS_>|uEIL-J1E`Dntm&R)1w1gMpaf%#mABx9J zCuR0Som>*UR22}?giKrzLPDWHFMv=YlnNDgZAhpV0_Io2%K6gZJgLGbxA{sb<$2ot zRULtfLu{~Cs`aU5ZT=Re&6lqXE~%9(2Iti;5yVv5Ory8P@M3=9F}G%2C(<3~P}U+X zamRTuyVfrA8;iL#dp@t try catch - try { - if (ecPubKey == null) { - ecKeyPair.genKeyPair(); - } - } catch (Exception e) { - } // do nothing - - // If required, initialize curve parameters first - if (apdubuf[ISO7816.OFFSET_P2] == (byte) 2) { - EC_Consts.setValidECKeyParams(ecPubKey, ecPrivKey, KeyPair.ALG_EC_FP, bitLen, m_ramArray); - } - - // Now generate new keypair with either default or custom curve - ecKeyPair.genKeyPair(); - ecPubKey = (ECPublicKey) ecKeyPair.getPublic(); - ecPrivKey = (ECPrivateKey) ecKeyPair.getPrivate(); - - short len = 0; - short offset = 0; - - // Export curve public parameters - offset += 2; // reserve space for length - len = ecPubKey.getField(apdubuf, offset); - Util.setShort(apdubuf, (short) (offset - 2), len); - offset += len; - offset += 2; // reserve space for length - len = ecPubKey.getA(apdubuf, offset); - Util.setShort(apdubuf, (short) (offset - 2), len); - offset += len; - - offset += 2; // reserve space for length - len = ecPubKey.getB(apdubuf, offset); - Util.setShort(apdubuf, (short) (offset - 2), len); - offset += len; - offset += 2; // reserve space for length - len = ecPubKey.getR(apdubuf, offset); - Util.setShort(apdubuf, (short) (offset - 2), len); - offset += len; - /* - offset += 2; // reserve space for length - len = ecPubKey.getW(apdubuf, offset); - Util.setShort(apdubuf, (short) (offset - 2), len); - offset += len; - */ - apdu.setOutgoingAndSend((short) 0, offset); - } - } - - - - void DeriveECDHSecret(APDU apdu) { - byte[] apdubuf = apdu.getBuffer(); - short len = apdu.setIncomingAndReceive(); - - // Assumption: proper EC keyPair is already allocated - // If public key point is provided, then use it - if (len == 0) { - // if not provided, use build-in one (valid for for 192 only) - Util.arrayCopyNonAtomic(EC192_FP_PUBLICW, (short) 0, apdubuf, ISO7816.OFFSET_CDATA, (short) EC192_FP_PUBLICW.length); - len = (short) EC192_FP_PUBLICW.length; - } - - // Generate fresh EC keypair - ecKeyPair.genKeyPair(); - ecPrivKey = (ECPrivateKey) ecKeyPair.getPrivate(); - - if (dhKeyAgreement == null) { - dhKeyAgreement = KeyAgreement.getInstance(KeyAgreement.ALG_EC_SVDP_DH, false); - } - dhKeyAgreement.init(ecPrivKey); - short secretLen = 0; - // Generate and export secret - secretLen = dhKeyAgreement.generateSecret(apdubuf, ISO7816.OFFSET_CDATA, len, m_ramArray, (short) 0); - Util.arrayCopyNonAtomic(m_ramArray, (short) 0, apdubuf, (short) 0, secretLen); - - apdu.setOutgoingAndSend((short) 0, secretLen); - } - short TestECSupport(byte keyClass, short keyLen, byte[] buffer, short bufferOffset) { short baseOffset = bufferOffset; @@ -487,6 +395,98 @@ void TestEC_F2M_SupportAllLengths(APDU apdu) { apdu.setOutgoingAndSend((short) 0, dataOffset); } + void AllocateKeyPairReturnDefCourve(APDU apdu) { + byte[] apdubuf = apdu.getBuffer(); + apdu.setIncomingAndReceive(); + + short bitLen = Util.getShort(apdubuf, ISO7816.OFFSET_CDATA); + + // Note: all locations shoudl happen in constructor. But here it is intentional + // as we like to test for result of allocation + ecKeyPair = new KeyPair(KeyPair.ALG_EC_FP, bitLen); + + // If required, generate also new key pair + if (apdubuf[ISO7816.OFFSET_P1] == (byte) 1) { + ecPubKey = (ECPublicKey) ecKeyPair.getPublic(); + ecPrivKey = (ECPrivateKey) ecKeyPair.getPrivate(); + // Some implementation wil not return valid pub key until ecKeyPair.genKeyPair() is called + // Other implementation will fail with exception if same is called => try catch + try { + if (ecPubKey == null) { + ecKeyPair.genKeyPair(); + } + } catch (Exception e) { + } // do nothing + + // If required, initialize curve parameters first + if (apdubuf[ISO7816.OFFSET_P2] == (byte) 2) { + EC_Consts.setValidECKeyParams(ecPubKey, ecPrivKey, KeyPair.ALG_EC_FP, bitLen, m_ramArray); + } + + // Now generate new keypair with either default or custom curve + ecKeyPair.genKeyPair(); + ecPubKey = (ECPublicKey) ecKeyPair.getPublic(); + ecPrivKey = (ECPrivateKey) ecKeyPair.getPrivate(); + + short len = 0; + short offset = 0; + + // Export curve public parameters + offset += 2; // reserve space for length + len = ecPubKey.getField(apdubuf, offset); + Util.setShort(apdubuf, (short) (offset - 2), len); + offset += len; + offset += 2; // reserve space for length + len = ecPubKey.getA(apdubuf, offset); + Util.setShort(apdubuf, (short) (offset - 2), len); + offset += len; + + offset += 2; // reserve space for length + len = ecPubKey.getB(apdubuf, offset); + Util.setShort(apdubuf, (short) (offset - 2), len); + offset += len; + offset += 2; // reserve space for length + len = ecPubKey.getR(apdubuf, offset); + Util.setShort(apdubuf, (short) (offset - 2), len); + offset += len; + /* + offset += 2; // reserve space for length + len = ecPubKey.getW(apdubuf, offset); + Util.setShort(apdubuf, (short) (offset - 2), len); + offset += len; + */ + apdu.setOutgoingAndSend((short) 0, offset); + } + } + + void DeriveECDHSecret(APDU apdu) { + byte[] apdubuf = apdu.getBuffer(); + short len = apdu.setIncomingAndReceive(); + + // Assumption: proper EC keyPair is already allocated + // If public key point is provided, then use it + if (len == 0) { + // if not provided, use build-in one (valid only for 192 only) + Util.arrayCopyNonAtomic(EC192_FP_PUBLICW, (short) 0, apdubuf, ISO7816.OFFSET_CDATA, (short) EC192_FP_PUBLICW.length); + len = (short) EC192_FP_PUBLICW.length; + } + + // Generate fresh EC keypair + ecKeyPair.genKeyPair(); + ecPrivKey = (ECPrivateKey) ecKeyPair.getPrivate(); + + if (dhKeyAgreement == null) { + dhKeyAgreement = KeyAgreement.getInstance(KeyAgreement.ALG_EC_SVDP_DH, false); + } + dhKeyAgreement.init(ecPrivKey); + short secretLen = 0; + // Generate and export secret + secretLen = dhKeyAgreement.generateSecret(apdubuf, ISO7816.OFFSET_CDATA, len, m_ramArray, (short) 0); + Util.arrayCopyNonAtomic(m_ramArray, (short) 0, apdubuf, (short) 0, secretLen); + + apdu.setOutgoingAndSend((short) 0, secretLen); + } + @@ -503,8 +503,7 @@ void TestEC_F2M_SupportAllLengths(APDU apdu) { - - +/* void AllocateKeyPair(byte algorithm, short bitLen) { // Select proper attributes switch (bitLen) { @@ -552,39 +551,7 @@ void AllocateKeyPair(byte algorithm, short bitLen) { EC_Consts.setValidECKeyParams(ecPubKey, ecPrivKey, KeyPair.ALG_EC_FP, bitLen, m_ramArray); } - short TryAllocateKeyPair(byte algorithm, short bitLen, byte[] buffer, short offset) { - // Try allocation, log result - try { - offset = Util.setShort(buffer, offset, bitLen); - AllocateKeyPair(KeyPair.ALG_EC_FP, bitLen); - buffer[offset] = 1; - offset++; - } catch (Exception e) { - buffer[offset] = 0; - offset++; - } - return offset; - } - void AllocateKeyPairs(APDU apdu) { - byte[] apdubuf = apdu.getBuffer(); - apdu.setIncomingAndReceive(); - - short offset = 0; - - //offset = TryAllocateKeyPair(KeyPair.ALG_EC_FP, (short) 128, apdubuf, offset); - //offset = TryAllocateKeyPair(KeyPair.ALG_EC_FP, (short) 160, apdubuf, offset); - //offset = TryAllocateKeyPair(KeyPair.ALG_EC_FP, (short) 192, apdubuf, offset); - //offset = TryAllocateKeyPair(KeyPair.ALG_EC_FP, (short) 256, apdubuf, offset); - - apdu.setOutgoingAndSend((short) 0, offset); - } - - - - - - - void GenerateKey(APDU apdu) { + void GenerateAndReturnKey(APDU apdu) { byte[] apdubuf = apdu.getBuffer(); apdu.setIncomingAndReceive(); @@ -606,5 +573,6 @@ void GenerateKey(APDU apdu) { apdu.setOutgoingAndSend((short) 0, offset); } +*/ }