コード例 #1
0
    def setUp(self):
        self.test_private_key = PrivateKey()
        self.signer = IcxSigner(self.test_private_key.private_key)

        m = hashlib.sha256()
        m.update(b'message_for_test')
        # prepare massage msg_hash
        self.hashed_message = m.digest()
コード例 #2
0
class TestIcxSigner(unittest.TestCase):
    def setUp(self):
        self.test_private_key = PrivateKey()
        self.signer = IcxSigner(self.test_private_key.private_key)

        m = hashlib.sha256()
        m.update(b'message_for_test')
        # prepare massage msg_hash
        self.hashed_message = m.digest()

        # check if signature which sign_recoverable method made is valid
        # use ecdsa_verify. before verify signature, convert sign (recoverable_sig -> normal_sig)
        # check secp256k1 doc: https://github.com/ludbb/secp256k1-py

    def test_sign_recoverable_verify_sig(self):
        # get sign, recovery
        sign, recovery_id = self.signer.sign_recoverable(self.hashed_message)

        # Convert recoverable sig to normal sig
        deserialized_recoverable_sig = self.test_private_key.ecdsa_recoverable_deserialize(sign, recovery_id)
        normal_sig = self.test_private_key.ecdsa_recoverable_convert(deserialized_recoverable_sig)

        # Check sig
        self.assertTrue(self.test_private_key.pubkey.ecdsa_verify(self.hashed_message, normal_sig, raw=True))

        # Verify using invalid message
        m = hashlib.sha256()
        m.update(b'invalid message')
        invalid_message = m.digest()
        self.assertFalse(self.test_private_key.pubkey.ecdsa_verify(invalid_message, normal_sig, raw=True))

        # Verify using invalid private key
        invalid_privateKey = PrivateKey()
        self.assertFalse(invalid_privateKey.pubkey.ecdsa_verify(self.hashed_message, normal_sig, raw=True))

    def test_sign_base64_encode(self):
        # make signature
        encoded_sign = self.signer.sign(self.hashed_message)
        decoded_sign = base64.b64decode(encoded_sign)

        actual_id = int.from_bytes(decoded_sign[-1:], byteorder='big')
        actual_sig = decoded_sign[:len(decoded_sign) - 1]

        expected_signature, expected_recovery_id = self.signer.sign_recoverable(self.hashed_message)
        self.assertEqual(actual_id, expected_recovery_id)
        self.assertEqual(actual_sig, expected_signature)

    def test_key_from_key_store_get_private_key(self):
        # Invalid keystore file path
        self.assertRaises(KeyStoreException, key_from_key_store, './invalid_file_path', 'qwer1234%')

        # Invalid keystore password
        self.assertRaises(KeyStoreException, key_from_key_store, './tests/test_util/test_keystore', 'qwer12')
コード例 #3
0
    def from_private_key(private_key: Optional[PrivateKey] = None) -> 'IconJsonrpc':
        """Create IconJsonrpc object from PrivateKey object. If parameter is None, make PrivateKey object.

        :param private_key: PrivateKey object
        :return: IconJsonrpc object
        """
        return IconJsonrpc(IcxSigner(private_key=private_key or PrivateKey().private_key))
コード例 #4
0
    def from_key_store(keystore: str, password: str) -> 'IconJsonrpc':
        """Create IconJsonrpc object from keystore file path and password

        :param keystore: keystore file path
        :param password: password string
        :return: IconJsonrpc object
        """
        return IconJsonrpc(IcxSigner(key_from_key_store(keystore, password)))