def test_tx_secp256k1_signing(self):
     tx = make_tx()
     full_hash, signature = crypto.sign_transaction(blake2b, secp256k1, key, tx)
     self.assertEqual(signature, "MEUCIQCsA7IbQ6sIxi6ANJqMEze9eNSFfp8YmPdj8oVnBBy40QIgW30dhhjyZi2WKKdKZoEph844IW3Dfm8sPMoowNrkAhE=")
     tx.invoker = "some invocation id"
     full_hash, signature = crypto.sign_transaction(blake2b, secp256k1, key, tx)
     self.assertEqual(signature, "MEQCIAOavhcfdISa+QD6KkPljl9mnVCneEeFkYCcY8dRlMUYAiBOpm490EX+D7HxHtawCX8sc0+F5N7ofLgcn8lfieyJ7Q==")
 def test_tx_sha3_256_hashing(self):
     tx = make_tx()
     full_hash, signature = crypto.sign_transaction(sha3_256, secp256k1, key, tx)
     self.assertEqual(full_hash, "YOuqbUaJYcy6aDrUJVkhZNQjGMZYIU7XtWPxssz4ODA=")
     tx.invoker = "some invocation id"
     full_hash, signature = crypto.sign_transaction(sha3_256, secp256k1, key, tx)
     self.assertEqual(full_hash, "HlYdM5TLQU6xR4lWI0zq0C58vQ9aXdd1va7pYIfwoqo=")
 def test_tx_sha256_hashing(self):
     tx = make_tx()
     full_hash, signature = crypto.sign_transaction(sha256, secp256k1, key, tx)
     self.assertEqual(full_hash, "tvP0nnwld0Ow6Wyvz0T9pS7kQ6qncBo2fBWFDwo9+8I=")
     tx.invoker = "some invocation id"
     full_hash, signature = crypto.sign_transaction(sha256, secp256k1, key, tx)
     self.assertEqual(full_hash, "sYC/PwscI0vKMBlfue/S3saeRVnggkj4XrTeJNwMtmw=")
 def test_tx_blake2b_hashing(self):
     tx = make_tx()
     full_hash, signature = crypto.sign_transaction(blake2b, secp256k1, key, tx)
     self.assertEqual(full_hash, "5z25UmHrb61hA7GFHRN9p28sS/v8H0Tnnb1Bfo4XIuc=")
     tx.invoker = "some invocation id"
     full_hash, signature = crypto.sign_transaction(blake2b, secp256k1, key, tx)
     self.assertEqual(full_hash, "+apS5zAuLgvxGBBwKDHGh8dt/AGVpwSbFmzp7/g8mYE=")
 def test_stripped_tx_verifying(self):
     tx = make_tx()
     full_hash, signature = crypto.sign_transaction(blake2b, secp256k1, key, tx)
     tx.signature = signature
     tx.full_hash = full_hash
     self.assertTrue(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     valid_tx = copy.deepcopy(tx)
     tx.invoker = "forged"
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.txn_id = "forged"
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.txn_type = "forged"
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.timestamp = "forged"
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.dc_id = "forged"
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.block_id = "forged"
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.tag = "forged"
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.full_hash = "forged=="
     self.assertFalse(crypto.verify_stripped_transaction(blake2b, secp256k1, key.pubkey, tx))
 def test_full_tx_verifying(self):
     tx = make_tx()
     tx.invoker = "something"
     full_hash, signature = crypto.sign_transaction(blake2b, secp256k1, key, tx)
     tx.signature = signature
     tx.full_hash = full_hash
     self.assertTrue(crypto.verify_full_transaction(blake2b, secp256k1, key.pubkey, tx))
     valid_tx = copy.deepcopy(tx)
     tx.payload = "forged"
     self.assertFalse(crypto.verify_full_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.invoker = "forged"
     self.assertFalse(crypto.verify_full_transaction(blake2b, secp256k1, key.pubkey, tx))
     tx = copy.deepcopy(valid_tx)
     tx.signature = "MEQCIF+o3DHBiTbpw8X6W4/yOuPF/FfANIiNnG0mFLgjBAjuAiAe/QAHN8ufmHMeRvHFItdrzVHFORGED4/msipzFORGED=="
     self.assertFalse(crypto.verify_full_transaction(blake2b, secp256k1, key.pubkey, tx))
Example #7
0
    def sign_transaction(
            self, signable_tx: "transaction_model.TransactionModel"
    ) -> Tuple[str, str]:
        """Sign a transaction
        Args:
            signable_tx: TransactionModel to sign
        Returns:
            Tuple of strings where index 0 is the base64 encoded full hash and index 1 is the base64 encoded stripped signature
        Raises:
            exceptions.InvalidNodeLevel when self is not level 1
            RuntimeError when no private key is set on self
        """
        if self.level != 1:
            raise exceptions.InvalidNodeLevel(
                "Transactions only exist on level 1 nodes")
        if self.priv is None:
            raise RuntimeError("No private key has been set for signing")

        return crypto.sign_transaction(self.hash, self.encryption, self.priv,
                                       signable_tx)