Ejemplo n.º 1
0
 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."
         )
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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."
        )
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
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.")
Ejemplo n.º 7
0
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)