Code with Misuse: |
class PassportAuthService { /** * Performs the <i>Active Authentication</i> protocol. * * @param pubkey the public key to use (usually read from the card) * * @return a boolean indicating whether the card was authenticated * * @throws GeneralSecurityException if something goes wrong */ public boolean doAA(PublicKey pubkey) throws GeneralSecurityException { aaCipher.init(Cipher.ENCRYPT_MODE, pubkey); aaSignature.initVerify(pubkey); byte[] m2 = new byte[8]; /* TODO: random rndIFD */ byte[] response = service.sendInternalAuthenticate(wrapper, m2); System.out.println("DEBUG: response.length = " + response.length); System.out.println("DEBUG: response = " + Hex.bytesToHexString(response)); int digestLength = aaDigest.getDigestLength(); /* should always be 20 */ byte[] plaintext = aaCipher.doFinal(response); byte[] m1 = Util.recoverMessage(digestLength, plaintext); // System.out.println("DEBUG: m1 = " + Hex.bytesToHexString(m1)); aaSignature.update(m1); aaSignature.update(m2); boolean success = aaSignature.verify(response); notifyAAPerformed(pubkey, m1, m2, success); if (success) { state = AA_AUTHENTICATED_STATE; } return success; }
}
|