Closed ZhuoZhuoCrayon closed 1 year ago
def sm2_demo(): msg = b"message" key = ec.generate_private_key(ec.SM2()).private_numbers().private_key() # 验证 key.public_key 签名 & 验签 signature = key.sign(msg, ec.ECDSA(hashes.SM3())) key.public_key().verify(signature, msg, ec.ECDSA(hashes.SM3())) # 将公钥导出为文本 pem_public_key_str = key.public_key().public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ).decode() # 通过文本加载公钥 pubkey_from_text = serialization.load_pem_public_key(pem_public_key_str.encode()) # 验证公钥等价 assert pubkey_from_text.public_numbers() == key.public_key().public_numbers() assert pubkey_from_text.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) == key.public_key().public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) # 验签 pubkey_from_text.verify(signature, msg, ec.ECDSA(hashes.SM3()))
使用文本载入的公钥验签异常:
InvalidSignature Traceback (most recent call last) <ipython-input-3-621b0280cfd7> in <module> ----> 1 sm2_demo() <ipython-input-2-3f024d497b2a> in sm2_demo() 23 ) 24 # 验签 ---> 25 pubkey_from_text.verify(signature, msg, ec.ECDSA(hashes.SM3())) /nm-bkdev-venv-36/lib/python3.6/site-packages/tongsuopy/backends/tongsuo/ec.py in verify(self, signature, data, signature_algorithm) 361 _check_signature_algorithm(signature_algorithm) 362 _ecdsa_sig_verify( --> 363 self._backend, signature_algorithm.algorithm, self, signature, data 364 ) /nm-bkdev-venv-36/lib/python3.6/site-packages/tongsuopy/backends/tongsuo/ec.py in _ecdsa_sig_verify(backend, algorithm, public_key, signature, data) 144 if res == 0: 145 backend._consume_errors() --> 146 raise InvalidSignature 147 148
使用文本载入的公钥验签异常: