mirror of
https://github.com/morgan9e/noiseprotocol
synced 2026-04-14 00:14:05 +09:00
73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
from cryptography.hazmat.primitives.asymmetric import ec
|
|
|
|
from noise.connection import NoiseConnection, Keypair
|
|
|
|
class TestConnection(object):
|
|
def do_test_connection(self, name):
|
|
key = b"\x00" * 32
|
|
left = NoiseConnection.from_name(name)
|
|
left.set_psks(key)
|
|
left.set_as_initiator()
|
|
left.start_handshake()
|
|
|
|
right = NoiseConnection.from_name(name)
|
|
right.set_psks(key)
|
|
right.set_as_responder()
|
|
right.start_handshake()
|
|
|
|
h = left.write_message()
|
|
_ = right.read_message(h)
|
|
h2 = right.write_message()
|
|
left.read_message(h2)
|
|
|
|
assert left.handshake_finished
|
|
assert right.handshake_finished
|
|
|
|
enc = left.encrypt(b"hello")
|
|
dec = right.decrypt(enc)
|
|
assert dec == b"hello"
|
|
|
|
def test_25519(self):
|
|
name = b"Noise_NNpsk0_25519_ChaChaPoly_BLAKE2s"
|
|
self.do_test_connection(name)
|
|
|
|
def test_448(self):
|
|
name = b"Noise_NNpsk0_448_ChaChaPoly_BLAKE2s"
|
|
self.do_test_connection(name)
|
|
|
|
def test_secp256r1_xxpsk3(self):
|
|
name = b"Noise_XXpsk3_secp256r1_AESGCM_SHA256"
|
|
psk = b"\x01" * 32
|
|
|
|
left = NoiseConnection.from_name(name)
|
|
left.set_psks(psk)
|
|
left.set_as_initiator()
|
|
left_static = ec.generate_private_key(ec.SECP256R1())
|
|
left_private_bytes = left_static.private_numbers().private_value.to_bytes(32, "big")
|
|
left.set_keypair_from_private_bytes(Keypair.STATIC, left_private_bytes)
|
|
left.start_handshake()
|
|
|
|
right = NoiseConnection.from_name(name)
|
|
right.set_psks(psk)
|
|
right.set_as_responder()
|
|
right_static = ec.generate_private_key(ec.SECP256R1())
|
|
right_private_bytes = right_static.private_numbers().private_value.to_bytes(32, "big")
|
|
right.set_keypair_from_private_bytes(Keypair.STATIC, right_private_bytes)
|
|
right.start_handshake()
|
|
|
|
message1 = left.write_message()
|
|
right.read_message(message1)
|
|
|
|
message2 = right.write_message()
|
|
left.read_message(message2)
|
|
|
|
message3 = left.write_message()
|
|
right.read_message(message3)
|
|
|
|
assert left.handshake_finished
|
|
assert right.handshake_finished
|
|
|
|
ciphertext = left.encrypt(b"hello")
|
|
plaintext = right.decrypt(ciphertext)
|
|
assert plaintext == b"hello"
|