// converted by version [v3.0.5] // on Wed Nov 02 11:52:26 CST 2022 .package com/josh/vku2f { .aid 0xA0:0x0:0x0:0x6:0x47; .version 0.1; .imports { 0xA0:0x0:0x0:0x0:0x62:0x0:0x1 1.0; //java/lang 0xA0:0x0:0x0:0x0:0x62:0x1:0x2 1.6; //javacard/security 0xA0:0x0:0x0:0x0:0x62:0x1:0x1 1.6; //javacard/framework 0xA0:0x0:0x0:0x0:0x62:0x2:0x9 1.0; //javacardx/apdu 0xA0:0x0:0x0:0x0:0x62:0x2:0x1 1.6; //javacardx/crypto } .applet { 0xA0:0x0:0x0:0x6:0x47:0x2F:0x0:0x1 CTAP2; } .constantPool { // 0 instanceFieldRef 1.16 AttestationKeyPair/kp; // 1 instanceFieldRef 1.15 AttestationKeyPair/sig; // 2 instanceFieldRef byte[] AttestationKeyPair/x509cert; // 3 instanceFieldRef short AttestationKeyPair/x509len; // 4 instanceFieldRef boolean[] AuthenticatorGetAssertion/options; // 5 instanceFieldRef byte[] AuthenticatorGetAssertion/rpId; // 6 instanceFieldRef byte[] AuthenticatorGetAssertion/clientDataHash; // 7 instanceFieldRef PublicKeyCredentialDescriptor[] AuthenticatorGetAssertion/allow; // 8 instanceFieldRef boolean[] AuthenticatorMakeCredential/options; // 9 instanceFieldRef byte[] AuthenticatorMakeCredential/dataHash; // 10 instanceFieldRef PublicKeyCredentialRpEntity AuthenticatorMakeCredential/rp; // 11 instanceFieldRef PublicKeyCredentialUserEntity AuthenticatorMakeCredential/user; // 12 instanceFieldRef PublicKeyCredentialParams AuthenticatorMakeCredential/params; // 13 instanceFieldRef PublicKeyCredentialDescriptor[] AuthenticatorMakeCredential/exclude; // 14 instanceFieldRef byte[] CBORBase/mBuffer; // 15 instanceFieldRef short[] CBORBase/mStatusWords; // 16 instanceFieldRef byte[] COSEKey/w; // 17 instanceFieldRef byte CTAP2/MAX_PIN_RETRIES; // 18 instanceFieldRef byte CTAP2/MAX_UV_RETRIES; // 19 instanceFieldRef byte[] CTAP2/dataBuffer; // 20 instanceFieldRef byte[] CTAP2/scratch; // 21 instanceFieldRef short[] CTAP2/tempVars; // 22 instanceFieldRef CBORDecoder CTAP2/cborDecoder; // 23 instanceFieldRef CBOREncoder CTAP2/cborEncoder; // 24 instanceFieldRef CredentialArray CTAP2/credentialArray; // 25 instanceFieldRef 1.11 CTAP2/sha256MessageDigest; // 26 instanceFieldRef AttestationKeyPair CTAP2/attestationKeyPair; // 27 instanceFieldRef short[] CTAP2/nextAssertion; // 28 instanceFieldRef boolean CTAP2/personalizeComplete; // 29 instanceFieldRef boolean[] CTAP2/isChaining; // 30 instanceFieldRef short[] CTAP2/chainRam; // 31 instanceFieldRef short[] CTAP2/outChainRam; // 32 instanceFieldRef boolean[] CTAP2/isOutChaining; // 33 instanceFieldRef ClientPINCommand CTAP2/clientPINCommand; // 34 instanceFieldRef IDSecret CTAP2/idSecret; // 35 instanceFieldRef StoredCredential CTAP2/tempCredential; // 36 instanceFieldRef AuthenticatorMakeCredential CTAP2/authenticatorMakeCredential; // 37 instanceFieldRef DomString IDSecret/IDx; // 38 instanceFieldRef byte[] IDSecret/Rx; // 39 instanceFieldRef byte[] IDSecret/PuKp; // 40 instanceFieldRef byte[] IDSecret/sharedSecret; // 41 instanceFieldRef byte[] IDSecret/encryptedCx; // 42 instanceFieldRef PublicKeyCredentialRpEntity StoredCredential/rpEntity; // 43 instanceFieldRef AuthenticatorGetAssertion CTAP2/authenticatorGetAssertion; // 44 instanceFieldRef StoredCredential[] CTAP2/assertionCredentials; // 45 instanceFieldRef byte CTAP2/pinRetries; // 46 instanceFieldRef PinUvAuthProtocolOne CTAP2/pinUvAuthProtocolOne; // 47 instanceFieldRef byte[] PublicKeyCredentialDescriptor/id; // 48 instanceFieldRef byte[] StoredCredential/credentialId; // 49 instanceFieldRef byte[] CTAP2/fidoInfo; // 50 instanceFieldRef PublicKeyCredentialUserEntity StoredCredential/userEntity; // 51 instanceFieldRef byte PublicKeyCredentialUserEntity/numData; // 52 instanceFieldRef DomString PublicKeyCredentialUserEntity/displayName; // 53 instanceFieldRef byte[] DomString/str; // 54 instanceFieldRef short DomString/len; // 55 instanceFieldRef byte[] PublicKeyCredentialUserEntity/id; // 56 instanceFieldRef DomString PublicKeyCredentialEntity/name; // 57 instanceFieldRef byte[] PublicKeyCredentialUserEntity/icon; // 58 instanceFieldRef boolean[] ClientPIN/checked; // 59 instanceFieldRef byte[] ClientPIN/PIN; // 60 instanceFieldRef short ClientPIN/i; // 61 instanceFieldRef byte ClientPINCommand/protocol; // 62 instanceFieldRef byte ClientPINCommand/subCommandCode; // 63 instanceFieldRef byte[] ClientPINCommand/keyAgreement; // 64 instanceFieldRef byte[] ClientPINCommand/pinUvAuthParam; // 65 instanceFieldRef byte[] ClientPINCommand/newPinEnc; // 66 instanceFieldRef byte[] ClientPINCommand/pinHashEnc; // 67 instanceFieldRef byte ClientPINCommand/permissions; // 68 instanceFieldRef byte[] ClientPINCommand/rpId; // 69 instanceFieldRef short CredentialArray/count; // 70 instanceFieldRef StoredCredential[] CredentialArray/credentials; // 71 instanceFieldRef boolean[] CredentialArray/slotStatus; // 72 instanceFieldRef short CredentialArray/size; // 73 instanceFieldRef short CredentialArray/i; // 74 instanceFieldRef byte[] IDSecret/Rp; // 75 instanceFieldRef byte[] IDSecret/RxRp; // 76 instanceFieldRef byte[] IDSecret/hashedSharedSecret; // 77 instanceFieldRef byte[] IDSecret/Cx; // 78 instanceFieldRef byte[] IDSecret/hmac; // 79 instanceFieldRef byte[] IDSecret/IV_ZERO_AES; // 80 instanceFieldRef short IDSecret/SCRATCH_LENGTH; // 81 instanceFieldRef byte IDSecret/i; // 82 instanceFieldRef 1.20 IDSecret/aesKey; // 83 instanceFieldRef 4.1 IDSecret/aesEncrypt; // 84 instanceFieldRef 4.1 IDSecret/aesDecrypt; // 85 instanceFieldRef 1.11 IDSecret/sha256; // 86 instanceFieldRef byte[] IDSecret/scratch; // 87 instanceFieldRef 1.16 PinUvAuthProtocolOne/ecDhKeyPair; // 88 instanceFieldRef boolean[] PinUvAuthProtocolOne/ecDhSet; // 89 instanceFieldRef byte PinUvAuthToken/permissionsRPID; // 90 instanceFieldRef byte PinUvAuthToken/permissionsSet; // 91 instanceFieldRef byte PinUvAuthToken/usageTimer; // 92 instanceFieldRef boolean PinUvAuthToken/inUseFlag; // 93 instanceFieldRef byte PinUvAuthToken/initialUsageTimeLimit; // 94 instanceFieldRef byte PinUvAuthToken/userPresentTimeLimit; // 95 instanceFieldRef byte PinUvAuthToken/maxUsageTimePeriod; // 96 instanceFieldRef boolean PinUvAuthToken/userVerifiedFlag; // 97 instanceFieldRef boolean PinUvAuthToken/userPresentFlag; // 98 instanceFieldRef byte[] PublicKeyCredentialDescriptor/type; // 99 instanceFieldRef DomString PublicKeyCredentialEntity/name; // 100 instanceFieldRef short[] PublicKeyCredentialParams/paramList; // 101 instanceFieldRef short PublicKeyCredentialParams/listIndex; // 102 instanceFieldRef DomString PublicKeyCredentialRpEntity/rpId; // 103 instanceFieldRef boolean[] PublicKeyCredentialUserEntity/dataPresent; // 104 instanceFieldRef byte[] StoredCredential/signingCounter; // 105 instanceFieldRef boolean StoredCredential/initialised; // 106 instanceFieldRef boolean StoredCredential/hmacEnabled; // 107 instanceFieldRef byte[] StoredCredential/credRandom; // 108 instanceFieldRef 1.16 StoredCredential/keyPair; // 109 instanceFieldRef 1.15 StoredES256Credential/sig; // 110 instanceFieldRef 1.15 StoredPS256Credential/kpSignature; // 111 instanceFieldRef 4.1 StoredRS256Credential/kpSignature; // 112 staticMethodRef 2.8.13(SB)[B; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B // 113 .classRef CBOREncoder; // 114 staticMethodRef CBOREncoder/<init>()V; // 115 virtualMethodRef CBORDecoder/readInt8()B; // 116 .classRef CredentialArray; // 117 staticMethodRef CredentialArray/<init>(S)V; // 118 virtualMethodRef CBORDecoder/readTextString([BS)S; // 119 staticMethodRef 1.11.0(BZ)Ljavacard/security/MessageDigest;; // javacard/security/MessageDigest.getInstance(BZ)Ljavacard/security/MessageDigest; .descriptor Ljavacard/security/MessageDigest; 1.11; // 120 .classRef 1.17; // javacard/security/ECKey // 121 .classRef AttestationKeyPair; // 122 staticMethodRef AttestationKeyPair/<init>()V; // 123 virtualMethodRef CBORDecoder/readByteString([BS)S; // 124 staticMethodRef KeyParams/sec256r1params(Ljavacard/security/ECKey;)V; .descriptor Ljavacard/security/ECKey; 1.17; // 125 .classRef PublicKeyCredentialDescriptor; // 126 staticMethodRef 2.8.12(SB)[Z; // javacard/framework/JCSystem.makeTransientBooleanArray(SB)[Z // 127 virtualMethodRef 1.16.1()V; // genKeyPair()V // 128 staticMethodRef 2.15.2(S)V; // javacard/framework/UserException.throwIt(S)V // 129 staticFieldRef byte[] Utf8Strings/UTF8_ID; // 130 staticMethodRef 2.16.0([BS[BSS)B; // javacard/framework/Util.arrayCompare([BS[BSS)B // 131 staticMethodRef 1.13.1(BBSZ)Ljavacard/security/Key;; // javacard/security/KeyBuilder.buildKey(BBSZ)Ljavacard/security/Key; .descriptor Ljavacard/security/Key; 1.0; // 132 .classRef 1.18; // javacard/security/ECPrivateKey // 133 .classRef ClientPINCommand; // 134 staticMethodRef ClientPINCommand/<init>()V; // 135 staticMethodRef PublicKeyCredentialDescriptor/<init>([BSS)V; // 136 .classRef IDSecret; // 137 staticMethodRef IDSecret/<init>()V; // 138 staticFieldRef byte[] Utf8Strings/UTF8_TYPE; // 139 .classRef CTAP2; // 140 staticMethodRef CTAP2/<init>()V; // 141 virtualMethodRef 2.3.2([BSB)V; // register([BSB)V // 142 virtualMethodRef 2.3.1()V; // register()V // 143 virtualMethodRef 2.10.1()[B; // getBuffer()[B // 144 virtualMethodRef 2.3.3()Z; // selectingApplet()Z // 145 staticFieldRef byte[] Utf8Strings/UTF8_FIDO2; // 146 virtualMethodRef 2.10.8(SS)V; // setOutgoingAndSend(SS)V // 147 virtualMethodRef 2.10.12()Z; // isCommandChainingCLA()Z // 148 virtualMethodRef 2.10.14()Z; // isISOInterindustryCLA()Z // 149 staticMethodRef 2.8.18()V; // javacard/framework/JCSystem.requestObjectDeletion()V // 150 virtualMethodRef CTAP2/getData(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 151 staticMethodRef CTAP2/handle(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 152 virtualMethodRef 2.10.6()S; // setIncomingAndReceive()S // 153 virtualMethodRef 2.10.15()S; // getIncomingLength()S // 154 virtualMethodRef CTAP2/returnError(Ljavacard/framework/APDU;B)V; .descriptor Ljavacard/framework/APDU; 2.10; // 155 staticMethodRef CTAP2/isCommandChainingCLA(Ljavacard/framework/APDU;)Z; .descriptor Ljavacard/framework/APDU; 2.10; // 156 virtualMethodRef 2.10.16()S; // getOffsetCdata()S // 157 virtualMethodRef 2.10.11()B; // getCurrentState()B // 158 virtualMethodRef 2.10.3(S)S; // receiveBytes(S)S // 159 staticFieldRef byte[] Utf8Strings/UTF8_UP; // 160 virtualMethodRef CBORDecoder/readBoolean()Z; // 161 staticMethodRef CTAP2/doApduIngestion(Ljavacard/framework/APDU;)S; .descriptor Ljavacard/framework/APDU; 2.10; // 162 virtualMethodRef CTAP2/authMakeCredential(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 163 virtualMethodRef CTAP2/authGetAssertion(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 164 staticMethodRef CTAP2/authGetInfo(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 165 virtualMethodRef CTAP2/clientPin(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 166 staticMethodRef CTAP2/doReset(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 167 staticMethodRef CTAP2/authGetNextAssertion(Ljavacard/framework/APDU;[B)V; .descriptor Ljavacard/framework/APDU; 2.10; // 168 virtualMethodRef CTAP2/attestSignRaw(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 169 virtualMethodRef CTAP2/attestSetCert(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 170 staticMethodRef CTAP2/personalizationComplete(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 171 staticMethodRef CTAP2/getAttestPublic(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 172 staticMethodRef CTAP2/getCredentialCount(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 173 staticMethodRef CTAP2/getPuKxRx(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 174 staticMethodRef CTAP2/getCx(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 175 staticMethodRef CTAP2/getPuKxCx(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 176 staticMethodRef CTAP2/dumpIDSecret(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 177 staticMethodRef CTAP2/getCert(Ljavacard/framework/APDU;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 178 virtualMethodRef AttestationKeyPair/isCertSet()Z; // 179 virtualMethodRef AttestationKeyPair/getPubkey([BS)S; // 180 virtualMethodRef 2.10.7()S; // setOutgoing()S // 181 virtualMethodRef 2.10.9(S)V; // setOutgoingLength(S)V // 182 virtualMethodRef 2.10.5([BSS)V; // sendBytesLong([BSS)V // 183 virtualMethodRef CredentialArray/getCount()S; // 184 .classRef DomString; // 185 staticMethodRef DomString/<init>([BS)V; // 186 staticFieldRef byte[] Utf8Strings/UTF8_UV; // 187 virtualMethodRef CBORBase/init([BSS)V; // 188 virtualMethodRef CBOREncoder/startArray(S)S; // 189 virtualMethodRef CBORDecoder/skipEntry()S; // 190 virtualMethodRef CBOREncoder/encodeUInt32([BS)S; // 191 virtualMethodRef CBOREncoder/encodeByteString([BSS)S; // 192 .classRef 2.15; // javacard/framework/UserException // 193 virtualMethodRef CBORBase/init([BSS)V; // 194 staticMethodRef 1.15.0(BZ)Ljavacard/security/Signature;; // javacard/security/Signature.getInstance(BZ)Ljavacard/security/Signature; .descriptor Ljavacard/security/Signature; 1.15; // 195 virtualMethodRef 2.15.1()S; // getReason()S // 196 virtualMethodRef CTAP2/returnError(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 197 staticMethodRef 1.22.0(BZ)Ljavacard/security/KeyAgreement;; // javacard/security/KeyAgreement.getInstance(BZ)Ljavacard/security/KeyAgreement; .descriptor Ljavacard/security/KeyAgreement; 1.22; // 198 virtualMethodRef AttestationKeyPair/getPrivate()Ljavacard/security/PrivateKey;; .descriptor Ljavacard/security/PrivateKey; 1.2; // 199 virtualMethodRef 1.22.1(Ljavacard/security/PrivateKey;)V; // init(Ljavacard/security/PrivateKey;)V .descriptor Ljavacard/security/PrivateKey; 1.2; // 200 .classRef 1.16; // javacard/security/KeyPair // 201 virtualMethodRef 1.22.3([BSS[BS)S; // generateSecret([BSS[BS)S // 202 virtualMethodRef IDSecret/initAesKey()V; // 203 virtualMethodRef IDSecret/encryptCx()V; // 204 .classRef PublicKeyCredentialRpEntity; // 205 virtualMethodRef IDSecret/getHMAC([BS)V; // 206 virtualMethodRef IDSecret/dump([BLcom/josh/vku2f/CBOREncoder;)S; // 207 virtualMethodRef AttestationKeyPair/sign([BSS[BS)S; // 208 virtualMethodRef AttestationKeyPair/setCert([BSS)V; // 209 virtualMethodRef 1.11.1([BSS[BS)S; // doFinal([BSS[BS)S // 210 .classRef AuthenticatorMakeCredential; // 211 staticMethodRef AuthenticatorMakeCredential/<init>(Lcom/josh/vku2f/CBORDecoder;)V; // 212 virtualMethodRef AuthenticatorMakeCredential/getAlgorithm()B; // 213 .classRef StoredES256Credential; // 214 staticMethodRef StoredES256Credential/<init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V; // 215 .classRef StoredRS256Credential; // 216 staticMethodRef StoredRS256Credential/<init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V; // 217 .classRef StoredPS256Credential; // 218 staticMethodRef StoredPS256Credential/<init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V; // 219 virtualMethodRef AuthenticatorMakeCredential/isResident()Z; // 220 virtualMethodRef AuthenticatorMakeCredential/isExclude()Z; // 221 staticMethodRef CTAP2/isPresent([Lcom/josh/vku2f/PublicKeyCredentialDescriptor;)Z; // 222 staticMethodRef CTAP2/addResident(Ljavacard/framework/APDU;Lcom/josh/vku2f/StoredCredential;)V; .descriptor Ljavacard/framework/APDU; 2.10; // 223 virtualMethodRef CBOREncoder/startMap(S)S; // 224 staticFieldRef byte[] Utf8Strings/UTF8_PACKED; // 225 virtualMethodRef CBOREncoder/encodeTextString([BSS)S; // 226 virtualMethodRef StoredCredential/getAttestedLen()S; // 227 virtualMethodRef CBOREncoder/startByteString(S)S; // 228 staticMethodRef PublicKeyCredentialRpEntity/<init>()V; // 229 virtualMethodRef PublicKeyCredentialRpEntity/getRp([BS)V; // 230 virtualMethodRef PublicKeyCredentialRpEntity/getRpLen()S; // 231 virtualMethodRef StoredCredential/readCounter([BS)S; // 232 virtualMethodRef StoredCredential/getAttestedData([BS)S; // 233 virtualMethodRef CTAP2/sendLongChaining(Ljavacard/framework/APDU;S)V; .descriptor Ljavacard/framework/APDU; 2.10; // 234 .classRef AuthenticatorGetAssertion; // 235 staticMethodRef AuthenticatorGetAssertion/<init>(Lcom/josh/vku2f/CBORDecoder;)V; // 236 virtualMethodRef 1.16.2()Ljavacard/security/PrivateKey;; // getPrivate()Ljavacard/security/PrivateKey; .descriptor Ljavacard/security/PrivateKey; 1.2; // 237 staticMethodRef CTAP2/findCredentials(Ljavacard/framework/APDU;Lcom/josh/vku2f/AuthenticatorGetAssertion;)[Lcom/josh/vku2f/StoredCredential;; .descriptor Ljavacard/framework/APDU; 2.10; // 238 virtualMethodRef PublicKeyCredentialRpEntity/setRp([BS)V; // 239 virtualMethodRef AuthenticatorGetAssertion/getHash([BS)S; // 240 staticMethodRef CTAP2/doAssertionCommon(Lcom/josh/vku2f/CBOREncoder;S)V; // 241 virtualMethodRef ClientPINCommand/decodeCommand(Lcom/josh/vku2f/CBORDecoder;)V; // 242 virtualMethodRef ClientPINCommand/getSubCommandCode()B; // 243 staticFieldRef byte ClientPINResponse/PIN_RETRIES; // 244 staticFieldRef byte[] Utf8Strings/UTF8_NAME; // 245 virtualMethodRef CBOREncoder/encodeUInt8(B)S; // 246 virtualMethodRef CBOREncoder/encodeNegativeUInt8(B)S; // 247 virtualMethodRef PublicKeyCredentialEntity/setName([BS)V; // 248 virtualMethodRef PinUvAuthProtocolOne/getPublicKey()[B; // 249 virtualMethodRef CredentialArray/addCredential(Lcom/josh/vku2f/StoredCredential;)V; // 250 virtualMethodRef AuthenticatorGetAssertion/hasAllow()Z; // 251 .classRef StoredCredential; // 252 virtualMethodRef CredentialArray/getLength()S; // 253 virtualMethodRef CredentialArray/get(S)Lcom/josh/vku2f/StoredCredential;; // 254 virtualMethodRef PublicKeyCredentialRpEntity/checkId([BSS)Z; // 255 .classRef PublicKeyCredentialUserEntity; // 256 staticMethodRef PublicKeyCredentialUserEntity/<init>()V; // 257 virtualMethodRef StoredCredential/checkId([BSS)Z; // 258 virtualMethodRef 1.15.3(Ljavacard/security/Key;B)V; // init(Ljavacard/security/Key;B)V .descriptor Ljavacard/security/Key; 1.0; // 259 staticFieldRef byte[] CTAP2/aaguid; // 260 virtualMethodRef CBOREncoder/encodeBoolean(Z)S; // 261 virtualMethodRef CBOREncoder/encodeUInt16(S)S; // 262 staticMethodRef 2.8.1()V; // javacard/framework/JCSystem.beginTransaction()V // 263 staticMethodRef 2.8.2()V; // javacard/framework/JCSystem.commitTransaction()V // 264 virtualMethodRef StoredCredential/performSignature([BSS[BS)S; // 265 virtualMethodRef PublicKeyCredentialUserEntity/setId([BSS)V; // 266 virtualMethodRef PublicKeyCredentialUserEntity/setName([BS)V; // 267 virtualMethodRef StoredCredential/getPresentUser()[Z; // 268 staticFieldRef byte[] Utf8Strings/UTF8_DISPLAYNAME; // 269 virtualMethodRef PublicKeyCredentialUserEntity/setDisplayName([BS)V; // 270 staticFieldRef byte[] Utf8Strings/UTF8_ICON; // 271 virtualMethodRef PublicKeyCredentialUserEntity/setIcon([BS)V; // 272 .classRef PublicKeyCredentialParams; // 273 staticMethodRef PublicKeyCredentialParams/<init>(S)V; // 274 virtualMethodRef AttestationKeyPair/getCert([BS)S; // 275 staticMethodRef 2.4.0(S)V; // javacard/framework/CardException.<init>(S)V // 276 staticFieldRef CTAP2Exception CTAP2Exception/systemInstance; // 277 virtualMethodRef 2.4.2(S)V; // setReason(S)V // 278 virtualMethodRef 1.15.5([BSS[BS)S; // sign([BSS[BS)S // 279 staticFieldRef byte[] Utf8Strings/UTF8_ALG; // 280 virtualMethodRef CBORDecoder/getMajorType()B; // 281 virtualMethodRef CBORDecoder/readEncodedInteger([BS)S; // 282 virtualMethodRef PublicKeyCredentialParams/addAlgorithm(S)V; // 283 staticMethodRef 2.16.5(BB)S; // javacard/framework/Util.makeShort(BB)S // 284 staticFieldRef byte[] Utf8Strings/UTF8_PUBLIC_KEY; // 285 virtualMethodRef 1.15.6([BSS)V; // update([BSS)V // 286 staticFieldRef byte[] Utf8Strings/UTF8_RK; // 287 virtualMethodRef PublicKeyCredentialParams/getAlgorithm()B; // 288 staticMethodRef 1.16.0(BS)V; // javacard/security/KeyPair.<init>(BS)V // 289 staticMethodRef 0.0.0()V; // java/lang/Object.<init>()V // 290 staticMethodRef 2.10.5()[B; // javacard/framework/APDU.getCurrentAPDUBuffer()[B // 291 virtualMethodRef CBORBase/increaseOffset(S)S; // 292 virtualMethodRef CBORBase/getCurrentOffset()S; // 293 virtualMethodRef CredentialArray/checkExists(Lcom/josh/vku2f/StoredCredential;)S; // 294 virtualMethodRef CBORBase/getBufferLength()S; // 295 virtualMethodRef PublicKeyCredentialUserEntity/checkId([BSS)Z; // 296 virtualMethodRef PublicKeyCredentialRpEntity/checkId(Lcom/josh/vku2f/PublicKeyCredentialRpEntity;)Z; // 297 virtualMethodRef PublicKeyCredentialUserEntity/checkId(Lcom/josh/vku2f/PublicKeyCredentialUserEntity;)Z; // 298 virtualMethodRef DomString/checkEquals([BSS)Z; // 299 staticMethodRef 2.7.1(S)V; // javacard/framework/ISOException.throwIt(S)V // 300 virtualMethodRef CBORBase/getBuffer()[B; // 301 staticMethodRef CBORBase/<init>()V; // 302 virtualMethodRef CBORBase/getRawByte()B; // 303 virtualMethodRef CBORDecoder/getIntegerSize()B; // 304 virtualMethodRef CBORBase/increaseOffset(S)S; // 305 virtualMethodRef CBORDecoder/readLength()S; // 306 virtualMethodRef CBORBase/getCurrentOffset()S; // 307 staticFieldRef byte[] Utf8Strings/UTF8_NULL; // 308 staticMethodRef Random/getInstance()Ljavacard/security/RandomData;; .descriptor Ljavacard/security/RandomData; 1.14; // 309 virtualMethodRef 1.14.3([BSS)S; // nextBytes([BSS)S // 310 staticMethodRef 2.16.7([BSSB)S; // javacard/framework/Util.arrayFill([BSSB)S // 311 staticMethodRef 1.13.0(BSZ)Ljavacard/security/Key;; // javacard/security/KeyBuilder.buildKey(BSZ)Ljavacard/security/Key; .descriptor Ljavacard/security/Key; 1.0; // 312 .classRef 1.20; // javacard/security/AESKey // 313 virtualMethodRef CBORDecoder/readRawByte()B; // 314 staticMethodRef 4.1.0(BZ)Ljavacardx/crypto/Cipher;; // javacardx/crypto/Cipher.getInstance(BZ)Ljavacardx/crypto/Cipher; .descriptor Ljavacardx/crypto/Cipher; 4.1; // 315 virtualMethodRef CBORBase/getBuffer()[B; // 316 virtualMethodRef CBORBase/getCurrentOffsetAndIncrease(S)S; // 317 staticMethodRef 2.16.4([BS)S; // javacard/framework/Util.getShort([BS)S // 318 staticMethodRef 2.16.2([BS[BSS)S; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S // 319 virtualMethodRef 4.1.4(Ljavacard/security/Key;B[BSS)V; // init(Ljavacard/security/Key;B[BSS)V .descriptor Ljavacard/security/Key; 1.0; // 320 virtualMethodRef 4.1.1([BSS[BS)S; // doFinal([BSS[BS)S // 321 virtualMethodRef 1.11.5([BSS)V; // update([BSS)V // 322 virtualMethodRef 4.1.5([BSS[BS)S; // update([BSS[BS)S // 323 virtualMethodRef IDSecret/getRxRp()[B; // 324 staticFieldRef byte[] KeyParams/secp256r1p; // 325 staticFieldRef byte[] KeyParams/secp256r1A; // 326 staticFieldRef byte[] KeyParams/secp256r1B; // 327 staticFieldRef byte[] KeyParams/secp256r1G; // 328 staticFieldRef byte[] KeyParams/secp256r1R; // 329 staticMethodRef PinUvAuthProtocol/<init>()V; // 330 staticMethodRef 1.16.1(Ljavacard/security/PublicKey;Ljavacard/security/PrivateKey;)V; // javacard/security/KeyPair.<init>(Ljavacard/security/PublicKey;Ljavacard/security/PrivateKey;)V .descriptor Ljavacard/security/PublicKey; 1.3; .descriptor Ljavacard/security/PrivateKey; 1.2; // 331 virtualMethodRef CBORDecoder/readInt16()S; // 332 virtualMethodRef CBORDecoder/readRawByteArray([BSS)S; // 333 virtualMethodRef PinUvAuthToken/resetTokenState()V; // 334 virtualMethodRef CBORBase/getBufferLength()S; // 335 staticMethodRef ICUtil/isLessThanAsUnsignedShort(SS)Z; // 336 virtualMethodRef CBOREncoder/writeRawByte(B)S; // 337 staticMethodRef CBOREncoder/writeUInt8(BB)S; // 338 staticMethodRef CBOREncoder/writeUInt16(BS)S; // 339 staticMethodRef CBOREncoder/writeRawShort(S)S; // 340 virtualMethodRef CBORBase/getBuffer()[B; // 341 virtualMethodRef CBORBase/getCurrentOffset()S; // 342 virtualMethodRef CBORBase/increaseOffset(S)S; // 343 staticMethodRef 2.16.6([BSS)S; // javacard/framework/Util.setShort([BSS)S // 344 virtualMethodRef CBORBase/getBufferLength()S; // 345 staticMethodRef CBOREncoder/encodeValue(BS)S; // 346 virtualMethodRef CBORBase/getCurrentOffsetAndIncrease(S)S; // 347 staticMethodRef PublicKeyCredentialEntity/<init>()V; // 348 staticMethodRef CBOREncoder/writeRawByteArray([BSS)S; // 349 virtualMethodRef DomString/checkEquals(Lcom/josh/vku2f/DomString;)Z; // 350 staticMethodRef 2.16.1([BS[BSS)S; // javacard/framework/Util.arrayCopy([BS[BSS)S // 351 .classRef 0.5; // java/lang/ArrayIndexOutOfBoundsException // 352 staticFieldRef 1.14 Random/rng; // 353 staticMethodRef 1.14.0(B)Ljavacard/security/RandomData;; // javacard/security/RandomData.getInstance(B)Ljavacard/security/RandomData; .descriptor Ljavacard/security/RandomData; 1.14; // 354 staticFieldRef 1.14 StoredCredential/randomData; // 355 virtualMethodRef 1.14.1([BSS)V; // generateData([BSS)V // 356 staticMethodRef 2.3.0()V; // javacard/framework/Applet.<init>()V // 357 .classRef 1.19; // javacard/security/ECPublicKey // 358 .classRef 0.2; // java/lang/Exception // 359 staticMethodRef 2.8.15(SB)[S; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S // 360 staticMethodRef 2.16.3([BSSB)S; // javacard/framework/Util.arrayFillNonAtomic([BSSB)S // 361 staticMethodRef StoredCredential/<init>()V; // 362 virtualMethodRef 1.16.3()Ljavacard/security/PublicKey;; // getPublic()Ljavacard/security/PublicKey; .descriptor Ljavacard/security/PublicKey; 1.3; // 363 virtualMethodRef AuthenticatorMakeCredential/getUser()Lcom/josh/vku2f/PublicKeyCredentialUserEntity;; // 364 virtualMethodRef AuthenticatorMakeCredential/getRp()Lcom/josh/vku2f/PublicKeyCredentialRpEntity;; // 365 virtualMethodRef CBORDecoder/readMajorType(B)S; // 366 virtualMethodRef StoredCredential/incrementCounter()V; // 367 virtualMethodRef StoredCredential/doAttestationCommon([BS)V; // 368 .classRef CBORDecoder; // 369 virtualMethodRef StoredCredential/incrementCounter()V; // 370 virtualMethodRef StoredCredential/doAttestationCommon([BS)V; // 371 .classRef 1.9; // javacard/security/RSAPublicKey // 372 staticMethodRef CBORDecoder/<init>()V; // 373 virtualMethodRef 4.1.3(Ljavacard/security/Key;B)V; // init(Ljavacard/security/Key;B)V .descriptor Ljavacard/security/Key; 1.0; // 374 virtualMethodRef StoredCredential/incrementCounter()V; // 375 virtualMethodRef StoredCredential/doAttestationCommon([BS)V; // 376 virtualMethodRef CBOREncoder/encodeNegativeUInt16(S)S; } .class public AttestationKeyPair 0 extends 0.0 { // extends java/lang/Object .fields { public short x509len 0; // S public byte[] x509cert 1; // [B private 1.16 kp 2; // Ljavacard/security/KeyPair; private 1.15 sig 3; // Ljavacard/security/Signature; } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; sign([BSS[BS)S; update([BSS)V; setCert([BSS)V; getCert([BS)S; isCertSet()Z; getPubkey([BS)S; getPrivate()Ljavacard/security/PrivateKey;; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 5; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; new 200; // javacard/security/KeyPair dup; sconst_5; sspush 256; invokespecial 288; // javacard/security/KeyPair.<init>(BS)V putfield_a 0; // reference com/josh/vku2f/AttestationKeyPair.kp getfield_a_this 0; // reference com/josh/vku2f/AttestationKeyPair.kp invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 120; // T_CLASSORINTERFACE javacard/security/ECKey invokestatic 124; // com/josh/vku2f/KeyParams.sec256r1params(Ljavacard/security/ECKey;)V getfield_a_this 0; // reference com/josh/vku2f/AttestationKeyPair.kp invokevirtual 127; // genKeyPair()V aload_0; bspush 33; sconst_0; invokestatic 194; // javacard/security/Signature.getInstance(BZ)Ljavacard/security/Signature; putfield_a 1; // reference com/josh/vku2f/AttestationKeyPair.sig getfield_a_this 1; // reference com/josh/vku2f/AttestationKeyPair.sig getfield_a_this 0; // reference com/josh/vku2f/AttestationKeyPair.kp invokevirtual 236; // getPrivate()Ljavacard/security/PrivateKey; sconst_1; invokevirtual 258; // init(Ljavacard/security/Key;B)V return; } .method public sign([BSS[BS)S 1 { .stack 6; .locals 0; L0: getfield_a_this 1; // reference com/josh/vku2f/AttestationKeyPair.sig aload_1; sload_2; sload_3; aload 4; sload 5; invokevirtual 278; // sign([BSS[BS)S sreturn; } .method public update([BSS)V 2 { .stack 4; .locals 0; L0: getfield_a_this 1; // reference com/josh/vku2f/AttestationKeyPair.sig aload_1; sload_2; sload_3; invokevirtual 285; // update([BSS)V return; } .method public setCert([BSS)V 3 { .stack 5; .locals 0; L0: aload_0; sload_3; newarray 11; putfield_a 2; // reference com/josh/vku2f/AttestationKeyPair.x509cert sload_3; putfield_s_this 3; // short com/josh/vku2f/AttestationKeyPair.x509len aload_1; sload_2; getfield_a_this 2; // reference com/josh/vku2f/AttestationKeyPair.x509cert sconst_0; sload_3; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; return; } .method public getCert([BS)S 4 { .stack 5; .locals 0; L0: getfield_a_this 2; // reference com/josh/vku2f/AttestationKeyPair.x509cert sconst_0; aload_1; sload_2; getfield_a_this 2; // reference com/josh/vku2f/AttestationKeyPair.x509cert arraylength; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 2; // reference com/josh/vku2f/AttestationKeyPair.x509cert arraylength; sreturn; } .method public isCertSet()Z 5 { .stack 1; .locals 0; L0: getfield_s_this 3; // short com/josh/vku2f/AttestationKeyPair.x509len ifeq L2; L1: sconst_1; goto L3; L2: sconst_0; L3: sreturn; } .method public getPubkey([BS)S 6 { .stack 3; .locals 0; L0: getfield_a_this 0; // reference com/josh/vku2f/AttestationKeyPair.kp invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 357; // T_CLASSORINTERFACE javacard/security/ECPublicKey aload_1; sload_2; invokeinterface 3 357 19; // javacard/security/ECPublicKey sreturn; } .method public getPrivate()Ljavacard/security/PrivateKey; 7 { .stack 1; .locals 0; .descriptor Ljavacard/security/PrivateKey; 1.2; L0: getfield_a_this 0; // reference com/josh/vku2f/AttestationKeyPair.kp invokevirtual 236; // getPrivate()Ljavacard/security/PrivateKey; areturn; } } .class public AuthenticatorGetAssertion 1 extends 0.0 { // extends java/lang/Object .fields { public byte[] rpId 0; // [B byte[] clientDataHash 1; // [B boolean[] options 2; // [Z PublicKeyCredentialDescriptor[] allow 3; // [Lcom/josh/vku2f/PublicKeyCredentialDescriptor; } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; getHash([BS)S; hasAllow()Z; } .packageMethodTable 0 { } .method public <init>(Lcom/josh/vku2f/CBORDecoder;)V 0 { .stack 8; .locals 3; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V L1: bspush 8; sconst_1; invokestatic 359; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S astore_2; L2: goto L4; L3: astore_3; bspush 8; newarray 12; astore_2; L4: aload_0; sconst_2; newarray 10; putfield_a 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options getfield_a_this 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options sconst_0; sconst_1; bastore; getfield_a_this 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options sconst_1; sconst_0; bastore; aload_2; sconst_0; aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sastore; L5: bspush 64; sconst_1; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B astore_3; L6: goto L8; L7: astore 4; bspush 64; newarray 11; astore_3; L8: aload_2; sconst_1; sconst_0; sastore; L9: aload_2; sconst_1; saload; aload_2; sconst_0; saload; if_scmpge_w L39; L10: aload_2; sconst_2; aload_1; invokevirtual 115; // readInt8()B sastore; aload_2; sconst_2; saload; stableswitch L37 1 7 L11 L12 L13 L34 L26 L35 L36; L11: aload_2; sconst_3; aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S sastore; aload_0; aload_2; sconst_3; saload; newarray 11; putfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId aload_3; sconst_0; getfield_a_this 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId sconst_0; aload_2; sconst_3; saload; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; goto_w L38; L12: aload_2; sconst_3; aload_1; aload_3; sconst_0; invokevirtual 123; // readByteString([BS)S sastore; aload_0; aload_2; sconst_3; saload; newarray 11; putfield_a 6; // reference com/josh/vku2f/AuthenticatorGetAssertion.clientDataHash aload_3; sconst_0; getfield_a_this 6; // reference com/josh/vku2f/AuthenticatorGetAssertion.clientDataHash sconst_0; aload_2; sconst_3; saload; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; goto_w L38; L13: aload_2; sconst_3; aload_1; sconst_4; invokevirtual 365; // readMajorType(B)S sastore; aload_0; aload_2; sconst_3; saload; anewarray 125; // com/josh/vku2f/PublicKeyCredentialDescriptor putfield_a 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow aload_2; sconst_4; sconst_0; sastore; L14: aload_2; sconst_4; saload; getfield_a_this 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow arraylength; if_scmpge_w L38; L15: aload_2; sconst_3; aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sastore; aload_2; sconst_3; saload; sconst_2; if_scmpeq L17; L16: bspush 18; invokestatic 128; // javacard/framework/UserException.throwIt(S)V goto_w L38; L17: aload_2; sconst_5; sconst_0; sastore; L18: aload_2; sconst_5; saload; sconst_2; if_scmpge L25; L19: aload_2; sconst_3; aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S sastore; aload_3; sconst_0; getstatic_a 129; // reference com/josh/vku2f/Utf8Strings.UTF8_ID sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L21; L20: aload_2; sconst_3; aload_1; aload_3; sconst_0; invokevirtual 123; // readByteString([BS)S sastore; getfield_a_this 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow aload_2; sconst_4; saload; new 125; // com/josh/vku2f/PublicKeyCredentialDescriptor dup; aload_3; sconst_0; aload_2; sconst_3; saload; invokespecial 135; // com/josh/vku2f/PublicKeyCredentialDescriptor.<init>([BSS)V aastore; goto L24; L21: aload_3; sconst_0; getstatic_a 138; // reference com/josh/vku2f/Utf8Strings.UTF8_TYPE sconst_0; sconst_4; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L23; L22: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; goto L24; L23: bspush 18; invokestatic 128; // javacard/framework/UserException.throwIt(S)V goto L25; L24: aload_2; sconst_5; dup2; saload; sconst_1; sadd; sastore; goto L18; L25: aload_2; sconst_4; dup2; saload; sconst_1; sadd; sastore; goto_w L14; L26: aload_2; sconst_3; aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sastore; aload_2; sconst_4; sconst_0; sastore; L27: aload_2; sconst_4; saload; aload_2; sconst_3; saload; if_scmpge L38; L28: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; aload_3; sconst_0; getstatic_a 159; // reference com/josh/vku2f/Utf8Strings.UTF8_UP sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L30; L29: getfield_a_this 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options sconst_0; aload_1; invokevirtual 160; // readBoolean()Z bastore; goto L33; L30: aload_3; sconst_0; getstatic_a 186; // reference com/josh/vku2f/Utf8Strings.UTF8_UV sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L32; L31: getfield_a_this 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options sconst_1; aload_1; invokevirtual 160; // readBoolean()Z bastore; goto L33; L32: aload_1; invokevirtual 189; // skipEntry()S pop; L33: aload_2; sconst_4; dup2; saload; sconst_1; sadd; sastore; goto L27; L34: aload_1; invokevirtual 189; // skipEntry()S pop; goto L38; L35: aload_1; invokevirtual 189; // skipEntry()S pop; goto L38; L36: aload_1; invokevirtual 189; // skipEntry()S pop; goto L38; L37: bspush -123; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L38: aload_2; sconst_1; dup2; saload; sconst_1; sadd; sastore; goto_w L9; L39: getfield_a_this 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId ifnull L41; L40: getfield_a_this 6; // reference com/josh/vku2f/AuthenticatorGetAssertion.clientDataHash ifnonnull L42; L41: bspush 20; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L42: return; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 358; L5 L6 L7 358; } } .method public getHash([BS)S 1 { .stack 5; .locals 0; L0: getfield_a_this 6; // reference com/josh/vku2f/AuthenticatorGetAssertion.clientDataHash sconst_0; aload_1; sload_2; getfield_a_this 6; // reference com/josh/vku2f/AuthenticatorGetAssertion.clientDataHash arraylength; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 6; // reference com/josh/vku2f/AuthenticatorGetAssertion.clientDataHash arraylength; sreturn; } .method public hasAllow()Z 2 { .stack 1; .locals 0; L0: getfield_a_this 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow ifnull L3; L1: getfield_a_this 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow arraylength; ifle L3; L2: sconst_1; goto L4; L3: sconst_0; L4: sreturn; } } .class public AuthenticatorMakeCredential 2 extends 0.0 { // extends java/lang/Object .fields { public byte[] dataHash 0; // [B public PublicKeyCredentialDescriptor[] exclude 1; // [Lcom/josh/vku2f/PublicKeyCredentialDescriptor; private PublicKeyCredentialRpEntity rp 2; // Lcom/josh/vku2f/PublicKeyCredentialRpEntity; private PublicKeyCredentialUserEntity user 3; // Lcom/josh/vku2f/PublicKeyCredentialUserEntity; private PublicKeyCredentialParams params 4; // Lcom/josh/vku2f/PublicKeyCredentialParams; private boolean[] options 5; // [Z } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; getUser()Lcom/josh/vku2f/PublicKeyCredentialUserEntity;; getRp()Lcom/josh/vku2f/PublicKeyCredentialRpEntity;; isResident()Z; getAlgorithm()B; isExclude()Z; getDataHash([BS)S; } .packageMethodTable 0 { } .method public <init>(Lcom/josh/vku2f/CBORDecoder;)V 0 { .stack 7; .locals 10; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; sconst_2; newarray 10; putfield_a 8; // reference com/josh/vku2f/AuthenticatorMakeCredential.options L1: bspush 8; sconst_1; invokestatic 359; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S astore_2; L2: goto L4; L3: astore_3; bspush 8; newarray 12; astore_2; L4: bspush 64; sconst_2; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B astore_3; L5: goto L7; L6: astore 4; bspush 64; newarray 11; astore_3; L7: bspush 64; sconst_2; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B astore 4; L8: goto L10; L9: astore 5; bspush 64; newarray 11; astore 4; L10: aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sstore 5; getfield_a_this 8; // reference com/josh/vku2f/AuthenticatorMakeCredential.options sconst_0; sconst_1; bastore; getfield_a_this 8; // reference com/josh/vku2f/AuthenticatorMakeCredential.options sconst_1; sconst_0; bastore; sconst_0; sstore 6; L11: sload 6; sload 5; if_scmpge_w L93; L12: aload_1; invokevirtual 115; // readInt8()B sstore 7; sload 7; stableswitch L91 1 7 L13 L14 L24 L37 L61 L88 L75; L13: aload_1; aload_3; sconst_0; invokevirtual 123; // readByteString([BS)S sstore 8; aload_0; sload 8; newarray 11; putfield_a 9; // reference com/josh/vku2f/AuthenticatorMakeCredential.dataHash aload_3; sconst_0; getfield_a_this 9; // reference com/josh/vku2f/AuthenticatorMakeCredential.dataHash sconst_0; sload 8; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; goto_w L92; L14: aload_0; new 204; // com/josh/vku2f/PublicKeyCredentialRpEntity dup; invokespecial 228; // com/josh/vku2f/PublicKeyCredentialRpEntity.<init>()V putfield_a 10; // reference com/josh/vku2f/AuthenticatorMakeCredential.rp aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sstore 8; sload 8; sconst_2; if_scmpge L16; L15: bspush 18; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L16: sconst_0; sstore 9; L17: sload 9; sload 8; if_scmpge L23; L18: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; aload_3; sconst_0; getstatic_a 129; // reference com/josh/vku2f/Utf8Strings.UTF8_ID sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L20; L19: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S sstore 10; getfield_a_this 10; // reference com/josh/vku2f/AuthenticatorMakeCredential.rp aload_3; sload 10; invokevirtual 238; // setRp([BS)V goto L22; L20: aload_3; sconst_0; getstatic_a 244; // reference com/josh/vku2f/Utf8Strings.UTF8_NAME sconst_0; sconst_4; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L22; L21: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S sstore 10; getfield_a_this 10; // reference com/josh/vku2f/AuthenticatorMakeCredential.rp aload_3; sload 10; invokevirtual 247; // setName([BS)V L22: sinc 9 1; goto L17; L23: goto_w L92; L24: aload_0; new 255; // com/josh/vku2f/PublicKeyCredentialUserEntity dup; invokespecial 256; // com/josh/vku2f/PublicKeyCredentialUserEntity.<init>()V putfield_a 11; // reference com/josh/vku2f/AuthenticatorMakeCredential.user aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sstore 8; sconst_0; sstore 9; L25: sload 9; sload 8; if_scmpge_w L36; L26: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; aload_3; sconst_0; getstatic_a 129; // reference com/josh/vku2f/Utf8Strings.UTF8_ID sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L28; L27: aload_1; aload_3; sconst_0; invokevirtual 123; // readByteString([BS)S sstore 10; getfield_a_this 11; // reference com/josh/vku2f/AuthenticatorMakeCredential.user aload_3; sconst_0; sload 10; invokevirtual 265; // setId([BSS)V goto L35; L28: aload_3; sconst_0; getstatic_a 244; // reference com/josh/vku2f/Utf8Strings.UTF8_NAME sconst_0; sconst_4; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L30; L29: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S sstore 10; getfield_a_this 11; // reference com/josh/vku2f/AuthenticatorMakeCredential.user aload_3; sload 10; invokevirtual 266; // setName([BS)V goto L35; L30: aload_3; sconst_0; getstatic_a 268; // reference com/josh/vku2f/Utf8Strings.UTF8_DISPLAYNAME sconst_0; bspush 11; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L32; L31: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S sstore 10; getfield_a_this 11; // reference com/josh/vku2f/AuthenticatorMakeCredential.user aload_3; sload 10; invokevirtual 269; // setDisplayName([BS)V goto L35; L32: aload_3; sconst_0; getstatic_a 270; // reference com/josh/vku2f/Utf8Strings.UTF8_ICON sconst_0; sconst_4; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L34; L33: aload_1; aload 4; sconst_0; invokevirtual 118; // readTextString([BS)S sstore 10; getfield_a_this 11; // reference com/josh/vku2f/AuthenticatorMakeCredential.user aload 4; sload 10; invokevirtual 271; // setIcon([BS)V goto L35; L34: aload_1; invokevirtual 189; // skipEntry()S pop; L35: sinc 9 1; goto_w L25; L36: goto_w L92; L37: aload_1; sconst_4; invokevirtual 365; // readMajorType(B)S sstore 8; aload_0; new 272; // com/josh/vku2f/PublicKeyCredentialParams dup; sload 8; invokespecial 273; // com/josh/vku2f/PublicKeyCredentialParams.<init>(S)V putfield_a 12; // reference com/josh/vku2f/AuthenticatorMakeCredential.params sconst_0; sstore 9; L38: sload 9; sload 8; if_scmpge_w L60; L39: aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sstore 10; sload 10; sconst_2; if_scmpeq L41; L40: bspush 18; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L41: sconst_0; sstore 11; L42: sload 11; sconst_2; if_scmpge_w L59; L43: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; aload_3; sconst_0; getstatic_a 279; // reference com/josh/vku2f/Utf8Strings.UTF8_ALG sconst_0; sconst_3; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L54; L44: aload_1; invokevirtual 280; // getMajorType()B ifne L49; L45: aload_1; aload 4; sconst_0; invokevirtual 281; // readEncodedInteger([BS)S sstore 10; sload 10; sconst_1; if_scmpne L47; L46: getfield_a_this 12; // reference com/josh/vku2f/AuthenticatorMakeCredential.params aload 4; sconst_0; baload; invokevirtual 282; // addAlgorithm(S)V goto_w L58; L47: sload 10; sconst_2; if_scmpne L58; L48: getfield_a_this 12; // reference com/josh/vku2f/AuthenticatorMakeCredential.params aload 4; sconst_0; baload; aload 4; sconst_1; baload; invokestatic 283; // javacard/framework/Util.makeShort(BB)S invokevirtual 282; // addAlgorithm(S)V goto L58; L49: aload_1; invokevirtual 280; // getMajorType()B sconst_1; if_scmpne L58; L50: aload_1; aload 4; sconst_0; invokevirtual 281; // readEncodedInteger([BS)S sstore 10; sload 10; sconst_1; if_scmpne L52; L51: getfield_a_this 12; // reference com/josh/vku2f/AuthenticatorMakeCredential.params sconst_m1; aload 4; sconst_0; baload; ssub; invokevirtual 282; // addAlgorithm(S)V goto L58; L52: sload 10; sconst_2; if_scmpne L58; L53: getfield_a_this 12; // reference com/josh/vku2f/AuthenticatorMakeCredential.params sconst_m1; aload 4; sconst_0; baload; aload 4; sconst_1; baload; invokestatic 283; // javacard/framework/Util.makeShort(BB)S ssub; invokevirtual 282; // addAlgorithm(S)V goto L58; L54: aload_3; sconst_0; getstatic_a 138; // reference com/josh/vku2f/Utf8Strings.UTF8_TYPE sconst_0; sconst_4; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L57; L55: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; aload_3; sconst_0; getstatic_a 284; // reference com/josh/vku2f/Utf8Strings.UTF8_PUBLIC_KEY sconst_0; bspush 10; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifeq L58; L56: bspush 38; invokestatic 128; // javacard/framework/UserException.throwIt(S)V goto L58; L57: bspush 18; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L58: sinc 11 1; goto_w L42; L59: sinc 9 1; goto_w L38; L60: goto_w L92; L61: aload_1; sconst_4; invokevirtual 365; // readMajorType(B)S sstore 8; aload_0; sload 8; anewarray 125; // com/josh/vku2f/PublicKeyCredentialDescriptor putfield_a 13; // reference com/josh/vku2f/AuthenticatorMakeCredential.exclude sconst_0; sstore 9; L62: sload 9; sload 8; if_scmpge L74; L63: aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sstore 10; sload 10; sconst_2; if_scmpeq L65; L64: bspush 18; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L65: sconst_0; sstore 11; L66: sload 11; sconst_2; if_scmpge L73; L67: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; aload_3; sconst_0; getstatic_a 129; // reference com/josh/vku2f/Utf8Strings.UTF8_ID sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L69; L68: aload_1; aload_3; sconst_0; invokevirtual 123; // readByteString([BS)S sstore 10; getfield_a_this 13; // reference com/josh/vku2f/AuthenticatorMakeCredential.exclude sload 9; new 125; // com/josh/vku2f/PublicKeyCredentialDescriptor dup; aload_3; sconst_0; sload 10; invokespecial 135; // com/josh/vku2f/PublicKeyCredentialDescriptor.<init>([BSS)V aastore; goto L72; L69: aload_3; sconst_0; getstatic_a 138; // reference com/josh/vku2f/Utf8Strings.UTF8_TYPE sconst_0; sconst_4; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L71; L70: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; goto L72; L71: bspush 17; invokestatic 128; // javacard/framework/UserException.throwIt(S)V goto L73; L72: sinc 11 1; goto L66; L73: sinc 9 1; goto L62; L74: goto_w L92; L75: aload_1; invokevirtual 280; // getMajorType()B sconst_5; if_scmpeq L77; L76: bspush 17; invokestatic 128; // javacard/framework/UserException.throwIt(S)V goto L92; L77: aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sstore 8; sconst_0; sstore 9; L78: sload 9; sload 8; if_scmpge L87; L79: aload_1; aload_3; sconst_0; invokevirtual 118; // readTextString([BS)S pop; aload_3; sconst_0; getstatic_a 186; // reference com/josh/vku2f/Utf8Strings.UTF8_UV sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L81; L80: getfield_a_this 8; // reference com/josh/vku2f/AuthenticatorMakeCredential.options sconst_1; aload_1; invokevirtual 160; // readBoolean()Z bastore; goto L86; L81: aload_3; sconst_0; getstatic_a 286; // reference com/josh/vku2f/Utf8Strings.UTF8_RK sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L83; L82: aload_1; invokevirtual 160; // readBoolean()Z pop; goto L86; L83: aload_3; sconst_0; getstatic_a 159; // reference com/josh/vku2f/Utf8Strings.UTF8_UP sconst_0; sconst_2; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L85; L84: bspush 44; invokestatic 128; // javacard/framework/UserException.throwIt(S)V goto L87; L85: aload_1; invokevirtual 189; // skipEntry()S pop; L86: sinc 9 1; goto L78; L87: goto L92; L88: aload_1; invokevirtual 280; // getMajorType()B sconst_5; if_scmpeq L90; L89: bspush 17; invokestatic 128; // javacard/framework/UserException.throwIt(S)V goto L92; L90: aload_1; invokevirtual 189; // skipEntry()S pop; goto L92; L91: aload_1; invokevirtual 189; // skipEntry()S pop; L92: sinc 6 1; goto_w L11; L93: getfield_a_this 9; // reference com/josh/vku2f/AuthenticatorMakeCredential.dataHash ifnull L97; L94: getfield_a_this 10; // reference com/josh/vku2f/AuthenticatorMakeCredential.rp ifnull L97; L95: getfield_a_this 11; // reference com/josh/vku2f/AuthenticatorMakeCredential.user ifnull L97; L96: getfield_a_this 12; // reference com/josh/vku2f/AuthenticatorMakeCredential.params ifnonnull L98; L97: bspush 20; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L98: return; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 358; L4 L5 L6 358; L7 L8 L9 358; } } .method public getUser()Lcom/josh/vku2f/PublicKeyCredentialUserEntity; 1 { .stack 1; .locals 0; L0: getfield_a_this 11; // reference com/josh/vku2f/AuthenticatorMakeCredential.user areturn; } .method public getRp()Lcom/josh/vku2f/PublicKeyCredentialRpEntity; 2 { .stack 1; .locals 0; L0: getfield_a_this 10; // reference com/josh/vku2f/AuthenticatorMakeCredential.rp areturn; } .method public isResident()Z 3 { .stack 2; .locals 0; L0: getfield_a_this 8; // reference com/josh/vku2f/AuthenticatorMakeCredential.options sconst_0; baload; sreturn; } .method public getAlgorithm()B 4 { .stack 1; .locals 0; L0: getfield_a_this 12; // reference com/josh/vku2f/AuthenticatorMakeCredential.params invokevirtual 287; // getAlgorithm()B sreturn; } .method public isExclude()Z 5 { .stack 1; .locals 0; L0: getfield_a_this 13; // reference com/josh/vku2f/AuthenticatorMakeCredential.exclude ifnull L3; L1: getfield_a_this 13; // reference com/josh/vku2f/AuthenticatorMakeCredential.exclude arraylength; ifle L3; L2: sconst_1; goto L4; L3: sconst_0; L4: sreturn; } .method public getDataHash([BS)S 6 { .stack 5; .locals 0; L0: getfield_a_this 9; // reference com/josh/vku2f/AuthenticatorMakeCredential.dataHash sconst_0; aload_1; sload_2; getfield_a_this 9; // reference com/josh/vku2f/AuthenticatorMakeCredential.dataHash arraylength; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 9; // reference com/josh/vku2f/AuthenticatorMakeCredential.dataHash arraylength; sreturn; } } .class public abstract CBORBase 3 extends 0.0 { // extends java/lang/Object .fields { protected short[] mStatusWords 0; // [S protected byte[] mBuffer 1; // [B protected static final byte MAJOR_TYPE_MASK = 7; // B protected static final byte ADDINFO_MASK = 31; // B public static final byte TYPE_UNSIGNED_INTEGER = 0; // B public static final byte TYPE_NEGATIVE_INTEGER = 1; // B public static final byte TYPE_BYTE_STRING = 2; // B public static final byte TYPE_TEXT_STRING = 3; // B public static final byte TYPE_ARRAY = 4; // B public static final byte TYPE_MAP = 5; // B public static final byte TYPE_TAG = 6; // B public static final byte TYPE_FLOAT = 7; // B protected static final byte ENCODED_ONE_BYTE = 24; // B protected static final byte ENCODED_TWO_BYTES = 25; // B protected static final byte ENCODED_FOUR_BYTES = 26; // B protected static final byte ENCODED_EIGHT_BYTES = 27; // B protected static final byte ENCODED_FALSE = -12; // B protected static final byte ENCODED_TRUE = -11; // B protected static final byte ENCODED_NULL = -10; // B protected static final byte ENCODED_UNDEFINED = -9; // B protected static final byte ENCODED_BREAK = -1; // B public static final byte INVALID_INPUT = -1; // B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; init(SS)V; init([BSS)V; reset()V; getCurrentOffset()S; getBufferLength()S; getCurrentOffsetAndIncrease(S)S; increaseOffset(S)S; getRawByte()B; getBuffer()[B; } .packageMethodTable 0 { } .method public final init(SS)V 1 { .stack 4; .locals 0; L0: aconst_null; putfield_a_this 14; // reference com/josh/vku2f/CBORBase.mBuffer getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; sload_1; sastore; getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_1; sload_1; sload_2; sadd; sastore; return; } .method public final init([BSS)V 2 { .stack 4; .locals 0; L0: aload_1; invokestatic 290; // javacard/framework/APDU.getCurrentAPDUBuffer()[B if_acmpeq L2; L1: aload_1; putfield_a_this 14; // reference com/josh/vku2f/CBORBase.mBuffer goto L3; L2: aconst_null; putfield_a_this 14; // reference com/josh/vku2f/CBORBase.mBuffer L3: getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; sload_2; sastore; getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_1; sload_2; sload_3; sadd; sastore; return; } .method public final reset()V 3 { .stack 3; .locals 0; L0: aconst_null; putfield_a_this 14; // reference com/josh/vku2f/CBORBase.mBuffer getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; sconst_0; sastore; getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_1; sconst_0; sastore; return; } .method public final getCurrentOffset()S 4 { .stack 2; .locals 0; L0: getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; saload; sreturn; } .method public final getBufferLength()S 5 { .stack 2; .locals 0; L0: getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_1; saload; sreturn; } .method protected final getCurrentOffsetAndIncrease(S)S 6 { .stack 2; .locals 1; L0: getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; saload; sstore_2; aload_0; sload_1; invokevirtual 291; // increaseOffset(S)S pop; sload_2; sreturn; } .method protected final increaseOffset(S)S 7 { .stack 4; .locals 0; L0: aload_0; invokevirtual 292; // getCurrentOffset()S sload_1; sadd; aload_0; invokevirtual 294; // getBufferLength()S if_scmpgt L2; L1: sload_1; ifge L3; L2: sspush 26368; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L3: getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; dup2; saload; sload_1; sadd; sastore; getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; saload; sreturn; } .method protected <init>()V 0 { .stack 3; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; sconst_2; sconst_1; invokestatic 359; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S putfield_a 15; // reference com/josh/vku2f/CBORBase.mStatusWords return; } .method protected getRawByte()B 8 { .stack 3; .locals 0; L0: aload_0; invokevirtual 300; // getBuffer()[B getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; saload; baload; sreturn; } .method protected getBuffer()[B 9 { .stack 1; .locals 0; L0: getfield_a_this 14; // reference com/josh/vku2f/CBORBase.mBuffer ifnonnull L2; L1: invokestatic 290; // javacard/framework/APDU.getCurrentAPDUBuffer()[B areturn; L2: getfield_a_this 14; // reference com/josh/vku2f/CBORBase.mBuffer areturn; } } .class public CBORDecoder 4 extends CBORBase { .publicMethodTable 10 { equals(Ljava/lang/Object;)Z; init(SS)V; init([BSS)V; reset()V; getCurrentOffset()S; getBufferLength()S; getCurrentOffsetAndIncrease(S)S; increaseOffset(S)S; getRawByte()B; getBuffer()[B; getMajorType()B; getIntegerSize()B; skipEntry()S; readMajorType(B)S; readInt8()B; readInt16()S; readInt32([BS)V; readInt64([BS)V; readEncodedInteger([BS)S; readLength()S; readBoolean()Z; readByteString([BS)S; readTextString([BS)S; readRawByteArray([BSS)S; readRawByte()B; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 301; // com/josh/vku2f/CBORBase.<init>()V return; } .method public getMajorType()B 10 { .stack 2; .locals 0; L0: aload_0; invokevirtual 302; // getRawByte()B sconst_5; sushr; bspush 7; sand; s2b; sreturn; } .method public getIntegerSize()B 11 { .stack 2; .locals 1; L0: aload_0; invokevirtual 302; // getRawByte()B bspush 31; sand; sstore_1; sload_1; bspush 24; if_scmpgt L2; L1: sconst_1; sreturn; L2: sload_1; bspush 25; if_scmpne L4; L3: sconst_2; sreturn; L4: sload_1; bspush 26; if_scmpne L6; L5: sconst_4; sreturn; L6: sload_1; bspush 27; if_scmpne L8; L7: bspush 8; sreturn; L8: sconst_m1; sreturn; } .method public skipEntry()S 12 { .stack 3; .locals 3; L0: sconst_1; sstore_1; aload_0; invokevirtual 280; // getMajorType()B stableswitch L10 0 7 L1 L1 L4 L4 L6 L5 L10 L10; L1: aload_0; invokevirtual 303; // getIntegerSize()B sstore_2; sload_2; sconst_1; if_scmpne L3; L2: aload_0; invokevirtual 115; // readInt8()B pop; goto L10; L3: aload_0; sconst_1; sload_2; sadd; invokevirtual 304; // increaseOffset(S)S pop; goto L10; L4: aload_0; aload_0; invokevirtual 305; // readLength()S invokevirtual 304; // increaseOffset(S)S pop; goto L10; L5: sconst_2; sstore_1; L6: sload_1; aload_0; invokevirtual 305; // readLength()S smul; sstore_1; sconst_0; sstore_3; L7: sload_3; sload_1; if_scmpge L9; L8: aload_0; invokevirtual 189; // skipEntry()S pop; sinc 3 1; goto L7; L9: goto L10; L10: aload_0; invokevirtual 306; // getCurrentOffset()S sreturn; } .method public readMajorType(B)S 13 { .stack 2; .locals 0; L0: sload_1; aload_0; invokevirtual 280; // getMajorType()B if_scmpeq L2; L1: bspush 17; invokestatic 128; // javacard/framework/UserException.throwIt(S)V sconst_0; sreturn; L2: aload_0; invokevirtual 305; // readLength()S sreturn; } .method public readInt8()B 14 { .stack 2; .locals 1; L0: aload_0; invokevirtual 313; // readRawByte()B bspush 31; sand; sstore_1; sload_1; bspush 24; if_scmpge L2; L1: sload_1; sreturn; L2: sload_1; bspush 24; if_scmpne L4; L3: aload_0; invokevirtual 313; // readRawByte()B sspush 255; sand; s2b; sreturn; L4: sspush 27012; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V sconst_0; sreturn; } .method public readInt16()S 15 { .stack 3; .locals 1; L0: aload_0; invokevirtual 313; // readRawByte()B bspush 31; sand; sstore_1; sload_1; bspush 25; if_scmpne L2; L1: aload_0; invokevirtual 315; // getBuffer()[B aload_0; sconst_2; invokevirtual 316; // getCurrentOffsetAndIncrease(S)S invokestatic 317; // javacard/framework/Util.getShort([BS)S sreturn; L2: sspush 27012; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V sconst_0; sreturn; } .method public readInt32([BS)V 16 { .stack 5; .locals 1; L0: aload_0; invokevirtual 313; // readRawByte()B bspush 31; sand; sstore_3; sload_3; bspush 26; if_scmpne L2; L1: aload_0; invokevirtual 315; // getBuffer()[B aload_0; sconst_4; invokevirtual 316; // getCurrentOffsetAndIncrease(S)S aload_1; sload_2; sconst_4; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; goto L3; L2: sspush 27012; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L3: return; } .method public readInt64([BS)V 17 { .stack 5; .locals 1; L0: aload_0; invokevirtual 313; // readRawByte()B bspush 31; sand; sstore_3; sload_3; bspush 27; if_scmpne L2; L1: aload_0; invokevirtual 315; // getBuffer()[B aload_0; bspush 8; invokevirtual 316; // getCurrentOffsetAndIncrease(S)S aload_1; sload_2; bspush 8; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; goto L3; L2: sspush 27012; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L3: return; } .method public readEncodedInteger([BS)S 18 { .stack 5; .locals 1; L0: aload_0; invokevirtual 303; // getIntegerSize()B sstore_3; sload_3; sconst_1; if_scmpne L2; L1: aload_1; sload_2; aload_0; invokevirtual 115; // readInt8()B bastore; goto L3; L2: aload_0; invokevirtual 315; // getBuffer()[B aload_0; sconst_1; sload_3; sadd; invokevirtual 316; // getCurrentOffsetAndIncrease(S)S aload_1; sload_2; sload_3; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; L3: sload_3; sspush 255; sand; sreturn; } .method public readLength()S 19 { .stack 2; .locals 2; L0: aload_0; invokevirtual 303; // getIntegerSize()B sstore_1; sconst_0; sstore_2; sload_1; sconst_1; if_scmpne L2; L1: aload_0; invokevirtual 115; // readInt8()B sspush 255; sand; sstore_2; goto L5; L2: sload_1; sconst_2; if_scmpne L4; L3: aload_0; invokevirtual 331; // readInt16()S sstore_2; goto L5; L4: sspush 27012; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L5: sload_2; sreturn; } .method public readBoolean()Z 20 { .stack 2; .locals 1; L0: aload_0; invokevirtual 313; // readRawByte()B sstore_1; sload_1; bspush -11; if_scmpne L2; L1: sconst_1; sreturn; L2: sload_1; bspush -12; if_scmpne L4; L3: sconst_0; sreturn; L4: sspush 27012; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V sconst_1; sreturn; } .method public readByteString([BS)S 21 { .stack 4; .locals 1; L0: aload_0; invokevirtual 280; // getMajorType()B sconst_2; if_scmpeq L2; L1: bspush 17; invokestatic 128; // javacard/framework/UserException.throwIt(S)V sconst_0; sreturn; L2: aload_0; invokevirtual 305; // readLength()S sstore_3; aload_0; aload_1; sload_2; sload_3; invokevirtual 332; // readRawByteArray([BSS)S sreturn; } .method public readTextString([BS)S 22 { .stack 4; .locals 1; L0: aload_0; invokevirtual 280; // getMajorType()B sconst_3; if_scmpeq L2; L1: bspush 17; invokestatic 128; // javacard/framework/UserException.throwIt(S)V sconst_0; sreturn; L2: aload_0; invokevirtual 305; // readLength()S sstore_3; aload_0; aload_1; sload_2; sload_3; invokevirtual 332; // readRawByteArray([BSS)S sreturn; } .method public readRawByteArray([BSS)S 23 { .stack 5; .locals 0; L0: sload_3; aload_1; arraylength; if_scmpgt L2; L1: sload_3; aload_0; invokevirtual 306; // getCurrentOffset()S sadd; aload_0; invokevirtual 334; // getBufferLength()S if_scmple L3; L2: sspush 26368; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L3: aload_0; invokevirtual 315; // getBuffer()[B aload_0; invokevirtual 306; // getCurrentOffset()S aload_1; sload_2; sload_3; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S sstore_3; aload_0; sload_3; invokevirtual 304; // increaseOffset(S)S pop; sload_3; sreturn; } .method public readRawByte()B 24 { .stack 6; .locals 0; L0: aload_0; invokevirtual 315; // getBuffer()[B getfield_a_this 15; // reference com/josh/vku2f/CBORBase.mStatusWords sconst_0; dup2; saload; dup_x 19; sconst_1; sadd; sastore; baload; sreturn; } } .class public CBOREncoder 5 extends CBORBase { .publicMethodTable 10 { equals(Ljava/lang/Object;)Z; init(SS)V; init([BSS)V; reset()V; getCurrentOffset()S; getBufferLength()S; getCurrentOffsetAndIncrease(S)S; increaseOffset(S)S; getRawByte()B; getBuffer()[B; writeRawByte(B)S; startArray(S)S; startMap(S)S; startByteString(S)S; startTextString(S)S; encodeByteString([BSS)S; encodeTextString([BSS)S; encodeUInt8(B)S; encodeNegativeUInt8(B)S; encodeNegativeUInt16(S)S; encodeUInt16(S)S; encodeUInt32([BS)S; encodeUInt64([BS)S; encodeBoolean(Z)S; } .packageMethodTable 0 { } .method private final encodeValue(BS)S { .stack 3; .locals 0; L0: sload_2; bspush 24; invokestatic 335; // com/josh/vku2f/ICUtil.isLessThanAsUnsignedShort(SS)Z ifeq L2; L1: aload_0; sload_1; sload_2; sor; s2b; invokevirtual 336; // writeRawByte(B)S sreturn; L2: sload_2; sspush 256; invokestatic 335; // com/josh/vku2f/ICUtil.isLessThanAsUnsignedShort(SS)Z ifeq L4; L3: aload_0; sload_1; sload_2; s2b; invokespecial 337; // com/josh/vku2f/CBOREncoder.writeUInt8(BB)S sreturn; L4: aload_0; sload_1; sload_2; invokespecial 338; // com/josh/vku2f/CBOREncoder.writeUInt16(BS)S sreturn; } .method private final writeUInt8(BB)S { .stack 3; .locals 0; L0: aload_0; sload_1; bspush 24; sor; invokevirtual 336; // writeRawByte(B)S pop; aload_0; sload_2; invokevirtual 336; // writeRawByte(B)S pop; sconst_2; sreturn; } .method private final writeUInt16(BS)S { .stack 3; .locals 0; L0: aload_0; sload_1; bspush 25; sor; invokevirtual 336; // writeRawByte(B)S pop; aload_0; sload_2; invokespecial 339; // com/josh/vku2f/CBOREncoder.writeRawShort(S)S pop; sconst_3; sreturn; } .method public final writeRawByte(B)S 10 { .stack 3; .locals 0; L0: aload_0; invokevirtual 340; // getBuffer()[B aload_0; invokevirtual 341; // getCurrentOffset()S sload_1; bastore; aload_0; sconst_1; invokevirtual 342; // increaseOffset(S)S pop; sconst_1; sreturn; } .method private final writeRawShort(S)S { .stack 3; .locals 0; L0: aload_0; invokevirtual 340; // getBuffer()[B aload_0; invokevirtual 341; // getCurrentOffset()S sload_1; invokestatic 343; // javacard/framework/Util.setShort([BSS)S pop; aload_0; sconst_2; invokevirtual 342; // increaseOffset(S)S pop; sconst_2; sreturn; } .method private final writeRawByteArray([BSS)S { .stack 5; .locals 1; L0: sload_3; aload_1; arraylength; sload_2; sadd; if_scmpgt L2; L1: sload_3; aload_0; invokevirtual 341; // getCurrentOffset()S sadd; aload_0; invokevirtual 344; // getBufferLength()S if_scmple L3; L2: sspush 26368; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L3: aload_0; invokevirtual 341; // getCurrentOffset()S sstore 4; aload_1; sload_2; aload_0; invokevirtual 340; // getBuffer()[B sload 4; sload_3; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S sload 4; ssub; sstore_3; aload_0; sload_3; invokevirtual 342; // increaseOffset(S)S pop; sload_3; sreturn; } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 301; // com/josh/vku2f/CBORBase.<init>()V return; } .method public startArray(S)S 11 { .stack 3; .locals 0; L0: aload_0; bspush -128; sload_1; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S pop; aload_0; invokevirtual 341; // getCurrentOffset()S sreturn; } .method public startMap(S)S 12 { .stack 3; .locals 0; L0: aload_0; bspush -96; sload_1; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S pop; aload_0; invokevirtual 341; // getCurrentOffset()S sreturn; } .method public startByteString(S)S 13 { .stack 3; .locals 0; L0: aload_0; bspush 64; sload_1; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S pop; aload_0; sload_1; invokevirtual 346; // getCurrentOffsetAndIncrease(S)S sreturn; } .method public startTextString(S)S 14 { .stack 3; .locals 0; L0: aload_0; bspush 96; sload_1; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S pop; aload_0; sload_1; invokevirtual 346; // getCurrentOffsetAndIncrease(S)S sreturn; } .method public encodeByteString([BSS)S 15 { .stack 5; .locals 1; L0: aload_0; bspush 64; sload_3; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S sstore 4; sload 4; aload_0; aload_1; sload_2; sload_3; invokespecial 348; // com/josh/vku2f/CBOREncoder.writeRawByteArray([BSS)S sadd; sstore 4; sload 4; sreturn; } .method public encodeTextString([BSS)S 16 { .stack 5; .locals 1; L0: aload_0; bspush 96; sload_3; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S sstore 4; sload 4; aload_0; aload_1; sload_2; sload_3; invokespecial 348; // com/josh/vku2f/CBOREncoder.writeRawByteArray([BSS)S sadd; sstore 4; sload 4; sreturn; } .method public encodeUInt8(B)S 17 { .stack 4; .locals 0; L0: aload_0; sconst_0; sload_1; sspush 255; sand; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S sreturn; } .method public encodeNegativeUInt8(B)S 18 { .stack 4; .locals 0; L0: aload_0; bspush 32; sload_1; sspush 255; sand; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S sreturn; } .method public encodeNegativeUInt16(S)S 19 { .stack 3; .locals 0; L0: aload_0; bspush 32; sload_1; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S sreturn; } .method public encodeUInt16(S)S 20 { .stack 3; .locals 0; L0: aload_0; sconst_0; sload_1; invokespecial 345; // com/josh/vku2f/CBOREncoder.encodeValue(BS)S sreturn; } .method public encodeUInt32([BS)S 21 { .stack 4; .locals 0; L0: aload_0; bspush 26; invokevirtual 336; // writeRawByte(B)S pop; aload_0; aload_1; sload_2; sconst_4; invokespecial 348; // com/josh/vku2f/CBOREncoder.writeRawByteArray([BSS)S sconst_1; sadd; sreturn; } .method public encodeUInt64([BS)S 22 { .stack 4; .locals 0; L0: aload_0; bspush 27; invokevirtual 336; // writeRawByte(B)S pop; aload_0; aload_1; sload_2; bspush 8; invokespecial 348; // com/josh/vku2f/CBOREncoder.writeRawByteArray([BSS)S sconst_1; sadd; sreturn; } .method public encodeBoolean(Z)S 23 { .stack 2; .locals 0; L0: sload_1; ifeq L2; L1: aload_0; bspush -11; invokevirtual 336; // writeRawByte(B)S sreturn; L2: aload_0; bspush -12; invokevirtual 336; // writeRawByte(B)S sreturn; } } .class public COSEKey 6 extends 0.0 { // extends java/lang/Object .fields { private byte[] w 0; // [B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; setW([B)V; getW()[B; encode(Lcom/josh/vku2f/CBOREncoder;)V; } .packageMethodTable 0 { } .method <init>()V { .stack 2; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; bspush 64; newarray 11; putfield_a 16; // reference com/josh/vku2f/COSEKey.w return; } .method public setW([B)V 1 { .stack 2; .locals 0; L0: aload_1; putfield_a_this 16; // reference com/josh/vku2f/COSEKey.w return; } .method public getW()[B 2 { .stack 1; .locals 0; L0: getfield_a_this 16; // reference com/josh/vku2f/COSEKey.w areturn; } .method public encode(Lcom/josh/vku2f/CBOREncoder;)V 3 { .stack 0; .locals 0; L0: return; } } .class public CTAP2 7 extends 2.3 { // extends javacard/framework/Applet .fields { public final IDSecret idSecret 0; // Lcom/josh/vku2f/IDSecret; private byte[] dataBuffer 1; // [B private byte[] scratch 2; // [B private final short[] tempVars 3; // [S private final short[] chainRam 4; // [S private final short[] outChainRam 5; // [S private final boolean[] isChaining 6; // [Z private final boolean[] isOutChaining 7; // [Z private final short[] nextAssertion 8; // [S private byte[] fidoInfo 9; // [B private final CBORDecoder cborDecoder 10; // Lcom/josh/vku2f/CBORDecoder; private final CBOREncoder cborEncoder 11; // Lcom/josh/vku2f/CBOREncoder; private final 1.11 sha256MessageDigest 12; // Ljavacard/security/MessageDigest; private final AttestationKeyPair attestationKeyPair 13; // Lcom/josh/vku2f/AttestationKeyPair; private CredentialArray credentialArray 14; // Lcom/josh/vku2f/CredentialArray; private AuthenticatorMakeCredential authenticatorMakeCredential 15; // Lcom/josh/vku2f/AuthenticatorMakeCredential; private AuthenticatorGetAssertion authenticatorGetAssertion 16; // Lcom/josh/vku2f/AuthenticatorGetAssertion; private StoredCredential tempCredential 17; // Lcom/josh/vku2f/StoredCredential; private StoredCredential[] assertionCredentials 18; // [Lcom/josh/vku2f/StoredCredential; private final ClientPINCommand clientPINCommand 19; // Lcom/josh/vku2f/ClientPINCommand; private PinUvAuthProtocolOne pinUvAuthProtocolOne 20; // Lcom/josh/vku2f/PinUvAuthProtocolOne; private boolean personalizeComplete 21; // Z private final byte MAX_PIN_RETRIES 22; // B private final byte MAX_UV_RETRIES 23; // B private byte pinRetries 24; // B private byte uvRetries 25; // B public static final byte ISO_INS_GET_DATA = -64; // B public static final byte FIDO2_INS_NFCCTAP_MSG = 16; // B public static final byte FIDO2_INS_DESELECT = 18; // B public static final byte FIDO2_AUTHENTICATOR_MAKE_CREDENTIAL = 1; // B public static final byte FIDO2_AUTHENTICATOR_GET_ASSERTION = 2; // B public static final byte FIDO2_AUTHENTICATOR_GET_NEXT_ASSERTION = 8; // B public static final byte FIDO2_AUTHENTICATOR_GET_INFO = 4; // B public static final byte FIDO2_AUTHENTICATOR_CLIENT_PIN = 6; // B public static final byte FIDO2_AUTHENTICATOR_RESET = 7; // B public static final byte FIDO2_VENDOR_ATTEST_SIGN = 65; // B public static final byte FIDO2_VENDOR_ATTEST_LOADCERT = 66; // B public static final byte FIDO2_VENDOR_PERSO_COMPLETE = 67; // B public static final byte FIDO2_VENDOR_ATTEST_GETPUB = 68; // B public static final byte FIDO2_VENDOR_GET_CREDENTIAL_COUNT = 69; // B public static final byte FIDO2_VENDOR_ATTEST_GETCERT = 74; // B public static final byte ID_SECRET_GET_PUKX_RX = 80; // B public static final byte ID_SECRET_GET_CX = 81; // B public static final byte ID_SECRET_GET_PUKX_CX = 82; // B public static final byte ID_SECRET_DUMP_ALL = 95; // B public static final byte[] aaguid 0 = {116,101,115,116,103,117,105,100,-1,0,0,0,0,0,0,0}; // [B } .publicMethodTable 7 { equals(Ljava/lang/Object;)Z; register()V; register([BSB)V; selectingApplet()Z; deselect()V; getShareableInterfaceObject(Ljavacard/framework/AID;B)Ljavacard/framework/Shareable;; select()Z; process(Ljavacard/framework/APDU;)V; attestSignRaw(Ljavacard/framework/APDU;S)V; attestSetCert(Ljavacard/framework/APDU;S)V; authMakeCredential(Ljavacard/framework/APDU;S)V; authGetAssertion(Ljavacard/framework/APDU;S)V; clientPin(Ljavacard/framework/APDU;S)V; returnError(Ljavacard/framework/APDU;B)V; returnError(Ljavacard/framework/APDU;S)V; getData(Ljavacard/framework/APDU;)V; sendLongChaining(Ljavacard/framework/APDU;S)V; } .packageMethodTable 0 { } .implementedInterfaceInfoTable { .interface 3.0 { // javacardx/apdu/ExtendedLength } } .method private <init>()V { .stack 4; .locals 2; L0: aload_0; invokespecial 356; // javacard/framework/Applet.<init>()V bspush 8; putfield_b_this 17; // byte com/josh/vku2f/CTAP2.MAX_PIN_RETRIES bspush 8; putfield_b_this 18; // byte com/josh/vku2f/CTAP2.MAX_UV_RETRIES L1: aload_0; sspush 1210; sconst_2; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B putfield_a 19; // reference com/josh/vku2f/CTAP2.dataBuffer L2: goto L4; L3: astore_1; aload_0; sspush 1210; newarray 11; putfield_a 19; // reference com/josh/vku2f/CTAP2.dataBuffer L4: aload_0; sspush 512; sconst_2; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B putfield_a 20; // reference com/josh/vku2f/CTAP2.scratch L5: goto L7; L6: astore_1; aload_0; sspush 512; newarray 11; putfield_a 20; // reference com/josh/vku2f/CTAP2.scratch L7: aload_0; bspush 8; sconst_2; invokestatic 359; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S putfield_a 21; // reference com/josh/vku2f/CTAP2.tempVars aload_0; new 368; // com/josh/vku2f/CBORDecoder dup; invokespecial 372; // com/josh/vku2f/CBORDecoder.<init>()V putfield_a 22; // reference com/josh/vku2f/CTAP2.cborDecoder aload_0; new 113; // com/josh/vku2f/CBOREncoder dup; invokespecial 114; // com/josh/vku2f/CBOREncoder.<init>()V putfield_a 23; // reference com/josh/vku2f/CTAP2.cborEncoder aload_0; new 116; // com/josh/vku2f/CredentialArray dup; sconst_5; invokespecial 117; // com/josh/vku2f/CredentialArray.<init>(S)V putfield_a 24; // reference com/josh/vku2f/CTAP2.credentialArray aload_0; sconst_4; sconst_0; invokestatic 119; // javacard/security/MessageDigest.getInstance(BZ)Ljavacard/security/MessageDigest; putfield_a 25; // reference com/josh/vku2f/CTAP2.sha256MessageDigest aload_0; new 121; // com/josh/vku2f/AttestationKeyPair dup; invokespecial 122; // com/josh/vku2f/AttestationKeyPair.<init>()V putfield_a 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair aload_0; sconst_1; sconst_1; invokestatic 359; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S putfield_a 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; putfield_b_this 28; // boolean com/josh/vku2f/CTAP2.personalizeComplete aload_0; sconst_2; sconst_2; invokestatic 126; // javacard/framework/JCSystem.makeTransientBooleanArray(SB)[Z putfield_a 29; // reference com/josh/vku2f/CTAP2.isChaining aload_0; sconst_4; sconst_2; invokestatic 359; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S putfield_a 30; // reference com/josh/vku2f/CTAP2.chainRam aload_0; sconst_4; sconst_2; invokestatic 359; // javacard/framework/JCSystem.makeTransientShortArray(SB)[S putfield_a 31; // reference com/josh/vku2f/CTAP2.outChainRam aload_0; sconst_2; sconst_2; invokestatic 126; // javacard/framework/JCSystem.makeTransientBooleanArray(SB)[Z putfield_a 32; // reference com/josh/vku2f/CTAP2.isOutChaining bspush 7; sconst_1; sspush 256; sconst_0; invokestatic 131; // javacard/security/KeyBuilder.buildKey(BBSZ)Ljavacard/security/Key; checkcast 0 357; // T_CLASSORINTERFACE javacard/security/ECPublicKey astore_1; bspush 8; sconst_1; sspush 256; sconst_0; invokestatic 131; // javacard/security/KeyBuilder.buildKey(BBSZ)Ljavacard/security/Key; checkcast 0 132; // T_CLASSORINTERFACE javacard/security/ECPrivateKey astore_2; aload_0; new 133; // com/josh/vku2f/ClientPINCommand dup; invokespecial 134; // com/josh/vku2f/ClientPINCommand.<init>()V putfield_a 33; // reference com/josh/vku2f/CTAP2.clientPINCommand aload_0; new 136; // com/josh/vku2f/IDSecret dup; invokespecial 137; // com/josh/vku2f/IDSecret.<init>()V putfield_a 34; // reference com/josh/vku2f/CTAP2.idSecret return; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 358; L4 L5 L6 358; } } .method public static install([BSB)V 0 { .stack 5; .locals 3; L0: sload_1; sstore_3; sload_3; aload_0; sload_3; baload; sconst_1; sadd; sadd; sstore_3; sload_3; aload_0; sload_3; baload; sconst_1; sadd; sadd; sstore_3; new 139; // com/josh/vku2f/CTAP2 dup; invokespecial 140; // com/josh/vku2f/CTAP2.<init>()V astore 4; L1: aload 4; aload_0; sload_1; sconst_1; sadd; aload_0; sload_1; baload; invokevirtual 141; // register([BSB)V L2: goto L4; L3: astore 5; aload 4; invokevirtual 142; // register()V L4: return; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 358; } } .method public process(Ljavacard/framework/APDU;)V 7 { .stack 5; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_1; invokevirtual 143; // getBuffer()[B astore_2; aload_0; invokevirtual 144; // selectingApplet()Z ifeq L2; L1: getstatic_a 145; // reference com/josh/vku2f/Utf8Strings.UTF8_FIDO2 sconst_0; aload_2; sconst_0; getstatic_a 145; // reference com/josh/vku2f/Utf8Strings.UTF8_FIDO2 arraylength; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; aload_1; sconst_0; getstatic_a 145; // reference com/josh/vku2f/Utf8Strings.UTF8_FIDO2 arraylength; invokevirtual 146; // setOutgoingAndSend(SS)V return; L2: aload_1; invokevirtual 147; // isCommandChainingCLA()Z ifne L5; L3: aload_1; invokevirtual 148; // isISOInterindustryCLA()Z ifeq L5; L4: sspush 28160; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L5: invokestatic 149; // javacard/framework/JCSystem.requestObjectDeletion()V aload_2; sconst_1; baload; slookupswitch L11 3 -64 L6 16 L9 18 L10; L6: getfield_a_this 32; // reference com/josh/vku2f/CTAP2.isOutChaining sconst_0; baload; ifeq L8; L7: aload_0; aload_1; invokevirtual 150; // getData(Ljavacard/framework/APDU;)V goto L12; L8: sspush 27013; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V goto L12; L9: aload_0; aload_1; invokespecial 151; // com/josh/vku2f/CTAP2.handle(Ljavacard/framework/APDU;)V goto L12; L10: sspush -28672; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V goto L12; L11: sspush 27904; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L12: return; } .method private doApduIngestion(Ljavacard/framework/APDU;)S { .stack 8; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_1; invokevirtual 143; // getBuffer()[B astore_2; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; aload_1; invokevirtual 152; // setIncomingAndReceive()S sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; aload_1; invokevirtual 153; // getIncomingLength()S sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; sspush 1200; if_scmple L2; L1: aload_0; aload_1; bspush 57; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V sconst_0; sreturn; L2: aload_1; invokestatic 155; // com/josh/vku2f/CTAP2.isCommandChainingCLA(Ljavacard/framework/APDU;)Z ifeq L6; L3: getfield_a_this 29; // reference com/josh/vku2f/CTAP2.isChaining sconst_0; baload; ifne L5; L4: getfield_a_this 29; // reference com/josh/vku2f/CTAP2.isChaining sconst_0; sconst_1; bastore; getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_0; sconst_0; sastore; L5: getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; saload; sastore; getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_0; aload_2; aload_1; invokevirtual 156; // getOffsetCdata()S getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_0; saload; getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_1; saload; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S sastore; sconst_0; sreturn; L6: getfield_a_this 29; // reference com/josh/vku2f/CTAP2.isChaining sconst_0; baload; ifeq L8; L7: getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; saload; sastore; getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_0; aload_2; aload_1; invokevirtual 156; // getOffsetCdata()S getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_0; saload; getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_1; saload; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S sastore; getfield_a_this 29; // reference com/josh/vku2f/CTAP2.isChaining sconst_0; sconst_0; bastore; getfield_a_this 29; // reference com/josh/vku2f/CTAP2.isChaining sconst_1; sconst_1; bastore; getfield_a_this 30; // reference com/josh/vku2f/CTAP2.chainRam sconst_0; saload; sreturn; L8: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; sconst_1; if_scmpne L10; L9: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; aload_2; aload_1; invokevirtual 156; // getOffsetCdata()S baload; bastore; sconst_1; sreturn; L10: aload_1; invokevirtual 157; // getCurrentState()B sconst_2; if_scmpne L12; L11: aload_2; aload_1; invokevirtual 156; // getOffsetCdata()S getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; saload; sreturn; L12: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; saload; sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; sconst_0; sastore; L13: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; ifle L15; L14: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; aload_2; aload_1; invokevirtual 156; // getOffsetCdata()S getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; saload; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; saload; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; dup2; saload; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; saload; ssub; sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; aload_1; aload_1; invokevirtual 156; // getOffsetCdata()S invokevirtual 158; // receiveBytes(S)S sastore; goto L13; L15: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_4; saload; sreturn; } .method private handle(Ljavacard/framework/APDU;)V { .stack 4; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_1; invokevirtual 143; // getBuffer()[B astore_2; aconst_null; putfield_a_this 35; // reference com/josh/vku2f/CTAP2.tempCredential aconst_null; putfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; aload_0; aload_1; invokespecial 161; // com/josh/vku2f/CTAP2.doApduIngestion(Ljavacard/framework/APDU;)S sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; ifne L2; L1: sspush -28672; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V return; L2: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; baload; slookupswitch L19 16 1 L3 2 L4 4 L5 6 L6 7 L7 8 L8 65 L9 66 L10 67 L11 68 L12 69 L13 74 L18 80 L14 81 L15 82 L16 95 L17; L3: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokevirtual 162; // authMakeCredential(Ljavacard/framework/APDU;S)V goto_w L20; L4: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokevirtual 163; // authGetAssertion(Ljavacard/framework/APDU;S)V goto_w L20; L5: aload_0; aload_1; invokespecial 164; // com/josh/vku2f/CTAP2.authGetInfo(Ljavacard/framework/APDU;)V goto_w L20; L6: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokevirtual 165; // clientPin(Ljavacard/framework/APDU;S)V goto L20; L7: aload_0; aload_1; invokespecial 166; // com/josh/vku2f/CTAP2.doReset(Ljavacard/framework/APDU;)V goto L20; L8: aload_0; aload_1; aload_2; invokespecial 167; // com/josh/vku2f/CTAP2.authGetNextAssertion(Ljavacard/framework/APDU;[B)V goto L20; L9: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokevirtual 168; // attestSignRaw(Ljavacard/framework/APDU;S)V goto L20; L10: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokevirtual 169; // attestSetCert(Ljavacard/framework/APDU;S)V goto L20; L11: aload_0; aload_1; invokespecial 170; // com/josh/vku2f/CTAP2.personalizationComplete(Ljavacard/framework/APDU;)V goto L20; L12: aload_0; aload_1; invokespecial 171; // com/josh/vku2f/CTAP2.getAttestPublic(Ljavacard/framework/APDU;)V goto L20; L13: aload_0; aload_1; invokespecial 172; // com/josh/vku2f/CTAP2.getCredentialCount(Ljavacard/framework/APDU;)V goto L20; L14: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokespecial 173; // com/josh/vku2f/CTAP2.getPuKxRx(Ljavacard/framework/APDU;S)V goto L20; L15: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokespecial 174; // com/josh/vku2f/CTAP2.getCx(Ljavacard/framework/APDU;S)V goto L20; L16: aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokespecial 175; // com/josh/vku2f/CTAP2.getPuKxCx(Ljavacard/framework/APDU;S)V goto L20; L17: aload_0; aload_1; invokespecial 176; // com/josh/vku2f/CTAP2.dumpIDSecret(Ljavacard/framework/APDU;)V goto L20; L18: aload_0; aload_1; invokespecial 177; // com/josh/vku2f/CTAP2.getCert(Ljavacard/framework/APDU;)V goto L20; L19: aload_0; aload_1; sconst_1; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V L20: return; } .method private personalizationComplete(Ljavacard/framework/APDU;)V { .stack 3; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair invokevirtual 178; // isCertSet()Z ifeq L3; L1: getfield_b_this 28; // boolean com/josh/vku2f/CTAP2.personalizeComplete ifne L3; L2: sconst_1; putfield_b_this 28; // boolean com/josh/vku2f/CTAP2.personalizeComplete aload_0; aload_1; sconst_0; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V goto L4; L3: aload_0; aload_1; sconst_1; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V L4: return; } .method private getAttestPublic(Ljavacard/framework/APDU;)V { .stack 5; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_b_this 28; // boolean com/josh/vku2f/CTAP2.personalizeComplete ifeq L2; L1: aload_0; aload_1; sconst_1; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V return; L2: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; invokevirtual 179; // getPubkey([BS)S sconst_1; sadd; sastore; aload_1; invokevirtual 180; // setOutgoing()S pop; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 181; // setOutgoingLength(S)V aload_1; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 182; // sendBytesLong([BSS)V return; } .method private getCredentialCount(Ljavacard/framework/APDU;)V { .stack 3; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_1; invokevirtual 143; // getBuffer()[B sconst_0; getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray invokevirtual 183; // getCount()S invokestatic 343; // javacard/framework/Util.setShort([BSS)S pop; aload_1; sconst_0; sconst_2; invokevirtual 146; // setOutgoingAndSend(SS)V return; } .method private getPuKxRx(Ljavacard/framework/APDU;S)V { .stack 6; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; sload_2; sconst_1; ssub; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret new 184; // com/josh/vku2f/DomString dup; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sload_2; sconst_1; ssub; invokespecial 185; // com/josh/vku2f/DomString.<init>([BS)V putfield_a 37; // reference com/josh/vku2f/IDSecret.IDx getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sspush 1200; invokevirtual 187; // init([BSS)V getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_2; invokevirtual 188; // startArray(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a 38; // reference com/josh/vku2f/IDSecret.Rx sconst_0; invokevirtual 190; // encodeUInt32([BS)S pop; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 179; // getPubkey([BS)S sastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 191; // encodeByteString([BSS)S pop; aload_1; invokevirtual 180; // setOutgoing()S pop; aload_1; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 181; // setOutgoingLength(S)V aload_1; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 182; // sendBytesLong([BSS)V return; } .method private getCx(Ljavacard/framework/APDU;S)V { .stack 0; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: return; } .method private getPuKxCx(Ljavacard/framework/APDU;S)V { .stack 6; .locals 2; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sload_2; invokevirtual 193; // init([BSS)V L1: getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder sconst_4; invokevirtual 365; // readMajorType(B)S pop; getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 118; // readTextString([BS)S sstore_3; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret new 184; // com/josh/vku2f/DomString dup; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sload_3; invokespecial 185; // com/josh/vku2f/DomString.<init>([BS)V putfield_a 37; // reference com/josh/vku2f/IDSecret.IDx getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 123; // readByteString([BS)S pop; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 8; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a 39; // reference com/josh/vku2f/IDSecret.PuKp sconst_1; bspush 64; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; L2: goto L4; L3: astore_3; aload_0; aload_1; aload_3; invokevirtual 195; // getReason()S invokevirtual 196; // returnError(Ljavacard/framework/APDU;S)V L4: sconst_1; sconst_0; invokestatic 197; // javacard/security/KeyAgreement.getInstance(BZ)Ljavacard/security/KeyAgreement; astore_3; aload_3; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair invokevirtual 198; // getPrivate()Ljavacard/security/PrivateKey; invokevirtual 199; // init(Ljavacard/security/PrivateKey;)V aload_3; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a 39; // reference com/josh/vku2f/IDSecret.PuKp sconst_0; bspush 65; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a 40; // reference com/josh/vku2f/IDSecret.sharedSecret sconst_0; invokevirtual 201; // generateSecret([BSS[BS)S pop; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret invokevirtual 202; // initAesKey()V getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret invokevirtual 203; // encryptCx()V getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sspush 1200; invokevirtual 187; // init([BSS)V getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_2; invokevirtual 188; // startArray(S)S pop; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 179; // getPubkey([BS)S sstore 4; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; sload 4; invokevirtual 191; // encodeByteString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a 41; // reference com/josh/vku2f/IDSecret.encryptedCx sconst_0; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a 41; // reference com/josh/vku2f/IDSecret.encryptedCx arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 205; // getHMAC([BS)V aload_1; invokevirtual 180; // setOutgoing()S pop; aload_1; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 181; // setOutgoingLength(S)V aload_1; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 182; // sendBytesLong([BSS)V return; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 192; } } .method private dumpIDSecret(Ljavacard/framework/APDU;)V { .stack 5; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; getfield_a_this 34; // reference com/josh/vku2f/CTAP2.idSecret getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 206; // dump([BLcom/josh/vku2f/CBOREncoder;)S sastore; aload_1; invokevirtual 180; // setOutgoing()S pop; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 181; // setOutgoingLength(S)V aload_1; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 182; // sendBytesLong([BSS)V return; } .method public attestSignRaw(Ljavacard/framework/APDU;S)V 8 { .stack 8; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_b_this 28; // boolean com/josh/vku2f/CTAP2.personalizeComplete ifeq L2; L1: aload_0; aload_1; sconst_1; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V return; L2: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; sload_2; sconst_1; ssub; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_2; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_1; saload; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; invokevirtual 207; // sign([BSS[BS)S sastore; aload_1; invokevirtual 180; // setOutgoing()S pop; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_2; saload; sconst_1; sadd; invokevirtual 181; // setOutgoingLength(S)V aload_1; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_2; saload; sconst_1; sadd; invokevirtual 182; // sendBytesLong([BSS)V return; } .method public attestSetCert(Ljavacard/framework/APDU;S)V 9 { .stack 6; .locals 2; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_b_this 28; // boolean com/josh/vku2f/CTAP2.personalizeComplete ifeq L2; L1: aload_0; aload_1; sconst_1; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V return; L2: getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sload_2; sconst_1; ssub; invokevirtual 208; // setCert([BSS)V sconst_4; sconst_0; invokestatic 119; // javacard/security/MessageDigest.getInstance(BZ)Ljavacard/security/MessageDigest; astore_3; aload_3; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_a 2; // reference com/josh/vku2f/AttestationKeyPair.x509cert sconst_0; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_s 3; // short com/josh/vku2f/AttestationKeyPair.x509len getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_3; invokevirtual 209; // doFinal([BSS[BS)S sconst_3; sadd; sstore 4; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_s 3; // short com/josh/vku2f/AttestationKeyPair.x509len invokestatic 343; // javacard/framework/Util.setShort([BSS)S pop; aload_1; invokevirtual 180; // setOutgoing()S pop; aload_1; sload 4; invokevirtual 181; // setOutgoingLength(S)V aload_1; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sload 4; invokevirtual 182; // sendBytesLong([BSS)V return; } .method public authMakeCredential(Ljavacard/framework/APDU;S)V 10 { .stack 10; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sload_2; invokevirtual 193; // init([BSS)V L1: aload_0; new 210; // com/josh/vku2f/AuthenticatorMakeCredential dup; getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder invokespecial 211; // com/josh/vku2f/AuthenticatorMakeCredential.<init>(Lcom/josh/vku2f/CBORDecoder;)V putfield_a 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential L2: goto L4; L3: astore_3; aload_0; aload_1; aload_3; invokevirtual 195; // getReason()S invokevirtual 196; // returnError(Ljavacard/framework/APDU;S)V return; L4: getfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential invokevirtual 212; // getAlgorithm()B slookupswitch L8 3 33 L5 40 L6 44 L7; L5: aload_0; new 213; // com/josh/vku2f/StoredES256Credential dup; getfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential invokespecial 214; // com/josh/vku2f/StoredES256Credential.<init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V putfield_a 35; // reference com/josh/vku2f/CTAP2.tempCredential goto L9; L6: aload_0; new 215; // com/josh/vku2f/StoredRS256Credential dup; getfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential invokespecial 216; // com/josh/vku2f/StoredRS256Credential.<init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V putfield_a 35; // reference com/josh/vku2f/CTAP2.tempCredential goto L9; L7: aload_0; new 217; // com/josh/vku2f/StoredPS256Credential dup; getfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential invokespecial 218; // com/josh/vku2f/StoredPS256Credential.<init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V putfield_a 35; // reference com/josh/vku2f/CTAP2.tempCredential goto L9; L8: aload_0; aload_1; bspush 38; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V return; L9: getfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential invokevirtual 219; // isResident()Z ifeq_w L14; L10: getfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential invokevirtual 220; // isExclude()Z ifeq L13; L11: aload_0; getfield_a_this 36; // reference com/josh/vku2f/CTAP2.authenticatorMakeCredential getfield_a 13; // reference com/josh/vku2f/AuthenticatorMakeCredential.exclude invokespecial 221; // com/josh/vku2f/CTAP2.isPresent([Lcom/josh/vku2f/PublicKeyCredentialDescriptor;)Z ifeq L13; L12: aload_0; aload_1; bspush 25; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V return; L13: aload_0; aload_1; getfield_a_this 35; // reference com/josh/vku2f/CTAP2.tempCredential invokespecial 222; // com/josh/vku2f/CTAP2.addResident(Ljavacard/framework/APDU;Lcom/josh/vku2f/StoredCredential;)V getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sspush 1199; invokevirtual 187; // init([BSS)V getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_3; invokevirtual 223; // startMap(S)S sastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 336; // writeRawByte(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 224; // reference com/josh/vku2f/Utf8Strings.UTF8_PACKED sconst_0; bspush 6; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_2; invokevirtual 336; // writeRawByte(B)S pop; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder bspush 37; getfield_a_this 35; // reference com/josh/vku2f/CTAP2.tempCredential invokevirtual 226; // getAttestedLen()S sadd; invokevirtual 227; // startByteString(S)S sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; sastore; getfield_a_this 35; // reference com/josh/vku2f/CTAP2.tempCredential getfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 229; // getRp([BS)V getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; dup2; saload; getfield_a_this 25; // reference com/josh/vku2f/CTAP2.sha256MessageDigest getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; getfield_a_this 35; // reference com/josh/vku2f/CTAP2.tempCredential getfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity invokevirtual 230; // getRpLen()S getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 209; // doFinal([BSS[BS)S sadd; sastore; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; dup2; saload; dup_x 19; sconst_1; sadd; sastore; bspush 69; bastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; dup2; saload; getfield_a_this 35; // reference com/josh/vku2f/CTAP2.tempCredential getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 231; // readCounter([BS)S sadd; sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; dup2; saload; getfield_a_this 35; // reference com/josh/vku2f/CTAP2.tempCredential getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 232; // getAttestedData([BS)S sadd; sastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_3; invokevirtual 336; // writeRawByte(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_0; invokevirtual 223; // startMap(S)S pop; aload_0; aload_1; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 233; // sendLongChaining(Ljavacard/framework/APDU;S)V goto L15; L14: aload_0; aload_1; bspush 43; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V L15: return; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 192; } } .method public authGetAssertion(Ljavacard/framework/APDU;S)V 11 { .stack 6; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; sconst_0; sastore; getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sload_2; invokevirtual 193; // init([BSS)V L1: aload_0; new 234; // com/josh/vku2f/AuthenticatorGetAssertion dup; getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder invokespecial 235; // com/josh/vku2f/AuthenticatorGetAssertion.<init>(Lcom/josh/vku2f/CBORDecoder;)V putfield_a 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion L2: goto L4; L3: astore_3; aload_0; aload_1; aload_3; invokevirtual 195; // getReason()S invokevirtual 196; // returnError(Ljavacard/framework/APDU;S)V return; L4: aload_0; aload_0; aload_1; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion invokespecial 237; // com/josh/vku2f/CTAP2.findCredentials(Ljavacard/framework/APDU;Lcom/josh/vku2f/AuthenticatorGetAssertion;)[Lcom/josh/vku2f/StoredCredential; putfield_a 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials arraylength; ifeq L6; L5: getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials sconst_0; aaload; ifnonnull L7; L6: aload_0; aload_1; bspush 46; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V return; L7: getfield_a_this 25; // reference com/josh/vku2f/CTAP2.sha256MessageDigest getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId sconst_0; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId arraylength; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 209; // doFinal([BSS[BS)S pop; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options sconst_1; baload; ifeq L9; L8: getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 32; sconst_5; bastore; goto L10; L9: getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 32; sconst_1; bastore; L10: getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials sconst_0; aaload; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 33; invokevirtual 231; // readCounter([BS)S pop; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 37; invokevirtual 239; // getHash([BS)S pop; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sspush 1199; invokevirtual 187; // init([BSS)V getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials arraylength; sconst_1; if_scmple L12; L11: aload_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_5; invokespecial 240; // com/josh/vku2f/CTAP2.doAssertionCommon(Lcom/josh/vku2f/CBOREncoder;S)V goto L13; L12: aload_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_4; invokespecial 240; // com/josh/vku2f/CTAP2.doAssertionCommon(Lcom/josh/vku2f/CBOREncoder;S)V L13: getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; sconst_1; sastore; aload_0; aload_1; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 233; // sendLongChaining(Ljavacard/framework/APDU;S)V return; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 192; } } .method private authGetNextAssertion(Ljavacard/framework/APDU;[B)V { .stack 6; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; ifeq_w L6; L1: getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials arraylength; if_scmpge L6; L2: getfield_a_this 25; // reference com/josh/vku2f/CTAP2.sha256MessageDigest getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId sconst_0; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId arraylength; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; invokevirtual 209; // doFinal([BSS[BS)S pop; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options sconst_1; baload; ifeq L4; L3: getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 32; sconst_5; bastore; goto L5; L4: getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 32; sconst_1; bastore; L5: getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 33; invokevirtual 231; // readCounter([BS)S pop; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 37; invokevirtual 239; // getHash([BS)S pop; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sspush 1199; invokevirtual 187; // init([BSS)V aload_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_4; invokespecial 240; // com/josh/vku2f/CTAP2.doAssertionCommon(Lcom/josh/vku2f/CBOREncoder;S)V getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; dup2; saload; sconst_1; sadd; sastore; aload_0; aload_1; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 233; // sendLongChaining(Ljavacard/framework/APDU;S)V L6: return; } .method public clientPin(Ljavacard/framework/APDU;S)V 12 { .stack 4; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sload_2; invokevirtual 193; // init([BSS)V getfield_a_this 33; // reference com/josh/vku2f/CTAP2.clientPINCommand getfield_a_this 22; // reference com/josh/vku2f/CTAP2.cborDecoder invokevirtual 241; // decodeCommand(Lcom/josh/vku2f/CBORDecoder;)V getfield_a_this 33; // reference com/josh/vku2f/CTAP2.clientPINCommand invokevirtual 242; // getSubCommandCode()B stableswitch L8 1 9 L1 L2 L3 L4 L5 L6 L7 L8 L8; L1: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sspush 1199; invokevirtual 187; // init([BSS)V getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_b 243; // byte com/josh/vku2f/ClientPINResponse.PIN_RETRIES invokevirtual 223; // startMap(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_b_this 45; // byte com/josh/vku2f/CTAP2.pinRetries invokevirtual 245; // encodeUInt8(B)S pop; goto_w L8; L2: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sspush 1199; invokevirtual 187; // init([BSS)V getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 223; // startMap(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_5; invokevirtual 223; // startMap(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_2; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_3; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder bspush 6; invokevirtual 246; // encodeNegativeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_0; invokevirtual 246; // encodeNegativeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 246; // encodeNegativeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 46; // reference com/josh/vku2f/CTAP2.pinUvAuthProtocolOne invokevirtual 248; // getPublicKey()[B sconst_1; bspush 32; invokevirtual 191; // encodeByteString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_2; invokevirtual 246; // encodeNegativeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 46; // reference com/josh/vku2f/CTAP2.pinUvAuthProtocolOne invokevirtual 248; // getPublicKey()[B bspush 33; bspush 32; invokevirtual 191; // encodeByteString([BSS)S pop; goto L8; L3: goto L8; L4: goto L8; L5: goto L8; L6: goto L8; L7: goto L8; L8: aload_0; aload_1; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokevirtual 233; // sendLongChaining(Ljavacard/framework/APDU;S)V L9: goto L11; L10: astore_3; aload_0; aload_1; aload_3; invokevirtual 195; // getReason()S invokevirtual 196; // returnError(Ljavacard/framework/APDU;S)V L11: return; .exceptionTable { // start_block end_block handler_block catch_type_index L0 L9 L10 192; } } .method private addResident(Ljavacard/framework/APDU;Lcom/josh/vku2f/StoredCredential;)V { .stack 3; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray aload_2; invokevirtual 249; // addCredential(Lcom/josh/vku2f/StoredCredential;)V L1: goto L3; L2: astore_3; aload_0; aload_1; aload_3; invokevirtual 195; // getReason()S invokevirtual 196; // returnError(Ljavacard/framework/APDU;S)V L3: return; .exceptionTable { // start_block end_block handler_block catch_type_index L0 L1 L2 192; } } .method private findCredentials(Ljavacard/framework/APDU;Lcom/josh/vku2f/AuthenticatorGetAssertion;)[Lcom/josh/vku2f/StoredCredential; { .stack 6; .locals 3; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_2; invokevirtual 250; // hasAllow()Z ifeq_w L13; L1: aload_2; getfield_a 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow arraylength; anewarray 251; // com/josh/vku2f/StoredCredential astore_3; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; sconst_0; sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray invokevirtual 252; // getLength()S sconst_1; ssub; sastore; L2: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; iflt_w L19; L3: getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; invokevirtual 253; // get(S)Lcom/josh/vku2f/StoredCredential; astore 4; aload 4; ifnull L12; L4: aload 4; getfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity aload_2; getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId sconst_0; aload_2; getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId arraylength; invokevirtual 254; // checkId([BSS)Z ifeq L12; L5: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; sconst_0; sastore; L6: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; saload; aload_2; getfield_a 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow arraylength; if_scmpge L12; L7: aload_2; getfield_a 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; saload; aaload; getfield_a 47; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.id arraylength; aload 4; getfield_a 48; // reference com/josh/vku2f/StoredCredential.credentialId arraylength; if_scmpeq L9; L8: goto L11; L9: aload_2; getfield_a 7; // reference com/josh/vku2f/AuthenticatorGetAssertion.allow getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; saload; aaload; getfield_a 47; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.id sconst_0; aload 4; getfield_a 48; // reference com/josh/vku2f/StoredCredential.credentialId sconst_0; aload 4; getfield_a 48; // reference com/josh/vku2f/StoredCredential.credentialId arraylength; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L11; L10: aload_3; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; dup2; saload; dup_x 19; sconst_1; sadd; sastore; aload 4; aastore; L11: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_5; dup2; saload; sconst_1; sadd; sastore; goto L6; L12: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; dup2; saload; sconst_1; ssub; sastore; goto_w L2; L13: getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray invokevirtual 252; // getLength()S anewarray 251; // com/josh/vku2f/StoredCredential astore_3; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; sconst_0; sastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray invokevirtual 252; // getLength()S sconst_1; ssub; sastore; L14: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; iflt L19; L15: getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; invokevirtual 253; // get(S)Lcom/josh/vku2f/StoredCredential; astore 4; aload 4; ifnull L18; L16: aload 4; getfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity aload_2; getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId sconst_0; aload_2; getfield_a 5; // reference com/josh/vku2f/AuthenticatorGetAssertion.rpId arraylength; invokevirtual 254; // checkId([BSS)Z ifeq L18; L17: aload_3; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; dup2; saload; dup_x 19; sconst_1; sadd; sastore; aload 4; aastore; L18: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; dup2; saload; sconst_1; ssub; sastore; goto L14; L19: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; saload; anewarray 251; // com/josh/vku2f/StoredCredential astore 5; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; sconst_0; sastore; L20: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; saload; if_scmpge L22; L21: aload 5; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; aload_3; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; aaload; aastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; dup2; saload; sconst_1; sadd; sastore; goto L20; L22: invokestatic 149; // javacard/framework/JCSystem.requestObjectDeletion()V aload 5; areturn; } .method private isPresent([Lcom/josh/vku2f/PublicKeyCredentialDescriptor;)Z { .stack 6; .locals 1; L0: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; sconst_0; sastore; L1: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray invokevirtual 252; // getLength()S if_scmpge L10; L2: getfield_a_this 24; // reference com/josh/vku2f/CTAP2.credentialArray getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; saload; invokevirtual 253; // get(S)Lcom/josh/vku2f/StoredCredential; astore_2; aload_2; ifnonnull L4; L3: goto L9; L4: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; sconst_0; sastore; L5: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; saload; aload_1; arraylength; if_scmpge L9; L6: aload_2; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; saload; aaload; getfield_a 47; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.id sconst_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; saload; aaload; getfield_a 47; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.id arraylength; invokevirtual 257; // checkId([BSS)Z ifeq L8; L7: sconst_1; sreturn; L8: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 6; dup2; saload; sconst_1; sadd; sastore; goto L5; L9: getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars bspush 7; dup2; saload; sconst_1; sadd; sastore; goto L1; L10: sconst_0; sreturn; } .method private doReset(Ljavacard/framework/APDU;)V { .stack 4; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_0; new 116; // com/josh/vku2f/CredentialArray dup; sconst_5; invokespecial 117; // com/josh/vku2f/CredentialArray.<init>(S)V putfield_a 24; // reference com/josh/vku2f/CTAP2.credentialArray invokestatic 149; // javacard/framework/JCSystem.requestObjectDeletion()V aload_0; aload_1; sconst_0; invokevirtual 154; // returnError(Ljavacard/framework/APDU;B)V return; } .method public returnError(Ljavacard/framework/APDU;B)V 13 { .stack 3; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_1; invokevirtual 143; // getBuffer()[B astore_3; aload_3; sconst_0; sload_2; bastore; aload_1; sconst_0; sconst_1; invokevirtual 146; // setOutgoingAndSend(SS)V return; } .method public returnError(Ljavacard/framework/APDU;S)V 14 { .stack 3; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_1; invokevirtual 143; // getBuffer()[B astore_3; aload_3; sconst_0; sload_2; invokestatic 343; // javacard/framework/Util.setShort([BSS)S pop; aload_1; sconst_1; sconst_1; invokevirtual 146; // setOutgoingAndSend(SS)V return; } .method private authGetInfo(Ljavacard/framework/APDU;)V { .stack 5; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 49; // reference com/josh/vku2f/CTAP2.fidoInfo ifnonnull_w L2; L1: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; sspush 1199; invokevirtual 187; // init([BSS)V getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_4; invokevirtual 223; // startMap(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 188; // startArray(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 145; // reference com/josh/vku2f/Utf8Strings.UTF8_FIDO2 sconst_0; bspush 8; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_3; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 259; // reference com/josh/vku2f/CTAP2.aaguid sconst_0; bspush 16; invokevirtual 191; // encodeByteString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_4; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_3; invokevirtual 223; // startMap(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 286; // reference com/josh/vku2f/Utf8Strings.UTF8_RK sconst_0; sconst_2; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 260; // encodeBoolean(Z)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 159; // reference com/josh/vku2f/Utf8Strings.UTF8_UP sconst_0; sconst_2; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 260; // encodeBoolean(Z)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 186; // reference com/josh/vku2f/Utf8Strings.UTF8_UV sconst_0; sconst_2; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 260; // encodeBoolean(Z)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_5; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sspush 1200; invokevirtual 261; // encodeUInt16(S)S pop; invokestatic 262; // javacard/framework/JCSystem.beginTransaction()V aload_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S newarray 11; putfield_a 49; // reference com/josh/vku2f/CTAP2.fidoInfo getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 49; // reference com/josh/vku2f/CTAP2.fidoInfo sconst_0; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder invokevirtual 341; // getCurrentOffset()S invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; invokestatic 263; // javacard/framework/JCSystem.commitTransaction()V L2: getfield_a_this 49; // reference com/josh/vku2f/CTAP2.fidoInfo sconst_0; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; getfield_a_this 49; // reference com/josh/vku2f/CTAP2.fidoInfo arraylength; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; aload_0; aload_1; getfield_a_this 49; // reference com/josh/vku2f/CTAP2.fidoInfo arraylength; invokevirtual 233; // sendLongChaining(Ljavacard/framework/APDU;S)V return; } .method private doAssertionCommon(Lcom/josh/vku2f/CBOREncoder;S)V { .stack 8; .locals 1; L0: sload_2; sconst_4; if_scmpne L2; L1: aload_1; sconst_4; invokevirtual 223; // startMap(S)S pop; goto L3; L2: aload_1; sconst_5; invokevirtual 223; // startMap(S)S pop; L3: aload_1; sconst_1; invokevirtual 245; // encodeUInt8(B)S pop; aload_1; sconst_2; invokevirtual 223; // startMap(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 129; // reference com/josh/vku2f/Utf8Strings.UTF8_ID sconst_0; sconst_2; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 48; // reference com/josh/vku2f/StoredCredential.credentialId sconst_0; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 48; // reference com/josh/vku2f/StoredCredential.credentialId arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 138; // reference com/josh/vku2f/Utf8Strings.UTF8_TYPE sconst_0; sconst_4; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 284; // reference com/josh/vku2f/Utf8Strings.UTF8_PUBLIC_KEY sconst_0; bspush 10; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_2; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; bspush 37; invokevirtual 191; // encodeByteString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_3; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch sconst_0; bspush 69; getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 69; invokevirtual 264; // performSignature([BSS[BS)S sastore; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 20; // reference com/josh/vku2f/CTAP2.scratch bspush 69; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_3; saload; invokevirtual 191; // encodeByteString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_4; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 43; // reference com/josh/vku2f/CTAP2.authenticatorGetAssertion getfield_a 4; // reference com/josh/vku2f/AuthenticatorGetAssertion.options sconst_1; baload; ifeq_w L13; L4: getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData invokevirtual 223; // startMap(S)S pop; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; invokevirtual 267; // getPresentUser()[Z astore_3; aload_3; sconst_2; baload; ifeq L6; L5: getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 268; // reference com/josh/vku2f/Utf8Strings.UTF8_DISPLAYNAME sconst_0; bspush 11; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 52; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.displayName getfield_a 53; // reference com/josh/vku2f/DomString.str sconst_0; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 52; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.displayName getfield_s 54; // short com/josh/vku2f/DomString.len invokevirtual 225; // encodeTextString([BSS)S pop; L6: aload_3; sconst_1; baload; ifeq L8; L7: getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 129; // reference com/josh/vku2f/Utf8Strings.UTF8_ID sconst_0; sconst_2; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id sconst_0; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; L8: aload_3; sconst_0; baload; ifeq L10; L9: getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 244; // reference com/josh/vku2f/Utf8Strings.UTF8_NAME sconst_0; sconst_4; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 56; // reference com/josh/vku2f/PublicKeyCredentialEntity.name getfield_a 53; // reference com/josh/vku2f/DomString.str sconst_0; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 56; // reference com/josh/vku2f/PublicKeyCredentialEntity.name getfield_s 54; // short com/josh/vku2f/DomString.len invokevirtual 225; // encodeTextString([BSS)S pop; L10: aload_3; sconst_3; baload; ifeq L12; L11: getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 270; // reference com/josh/vku2f/Utf8Strings.UTF8_ICON sconst_0; sconst_4; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 57; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.icon sconst_0; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 57; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.icon arraylength; invokevirtual 225; // encodeTextString([BSS)S pop; L12: goto L14; L13: getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_1; invokevirtual 223; // startMap(S)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getstatic_a 129; // reference com/josh/vku2f/Utf8Strings.UTF8_ID sconst_0; sconst_2; invokevirtual 225; // encodeTextString([BSS)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id sconst_0; getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials getfield_a_this 27; // reference com/josh/vku2f/CTAP2.nextAssertion sconst_0; saload; aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; L14: sload_2; sconst_5; if_scmpne L16; L15: getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder sconst_5; invokevirtual 245; // encodeUInt8(B)S pop; getfield_a_this 23; // reference com/josh/vku2f/CTAP2.cborEncoder getfield_a_this 44; // reference com/josh/vku2f/CTAP2.assertionCredentials arraylength; s2b; invokevirtual 245; // encodeUInt8(B)S pop; L16: return; } .method public static isCommandChainingCLA(Ljavacard/framework/APDU;)Z 1 { .stack 2; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: aload_0; invokevirtual 143; // getBuffer()[B astore_1; aload_1; sconst_0; baload; bspush 16; sand; bspush 16; if_scmpne L2; L1: sconst_1; goto L3; L2: sconst_0; L3: sreturn; } .method public getData(Ljavacard/framework/APDU;)V 15 { .stack 6; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; saload; sspush 256; if_scmple L5; L1: getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; dup2; saload; sspush 256; ssub; sastore; aload_1; invokevirtual 143; // getBuffer()[B astore_2; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_1; saload; aload_2; sconst_0; sspush 256; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; aload_1; sconst_0; sspush 256; invokevirtual 146; // setOutgoingAndSend(SS)V getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_1; dup2; saload; sspush 256; sadd; sastore; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; saload; sspush 255; if_scmple L3; L2: sspush 24832; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V goto L4; L3: bspush 97; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; saload; s2b; invokestatic 283; // javacard/framework/Util.makeShort(BB)S invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L4: goto L6; L5: aload_1; invokevirtual 143; // getBuffer()[B astore_2; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_1; saload; aload_2; sconst_0; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; saload; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; aload_1; sconst_0; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; saload; invokevirtual 146; // setOutgoingAndSend(SS)V getfield_a_this 32; // reference com/josh/vku2f/CTAP2.isOutChaining sconst_0; sconst_0; bastore; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; sconst_0; sastore; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_1; sconst_0; sastore; sspush -28672; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L6: return; } .method public sendLongChaining(Ljavacard/framework/APDU;S)V 16 { .stack 5; .locals 1; .descriptor Ljavacard/framework/APDU; 2.10; L0: sload_2; sspush 256; if_scmple L5; L1: getfield_a_this 32; // reference com/josh/vku2f/CTAP2.isOutChaining sconst_0; sconst_1; bastore; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; sload_2; sspush 256; ssub; sastore; aload_1; invokevirtual 143; // getBuffer()[B astore_3; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; aload_3; sconst_0; sspush 256; invokestatic 318; // javacard/framework/Util.arrayCopyNonAtomic([BS[BSS)S pop; aload_1; sconst_0; sspush 256; invokevirtual 146; // setOutgoingAndSend(SS)V getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_1; sspush 256; sastore; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; saload; sspush 255; if_scmple L3; L2: sspush 24832; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V goto L4; L3: bspush 97; getfield_a_this 31; // reference com/josh/vku2f/CTAP2.outChainRam sconst_0; saload; s2b; invokestatic 283; // javacard/framework/Util.makeShort(BB)S invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L4: goto L6; L5: getfield_a_this 32; // reference com/josh/vku2f/CTAP2.isOutChaining sconst_0; sconst_0; bastore; aload_1; invokevirtual 180; // setOutgoing()S pop; aload_1; sload_2; invokevirtual 181; // setOutgoingLength(S)V aload_1; getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sload_2; invokevirtual 182; // sendBytesLong([BSS)V sspush -28672; invokestatic 299; // javacard/framework/ISOException.throwIt(S)V L6: return; } .method private getCert(Ljavacard/framework/APDU;)V { .stack 5; .locals 0; .descriptor Ljavacard/framework/APDU; 2.10; L0: getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_0; sconst_0; bastore; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; getfield_a_this 26; // reference com/josh/vku2f/CTAP2.attestationKeyPair getfield_a_this 19; // reference com/josh/vku2f/CTAP2.dataBuffer sconst_1; invokevirtual 274; // getCert([BS)S sconst_1; sadd; sastore; aload_0; aload_1; getfield_a_this 21; // reference com/josh/vku2f/CTAP2.tempVars sconst_0; saload; invokevirtual 233; // sendLongChaining(Ljavacard/framework/APDU;S)V return; } } .class public CTAP2ErrorCode 8 extends 0.0 { // extends java/lang/Object .fields { public static final byte CTAP1_ERR_SUCCESS = 0; // B public static final byte CTAP1_ERR_INVALID_COMMAND = 1; // B public static final byte CTAP1_ERR_INVALID_PARAMETER = 2; // B public static final byte CTAP1_ERR_INVALID_LENGTH = 3; // B public static final byte CTAP1_ERR_INVALID_SEQ = 4; // B public static final byte CTAP1_ERR_TIMEOUT = 5; // B public static final byte CTAP1_ERR_CHANNEL_BUSY = 6; // B public static final byte CTAP1_ERR_LOCK_REQUIRED = 10; // B public static final byte CTAP1_ERR_INVALID_CHANNEL = 11; // B public static final byte CTAP1_ERR_OTHER = 127; // B public static final byte CTAP2_ERR_CBOR_UNEXPECTED_TYPE = 17; // B public static final byte CTAP2_ERR_INVALID_CBOR = 18; // B public static final byte CTAP2_ERR_MISSING_PARAMETER = 20; // B public static final byte CTAP2_ERR_LIMIT_EXCEEDED = 21; // B public static final byte CTAP2_ERR_UNSUPPORTED_EXTENSION = 22; // B public static final byte CTAP2_ERR_CREDENTIAL_EXCLUDED = 25; // B public static final byte CTAP2_ERR_PROCESSING = 33; // B public static final byte CTAP2_ERR_INVALID_CREDENTIAL = 34; // B public static final byte CTAP2_ERR_USER_ACTION_PENDING = 35; // B public static final byte CTAP2_ERR_OPERATION_PENDING = 36; // B public static final byte CTAP2_ERR_NO_OPERATIONS = 37; // B public static final byte CTAP2_ERR_UNSUPPORTED_ALGORITHM = 38; // B public static final byte CTAP2_ERR_OPERATION_DENIED = 39; // B public static final byte CTAP2_ERR_KEY_STORE_FULL = 40; // B public static final byte CTAP2_ERR_NO_OPERATION_PENDING = 42; // B public static final byte CTAP2_ERR_UNSUPPORTED_OPTION = 43; // B public static final byte CTAP2_ERR_INVALID_OPTION = 44; // B public static final byte CTAP2_ERR_KEEPALIVE_CANCEL = 45; // B public static final byte CTAP2_ERR_NO_CREDENTIALS = 46; // B public static final byte CTAP2_ERR_USER_ACTION_TIMEOUT = 47; // B public static final byte CTAP2_ERR_NOT_ALLOWED = 48; // B public static final byte CTAP2_ERR_PIN_INVALID = 49; // B public static final byte CTAP2_ERR_PIN_BLOCKED = 50; // B public static final byte CTAP2_ERR_PIN_AUTH_INVALID = 51; // B public static final byte CTAP2_ERR_PIN_AUTH_BLOCKED = 52; // B public static final byte CTAP2_ERR_PIN_NOT_SET = 53; // B public static final byte CTAP2_ERR_PIN_REQUIRED = 54; // B public static final byte CTAP2_ERR_PIN_POLICY_VIOLATION = 55; // B public static final byte CTAP2_ERR_PIN_TOKEN_EXPIRED = 56; // B public static final byte CTAP2_ERR_REQUEST_TOO_LARGE = 57; // B public static final byte CTAP2_ERR_ACTION_TIMEOUT = 58; // B public static final byte CTAP2_ERR_UP_REQUIRED = 59; // B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } } .class public CTAP2Exception 9 extends 2.4 { // extends javacard/framework/CardException .fields { private static CTAP2Exception systemInstance; // Lcom/josh/vku2f/CTAP2Exception; } .publicMethodTable 3 { equals(Ljava/lang/Object;)Z; getReason()S; setReason(S)V; } .packageMethodTable 0 { } .method public <init>(S)V 0 { .stack 2; .locals 0; L0: aload_0; sload_1; invokespecial 275; // javacard/framework/CardException.<init>(S)V getstatic_a 276; // reference com/josh/vku2f/CTAP2Exception.systemInstance ifnonnull L2; L1: aload_0; putstatic_a 276; // reference com/josh/vku2f/CTAP2Exception.systemInstance L2: return; } .method public static throwIt(S)V 1 { .stack 2; .locals 0; L0: getstatic_a 276; // reference com/josh/vku2f/CTAP2Exception.systemInstance sload_0; invokevirtual 277; // setReason(S)V getstatic_a 276; // reference com/josh/vku2f/CTAP2Exception.systemInstance athrow; } .method public static throwIt(B)V 2 { .stack 2; .locals 0; L0: getstatic_a 276; // reference com/josh/vku2f/CTAP2Exception.systemInstance sload_0; invokevirtual 277; // setReason(S)V getstatic_a 276; // reference com/josh/vku2f/CTAP2Exception.systemInstance athrow; } } .class public ClientPIN 10 extends 0.0 { // extends java/lang/Object .fields { private byte[] PIN 0; // [B private boolean[] checked 1; // [Z private short i 2; // S } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; checkPIN([B)Z; setPIN()V; } .packageMethodTable 0 { } .method <init>()V { .stack 3; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; sconst_1; sconst_2; invokestatic 126; // javacard/framework/JCSystem.makeTransientBooleanArray(SB)[Z putfield_a 58; // reference com/josh/vku2f/ClientPIN.checked return; } .method public checkPIN([B)Z 1 { .stack 3; .locals 0; L0: getfield_a_this 59; // reference com/josh/vku2f/ClientPIN.PIN arraylength; aload_1; arraylength; if_scmpeq L2; L1: sconst_0; sreturn; L2: sconst_0; putfield_s_this 60; // short com/josh/vku2f/ClientPIN.i L3: getfield_s_this 60; // short com/josh/vku2f/ClientPIN.i getfield_a_this 59; // reference com/josh/vku2f/ClientPIN.PIN arraylength; if_scmpge L7; L4: getfield_a_this 59; // reference com/josh/vku2f/ClientPIN.PIN getfield_s_this 60; // short com/josh/vku2f/ClientPIN.i baload; aload_1; getfield_s_this 60; // short com/josh/vku2f/ClientPIN.i baload; if_scmpeq L6; L5: sconst_0; sreturn; L6: aload_0; dup; getfield_s 60; // short com/josh/vku2f/ClientPIN.i sconst_1; sadd; putfield_s 60; // short com/josh/vku2f/ClientPIN.i goto L3; L7: getfield_a_this 58; // reference com/josh/vku2f/ClientPIN.checked sconst_0; sconst_1; bastore; sconst_1; sreturn; } .method public setPIN()V 2 { .stack 0; .locals 0; L0: return; } } .class public ClientPINCommand 11 extends 0.0 { // extends java/lang/Object .fields { private byte[] keyAgreement 0; // [B private byte[] pinUvAuthParam 1; // [B private byte[] newPinEnc 2; // [B private byte[] pinHashEnc 3; // [B private byte[] rpId 4; // [B private byte protocol 5; // B private byte subCommandCode 6; // B private byte permissions 7; // B public static final byte PARAMETER_PROTOCOL = 1; // B public static final byte PARAMETER_SUBCOMMAND = 2; // B public static final byte PARAMETER_KEY_AGREEMENT = 3; // B public static final byte PARAMETER_PIN_UV_AUTH_PARAM = 4; // B public static final byte PARAMETER_NEW_PIN_ENC = 5; // B public static final byte PARAMETER_PIN_HASH_ENC = 6; // B public static final byte PARAMETER_PERMISSIONS = 9; // B public static final byte PARAMETER_RP_ID = 10; // B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; decodeCommand(Lcom/josh/vku2f/CBORDecoder;)V; getProtocol()B; getSubCommandCode()B; getKeyAgreement()[B; getPinUvAuthParam()[B; getNewPinEnc()[B; getPinHashEnc()[B; getPermissions()B; getRpId()[B; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } .method public decodeCommand(Lcom/josh/vku2f/CBORDecoder;)V 1 { .stack 4; .locals 3; L0: aload_1; sconst_5; invokevirtual 365; // readMajorType(B)S sstore_2; L1: aload_1; invokevirtual 115; // readInt8()B sstore_3; sload_3; stableswitch L10 1 10 L2 L3 L4 L5 L6 L7 L10 L10 L8 L9; L2: aload_0; aload_1; invokevirtual 115; // readInt8()B putfield_b 61; // byte com/josh/vku2f/ClientPINCommand.protocol goto_w L10; L3: aload_0; aload_1; invokevirtual 115; // readInt8()B putfield_b 62; // byte com/josh/vku2f/ClientPINCommand.subCommandCode goto_w L10; L4: aload_1; invokevirtual 305; // readLength()S sstore 4; aload_0; sload 4; newarray 11; putfield_a 63; // reference com/josh/vku2f/ClientPINCommand.keyAgreement aload_1; getfield_a_this 63; // reference com/josh/vku2f/ClientPINCommand.keyAgreement sconst_0; sload 4; invokevirtual 332; // readRawByteArray([BSS)S pop; goto L10; L5: aload_1; invokevirtual 305; // readLength()S sstore 4; aload_0; sload 4; newarray 11; putfield_a 64; // reference com/josh/vku2f/ClientPINCommand.pinUvAuthParam aload_1; getfield_a_this 64; // reference com/josh/vku2f/ClientPINCommand.pinUvAuthParam sconst_0; sload 4; invokevirtual 332; // readRawByteArray([BSS)S pop; goto L10; L6: aload_1; invokevirtual 305; // readLength()S sstore 4; aload_0; sload 4; newarray 11; putfield_a 65; // reference com/josh/vku2f/ClientPINCommand.newPinEnc aload_1; getfield_a_this 65; // reference com/josh/vku2f/ClientPINCommand.newPinEnc sconst_0; sload 4; invokevirtual 332; // readRawByteArray([BSS)S pop; goto L10; L7: aload_1; invokevirtual 305; // readLength()S sstore 4; aload_0; sload 4; newarray 11; putfield_a 66; // reference com/josh/vku2f/ClientPINCommand.pinHashEnc aload_1; getfield_a_this 66; // reference com/josh/vku2f/ClientPINCommand.pinHashEnc sconst_0; sload 4; invokevirtual 332; // readRawByteArray([BSS)S pop; goto L10; L8: aload_0; aload_1; invokevirtual 115; // readInt8()B putfield_b 67; // byte com/josh/vku2f/ClientPINCommand.permissions goto L10; L9: aload_1; invokevirtual 305; // readLength()S sstore 4; aload_0; sload 4; newarray 11; putfield_a 68; // reference com/josh/vku2f/ClientPINCommand.rpId aload_1; getfield_a_this 68; // reference com/josh/vku2f/ClientPINCommand.rpId sconst_0; sload 4; invokevirtual 332; // readRawByteArray([BSS)S pop; L10: sinc 2 -1; sload_2; sconst_1; if_scmpge_w L1; L11: return; } .method public getProtocol()B 2 { .stack 1; .locals 0; L0: getfield_b_this 61; // byte com/josh/vku2f/ClientPINCommand.protocol sreturn; } .method public getSubCommandCode()B 3 { .stack 1; .locals 0; L0: getfield_b_this 62; // byte com/josh/vku2f/ClientPINCommand.subCommandCode sreturn; } .method public getKeyAgreement()[B 4 { .stack 1; .locals 0; L0: getfield_a_this 63; // reference com/josh/vku2f/ClientPINCommand.keyAgreement areturn; } .method public getPinUvAuthParam()[B 5 { .stack 1; .locals 0; L0: getfield_a_this 64; // reference com/josh/vku2f/ClientPINCommand.pinUvAuthParam areturn; } .method public getNewPinEnc()[B 6 { .stack 1; .locals 0; L0: getfield_a_this 65; // reference com/josh/vku2f/ClientPINCommand.newPinEnc areturn; } .method public getPinHashEnc()[B 7 { .stack 1; .locals 0; L0: getfield_a_this 66; // reference com/josh/vku2f/ClientPINCommand.pinHashEnc areturn; } .method public getPermissions()B 8 { .stack 1; .locals 0; L0: getfield_b_this 67; // byte com/josh/vku2f/ClientPINCommand.permissions sreturn; } .method public getRpId()[B 9 { .stack 1; .locals 0; L0: getfield_a_this 68; // reference com/josh/vku2f/ClientPINCommand.rpId areturn; } } .class public ClientPINResponse 12 extends 0.0 { // extends java/lang/Object .fields { public static byte KEY_AGREEMENT 0 = 1; // B public static byte PIN_UV_AUTH_TOKEN 1 = 2; // B public static byte PIN_RETRIES 2 = 3; // B public static byte POWER_CYCLE_STATE 3 = 4; // B public static byte UV_RETRIES 4 = 5; // B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } } .class public ClientPINSubCommand 13 extends 0.0 { // extends java/lang/Object .fields { public static final byte SUBCOMMAND_GET_PIN_RETRIES = 1; // B public static final byte SUBCOMMAND_GET_KEY_AGREEMENT = 2; // B public static final byte SUBCOMMAND_SET_PIN = 3; // B public static final byte SUBCOMMAND_CHANGE_PIN = 4; // B public static final byte SUBCOMMAND_GET_PIN_TOKEN = 5; // B public static final byte SUBCOMMAND_GET_PIN_UV_AUTH_TOKEN_UV = 6; // B public static final byte SUBCOMMAND_GET_UV_RETRIES = 7; // B public static final byte SUBCOMMAND_GET_PIN_UV_AUTH_TOKEN_PIN = 9; // B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } } .class public CredentialArray 14 extends 0.0 { // extends java/lang/Object .fields { private StoredCredential[] credentials 0; // [Lcom/josh/vku2f/StoredCredential; private boolean[] slotStatus 1; // [Z private short size 2; // S private short i 3; // S private short count 4; // S } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; addCredential(Lcom/josh/vku2f/StoredCredential;)V; getCredential([BSS[BSS)Lcom/josh/vku2f/StoredCredential;; checkExists(Lcom/josh/vku2f/StoredCredential;)S; getLength()S; getCount()S; get(S)Lcom/josh/vku2f/StoredCredential;; } .packageMethodTable 0 { } .method public <init>(S)V 0 { .stack 2; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V sconst_0; putfield_s_this 69; // short com/josh/vku2f/CredentialArray.count aload_0; sload_1; anewarray 251; // com/josh/vku2f/StoredCredential putfield_a 70; // reference com/josh/vku2f/CredentialArray.credentials aload_0; sload_1; newarray 10; putfield_a 71; // reference com/josh/vku2f/CredentialArray.slotStatus sload_1; putfield_s_this 72; // short com/josh/vku2f/CredentialArray.size return; } .method public addCredential(Lcom/josh/vku2f/StoredCredential;)V 1 { .stack 3; .locals 1; L0: aload_0; aload_1; invokevirtual 293; // checkExists(Lcom/josh/vku2f/StoredCredential;)S sstore_2; getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials sload_2; aload_1; aastore; getfield_a_this 71; // reference com/josh/vku2f/CredentialArray.slotStatus sload_2; sconst_1; bastore; aload_0; sload_2; sconst_1; sadd; putfield_s 69; // short com/josh/vku2f/CredentialArray.count L1: goto L3; L2: astore_2; bspush 40; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L3: return; .exceptionTable { // start_block end_block handler_block catch_type_index L0 L1 L2 358; } } .method public getCredential([BSS[BSS)Lcom/josh/vku2f/StoredCredential; 2 { .stack 4; .locals 0; L0: sconst_0; putfield_s_this 73; // short com/josh/vku2f/CredentialArray.i L1: getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size if_scmpge L7; L2: getfield_a_this 71; // reference com/josh/vku2f/CredentialArray.slotStatus getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i baload; ifeq L6; L3: getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aaload; getfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity aload_1; sload_2; sload_3; invokevirtual 254; // checkId([BSS)Z ifeq L6; L4: getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity aload 4; sload 5; sload 6; invokevirtual 295; // checkId([BSS)Z ifeq L6; L5: getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aaload; areturn; L6: aload_0; dup; getfield_s 73; // short com/josh/vku2f/CredentialArray.i sconst_1; sadd; putfield_s 73; // short com/josh/vku2f/CredentialArray.i goto L1; L7: aconst_null; areturn; } .method public checkExists(Lcom/josh/vku2f/StoredCredential;)S 3 { .stack 4; .locals 2; L0: sconst_0; putfield_s_this 73; // short com/josh/vku2f/CredentialArray.i L1: getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size if_scmpge L7; L2: getfield_a_this 71; // reference com/josh/vku2f/CredentialArray.slotStatus getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i baload; ifeq L6; L3: getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aaload; getfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity aload_1; getfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity invokevirtual 296; // checkId(Lcom/josh/vku2f/PublicKeyCredentialRpEntity;)Z ifeq L6; L4: getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aaload; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity aload_1; getfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity invokevirtual 297; // checkId(Lcom/josh/vku2f/PublicKeyCredentialUserEntity;)Z ifeq L6; L5: getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i sreturn; L6: aload_0; dup; getfield_s 73; // short com/josh/vku2f/CredentialArray.i sconst_1; sadd; putfield_s 73; // short com/josh/vku2f/CredentialArray.i goto L1; L7: sconst_0; putfield_s_this 73; // short com/josh/vku2f/CredentialArray.i L8: getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size if_scmpge L12; L9: getfield_a_this 71; // reference com/josh/vku2f/CredentialArray.slotStatus getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i baload; ifne L11; L10: getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i sreturn; L11: aload_0; dup; getfield_s 73; // short com/josh/vku2f/CredentialArray.i sconst_1; sadd; putfield_s 73; // short com/josh/vku2f/CredentialArray.i goto L8; L12: getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size anewarray 251; // com/josh/vku2f/StoredCredential astore_2; getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size newarray 10; astore_3; sconst_0; putfield_s_this 73; // short com/josh/vku2f/CredentialArray.i L13: getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size if_scmpge L15; L14: aload_2; getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aaload; aastore; aload_3; getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i getfield_a_this 71; // reference com/josh/vku2f/CredentialArray.slotStatus getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i baload; bastore; aload_0; dup; getfield_s 73; // short com/josh/vku2f/CredentialArray.i sconst_1; sadd; putfield_s 73; // short com/josh/vku2f/CredentialArray.i goto L13; L15: aload_0; getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size sconst_2; smul; anewarray 251; // com/josh/vku2f/StoredCredential putfield_a 70; // reference com/josh/vku2f/CredentialArray.credentials aload_0; getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size sconst_2; smul; newarray 10; putfield_a 71; // reference com/josh/vku2f/CredentialArray.slotStatus sconst_0; putfield_s_this 73; // short com/josh/vku2f/CredentialArray.i L16: getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size if_scmpge L18; L17: getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aload_2; getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aaload; aastore; getfield_a_this 71; // reference com/josh/vku2f/CredentialArray.slotStatus getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i aload_3; getfield_s_this 73; // short com/josh/vku2f/CredentialArray.i baload; bastore; aload_0; dup; getfield_s 73; // short com/josh/vku2f/CredentialArray.i sconst_1; sadd; putfield_s 73; // short com/josh/vku2f/CredentialArray.i goto L16; L18: aload_0; dup; getfield_s 72; // short com/josh/vku2f/CredentialArray.size sconst_2; smul; putfield_s 72; // short com/josh/vku2f/CredentialArray.size invokestatic 149; // javacard/framework/JCSystem.requestObjectDeletion()V aload_0; dup; getfield_s 73; // short com/josh/vku2f/CredentialArray.i sconst_1; sadd; dup_x 18; putfield_s 73; // short com/josh/vku2f/CredentialArray.i sreturn; } .method public getLength()S 4 { .stack 1; .locals 0; L0: getfield_s_this 72; // short com/josh/vku2f/CredentialArray.size sreturn; } .method public getCount()S 5 { .stack 1; .locals 0; L0: getfield_s_this 69; // short com/josh/vku2f/CredentialArray.count sreturn; } .method public get(S)Lcom/josh/vku2f/StoredCredential; 6 { .stack 2; .locals 0; L0: getfield_a_this 70; // reference com/josh/vku2f/CredentialArray.credentials sload_1; aaload; areturn; } } .class public DomString 15 extends 0.0 { // extends java/lang/Object .fields { public short len 0; // S public byte[] str 1; // [B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; checkEquals([BSS)Z; checkEquals(Lcom/josh/vku2f/DomString;)Z; } .packageMethodTable 0 { } .method public <init>([BS)V 0 { .stack 5; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V sload_2; bspush 64; if_scmple L2; L1: bspush 64; sstore_2; L2: aload_0; sload_2; newarray 11; putfield_a 53; // reference com/josh/vku2f/DomString.str aload_1; sconst_0; getfield_a_this 53; // reference com/josh/vku2f/DomString.str sconst_0; sload_2; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; sload_2; putfield_s_this 54; // short com/josh/vku2f/DomString.len return; } .method public checkEquals([BSS)Z 1 { .stack 5; .locals 0; L0: sload_3; bspush 64; if_scmple L2; L1: bspush 64; sstore_3; L2: sload_3; getfield_s_this 54; // short com/josh/vku2f/DomString.len if_scmpeq L4; L3: sconst_0; sreturn; L4: aload_1; sload_2; getfield_a_this 53; // reference com/josh/vku2f/DomString.str sconst_0; getfield_s_this 54; // short com/josh/vku2f/DomString.len invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L6; L5: sconst_1; goto L7; L6: sconst_0; L7: sreturn; } .method public checkEquals(Lcom/josh/vku2f/DomString;)Z 2 { .stack 4; .locals 0; L0: aload_1; getfield_a_this 53; // reference com/josh/vku2f/DomString.str sconst_0; getfield_s_this 54; // short com/josh/vku2f/DomString.len invokevirtual 298; // checkEquals([BSS)Z sreturn; } } .class public ICUtil 16 extends 0.0 { // extends java/lang/Object .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } .method public static sign(S)S 1 { .stack 2; .locals 0; L0: sload_0; bspush 15; sushr; sconst_1; sand; s2b; sreturn; } .method public static min(SS)S 2 { .stack 2; .locals 0; L0: sload_0; sload_1; if_scmpge L2; L1: sload_0; sreturn; L2: sload_1; sreturn; } .method public static max(SS)S 3 { .stack 2; .locals 0; L0: sload_0; sload_1; if_scmple L2; L1: sload_0; sreturn; L2: sload_1; sreturn; } .method public static setBit([BSZ)V 4 { .stack 5; .locals 2; L0: sload_1; sconst_3; sushr; sstore_3; sconst_1; sload_1; bspush 7; sand; sshl; s2b; sstore 4; sload_2; ifeq L2; L1: aload_0; sload_3; dup2; baload; sload 4; sor; bastore; goto L3; L2: aload_0; sload_3; dup2; baload; sload 4; sconst_m1; sxor; sand; bastore; L3: return; } .method public static getBit(BB)Z 5 { .stack 3; .locals 1; L0: sconst_1; sload_1; bspush 7; sand; sshl; s2b; sstore_2; sload_2; sload_0; sload_2; sand; if_scmpne L2; L1: sconst_1; goto L3; L2: sconst_0; L3: sreturn; } .method public static setBit(BBZ)B 6 { .stack 3; .locals 1; L0: sconst_1; sload_1; bspush 7; sand; sshl; s2b; sstore_3; sload_2; ifeq L2; L1: sload_0; sload_3; sor; sstore_0; goto L3; L2: sload_0; sload_3; sconst_m1; sxor; sand; sstore_0; L3: sload_0; sreturn; } .method public static getBit([BS)Z 7 { .stack 3; .locals 2; L0: sload_1; sconst_3; sushr; sstore_2; sconst_1; sload_1; bspush 7; sand; sshl; s2b; sstore_3; sload_3; aload_0; sload_2; baload; sload_3; sand; if_scmpne L2; L1: sconst_1; goto L3; L2: sconst_0; L3: sreturn; } .method public static isLessThanAsUnsignedShort(SS)Z 8 { .stack 3; .locals 0; L0: sload_0; sload_1; if_scmpge L2; L1: sconst_1; goto L3; L2: sconst_0; L3: sload_0; ifge L5; L4: sconst_1; goto L6; L5: sconst_0; L6: sload_1; ifge L8; L7: sconst_1; goto L9; L8: sconst_0; L9: if_scmpeq L11; L10: sconst_1; goto L12; L11: sconst_0; L12: sxor; sreturn; } .method public static shortArrayFillNonAtomic([SSSS)S 9 { .stack 3; .locals 0; L0: sload_2; sload_1; sadd; sstore_2; L1: sload_1; sload_2; if_scmpge L3; L2: aload_0; sload_1; sload_3; sastore; sinc 1 1; goto L1; L3: sload_1; sreturn; } } .class public IDSecret 17 extends 0.0 { // extends java/lang/Object .fields { public DomString IDx 0; // Lcom/josh/vku2f/DomString; public final byte[] Rx 1; // [B public final byte[] Rp 2; // [B public final byte[] PuKp 3; // [B public final byte[] sharedSecret 4; // [B public final byte[] hashedSharedSecret 5; // [B public final byte[] Cx 6; // [B public final byte[] encryptedCx 7; // [B public final byte[] hmac 8; // [B private final byte[] RxRp 9; // [B private 1.20 aesKey 10; // Ljavacard/security/AESKey; private 4.1 aesEncrypt 11; // Ljavacardx/crypto/Cipher; private 4.1 aesDecrypt 12; // Ljavacardx/crypto/Cipher; private final byte[] IV_ZERO_AES 13; // [B private 1.11 sha256 14; // Ljavacard/security/MessageDigest; private byte[] scratch 15; // [B private final short SCRATCH_LENGTH 16; // S private byte i 17; // B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; getRxRp()[B; initAesKey()V; encryptCx()V; getHMAC([BS)V; dump([BLcom/josh/vku2f/CBOREncoder;)S; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 5; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; sconst_4; newarray 11; putfield_a 38; // reference com/josh/vku2f/IDSecret.Rx aload_0; sconst_4; newarray 11; putfield_a 74; // reference com/josh/vku2f/IDSecret.Rp aload_0; sconst_4; newarray 11; putfield_a 75; // reference com/josh/vku2f/IDSecret.RxRp aload_0; bspush 65; newarray 11; putfield_a 39; // reference com/josh/vku2f/IDSecret.PuKp aload_0; bspush 20; newarray 11; putfield_a 40; // reference com/josh/vku2f/IDSecret.sharedSecret aload_0; bspush 32; newarray 11; putfield_a 76; // reference com/josh/vku2f/IDSecret.hashedSharedSecret aload_0; bspush 16; newarray 11; putfield_a 77; // reference com/josh/vku2f/IDSecret.Cx aload_0; bspush 16; newarray 11; putfield_a 41; // reference com/josh/vku2f/IDSecret.encryptedCx aload_0; bspush 32; newarray 11; putfield_a 78; // reference com/josh/vku2f/IDSecret.hmac aload_0; bspush 16; newarray 11; dup; sconst_0; sconst_0; bastore; dup; sconst_1; sconst_0; bastore; dup; sconst_2; sconst_0; bastore; dup; sconst_3; sconst_0; bastore; dup; sconst_4; sconst_0; bastore; dup; sconst_5; sconst_0; bastore; dup; bspush 6; sconst_0; bastore; dup; bspush 7; sconst_0; bastore; dup; bspush 8; sconst_0; bastore; dup; bspush 9; sconst_0; bastore; dup; bspush 10; sconst_0; bastore; dup; bspush 11; sconst_0; bastore; dup; bspush 12; sconst_0; bastore; dup; bspush 13; sconst_0; bastore; dup; bspush 14; sconst_0; bastore; dup; bspush 15; sconst_0; bastore; putfield_a 79; // reference com/josh/vku2f/IDSecret.IV_ZERO_AES sspush 128; putfield_s_this 80; // short com/josh/vku2f/IDSecret.SCRATCH_LENGTH sconst_0; putfield_b_this 81; // byte com/josh/vku2f/IDSecret.i aload_0; new 184; // com/josh/vku2f/DomString dup; getstatic_a 307; // reference com/josh/vku2f/Utf8Strings.UTF8_NULL getstatic_a 307; // reference com/josh/vku2f/Utf8Strings.UTF8_NULL arraylength; invokespecial 185; // com/josh/vku2f/DomString.<init>([BS)V putfield_a 37; // reference com/josh/vku2f/IDSecret.IDx invokestatic 308; // com/josh/vku2f/Random.getInstance()Ljavacard/security/RandomData; getfield_a_this 38; // reference com/josh/vku2f/IDSecret.Rx sconst_0; getfield_a_this 38; // reference com/josh/vku2f/IDSecret.Rx arraylength; invokevirtual 309; // nextBytes([BSS)S pop; getfield_a_this 74; // reference com/josh/vku2f/IDSecret.Rp sconst_0; sconst_4; getfield_a_this 74; // reference com/josh/vku2f/IDSecret.Rp arraylength; s2b; invokestatic 310; // javacard/framework/Util.arrayFill([BSSB)S pop; getfield_a_this 75; // reference com/josh/vku2f/IDSecret.RxRp sconst_0; sconst_4; getfield_a_this 75; // reference com/josh/vku2f/IDSecret.RxRp arraylength; s2b; invokestatic 310; // javacard/framework/Util.arrayFill([BSSB)S pop; getfield_a_this 39; // reference com/josh/vku2f/IDSecret.PuKp sconst_0; sconst_4; bastore; getfield_a_this 39; // reference com/josh/vku2f/IDSecret.PuKp sconst_1; getfield_a_this 39; // reference com/josh/vku2f/IDSecret.PuKp arraylength; sconst_1; ssub; s2b; sconst_0; invokestatic 310; // javacard/framework/Util.arrayFill([BSSB)S pop; getfield_a_this 40; // reference com/josh/vku2f/IDSecret.sharedSecret sconst_0; getfield_a_this 40; // reference com/josh/vku2f/IDSecret.sharedSecret arraylength; s2b; sconst_0; invokestatic 310; // javacard/framework/Util.arrayFill([BSSB)S pop; getfield_a_this 76; // reference com/josh/vku2f/IDSecret.hashedSharedSecret sconst_0; getfield_a_this 76; // reference com/josh/vku2f/IDSecret.hashedSharedSecret arraylength; s2b; sconst_0; invokestatic 310; // javacard/framework/Util.arrayFill([BSSB)S pop; invokestatic 308; // com/josh/vku2f/Random.getInstance()Ljavacard/security/RandomData; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx sconst_0; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx arraylength; invokevirtual 309; // nextBytes([BSS)S pop; getfield_a_this 41; // reference com/josh/vku2f/IDSecret.encryptedCx sconst_0; getfield_a_this 41; // reference com/josh/vku2f/IDSecret.encryptedCx arraylength; s2b; sconst_0; invokestatic 310; // javacard/framework/Util.arrayFill([BSSB)S pop; getfield_a_this 78; // reference com/josh/vku2f/IDSecret.hmac sconst_0; getfield_a_this 78; // reference com/josh/vku2f/IDSecret.hmac arraylength; s2b; sconst_0; invokestatic 310; // javacard/framework/Util.arrayFill([BSSB)S pop; aload_0; bspush 15; sspush 256; sconst_0; invokestatic 311; // javacard/security/KeyBuilder.buildKey(BSZ)Ljavacard/security/Key; checkcast 0 312; // T_CLASSORINTERFACE javacard/security/AESKey putfield_a 82; // reference com/josh/vku2f/IDSecret.aesKey aload_0; bspush 13; sconst_0; invokestatic 314; // javacardx/crypto/Cipher.getInstance(BZ)Ljavacardx/crypto/Cipher; putfield_a 83; // reference com/josh/vku2f/IDSecret.aesEncrypt aload_0; bspush 13; sconst_0; invokestatic 314; // javacardx/crypto/Cipher.getInstance(BZ)Ljavacardx/crypto/Cipher; putfield_a 84; // reference com/josh/vku2f/IDSecret.aesDecrypt aload_0; sconst_4; sconst_0; invokestatic 119; // javacard/security/MessageDigest.getInstance(BZ)Ljavacard/security/MessageDigest; putfield_a 85; // reference com/josh/vku2f/IDSecret.sha256 aload_0; sspush 128; sconst_2; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B putfield_a 86; // reference com/josh/vku2f/IDSecret.scratch return; } .method public getRxRp()[B 1 { .stack 5; .locals 0; L0: sconst_0; putfield_b_this 81; // byte com/josh/vku2f/IDSecret.i L1: getfield_b_this 81; // byte com/josh/vku2f/IDSecret.i sconst_4; if_scmpge L3; L2: getfield_a_this 75; // reference com/josh/vku2f/IDSecret.RxRp getfield_b_this 81; // byte com/josh/vku2f/IDSecret.i getfield_a_this 38; // reference com/josh/vku2f/IDSecret.Rx getfield_b_this 81; // byte com/josh/vku2f/IDSecret.i baload; getfield_a_this 74; // reference com/josh/vku2f/IDSecret.Rp getfield_b_this 81; // byte com/josh/vku2f/IDSecret.i baload; sxor; bastore; aload_0; dup; getfield_b 81; // byte com/josh/vku2f/IDSecret.i sconst_1; sadd; s2b; putfield_b 81; // byte com/josh/vku2f/IDSecret.i goto L1; L3: getfield_a_this 75; // reference com/josh/vku2f/IDSecret.RxRp areturn; } .method public initAesKey()V 2 { .stack 6; .locals 0; L0: getfield_a_this 85; // reference com/josh/vku2f/IDSecret.sha256 getfield_a_this 40; // reference com/josh/vku2f/IDSecret.sharedSecret sconst_0; bspush 20; getfield_a_this 76; // reference com/josh/vku2f/IDSecret.hashedSharedSecret sconst_0; invokevirtual 209; // doFinal([BSS[BS)S pop; getfield_a_this 82; // reference com/josh/vku2f/IDSecret.aesKey getfield_a_this 76; // reference com/josh/vku2f/IDSecret.hashedSharedSecret sconst_0; invokeinterface 3 312 4; // javacard/security/AESKey getfield_a_this 83; // reference com/josh/vku2f/IDSecret.aesEncrypt getfield_a_this 82; // reference com/josh/vku2f/IDSecret.aesKey sconst_2; getfield_a_this 79; // reference com/josh/vku2f/IDSecret.IV_ZERO_AES sconst_0; getfield_a_this 79; // reference com/josh/vku2f/IDSecret.IV_ZERO_AES arraylength; invokevirtual 319; // init(Ljavacard/security/Key;B[BSS)V getfield_a_this 84; // reference com/josh/vku2f/IDSecret.aesDecrypt getfield_a_this 82; // reference com/josh/vku2f/IDSecret.aesKey sconst_1; getfield_a_this 79; // reference com/josh/vku2f/IDSecret.IV_ZERO_AES sconst_0; getfield_a_this 79; // reference com/josh/vku2f/IDSecret.IV_ZERO_AES arraylength; invokevirtual 319; // init(Ljavacard/security/Key;B[BSS)V return; } .method public encryptCx()V 3 { .stack 6; .locals 0; L0: getfield_a_this 83; // reference com/josh/vku2f/IDSecret.aesEncrypt getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx sconst_0; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx arraylength; getfield_a_this 41; // reference com/josh/vku2f/IDSecret.encryptedCx sconst_0; invokevirtual 320; // doFinal([BSS[BS)S pop; return; } .method public getHMAC([BS)V 4 { .stack 7; .locals 2; L0: getfield_a_this 37; // reference com/josh/vku2f/IDSecret.IDx getfield_a 53; // reference com/josh/vku2f/DomString.str sconst_0; getfield_a_this 86; // reference com/josh/vku2f/IDSecret.scratch sconst_0; getfield_a_this 37; // reference com/josh/vku2f/IDSecret.IDx getfield_a 53; // reference com/josh/vku2f/DomString.str arraylength; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx sconst_0; getfield_a_this 86; // reference com/josh/vku2f/IDSecret.scratch getfield_a_this 37; // reference com/josh/vku2f/IDSecret.IDx getfield_a 53; // reference com/josh/vku2f/DomString.str arraylength; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx arraylength; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 37; // reference com/josh/vku2f/IDSecret.IDx getfield_a 53; // reference com/josh/vku2f/DomString.str arraylength; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx arraylength; sadd; sstore_3; sconst_0; sstore 4; L1: sload_3; bspush 32; if_scmple L3; L2: getfield_a_this 85; // reference com/josh/vku2f/IDSecret.sha256 getfield_a_this 86; // reference com/josh/vku2f/IDSecret.scratch sload 4; bspush 32; invokevirtual 321; // update([BSS)V sinc 3 -32; sinc 4 32; goto L1; L3: getfield_a_this 85; // reference com/josh/vku2f/IDSecret.sha256 getfield_a_this 86; // reference com/josh/vku2f/IDSecret.scratch sload 4; sload_3; getfield_a_this 86; // reference com/josh/vku2f/IDSecret.scratch sconst_0; invokevirtual 209; // doFinal([BSS[BS)S pop; getfield_a_this 83; // reference com/josh/vku2f/IDSecret.aesEncrypt getfield_a_this 86; // reference com/josh/vku2f/IDSecret.scratch sconst_0; bspush 16; aload_1; sload_2; invokevirtual 322; // update([BSS[BS)S pop; getfield_a_this 83; // reference com/josh/vku2f/IDSecret.aesEncrypt getfield_a_this 86; // reference com/josh/vku2f/IDSecret.scratch bspush 16; bspush 16; aload_1; sload_2; bspush 16; sadd; invokevirtual 320; // doFinal([BSS[BS)S pop; aload_1; sconst_0; getfield_a_this 78; // reference com/josh/vku2f/IDSecret.hmac sconst_0; bspush 32; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; return; } .method public dump([BLcom/josh/vku2f/CBOREncoder;)S 5 { .stack 4; .locals 0; L0: aload_2; aload_1; sconst_0; sspush 1200; invokevirtual 187; // init([BSS)V aload_2; bspush 10; invokevirtual 188; // startArray(S)S pop; aload_2; getfield_a_this 37; // reference com/josh/vku2f/IDSecret.IDx getfield_a 53; // reference com/josh/vku2f/DomString.str sconst_0; getfield_a_this 37; // reference com/josh/vku2f/IDSecret.IDx getfield_s 54; // short com/josh/vku2f/DomString.len invokevirtual 225; // encodeTextString([BSS)S pop; aload_2; getfield_a_this 38; // reference com/josh/vku2f/IDSecret.Rx sconst_0; getfield_a_this 38; // reference com/josh/vku2f/IDSecret.Rx arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; getfield_a_this 74; // reference com/josh/vku2f/IDSecret.Rp sconst_0; getfield_a_this 74; // reference com/josh/vku2f/IDSecret.Rp arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; aload_0; invokevirtual 323; // getRxRp()[B sconst_0; getfield_a_this 75; // reference com/josh/vku2f/IDSecret.RxRp arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; getfield_a_this 39; // reference com/josh/vku2f/IDSecret.PuKp sconst_0; getfield_a_this 39; // reference com/josh/vku2f/IDSecret.PuKp arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; getfield_a_this 40; // reference com/josh/vku2f/IDSecret.sharedSecret sconst_0; getfield_a_this 40; // reference com/josh/vku2f/IDSecret.sharedSecret arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; getfield_a_this 76; // reference com/josh/vku2f/IDSecret.hashedSharedSecret sconst_0; getfield_a_this 76; // reference com/josh/vku2f/IDSecret.hashedSharedSecret arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx sconst_0; getfield_a_this 77; // reference com/josh/vku2f/IDSecret.Cx arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; getfield_a_this 41; // reference com/josh/vku2f/IDSecret.encryptedCx sconst_0; getfield_a_this 41; // reference com/josh/vku2f/IDSecret.encryptedCx arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; getfield_a_this 78; // reference com/josh/vku2f/IDSecret.hmac sconst_0; getfield_a_this 78; // reference com/josh/vku2f/IDSecret.hmac arraylength; invokevirtual 191; // encodeByteString([BSS)S pop; aload_2; invokevirtual 341; // getCurrentOffset()S sreturn; } } .class public KeyParams 18 extends 0.0 { // extends java/lang/Object .fields { public static final short secp256r1K = 1; // S public static final byte[] secp256r1p 0 = {-1,-1,-1,-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; // [B public static final byte[] secp256r1A 1 = {-1,-1,-1,-1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-4}; // [B public static final byte[] secp256r1B 2 = {90,-58,53,-40,-86,58,-109,-25,-77,-21,-67,85,118,-104,-122,-68,101,29,6,-80,-52,83,-80,-10,59,-50,60,62,39,-46,96,75}; // [B public static final byte[] secp256r1G 3 = {4,107,23,-47,-14,-31,44,66,71,-8,-68,-26,-27,99,-92,64,-14,119,3,125,-127,45,-21,51,-96,-12,-95,57,69,-40,-104,-62,-106,79,-29,66,-30,-2,26,127,-101,-114,-25,-21,74,124,15,-98,22,43,-50,51,87,107,49,94,-50,-53,-74,64,104,55,-65,81,-11}; // [B public static final byte[] secp256r1R 4 = {-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-68,-26,-6,-83,-89,23,-98,-124,-13,-71,-54,-62,-4,99,37,81}; // [B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } .method public static sec256r1params(Ljavacard/security/ECKey;)V 1 { .stack 4; .locals 0; .descriptor Ljavacard/security/ECKey; 1.17; L0: aload_0; getstatic_a 324; // reference com/josh/vku2f/KeyParams.secp256r1p sconst_0; bspush 32; invokeinterface 4 120 0; // javacard/security/ECKey aload_0; getstatic_a 325; // reference com/josh/vku2f/KeyParams.secp256r1A sconst_0; bspush 32; invokeinterface 4 120 3; // javacard/security/ECKey aload_0; getstatic_a 326; // reference com/josh/vku2f/KeyParams.secp256r1B sconst_0; bspush 32; invokeinterface 4 120 4; // javacard/security/ECKey aload_0; getstatic_a 327; // reference com/josh/vku2f/KeyParams.secp256r1G sconst_0; bspush 65; invokeinterface 4 120 5; // javacard/security/ECKey aload_0; getstatic_a 328; // reference com/josh/vku2f/KeyParams.secp256r1R sconst_0; bspush 32; invokeinterface 4 120 6; // javacard/security/ECKey aload_0; sconst_1; invokeinterface 2 120 7; // javacard/security/ECKey return; } } .class public abstract PinUvAuthProtocol 19 extends 0.0 { // extends java/lang/Object .fields { private PinUvAuthToken pinUvAuthToken 0; // Lcom/josh/vku2f/PinUvAuthToken; } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; initialize()V; regenerate()V; resetPinUvAuthToken()V; getPublicKey()[B; decapsulate(Lcom/josh/vku2f/COSEKey;)[B; decrypt([B[B)V; verify([B[B[B)V; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } .method public abstract initialize()V 1 { } .method public abstract regenerate()V 2 { } .method public abstract resetPinUvAuthToken()V 3 { } .method public abstract getPublicKey()[B 4 { } .method public abstract decapsulate(Lcom/josh/vku2f/COSEKey;)[B 5 { } .method public abstract decrypt([B[B)V 6 { } .method public abstract verify([B[B[B)V 7 { } } .class public PinUvAuthProtocolOne 20 extends PinUvAuthProtocol { .fields { private 1.16 ecDhKeyPair 0; // Ljavacard/security/KeyPair; private boolean[] ecDhSet 1; // [Z } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; initialize()V; regenerate()V; resetPinUvAuthToken()V; getPublicKey()[B; decapsulate(Lcom/josh/vku2f/COSEKey;)[B; decrypt([B[B)V; verify([B[B[B)V; encapsulate(Lcom/josh/vku2f/COSEKey;)[B; encrypt([B[B)[B; authenticate([B[B)[B; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 329; // com/josh/vku2f/PinUvAuthProtocol.<init>()V return; } .method public initialize()V 1 { .stack 5; .locals 2; L0: bspush 7; sconst_1; sspush 256; sconst_0; invokestatic 131; // javacard/security/KeyBuilder.buildKey(BBSZ)Ljavacard/security/Key; checkcast 0 357; // T_CLASSORINTERFACE javacard/security/ECPublicKey astore_1; bspush 8; sconst_1; sspush 256; sconst_0; invokestatic 131; // javacard/security/KeyBuilder.buildKey(BBSZ)Ljavacard/security/Key; checkcast 0 132; // T_CLASSORINTERFACE javacard/security/ECPrivateKey astore_2; aload_0; new 200; // javacard/security/KeyPair dup; aload_1; aload_2; invokespecial 330; // javacard/security/KeyPair.<init>(Ljavacard/security/PublicKey;Ljavacard/security/PrivateKey;)V putfield_a 87; // reference com/josh/vku2f/PinUvAuthProtocolOne.ecDhKeyPair aload_0; sconst_1; sconst_1; invokestatic 126; // javacard/framework/JCSystem.makeTransientBooleanArray(SB)[Z putfield_a 88; // reference com/josh/vku2f/PinUvAuthProtocolOne.ecDhSet return; } .method public regenerate()V 2 { .stack 0; .locals 0; L0: return; } .method public resetPinUvAuthToken()V 3 { .stack 0; .locals 0; L0: return; } .method public getPublicKey()[B 4 { .stack 3; .locals 2; L0: bspush 65; sconst_1; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B astore_1; L1: goto L3; L2: astore_2; bspush 65; newarray 11; astore_1; L3: getfield_a_this 88; // reference com/josh/vku2f/PinUvAuthProtocolOne.ecDhSet sconst_0; baload; ifne L5; L4: getfield_a_this 87; // reference com/josh/vku2f/PinUvAuthProtocolOne.ecDhKeyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 120; // T_CLASSORINTERFACE javacard/security/ECKey invokestatic 124; // com/josh/vku2f/KeyParams.sec256r1params(Ljavacard/security/ECKey;)V getfield_a_this 87; // reference com/josh/vku2f/PinUvAuthProtocolOne.ecDhKeyPair invokevirtual 127; // genKeyPair()V getfield_a_this 88; // reference com/josh/vku2f/PinUvAuthProtocolOne.ecDhSet sconst_0; sconst_1; bastore; L5: getfield_a_this 87; // reference com/josh/vku2f/PinUvAuthProtocolOne.ecDhKeyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 357; // T_CLASSORINTERFACE javacard/security/ECPublicKey aload_1; sconst_0; invokeinterface 3 357 19; // javacard/security/ECPublicKey pop; aload_1; areturn; .exceptionTable { // start_block end_block handler_block catch_type_index L0 L1 L2 358; } } .method public encapsulate(Lcom/josh/vku2f/COSEKey;)[B 8 { .stack 1; .locals 0; L0: aconst_null; areturn; } .method public decapsulate(Lcom/josh/vku2f/COSEKey;)[B 5 { .stack 1; .locals 0; L0: aconst_null; areturn; } .method public encrypt([B[B)[B 9 { .stack 1; .locals 0; L0: aconst_null; areturn; } .method public decrypt([B[B)V 6 { .stack 0; .locals 0; L0: return; } .method public authenticate([B[B)[B 10 { .stack 1; .locals 0; L0: aconst_null; areturn; } .method public verify([B[B[B)V 7 { .stack 0; .locals 0; L0: return; } .method private ecdh(Lcom/josh/vku2f/COSEKey;)[B { .stack 1; .locals 0; L0: aconst_null; areturn; } .method private kdf([B)[B { .stack 1; .locals 0; L0: aconst_null; areturn; } } .class public PinUvAuthToken 21 extends 0.0 { // extends java/lang/Object .fields { private byte[] token 0; // [B private byte protocol 1; // B private byte permissionsRPID 2; // B private byte permissionsSet 3; // B private byte usageTimer 4; // B private boolean inUseFlag 5; // Z private byte initialUsageTimeLimit 6; // B private byte userPresentTimeLimit 7; // B private byte maxUsageTimePeriod 8; // B private boolean userVerifiedFlag 9; // Z private boolean userPresentFlag 10; // Z } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; generateNewToken()V; resetTokenState()V; isInUse()Z; } .packageMethodTable 0 { } .method <init>()V { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; invokevirtual 333; // resetTokenState()V return; } .method public generateNewToken()V 1 { .stack 0; .locals 0; L0: return; } .method public resetTokenState()V 2 { .stack 2; .locals 0; L0: sconst_0; putfield_b_this 89; // byte com/josh/vku2f/PinUvAuthToken.permissionsRPID sconst_0; putfield_b_this 90; // byte com/josh/vku2f/PinUvAuthToken.permissionsSet sconst_0; putfield_b_this 91; // byte com/josh/vku2f/PinUvAuthToken.usageTimer sconst_0; putfield_b_this 92; // boolean com/josh/vku2f/PinUvAuthToken.inUseFlag sconst_0; putfield_b_this 93; // byte com/josh/vku2f/PinUvAuthToken.initialUsageTimeLimit sconst_0; putfield_b_this 94; // byte com/josh/vku2f/PinUvAuthToken.userPresentTimeLimit sconst_0; putfield_b_this 95; // byte com/josh/vku2f/PinUvAuthToken.maxUsageTimePeriod sconst_0; putfield_b_this 96; // boolean com/josh/vku2f/PinUvAuthToken.userVerifiedFlag sconst_0; putfield_b_this 97; // boolean com/josh/vku2f/PinUvAuthToken.userPresentFlag return; } .method public isInUse()Z 3 { .stack 1; .locals 0; L0: getfield_b_this 92; // boolean com/josh/vku2f/PinUvAuthToken.inUseFlag sreturn; } } .class public PublicKeyCredentialDescriptor 22 extends 0.0 { // extends java/lang/Object .fields { byte[] type 0; // [B byte[] id 1; // [B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>([BSS)V 0 { .stack 5; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; getstatic_a 284; // reference com/josh/vku2f/Utf8Strings.UTF8_PUBLIC_KEY arraylength; newarray 11; putfield_a 98; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.type getstatic_a 284; // reference com/josh/vku2f/Utf8Strings.UTF8_PUBLIC_KEY sconst_0; getfield_a_this 98; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.type sconst_0; getfield_a_this 98; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.type arraylength; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; aload_0; sload_3; newarray 11; putfield_a 47; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.id aload_1; sload_2; getfield_a_this 47; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.id sconst_0; getfield_a_this 47; // reference com/josh/vku2f/PublicKeyCredentialDescriptor.id arraylength; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; return; } } .class public abstract PublicKeyCredentialEntity 23 extends 0.0 { // extends java/lang/Object .fields { public DomString name 0; // Lcom/josh/vku2f/DomString; } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; setName([BS)V; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } .method public setName([BS)V 1 { .stack 5; .locals 0; L0: aload_0; new 184; // com/josh/vku2f/DomString dup; aload_1; sload_2; invokespecial 185; // com/josh/vku2f/DomString.<init>([BS)V putfield_a 99; // reference com/josh/vku2f/PublicKeyCredentialEntity.name return; } } .class public PublicKeyCredentialParams 24 extends 0.0 { // extends java/lang/Object .fields { private short[] paramList 0; // [S private short listIndex 1; // S public static final short COSE_ES256 = -7; // S public static final short COSE_RS256 = -257; // S public static final short COSE_PS256 = -37; // S } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; addAlgorithm(S)V; getAlgorithm()B; } .packageMethodTable 0 { } .method public <init>(S)V 0 { .stack 2; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V aload_0; sload_1; newarray 12; putfield_a 100; // reference com/josh/vku2f/PublicKeyCredentialParams.paramList sconst_0; putfield_s_this 101; // short com/josh/vku2f/PublicKeyCredentialParams.listIndex return; } .method public addAlgorithm(S)V 1 { .stack 5; .locals 0; L0: getfield_a_this 100; // reference com/josh/vku2f/PublicKeyCredentialParams.paramList aload_0; dup; getfield_s 101; // short com/josh/vku2f/PublicKeyCredentialParams.listIndex dup_x 18; sconst_1; sadd; putfield_s 101; // short com/josh/vku2f/PublicKeyCredentialParams.listIndex sload_1; sastore; return; } .method public getAlgorithm()B 2 { .stack 2; .locals 1; L0: sconst_0; sstore_1; L1: sload_1; getfield_s_this 101; // short com/josh/vku2f/PublicKeyCredentialParams.listIndex if_scmpge L9; L2: getfield_a_this 100; // reference com/josh/vku2f/PublicKeyCredentialParams.paramList sload_1; saload; bspush -7; if_scmpne L4; L3: bspush 33; sreturn; L4: getfield_a_this 100; // reference com/josh/vku2f/PublicKeyCredentialParams.paramList sload_1; saload; sspush -257; if_scmpne L6; L5: bspush 40; sreturn; L6: getfield_a_this 100; // reference com/josh/vku2f/PublicKeyCredentialParams.paramList sload_1; saload; bspush -37; if_scmpne L8; L7: bspush 44; sreturn; L8: sinc 1 1; goto L1; L9: sconst_0; sreturn; } } .class public PublicKeyCredentialRpEntity 25 extends PublicKeyCredentialEntity { .fields { DomString rpId 0; // Lcom/josh/vku2f/DomString; } .publicMethodTable 2 { equals(Ljava/lang/Object;)Z; setName([BS)V; setRp([BS)V; checkId([BSS)Z; checkId(Lcom/josh/vku2f/PublicKeyCredentialRpEntity;)Z; getRp([BS)V; getRpLen()S; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 347; // com/josh/vku2f/PublicKeyCredentialEntity.<init>()V return; } .method public setRp([BS)V 2 { .stack 5; .locals 0; L0: aload_0; new 184; // com/josh/vku2f/DomString dup; aload_1; sload_2; invokespecial 185; // com/josh/vku2f/DomString.<init>([BS)V putfield_a 102; // reference com/josh/vku2f/PublicKeyCredentialRpEntity.rpId return; } .method public checkId([BSS)Z 3 { .stack 4; .locals 0; L0: getfield_a_this 102; // reference com/josh/vku2f/PublicKeyCredentialRpEntity.rpId aload_1; sload_2; sload_3; invokevirtual 298; // checkEquals([BSS)Z sreturn; } .method public checkId(Lcom/josh/vku2f/PublicKeyCredentialRpEntity;)Z 4 { .stack 2; .locals 0; L0: getfield_a_this 102; // reference com/josh/vku2f/PublicKeyCredentialRpEntity.rpId aload_1; getfield_a 102; // reference com/josh/vku2f/PublicKeyCredentialRpEntity.rpId invokevirtual 349; // checkEquals(Lcom/josh/vku2f/DomString;)Z sreturn; } .method public getRp([BS)V 5 { .stack 5; .locals 0; L0: getfield_a_this 102; // reference com/josh/vku2f/PublicKeyCredentialRpEntity.rpId getfield_a 53; // reference com/josh/vku2f/DomString.str sconst_0; aload_1; sload_2; getfield_a_this 102; // reference com/josh/vku2f/PublicKeyCredentialRpEntity.rpId getfield_s 54; // short com/josh/vku2f/DomString.len invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; return; } .method public getRpLen()S 6 { .stack 1; .locals 0; L0: getfield_a_this 102; // reference com/josh/vku2f/PublicKeyCredentialRpEntity.rpId getfield_s 54; // short com/josh/vku2f/DomString.len sreturn; } } .class public PublicKeyCredentialUserEntity 26 extends PublicKeyCredentialEntity { .fields { public byte numData 0; // B public byte[] id 1; // [B public DomString displayName 2; // Lcom/josh/vku2f/DomString; public boolean[] dataPresent 3; // [Z public byte[] icon 4; // [B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; setName([BS)V; setId([BSS)V; setIcon([BS)V; setDisplayName([BS)V; checkId([BSS)Z; checkId(Lcom/josh/vku2f/PublicKeyCredentialUserEntity;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 2; .locals 0; L0: aload_0; invokespecial 347; // com/josh/vku2f/PublicKeyCredentialEntity.<init>()V aload_0; sconst_4; newarray 10; putfield_a 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_0; putfield_b_this 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData return; } .method public setId([BSS)V 2 { .stack 5; .locals 0; L0: aload_0; sload_3; newarray 11; putfield_a 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id aload_1; sload_2; getfield_a_this 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id sconst_0; sload_3; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_1; baload; ifne L2; L1: getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_1; sconst_1; bastore; aload_0; dup; getfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData sconst_1; sadd; s2b; putfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData L2: return; } .method public setIcon([BS)V 3 { .stack 5; .locals 1; L0: aload_0; sload_2; newarray 11; putfield_a 57; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.icon aload_1; sconst_0; getfield_a_this 57; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.icon sconst_0; sload_2; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_3; baload; ifne L2; L1: getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_3; sconst_1; bastore; aload_0; dup; getfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData sconst_1; sadd; s2b; putfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData L2: goto L4; L3: astore_3; bspush -6; invokestatic 128; // javacard/framework/UserException.throwIt(S)V L4: return; .exceptionTable { // start_block end_block handler_block catch_type_index L0 L2 L3 351; } } .method public setDisplayName([BS)V 4 { .stack 5; .locals 0; L0: aload_0; new 184; // com/josh/vku2f/DomString dup; aload_1; sload_2; invokespecial 185; // com/josh/vku2f/DomString.<init>([BS)V putfield_a 52; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.displayName getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_2; baload; ifne L2; L1: getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_2; sconst_1; bastore; aload_0; dup; getfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData sconst_1; sadd; s2b; putfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData L2: return; } .method public checkId([BSS)Z 5 { .stack 5; .locals 0; L0: sload_3; getfield_a_this 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id arraylength; if_scmpeq L2; L1: sconst_0; sreturn; L2: aload_1; sload_2; getfield_a_this 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id sconst_0; sload_3; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L4; L3: sconst_1; goto L5; L4: sconst_0; L5: sreturn; } .method public setName([BS)V 1 { .stack 5; .locals 0; L0: aload_0; new 184; // com/josh/vku2f/DomString dup; aload_1; sload_2; invokespecial 185; // com/josh/vku2f/DomString.<init>([BS)V putfield_a 99; // reference com/josh/vku2f/PublicKeyCredentialEntity.name getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_0; baload; ifne L2; L1: getfield_a_this 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent sconst_0; sconst_1; bastore; aload_0; dup; getfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData sconst_1; sadd; s2b; putfield_b 51; // byte com/josh/vku2f/PublicKeyCredentialUserEntity.numData L2: return; } .method public checkId(Lcom/josh/vku2f/PublicKeyCredentialUserEntity;)Z 6 { .stack 4; .locals 0; L0: aload_1; getfield_a_this 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id sconst_0; getfield_a_this 55; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.id arraylength; invokevirtual 295; // checkId([BSS)Z sreturn; } } .class public Random 27 extends 0.0 { // extends java/lang/Object .fields { private static 1.14 rng; // Ljavacard/security/RandomData; } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } .method public static getInstance()Ljavacard/security/RandomData; 1 { .stack 1; .locals 0; .descriptor Ljavacard/security/RandomData; 1.14; L0: getstatic_a 352; // reference com/josh/vku2f/Random.rng ifnonnull L2; L1: sconst_2; invokestatic 353; // javacard/security/RandomData.getInstance(B)Ljavacard/security/RandomData; putstatic_a 352; // reference com/josh/vku2f/Random.rng L2: getstatic_a 352; // reference com/josh/vku2f/Random.rng areturn; } } .class public abstract StoredCredential 28 extends 0.0 { // extends java/lang/Object .fields { protected boolean initialised 0; // Z protected boolean hmacEnabled 1; // Z protected byte[] credRandom 2; // [B byte[] credentialId 3; // [B 1.16 keyPair 4; // Ljavacard/security/KeyPair; PublicKeyCredentialUserEntity userEntity 5; // Lcom/josh/vku2f/PublicKeyCredentialUserEntity; PublicKeyCredentialRpEntity rpEntity 6; // Lcom/josh/vku2f/PublicKeyCredentialRpEntity; private final byte[] signingCounter 7; // [B private static 1.14 randomData; // Ljavacard/security/RandomData; } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; doHmacSecret([BSS)S; initialiseCredSecret()Z; checkId([BSS)Z; getPresentUser()[Z; incrementCounter()V; readCounter([BS)S; doAttestationCommon([BS)V; performSignature([BSS[BS)S; getAttestedData([BS)S; getAttestedLen()S; } .packageMethodTable 0 { } .method protected <init>()V 0 { .stack 4; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V getstatic_a 354; // reference com/josh/vku2f/StoredCredential.randomData ifnonnull L2; L1: invokestatic 308; // com/josh/vku2f/Random.getInstance()Ljavacard/security/RandomData; putstatic_a 354; // reference com/josh/vku2f/StoredCredential.randomData L2: aload_0; bspush 16; newarray 11; putfield_a 48; // reference com/josh/vku2f/StoredCredential.credentialId getstatic_a 354; // reference com/josh/vku2f/StoredCredential.randomData getfield_a_this 48; // reference com/josh/vku2f/StoredCredential.credentialId sconst_0; bspush 16; invokevirtual 355; // generateData([BSS)V aload_0; sconst_4; newarray 11; putfield_a 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_0; putfield_b_this 105; // boolean com/josh/vku2f/StoredCredential.initialised sconst_0; putfield_b_this 106; // boolean com/josh/vku2f/StoredCredential.hmacEnabled return; } .method public doHmacSecret([BSS)S 1 { .stack 1; .locals 0; L0: sconst_0; sreturn; } .method public initialiseCredSecret()Z 2 { .stack 4; .locals 0; L0: aload_0; bspush 32; newarray 11; putfield_a 107; // reference com/josh/vku2f/StoredCredential.credRandom getstatic_a 354; // reference com/josh/vku2f/StoredCredential.randomData getfield_a_this 107; // reference com/josh/vku2f/StoredCredential.credRandom sconst_0; bspush 32; invokevirtual 355; // generateData([BSS)V sconst_1; putfield_b_this 106; // boolean com/josh/vku2f/StoredCredential.hmacEnabled sconst_1; sreturn; } .method public checkId([BSS)Z 3 { .stack 5; .locals 0; L0: sload_3; bspush 16; if_scmpeq L2; L1: sconst_0; sreturn; L2: getfield_a_this 48; // reference com/josh/vku2f/StoredCredential.credentialId sconst_0; aload_1; sload_2; sload_3; invokestatic 130; // javacard/framework/Util.arrayCompare([BS[BSS)B ifne L4; L3: sconst_1; goto L5; L4: sconst_0; L5: sreturn; } .method public getPresentUser()[Z 4 { .stack 1; .locals 0; L0: getfield_a_this 50; // reference com/josh/vku2f/StoredCredential.userEntity getfield_a 103; // reference com/josh/vku2f/PublicKeyCredentialUserEntity.dataPresent areturn; } .method protected incrementCounter()V 5 { .stack 4; .locals 1; L0: invokestatic 262; // javacard/framework/JCSystem.beginTransaction()V sconst_3; sstore_1; L1: sload_1; sconst_1; if_scmple L5; L2: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sload_1; baload; sspush 255; if_scmpne L4; L3: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sload_1; sconst_1; ssub; dup2; baload; sconst_1; sadd; s2b; bastore; getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sload_1; sconst_0; bastore; invokestatic 263; // javacard/framework/JCSystem.commitTransaction()V return; L4: sinc 1 -1; goto L1; L5: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_0; baload; sspush 255; if_scmpne L10; L6: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_1; baload; sspush 255; if_scmpne L10; L7: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_2; baload; sspush 255; if_scmpne L10; L8: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_3; baload; sspush 255; if_scmpne L10; L9: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_0; sconst_4; sconst_0; invokestatic 360; // javacard/framework/Util.arrayFillNonAtomic([BSSB)S pop; invokestatic 263; // javacard/framework/JCSystem.commitTransaction()V return; L10: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_3; dup2; baload; sconst_1; sadd; s2b; bastore; invokestatic 263; // javacard/framework/JCSystem.commitTransaction()V return; } .method public readCounter([BS)S 6 { .stack 5; .locals 0; L0: getfield_a_this 104; // reference com/josh/vku2f/StoredCredential.signingCounter sconst_0; aload_1; sload_2; sconst_4; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; sconst_4; sreturn; } .method protected doAttestationCommon([BS)V 7 { .stack 5; .locals 0; L0: getstatic_a 259; // reference com/josh/vku2f/CTAP2.aaguid sconst_0; aload_1; sload_2; bspush 16; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; aload_1; sload_2; bspush 16; sadd; sconst_0; bastore; aload_1; sload_2; bspush 17; sadd; bspush 16; bastore; getfield_a_this 48; // reference com/josh/vku2f/StoredCredential.credentialId sconst_0; aload_1; sload_2; bspush 18; sadd; bspush 16; invokestatic 350; // javacard/framework/Util.arrayCopy([BS[BSS)S pop; return; } .method public abstract performSignature([BSS[BS)S 8 { } .method public abstract getAttestedData([BS)S 9 { } .method public abstract getAttestedLen()S 10 { } } .class public StoredES256Credential 29 extends StoredCredential { .fields { 1.15 sig 0; // Ljavacard/security/Signature; } .publicMethodTable 8 { equals(Ljava/lang/Object;)Z; doHmacSecret([BSS)S; initialiseCredSecret()Z; checkId([BSS)Z; getPresentUser()[Z; incrementCounter()V; readCounter([BS)S; doAttestationCommon([BS)V; performSignature([BSS[BS)S; getAttestedData([BS)S; getAttestedLen()S; } .packageMethodTable 0 { } .method public <init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V 0 { .stack 5; .locals 0; L0: aload_0; invokespecial 361; // com/josh/vku2f/StoredCredential.<init>()V aload_0; new 200; // javacard/security/KeyPair dup; sconst_5; sspush 256; invokespecial 288; // javacard/security/KeyPair.<init>(BS)V putfield_a 108; // reference com/josh/vku2f/StoredCredential.keyPair getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 120; // T_CLASSORINTERFACE javacard/security/ECKey invokestatic 124; // com/josh/vku2f/KeyParams.sec256r1params(Ljavacard/security/ECKey;)V getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 127; // genKeyPair()V aload_0; aload_1; invokevirtual 363; // getUser()Lcom/josh/vku2f/PublicKeyCredentialUserEntity; putfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity aload_0; aload_1; invokevirtual 364; // getRp()Lcom/josh/vku2f/PublicKeyCredentialRpEntity; putfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity aload_0; bspush 33; sconst_0; invokestatic 194; // javacard/security/Signature.getInstance(BZ)Ljavacard/security/Signature; putfield_a 109; // reference com/josh/vku2f/StoredES256Credential.sig getfield_a_this 109; // reference com/josh/vku2f/StoredES256Credential.sig getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 236; // getPrivate()Ljavacard/security/PrivateKey; sconst_1; invokevirtual 258; // init(Ljavacard/security/Key;B)V return; } .method public performSignature([BSS[BS)S 8 { .stack 6; .locals 0; L0: aload_0; invokevirtual 366; // incrementCounter()V getfield_a_this 109; // reference com/josh/vku2f/StoredES256Credential.sig aload_1; sload_2; sload_3; aload 4; sload 5; invokevirtual 278; // sign([BSS[BS)S sreturn; } .method public getAttestedLen()S 10 { .stack 1; .locals 0; L0: bspush 111; sreturn; } .method public getAttestedData([BS)S 9 { .stack 4; .locals 3; L0: new 113; // com/josh/vku2f/CBOREncoder dup; invokespecial 114; // com/josh/vku2f/CBOREncoder.<init>()V astore_3; L1: bspush 65; sconst_1; invokestatic 112; // javacard/framework/JCSystem.makeTransientByteArray(SB)[B astore 4; L2: goto L4; L3: astore 5; bspush 65; newarray 11; astore 4; L4: getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 357; // T_CLASSORINTERFACE javacard/security/ECPublicKey aload 4; sconst_0; invokeinterface 3 357 19; // javacard/security/ECPublicKey pop; aload_0; aload_1; sload_2; invokevirtual 367; // doAttestationCommon([BS)V aload_3; aload_1; sload_2; bspush 34; sadd; sspush 1000; invokevirtual 187; // init([BSS)V aload_3; sconst_5; invokevirtual 223; // startMap(S)S pop; aload_3; sconst_1; invokevirtual 336; // writeRawByte(B)S pop; aload_3; sconst_2; invokevirtual 245; // encodeUInt8(B)S pop; aload_3; sconst_3; invokevirtual 336; // writeRawByte(B)S pop; aload_3; bspush 6; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; sconst_0; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; sconst_1; invokevirtual 245; // encodeUInt8(B)S pop; aload_3; sconst_1; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; aload 4; sconst_1; bspush 32; invokevirtual 191; // encodeByteString([BSS)S pop; aload_3; sconst_2; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; aload 4; bspush 33; bspush 32; invokevirtual 191; // encodeByteString([BSS)S pop; aconst_null; astore 4; invokestatic 149; // javacard/framework/JCSystem.requestObjectDeletion()V bspush 111; sreturn; .exceptionTable { // start_block end_block handler_block catch_type_index L1 L2 L3 358; } } } .class public StoredPS256Credential 30 extends StoredCredential { .fields { 1.15 kpSignature 0; // Ljavacard/security/Signature; } .publicMethodTable 8 { equals(Ljava/lang/Object;)Z; doHmacSecret([BSS)S; initialiseCredSecret()Z; checkId([BSS)Z; getPresentUser()[Z; incrementCounter()V; readCounter([BS)S; doAttestationCommon([BS)V; performSignature([BSS[BS)S; getAttestedData([BS)S; getAttestedLen()S; } .packageMethodTable 0 { } .method public <init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V 0 { .stack 5; .locals 0; L0: aload_0; invokespecial 361; // com/josh/vku2f/StoredCredential.<init>()V aload_0; new 200; // javacard/security/KeyPair dup; sconst_2; sspush 2048; invokespecial 288; // javacard/security/KeyPair.<init>(BS)V putfield_a 108; // reference com/josh/vku2f/StoredCredential.keyPair getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 127; // genKeyPair()V aload_0; aload_1; invokevirtual 363; // getUser()Lcom/josh/vku2f/PublicKeyCredentialUserEntity; putfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity aload_0; aload_1; invokevirtual 364; // getRp()Lcom/josh/vku2f/PublicKeyCredentialRpEntity; putfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity aload_0; bspush 44; sconst_0; invokestatic 194; // javacard/security/Signature.getInstance(BZ)Ljavacard/security/Signature; putfield_a 110; // reference com/josh/vku2f/StoredPS256Credential.kpSignature getfield_a_this 110; // reference com/josh/vku2f/StoredPS256Credential.kpSignature getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 236; // getPrivate()Ljavacard/security/PrivateKey; sconst_1; invokevirtual 258; // init(Ljavacard/security/Key;B)V return; } .method public performSignature([BSS[BS)S 8 { .stack 6; .locals 0; L0: aload_0; invokevirtual 369; // incrementCounter()V getfield_a_this 110; // reference com/josh/vku2f/StoredPS256Credential.kpSignature aload_1; sload_2; sload_3; aload 4; sload 5; invokevirtual 278; // sign([BSS[BS)S sreturn; } .method public getAttestedLen()S 10 { .stack 1; .locals 0; L0: sspush 305; sreturn; } .method public getAttestedData([BS)S 9 { .stack 4; .locals 2; L0: new 113; // com/josh/vku2f/CBOREncoder dup; invokespecial 114; // com/josh/vku2f/CBOREncoder.<init>()V astore_3; aload_0; aload_1; sload_2; invokevirtual 370; // doAttestationCommon([BS)V aload_3; aload_1; sload_2; bspush 34; sadd; sspush 1000; invokevirtual 187; // init([BSS)V aload_3; sconst_4; invokevirtual 223; // startMap(S)S pop; aload_3; sconst_1; invokevirtual 336; // writeRawByte(B)S pop; aload_3; sconst_3; invokevirtual 245; // encodeUInt8(B)S pop; aload_3; sconst_3; invokevirtual 336; // writeRawByte(B)S pop; aload_3; bspush 36; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; sconst_0; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; sspush 256; invokevirtual 227; // startByteString(S)S sstore 4; getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 371; // T_CLASSORINTERFACE javacard/security/RSAPublicKey aload_1; sload 4; invokeinterface 3 371 5; // javacard/security/RSAPublicKey pop; aload_3; sconst_1; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; sconst_3; invokevirtual 227; // startByteString(S)S sstore 4; getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 371; // T_CLASSORINTERFACE javacard/security/RSAPublicKey aload_1; sload 4; invokeinterface 3 371 4; // javacard/security/RSAPublicKey pop; sspush 305; sreturn; } } .class public StoredRS256Credential 31 extends StoredCredential { .fields { 4.1 kpSignature 0; // Ljavacardx/crypto/Cipher; } .publicMethodTable 8 { equals(Ljava/lang/Object;)Z; doHmacSecret([BSS)S; initialiseCredSecret()Z; checkId([BSS)Z; getPresentUser()[Z; incrementCounter()V; readCounter([BS)S; doAttestationCommon([BS)V; performSignature([BSS[BS)S; getAttestedData([BS)S; getAttestedLen()S; } .packageMethodTable 0 { } .method public <init>(Lcom/josh/vku2f/AuthenticatorMakeCredential;)V 0 { .stack 5; .locals 0; L0: aload_0; invokespecial 361; // com/josh/vku2f/StoredCredential.<init>()V aload_0; new 200; // javacard/security/KeyPair dup; sconst_2; sspush 2048; invokespecial 288; // javacard/security/KeyPair.<init>(BS)V putfield_a 108; // reference com/josh/vku2f/StoredCredential.keyPair getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 127; // genKeyPair()V aload_0; aload_1; invokevirtual 363; // getUser()Lcom/josh/vku2f/PublicKeyCredentialUserEntity; putfield_a 50; // reference com/josh/vku2f/StoredCredential.userEntity aload_0; aload_1; invokevirtual 364; // getRp()Lcom/josh/vku2f/PublicKeyCredentialRpEntity; putfield_a 42; // reference com/josh/vku2f/StoredCredential.rpEntity aload_0; bspush 10; sconst_0; invokestatic 314; // javacardx/crypto/Cipher.getInstance(BZ)Ljavacardx/crypto/Cipher; putfield_a 111; // reference com/josh/vku2f/StoredRS256Credential.kpSignature getfield_a_this 111; // reference com/josh/vku2f/StoredRS256Credential.kpSignature getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 236; // getPrivate()Ljavacard/security/PrivateKey; sconst_2; invokevirtual 373; // init(Ljavacard/security/Key;B)V return; } .method public performSignature([BSS[BS)S 8 { .stack 6; .locals 0; L0: aload_0; invokevirtual 374; // incrementCounter()V getfield_a_this 111; // reference com/josh/vku2f/StoredRS256Credential.kpSignature aload_1; sload_2; sload_3; aload 4; sload 5; invokevirtual 320; // doFinal([BSS[BS)S sreturn; } .method public getAttestedLen()S 10 { .stack 1; .locals 0; L0: sspush 307; sreturn; } .method public getAttestedData([BS)S 9 { .stack 4; .locals 2; L0: new 113; // com/josh/vku2f/CBOREncoder dup; invokespecial 114; // com/josh/vku2f/CBOREncoder.<init>()V astore_3; aload_0; aload_1; sload_2; invokevirtual 375; // doAttestationCommon([BS)V aload_3; aload_1; sload_2; bspush 34; sadd; sspush 1000; invokevirtual 187; // init([BSS)V aload_3; sconst_4; invokevirtual 223; // startMap(S)S pop; aload_3; sconst_1; invokevirtual 336; // writeRawByte(B)S pop; aload_3; sconst_3; invokevirtual 245; // encodeUInt8(B)S pop; aload_3; sconst_3; invokevirtual 336; // writeRawByte(B)S pop; aload_3; sspush 256; invokevirtual 376; // encodeNegativeUInt16(S)S pop; aload_3; sconst_0; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; sspush 256; invokevirtual 227; // startByteString(S)S sstore 4; getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 371; // T_CLASSORINTERFACE javacard/security/RSAPublicKey aload_1; sload 4; invokeinterface 3 371 5; // javacard/security/RSAPublicKey pop; aload_3; sconst_1; invokevirtual 246; // encodeNegativeUInt8(B)S pop; aload_3; sconst_3; invokevirtual 227; // startByteString(S)S sstore 4; getfield_a_this 108; // reference com/josh/vku2f/StoredCredential.keyPair invokevirtual 362; // getPublic()Ljavacard/security/PublicKey; checkcast 0 371; // T_CLASSORINTERFACE javacard/security/RSAPublicKey aload_1; sload 4; invokeinterface 3 371 4; // javacard/security/RSAPublicKey pop; sspush 306; sreturn; } } .class public Utf8Strings 32 extends 0.0 { // extends java/lang/Object .fields { public static final byte[] UTF8_UP 0 = {117,112}; // [B public static final byte[] UTF8_ID 1 = {105,100}; // [B public static final byte[] UTF8_NAME 2 = {110,97,109,101}; // [B public static final byte[] UTF8_DISPLAYNAME 3 = {100,105,115,112,108,97,121,110,97,109,101}; // [B public static final byte[] UTF8_ALG 4 = {97,108,103}; // [B public static final byte[] UTF8_UV 5 = {117,118}; // [B public static final byte[] UTF8_RK 6 = {114,107}; // [B public static final byte[] UTF8_TYPE 7 = {116,121,112,101}; // [B public static final byte[] UTF8_PACKED 8 = {112,97,99,107,101,100}; // [B public static final byte[] UTF8_SIG 9 = {115,105,103}; // [B public static final byte[] UTF8_X5C 10 = {120,53,99}; // [B public static final byte[] UTF8_PUBLIC_KEY 11 = {112,117,98,108,105,99,45,107,101,121}; // [B public static final byte[] UTF8_FIDO2 12 = {70,73,68,79,95,50,95,48}; // [B public static final byte[] UTF8_ICON 13 = {105,99,111,110}; // [B public static final byte[] UTF8_NULL 14 = {110,117,108,108}; // [B public static final byte[] UTF8_EXTENSIONS 15 = {101,120,116,101,110,115,105,111,110,115}; // [B public static final byte[] UTF8_HMAC 16 = {72,77,65,67}; // [B public static final byte[] UTF8_Cx 17 = {67,120}; // [B } .publicMethodTable 1 { equals(Ljava/lang/Object;)Z; } .packageMethodTable 0 { } .method public <init>()V 0 { .stack 1; .locals 0; L0: aload_0; invokespecial 289; // java/lang/Object.<init>()V return; } } }