@@ -94,19 +94,27 @@ def _process_jwk(self, jwk_dict):
9494 else :
9595 return public .public_key (self .cryptography_backend ())
9696
97+ def _der_to_asn1 (self , der_signature ):
98+ """Convert signature from DER encoding to ASN1 encoding."""
99+ order = (2 ** self .prepared_key .curve .key_size ) - 1
100+ return sigencode_string (* sigdecode_der (der_signature , order ), order = order )
101+
102+ def _asn1_to_der (self , asn1_signature ):
103+ """Convert signature from ASN1 encoding to DER encoding."""
104+ order = (2 ** self .prepared_key .curve .key_size ) - 1
105+ return sigencode_der (* sigdecode_string (asn1_signature , order ), order = order )
106+
97107 def sign (self , msg ):
98108 if self .hash_alg .digest_size * 8 > self .prepared_key .curve .key_size :
99109 raise TypeError ("this curve (%s) is too short "
100110 "for your digest (%d)" % (self .prepared_key .curve .name ,
101111 8 * self .hash_alg .digest_size ))
102112 signature = self .prepared_key .sign (msg , ec .ECDSA (self .hash_alg ()))
103- order = (2 ** self .prepared_key .curve .key_size ) - 1
104- return sigencode_string (* sigdecode_der (signature , order ), order = order )
113+ return self ._der_to_asn1 (signature )
105114
106115 def verify (self , msg , sig ):
107- order = (2 ** self .prepared_key .curve .key_size ) - 1
108- signature = sigencode_der (* sigdecode_string (sig , order ), order = order )
109116 try :
117+ signature = self ._asn1_to_der (sig )
110118 self .prepared_key .verify (signature , msg , ec .ECDSA (self .hash_alg ()))
111119 return True
112120 except Exception :
0 commit comments