예제 #1
0
파일: crypto.py 프로젝트: aldur/Arcula
def ecdsa_sign(k: ecdsa.SigningKey, message: bytes) -> bytes:
    """
    Generate an ECDSA signature of `message` under the signing key `k`.
    The hashing algorithm is SHA256.
    Outputs the strict DER canonical encoding of the signature (BIP66).
    """
    return k.sign(message,
                  hashfunc=hashlib.sha256,
                  sigencode=ecdsa.util.sigencode_der_canonize)
예제 #2
0
    def sign(self, signing_key: SigningKey) -> SignedTransaction:
        transaction_data = {
            "to_address": self.to_address,
            "amount": self.amount,
            "fee": self.fee,
            "nonce": self.nonce,
        }

        transaction_str = json.dumps(transaction_data).encode()
        transaction_hash = sha3_256(transaction_str).digest()
        verifying_key = signing_key.verifying_key

        signature = signing_key.sign(transaction_hash).hex()

        self.signed_transaction = {
            **transaction_data,
            "version": self.version,
            "signature": signature,
            "public_key": verifying_key.to_string("compressed").hex(),
        }
        return self.signed_transaction
예제 #3
0
def sign_message(private_key: ecdsa.SigningKey, message: str) -> str:
    """returns a signature for a given message"""
    signature = private_key.sign(bytes(message, "utf-8"))
    return str(binascii.hexlify(signature))[2:-1]
예제 #4
0
 def sign(self, private_key: ecdsa.SigningKey):
     transaction_data = str(self.raw_transaction).encode()
     return private_key.sign(transaction_data)
예제 #5
0
 def create_sign(self, sk: ecdsa.SigningKey):
     data = bytes(str(self.get_dict_wo_sign()), "utf-8")
     return sk.sign(data).hex()