API Reference
Complete reference for all public APIs in NoiseFramework
NoiseHandshake
Main class for orchestrating Noise Protocol handshakes.
Parameters:
pattern_string (str): Noise pattern in format Noise_PATTERN_DH_CIPHER_HASH
Example: "Noise_XX_25519_ChaChaPoly_SHA256"
Example:
handshake = NoiseHandshake("Noise_XX_25519_ChaChaPoly_SHA256")
Methods
NoiseTransport
Transport layer for encrypted communication after handshake completion.
Parameters:
plaintext (bytes): Data to encrypt
ad (bytes): Associated data (optional)
Parameters:
ciphertext (bytes): Encrypted data
ad (bytes): Associated data (optional)
Pattern System
One-way patterns
- NN
- NK
- NX
Initiator auth
- KN
- KK
- KX
Interactive (most common)
- XX (recommended)
- XK
- XN
Mutual authentication, no pre-shared keys
Best for most use cases
Client knows server's public key
Faster handshake, requires pre-shared keys
Anonymous communication
No authentication - not recommended for production
Cryptographic Primitives
25519
Curve25519 (X25519) - 32 bytes
448
Curve448 (X448) - 56 bytes
ChaChaPoly
ChaCha20-Poly1305 (recommended)
AESGCM
AES-256-GCM
SHA256
SHA-256 - 32 bytes
SHA512
SHA-512 - 64 bytes
BLAKE2s
BLAKE2s - 32 bytes
BLAKE2b
BLAKE2b - 64 bytes
Complete Example
# Setup
initiator = NoiseHandshake("Noise_XX_25519_ChaChaPoly_SHA256")
initiator.set_as_initiator()
initiator.generate_static_keypair()
initiator.initialize()
responder = NoiseHandshake("Noise_XX_25519_ChaChaPoly_SHA256")
responder.set_as_responder()
responder.generate_static_keypair()
responder.initialize()
# Handshake
msg1 = initiator.write_message(b"")
responder.read_message(msg1)
msg2 = responder.write_message(b"")
initiator.read_message(msg2)
msg3 = initiator.write_message(b"")
responder.read_message(msg3)
# Transport
i_send, i_recv = initiator.to_transport()
r_send, r_recv = responder.to_transport()
i_transport = NoiseTransport(i_send, i_recv)
r_transport = NoiseTransport(r_send, r_recv)
# Encrypt/Decrypt
ciphertext = i_transport.send(b"Hello!")
plaintext = r_transport.receive(ciphertext)
print(plaintext.decode()) # "Hello!"
Error Handling
handshake = NoiseHandshake("Invalid_Pattern")
except ValueError as e:
print(f"Error: {e}")