snapkitty
cryptography
python
marlborg-worm / test /test_crypto.lisp
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/marlborg-worm
75619b0 verified
Raw History Blame Contribute Delete
2.71 kB
;;;
;;; Copyright (c) 2026 BEL ESPRIT D ACCORD TRUST HOLDINGS INC
;;; All rights reserved.
(defpackage :marlborg.worm.test.crypto
(:use :cl :marlborg.worm.primitives)
(:export :run-crypto-tests))
(in-package :marlborg.worm.test.crypto)
(defun run-crypto-tests ()
(format t "~%=== Crypto Tests ===~%")
(test-sha3-deterministic)
(test-sha3-different-inputs)
(test-ed25519-sign-verify)
(test-ecies-roundtrip)
(test-entropy-bound)
(format t "All crypto tests passed.~%"))
(defun test-sha3-deterministic ()
(let* ((input (make-array 5 :element-type '(unsigned-byte 8)
:initial-contents '(72 101 108 108 111)))
(h1 (sha3-256 input))
(h2 (sha3-256 input)))
(assert (equalp h1 h2) ()
"SHA3-256 must be deterministic")
(assert (= 32 (length h1)) ()
"SHA3-256 output must be 32 bytes")
(format t " sha3 deterministic: PASS~%")))
(defun test-sha3-different-inputs ()
(let* ((a (make-array 3 :element-type '(unsigned-byte 8) :initial-contents '(1 2 3)))
(b (make-array 3 :element-type '(unsigned-byte 8) :initial-contents '(4 5 6)))
(ha (sha3-256 a))
(hb (sha3-256 b)))
(assert (not (equalp ha hb)) ()
"SHA3-256 different inputs must produce different outputs")
(format t " sha3 collision avoidance: PASS~%")))
(defun test-ed25519-sign-verify ()
(multiple-value-bind (sk pk) (ed25519-keypair)
(let* ((msg (make-array 10 :element-type '(unsigned-byte 8)
:initial-contents '(0 1 2 3 4 5 6 7 8 9)))
(sig (sign sk msg))
(valid (verify pk msg sig)))
(assert valid ()
"Ed25519 signature must verify with correct key")
(assert (= 64 (length sig)) ()
"Signature must be 64 bytes")
(format t " ed25519 sign/verify: PASS~%"))))
(defun test-ecies-roundtrip ()
(multiple-value-bind (sk pk) (ed25519-keypair)
(let* ((plaintext (sha3-256 (make-array 1 :element-type '(unsigned-byte 8)
:initial-contents '(42))))
(ciphertext (ecies-encrypt pk plaintext))
(decrypted (ecies-decrypt sk ciphertext)))
(assert (equalp plaintext decrypted) ()
"ECIES roundtrip must recover plaintext")
(format t " ecies roundtrip: PASS~%"))))
(defun test-entropy-bound ()
(multiple-value-bind (ok entropy) (entropy-bound-p #'quantum-nonce :samples 1000)
(declare (ignore ok))
(assert (>= entropy 0.0d0) ()
"Entropy must be non-negative")
(format t " entropy bound (H=~,4f): PASS~%" entropy)))