From 88c262ddd4994868038ce2ba61732b14e64b7861 Mon Sep 17 00:00:00 2001 From: Ivan Raikov Date: Tue, 18 Dec 2018 07:20:55 -0800 Subject: [PATCH] ported to CHICKEN 5 --- rabbit.c5.release-info | 7 +++++++ rabbit.egg | 12 ++++++++++++ rabbit.scm | 29 ++++++++++++----------------- tests/run.scm | 28 ++++++++-------------------- 4 files changed, 39 insertions(+), 37 deletions(-) create mode 100644 rabbit.c5.release-info create mode 100644 rabbit.egg diff --git a/rabbit.c5.release-info b/rabbit.c5.release-info new file mode 100644 index 0000000..395615d --- /dev/null +++ b/rabbit.c5.release-info @@ -0,0 +1,7 @@ +;; -*- scheme -*- + +(repo git "git://github.com/iraikov/chicken-rabbit.git") +(uri targz "https://github.com/iraikov/chicken-rabbit/tarball/{egg-release}") +(uri files-list "http://code.call-cc.org/files-list?egg={egg-name};egg-release={egg-release};chicken-release={chicken-release}" old-uri) + +(release "1.2") diff --git a/rabbit.egg b/rabbit.egg new file mode 100644 index 0000000..2240920 --- /dev/null +++ b/rabbit.egg @@ -0,0 +1,12 @@ +;;;; -*- Scheme -*- + +((synopsis "Rabbit stream cipher.") + (license "Public Domain") + (category crypt) + (dependencies datatype matchable yasos srfi-1) + (test-dependencies test srfi-1) + (maintainer "Ivan Raikov") + (author "Martin Boesgaard, Mette Vesterager, Thomas Christensen and Erik Zenner") + (components (extension rabbit)) + ) + diff --git a/rabbit.scm b/rabbit.scm index e202259..7f3fb98 100644 --- a/rabbit.scm +++ b/rabbit.scm @@ -8,18 +8,13 @@ (module rabbit - (rabbit-debuglevel - rabbit-make - rabbit-destroy! - rabbit-encode! - rabbit-decode!) + (debuglevel make-context destroy-context! encode! decode!) - (import scheme chicken foreign) - (import (only extras printf)) + (import scheme (chicken base) (chicken foreign) (chicken blob) (chicken format)) - (define rabbit-debuglevel (make-parameter 0)) - (define (rabbit-log level . x) - (if (>= (rabbit-debuglevel) level) (apply printf (append (list "rabbit: ") x)))) + (define debuglevel (make-parameter 0)) + (define (logger level . x) + (if (>= (debuglevel) level) (apply printf (append (list "rabbit: ") x)))) #> @@ -28,8 +23,8 @@ <# -(define (rabbit-make key) ;; key must be at least 24 bytes - (rabbit-log 1 "rabbit-make " (blob->string key)) +(define (make-context key) ;; key must be at least 24 bytes + (logger 1 "make-context " (blob->string key)) ((foreign-safe-lambda* nonnull-c-pointer ((scheme-object key)) #< n 0) - (begin - (u8vector-set! v (- n 1) (random 255)) - (loop (- n 1))) - (u8vector->blob v))) - )) +(import scheme (chicken base) (chicken random) (chicken blob) rabbit test) (test-group "rabbit 1000 random vectors" (let loop ((n 1000)) (test-assert (if (= n 0) #t (if (let* ( - (keylen (+ (random 10) 24)) - (key (random-blob keylen)) - (datalen (random 100000)) - (data (random-blob datalen)) - (ctx (rabbit-make key)) + (keylen (+ (pseudo-random-integer 10) 24)) + (key (random-bytes (make-blob keylen))) + (datalen (pseudo-random-integer 100000)) + (data (random-bytes (make-blob datalen))) + (ctx (make-context key)) ) - (let ((res (not (equal? data (rabbit-decode! ctx (rabbit-encode! ctx data)))))) - (rabbit-destroy! ctx) + (let ((res (not (equal? data (decode! ctx (encode! ctx data)))))) + (destroy-context! ctx) res)) #f (loop (- n 1)))))))