def Sign(self, acc: account.Account) -> tx_pb2.Transaction: """ 签名 :param acc: account账户 :return: """ copyTx = CopyTx(self.tx) self.tx = copyTx data = self.tx.SerializeToString() self.tx.signature.pubkey = bytes.fromhex(acc.publicKey) if acc.signType == signer.SECP256K1: self.tx.signature.ty = 1 self.tx.signature.signature = signer.sign(data, acc.privateKey) return self.tx elif acc.signType == signer.SM2: self.tx.signature.ty = 3 sm2util = sm2.SM2Util() self.tx.signature.signature = bytes.fromhex(sm2util.sign(data, acc.privateKey, "0")) return self.tx elif acc.signType == signer.ED25519: self.tx.signature.ty = 2 self.tx.signature.signature = ed25519Signer.sign(data, acc.privateKey) return self.tx else: raise ValueError( "Error: signType is not correct." )
def CheckSign(self) -> bool: """ 验签 :return: bool """ if self.tx.signature.ty == 1: copyTx = CopyTx(self.tx) data = copyTx.SerializeToString() result = signer.verify(data, self.tx.signature.signature, bytes.hex(self.tx.signature.pubkey)) return result elif self.tx.signature.ty == 3: copyTx = CopyTx(self.tx) data = copyTx.SerializeToString() sm2util = sm2.SM2Util() result = sm2util.verify(data, bytes.hex(self.tx.signature.pubkey), bytes.hex(self.tx.signature.signature), "0") return result elif self.tx.signature.ty == 2: copyTx = CopyTx(self.tx) data = copyTx.SerializeToString() result = ed25519Signer.verify(data, self.tx.signature.signature, self.tx.signature.pubkey.hex()) return result else: raise ValueError( "Error: signType is not correct." ) return False
def CheckSign(tx: tx_pb2.Transaction) -> bool: """ CheckSign :param tx: tx_pb2.Transaction :return: bool """ if tx.signature.ty == 1: copyTx = CopyTx(tx) data = copyTx.SerializeToString() result = signer.verify(data, tx.signature.signature, bytes.hex(tx.signature.pubkey)) return result elif tx.signature.ty == 3: copyTx = CopyTx(tx) data = copyTx.SerializeToString() sm2util = sm2.SM2Util() result = sm2util.verify(data, bytes.hex(tx.signature.pubkey), bytes.hex(tx.signature.signature), "0") return result elif tx.signature.ty == 2: copyTx = CopyTx(tx) data = copyTx.SerializeToString() result = ed25519Signer.verify(data, tx.signature.signature, tx.signature.pubkey.hex()) return result else: raise ValueError( "Error: signType is not correct." ) return False
def Sign(tx: tx_pb2.Transaction, acc: account.Account) -> tx_pb2.Transaction: """ 签名函数 :param tx: tx_pb2.Transaction :param acc: account.Account :return: """ copyTx = CopyTx(tx) data = copyTx.SerializePartialToString() tx.signature.pubkey = bytes.fromhex(acc.publicKey) if acc.signType == signer.SECP256K1: tx.signature.ty = 1 tx.signature.signature = signer.sign(data, acc.privateKey) return tx elif acc.signType == signer.SM2: tx.signature.ty = 3 sm2util = sm2.SM2Util() tx.signature.signature = bytes.fromhex(sm2util.sign(data, acc.privateKey, '0')) return tx elif acc.signType == signer.ED25519: tx.signature.ty = 2 tx.signature.signature = ed25519Signer.sign(data, acc.privateKey) return tx else: raise ValueError( "Error: signType is not correct." )
def __init__(self, privateKey: str, signType: str): self.privateKey = privateKey if signType == signer.SECP256K1: self.publicKey = signer.publicKeyFromPrivate(privateKey) elif signType == signer.SM2: sm2Util = sm2.SM2Util() self.publicKey = sm2Util.pubKeyFromPrivate(privateKey) elif signType == signer.ED25519: self.publicKey = ed25519Signer.publicKeyFromPrivate(privateKey) else: raise ValueError("Error: signType is not correct.") self.address = address.pubKeyToAddr(self.publicKey) self.signType = signType
def newAccount(signType=signer.SECP256K1): if signType == signer.SECP256K1: privateKey = signer.generatePrivateKey() return Account(privateKey, signType) elif signType == signer.SM2: sm2Util = sm2.SM2Util() privateKey, _ = sm2Util.genetateKey() return Account(privateKey, signType) elif signType == signer.ED25519: privateKey = ed25519Signer.generatePrivateKey() return Account(privateKey, signType) else: raise ValueError("Error: signType is not correct.")
from chain33.crypto import signer, address, account from chain33.crypto.ed25519 import ed25519Signer from chain33.crypto.gm import sm2, sm4, sm3 def trans(s): return "".join('%.2x' % x for x in s) if __name__ == '__main__': data = bytes([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10]) key = bytes([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10]) sm2Util = sm2.SM2Util() priv, pub = sm2Util.genetateKey() cipher = sm2Util.encrypt(data, pub) text = sm2Util.decrypt(cipher, priv) assert data == text signature = sm2Util.sign(data, priv, "0") res = sm2Util.verify(data, pub, signature, "0") assert res == True sm3Util = sm3.SM3Util() res = sm3Util.hash(b"abc") sm4Util = sm4.SM4Util() cipher = sm4Util.encryptECB(key, data)