From 949d44b8bebe6d79cb529e8f7d9f922cb39e48a5 Mon Sep 17 00:00:00 2001 From: smlu Date: Mon, 21 Oct 2019 04:18:50 +0200 Subject: [PATCH] Refactor(AAPublicKey): Add implementation for ECDSA signature verification --- src/pymrtd/pki/keys.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pymrtd/pki/keys.py b/src/pymrtd/pki/keys.py index b0540f2..627c1d4 100644 --- a/src/pymrtd/pki/keys.py +++ b/src/pymrtd/pki/keys.py @@ -225,16 +225,25 @@ def get_dsa_verifier(pub_key: ecc.EllipticCurvePublicKey): return True +class AAPublicKey(PublicKey): + '''' Represents eMRTD Active Authentication public key ''' + def verifySignature(self, message: bytes, signature: bytes, sigAlgo: Optional[SignatureAlgorithm] = None) -> bool: """ Verifies if signature is valid using AA public key. :param message: Message to verify signature against :param signature: + :param sigAlgo: Signature algorithm used to produce signature. (ECC only) :return: True if signature is valid, otherwise False """ - if isinstance(self._pub_key, rsa.RSAPublicKey): + if self.isRsaKey(): v = iso9796e2.Dss1Verifier(self._pub_key) return v.verifySignature(message, signature) + elif self.isEcKey(): + # WARNING: THIS SCOPE WAS TESTED WITH ECDSA SIGNATURE NOT FROM eMRTD IC + if sigAlgo is None: + raise ValueError("Missing required param 'sigAlgo'") + return super().verifySignature(message, signature, sigAlgo) else: - raise NotImplementedError("ECDSA is not implemented yet") \ No newline at end of file + raise ValueError("Unsupported digital signature scheme") \ No newline at end of file