veilid/veilid-python/tests/test_crypto.py

49 lines
1.5 KiB
Python
Raw Normal View History

2023-06-16 00:22:54 +00:00
# Crypto veilid tests
2023-06-15 01:06:10 +00:00
import pytest
2023-06-17 18:34:09 +00:00
import veilid
from veilid.api import CryptoSystem
2023-06-18 22:47:39 +00:00
import gc
2023-06-17 18:34:09 +00:00
2023-06-15 01:06:10 +00:00
@pytest.mark.asyncio
2023-06-18 22:47:39 +00:00
async def test_best_crypto_system(api_connection: veilid.VeilidAPI):
cs: CryptoSystem = await api_connection.best_crypto_system()
async with cs:
assert await cs.default_salt_length() == 16
2023-06-17 18:34:09 +00:00
2023-06-15 01:06:10 +00:00
@pytest.mark.asyncio
2023-06-18 22:47:39 +00:00
async def test_get_crypto_system(api_connection: veilid.VeilidAPI):
2023-06-17 18:34:09 +00:00
cs: CryptoSystem = await api_connection.get_crypto_system(
veilid.CryptoKind.CRYPTO_KIND_VLD0
)
2023-06-18 22:47:39 +00:00
async with cs:
assert await cs.default_salt_length() == 16
2023-06-17 18:34:09 +00:00
2023-06-15 01:06:10 +00:00
@pytest.mark.asyncio
2023-06-18 22:47:39 +00:00
async def test_get_crypto_system_invalid(api_connection: veilid.VeilidAPI):
2023-06-17 18:34:09 +00:00
with pytest.raises(veilid.VeilidAPIErrorInvalidArgument) as exc:
await api_connection.get_crypto_system(veilid.CryptoKind.CRYPTO_KIND_NONE)
assert exc.value.context == "unsupported cryptosystem"
assert exc.value.argument == "kind"
assert exc.value.value == "NONE"
2023-06-15 01:06:10 +00:00
2023-06-16 00:22:54 +00:00
@pytest.mark.asyncio
2023-06-18 22:47:39 +00:00
async def test_hash_and_verify_password(api_connection: veilid.VeilidAPI):
cs = await api_connection.best_crypto_system()
async with cs:
nonce = await cs.random_nonce()
salt = nonce.to_bytes()
# Password match
phash = await cs.hash_password(b"abc123", salt)
assert await cs.verify_password(b"abc123", phash)
# Password mismatch
phash2 = await cs.hash_password(b"abc1234", salt)
assert not await cs.verify_password(b"abc12345", phash)