@ -299,7 +299,7 @@ class ECC:
if privkey is not None :
OpenSSL . BN_free ( priv_key )
def sign ( self , inputb ):
def sign ( self , inputb , digest_alg = OpenSSL . EVP_ecdsa ):
"""
Sign the input with ECDSA method and returns the signature
"""
@ -338,11 +338,11 @@ class ECC:
raise Exception ( " [OpenSSL] EC_KEY_check_key FAIL ... " )
OpenSSL . EVP_MD_CTX_init ( md_ctx )
OpenSSL . EVP_DigestInit ( md_ctx , OpenSSL . EVP_ecdsa ( ) )
OpenSSL . EVP_DigestInit _ex( md_ctx , digest_alg ( ) , None )
if ( OpenSSL . EVP_DigestUpdate ( md_ctx , buff , size ) ) == 0 :
raise Exception ( " [OpenSSL] EVP_DigestUpdate FAIL ... " )
OpenSSL . EVP_DigestFinal ( md_ctx , digest , dgst_len )
OpenSSL . EVP_DigestFinal _ex ( md_ctx , digest , dgst_len )
OpenSSL . ECDSA_sign ( 0 , digest , dgst_len . contents , sig , siglen , key )
if ( OpenSSL . ECDSA_verify ( 0 , digest , dgst_len . contents , sig ,
siglen . contents , key ) ) != 1 :
@ -358,7 +358,7 @@ class ECC:
OpenSSL . EC_POINT_free ( pub_key )
OpenSSL . EVP_MD_CTX_destroy ( md_ctx )
def verify ( self , sig , inputb ):
def verify ( self , sig , inputb , digest_alg = OpenSSL . EVP_ecdsa ):
"""
Verify the signature with the input and the local public key .
Returns a boolean
@ -392,11 +392,11 @@ class ECC:
raise Exception ( " [OpenSSL] EC_KEY_check_key FAIL ... " )
OpenSSL . EVP_MD_CTX_init ( md_ctx )
OpenSSL . EVP_DigestInit ( md_ctx , OpenSSL . EVP_ecdsa ( ) )
OpenSSL . EVP_DigestInit _ex( md_ctx , digest_alg ( ) , None )
if ( OpenSSL . EVP_DigestUpdate ( md_ctx , binputb , len ( inputb ) ) ) == 0 :
raise Exception ( " [OpenSSL] EVP_DigestUpdate FAIL ... " )
OpenSSL . EVP_DigestFinal ( md_ctx , digest , dgst_len )
OpenSSL . EVP_DigestFinal _ex ( md_ctx , digest , dgst_len )
ret = OpenSSL . ECDSA_verify (
0 , digest , dgst_len . contents , bsig , len ( sig ) , key )