示例#1
0
def test_ed25519_round_trip_private_key():
    private_key = b"e\xc1\xe9\xfb\xcd)\xd9P\x87\x9d\xc8\xed\xb4\xa5\x1a\x0f[\x16j\x92O\xfd-\xa7\x02jn;V\xe8:\xe0"
    first_key = ED25519Key(private_key=private_key)
    private_pem = first_key.private_key_pem  # generated from private_key given
    other_key = ED25519Key(private_key_pem=private_pem)
    result_private_key = other_key.private_key  # generated from private_key_pem given
    assert (result_private_key == private_key
            ), "private key after round trip doesn't match"
示例#2
0
def test_ed25519_round_trip_private_key_pem():
    private_key_pem = (
        b"-----BEGIN PRIVATE KEY-----\n"
        b"MC4CAQAwBQYDK2VwBCIEIGXB6fvNKdlQh53I7bSlGg9bFmqST/0tpwJqbjtW6Drg\n"
        b"-----END PRIVATE KEY-----\n")
    first_key = ED25519Key(private_key_pem=private_key_pem)
    private_key = first_key.private_key  # generated from private_key_pem given
    other_key = ED25519Key(private_key=private_key)
    result_private_key_pem = (other_key.private_key_pem
                              )  # generated from private_key given
    assert (result_private_key_pem == private_key_pem
            ), "private key pem after roundtrip doesn't match"
示例#3
0
def test_account_hash(casperlabs_client):
    """ Use account generated key and hash to test python hash """
    account_path = HACK_DOCKER_DIRECTORY / "keys" / "account-0"
    key_holder = ED25519Key.from_public_key_path(account_path / "account-public.pem")
    with open(account_path / "account-id-hex", "rb") as f:
        account_hash_hex = f.read().strip().decode("UTF_8")
    expected_hash = key_holder.account_hash.hex()
    assert account_hash_hex == expected_hash
示例#4
0
def test_parse_pem_data_line_ed25519_public_key():
    pem_data = (
        b"-----BEGIN PUBLIC KEY-----\n"
        b"MCowBQYDK2VwAyEAwaURJT / kvOOr42Y3 / ScQQt3+DpgVPW0nbsv8GC70G9g=\n"
        b"-----END PUBLIC KEY-----\n")
    expected = b"\xc1\xa5\x11%?\xe4\xbc\xe3\xab\xe3f7\xfd'\x10B\xdd\xfe\x0e\x98\x15=m'n\xcb\xfc\x18.\xf4\x1b\xd8"
    result = ED25519Key._parse_pem_data(pem_data)
    assert result == expected
示例#5
0
def test_parse_pem_data_line_ed25519_private_key():
    pem_data = (
        b"-----BEGIN PRIVATE KEY-----\n"
        b"MC4CAQAwBQYDK2VwBCIEIGXB6fvNKdlQh53I7bSlGg9bFmqST/0tpwJqbjtW6Drg\n"
        b"-----END PRIVATE KEY-----\n")
    expected = b"e\xc1\xe9\xfb\xcd)\xd9P\x87\x9d\xc8\xed\xb4\xa5\x1a\x0f[\x16j\x92O\xfd-\xa7\x02jn;V\xe8:\xe0"
    result = ED25519Key._parse_pem_data(pem_data)
    assert result == expected
示例#6
0
def test_ed25519_sign():
    key_holder = ED25519Key.generate()
    data = b"0123456789"
    signature = key_holder.sign(data)
    public_key = ed25519.Ed25519PublicKey.from_public_bytes(key_holder.public_key)

    # verify raised exception when bad.
    with pytest.raises(InvalidSignature):
        public_key.verify(signature, data + b"1")
    # return of None with no exception when good.
    assert public_key.verify(signature, data) is None
示例#7
0
def genesis_account_and_hash():
    """ Returns tuple of data from genesis account using accounts.csv

     :returns: (public_key_hex, public_key_pem_path, account_hash_hex)
     """
    with open(ACCOUNTS_CSV, "r") as f:
        line = f.readline()
        account_public_key_hex = line.split(",")[0]
    key_holder = ED25519Key(public_key=bytes.fromhex(account_public_key_hex))
    with tempfile.TemporaryDirectory("rb") as td:
        key_path = Path(td) / "account-public.pem"
        with open(key_path, "wb") as f:
            f.write(key_holder.public_key_pem)
        return account_public_key_hex, key_path, key_holder.account_hash_hex
示例#8
0
def test_ed25519_generate():
    PRIVATE_KEY_BYTES_LENGTH = 32
    PUBLIC_KEY_BYTES_LENGTH = 32
    PRIVATE_KEY_BASE64_LENGTH = 64
    PUBLIC_KEY_BASE64_LENGTH = 60

    key_holder = ED25519Key.generate()

    assert len(key_holder.private_key) == PRIVATE_KEY_BYTES_LENGTH
    assert len(key_holder.public_key) == PUBLIC_KEY_BYTES_LENGTH

    private_parts = key_holder.private_key_pem.split(b"-----")
    assert private_parts[1] == b"BEGIN PRIVATE KEY"
    assert (len(private_parts[2]) == PRIVATE_KEY_BASE64_LENGTH + 2
            )  # Two line feeds at begin and end
    assert private_parts[3] == b"END PRIVATE KEY"

    public_parts = key_holder.public_key_pem.split(b"-----")
    assert public_parts[1] == b"BEGIN PUBLIC KEY"
    assert (len(public_parts[2]) == PUBLIC_KEY_BASE64_LENGTH + 2
            )  # Two line feeds at begin and end
    assert public_parts[3] == b"END PUBLIC KEY"
示例#9
0
def test_ed25519_account_hash():
    public_key = b"\xc1\xa5\x11%?\xe4\xbc\xe3\xab\xe3f7\xfd'\x10B\xdd\xfe\x0e\x98\x15=m'n\xcb\xfc\x18.\xf4\x1b\xd8"
    key_holder = ED25519Key(public_key=public_key)
    expected_account_hash = b"\t%\xa8\x12\x83\xd3\x8b\x00\x19\xd3\x8dN\x8b\x16U<\xab\xe2MQ\xd8yR\x02\xebBn\x15\xd5F`8"
    account_hash = key_holder.account_hash
    assert account_hash == expected_account_hash, "account_hash does not equal expected"