mirror of
https://github.com/logos-messaging/nim-chat-sdk.git
synced 2026-01-02 14:13:07 +00:00
noise usage
This commit is contained in:
parent
027c8dc157
commit
70417ad3bc
108
apps/noise.nim
Normal file
108
apps/noise.nim
Normal file
@ -0,0 +1,108 @@
|
||||
# Demonstration of the Noise KN handshake.
|
||||
|
||||
import std/[sysrand, strutils]
|
||||
import stew/byteutils
|
||||
|
||||
import noise/utils
|
||||
import noise/states
|
||||
|
||||
proc kn() =
|
||||
echo "\n=== Noise KN Handshake Demo ==="
|
||||
# Simulate initiator with static keypair
|
||||
let initiatorKeypair = generateKeypair()
|
||||
let initiatorHS = newHandshakeState(true, "KN", s = initiatorKeypair)
|
||||
|
||||
# Simulate responder with initiator's static public key
|
||||
let responderHS = newHandshakeState(false, "KN", rs = initiatorKeypair.`public`)
|
||||
|
||||
# Initiator sends first message
|
||||
let (msg1, _, _) = initiatorHS.writeMessage(@[])
|
||||
echo "Initiator sent message 1: ", msg1.toHex.toLowerAscii
|
||||
|
||||
# Responder processes first message
|
||||
let (payload1, _, _) = responderHS.readMessage(msg1)
|
||||
echo "Responder received payload 1: ", cast[string](payload1)
|
||||
|
||||
# Responder sends response with payload
|
||||
let helloResponder = strToBytes("Hello from responder in KN!")
|
||||
let (msg2, sendCSResp, recvCSResp) = responderHS.writeMessage(helloResponder)
|
||||
echo "Responder sent message 2: ", msg2.toHex.toLowerAscii
|
||||
|
||||
# Initiator processes response
|
||||
let (payload2, sendCSInit, recvCSInit) = initiatorHS.readMessage(msg2)
|
||||
echo "Initiator received payload 2: ", cast[string](payload2)
|
||||
|
||||
# Post-handshake: Initiator sends encrypted message to responder
|
||||
echo "\n=== Post KN Handshake ==="
|
||||
let message = strToBytes("Hello from initiator in KN!")
|
||||
let ciphertext = sendCSInit.encrypt(@[], message)
|
||||
echo "Initiator encrypted: ", ciphertext.toHex.toLowerAscii
|
||||
|
||||
# Responder decrypts
|
||||
let plaintext = recvCSResp.decrypt(@[], ciphertext)
|
||||
echo "Responder decrypted: ", cast[string](plaintext)
|
||||
|
||||
# Post-handshake: Responder sends encrypted message to initiator
|
||||
let message2 = strToBytes("Hi from responder in KN!")
|
||||
let ciphertext2 = sendCSResp.encrypt(@[], message2)
|
||||
echo "Responder encrypted: ", ciphertext2.toHex.toLowerAscii
|
||||
|
||||
# Initiator decrypts
|
||||
let plaintext2 = recvCSInit.decrypt(@[], ciphertext2)
|
||||
echo "Initiator decrypted: ", cast[string](plaintext2)
|
||||
|
||||
echo "end of demo"
|
||||
|
||||
proc kx() =
|
||||
echo "\n=== Noise KX Handshake Demo ==="
|
||||
# Simulate initiator with static keypair
|
||||
let initiatorKeypair = generateKeypair()
|
||||
let initiatorHS = newHandshakeState(true, "KX", s = initiatorKeypair)
|
||||
|
||||
# Simulate responder with initiator's static public key
|
||||
let responderKeypair = generateKeypair()
|
||||
let responderHS = newHandshakeState(false, "KX", s = responderKeypair, rs = initiatorKeypair.`public`)
|
||||
|
||||
# Initiator sends first message
|
||||
let (msg1, _, _) = initiatorHS.writeMessage(@[])
|
||||
echo "Initiator sent message 1: ", msg1.toHex.toLowerAscii
|
||||
|
||||
# Responder processes first message
|
||||
let (payload1, _, _) = responderHS.readMessage(msg1)
|
||||
echo "Responder received payload 1: ", cast[string](payload1)
|
||||
|
||||
# Responder sends response with payload
|
||||
let helloResponder = strToBytes("Hello from responder in KX!")
|
||||
let (msg2, sendCSResp, recvCSResp) = responderHS.writeMessage(helloResponder)
|
||||
echo "Responder sent message 2: ", msg2.toHex.toLowerAscii
|
||||
|
||||
# Initiator processes response
|
||||
let (payload2, sendCSInit, recvCSInit) = initiatorHS.readMessage(msg2)
|
||||
echo "Initiator received payload 2: ", cast[string](payload2)
|
||||
|
||||
# Post-handshake: Initiator sends encrypted message to responder
|
||||
echo "\n=== Post KX Handshake ==="
|
||||
let message = strToBytes("Hello from initiator in KX!")
|
||||
let ciphertext = sendCSInit.encrypt(@[], message)
|
||||
echo "Initiator encrypted: ", ciphertext.toHex.toLowerAscii
|
||||
|
||||
# Responder decrypts
|
||||
let plaintext = recvCSResp.decrypt(@[], ciphertext)
|
||||
echo "Responder decrypted: ", cast[string](plaintext)
|
||||
|
||||
# Post-handshake: Responder sends encrypted message to initiator
|
||||
let message2 = strToBytes("Hi from responder in KX!")
|
||||
let ciphertext2 = sendCSResp.encrypt(@[], message2)
|
||||
echo "Responder encrypted: ", ciphertext2.toHex.toLowerAscii
|
||||
|
||||
# Initiator decrypts
|
||||
let plaintext2 = recvCSInit.decrypt(@[], ciphertext2)
|
||||
echo "Initiator decrypted: ", cast[string](plaintext2)
|
||||
|
||||
echo "end of demo"
|
||||
|
||||
proc main() =
|
||||
kn()
|
||||
kx()
|
||||
|
||||
main()
|
||||
@ -7,7 +7,13 @@ license = "MIT"
|
||||
srcDir = "src"
|
||||
|
||||
### Dependencies
|
||||
requires "nim >= 2.2.4", "chronicles", "chronos", "db_connector", "flatty", "waku#799793dba7ef78eba41582ed55db01a2d5d7500a"
|
||||
requires "nim >= 2.2.4",
|
||||
"chronicles",
|
||||
"chronos",
|
||||
"db_connector",
|
||||
"flatty",
|
||||
"waku#799793dba7ef78eba41582ed55db01a2d5d7500a",
|
||||
"noiseprotocol >= 0.0.2"
|
||||
|
||||
proc ensureRln(libFile: string = "build/librln.a", version = "v0.7.0") =
|
||||
if not fileExists(libFile):
|
||||
@ -36,3 +42,6 @@ task subscribe, "Run waku subscription service":
|
||||
|
||||
task publishing, "Run waku publishing service":
|
||||
exec "nim c --passL:build/librln.a --passL:-lm -r apps/waku_publisher.nim"
|
||||
|
||||
task noise, "Run noise protocol demo":
|
||||
exec "nim c -r apps/noise.nim"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user