diff --git a/rabbit.egg b/rabbit.egg new file mode 100644 index 0000000..7da20a6 --- /dev/null +++ b/rabbit.egg @@ -0,0 +1,8 @@ +;; -*- lisp-data -*- +((synopsis "Rabbit stream cipher.") + (license "Public Domain") + (category crypt) + (test-dependencies test) + (maintainer "Lilianna Smólska") + (author "Martin Boesgaard, Mette Vesterager, Thomas Christensen and Erik Zenner") + (components (extension rabbit (source "rabbit.sld")))) diff --git a/rabbit.meta b/rabbit.meta deleted file mode 100644 index 7a52e1e..0000000 --- a/rabbit.meta +++ /dev/null @@ -1,25 +0,0 @@ -;; -*- Hen -*- - -((egg "rabbit.egg") ; This should never change - - ; List here all the files that should be bundled as part of your egg. - - (files "rabbit.setup" "rabbit.meta" "rabbit.scm" "rabbitlib.c" "tests") - - ; Your egg's license: - - (license "Public Domain") - - ; Pick one from the list of categories (see below) for your egg and - ; enter it here. - - (category crypt) - - ; A list of eggs mpi depends on. - - (test-depends test) - - (maintainer "Ivan Raikov") - (author "Martin Boesgaard, Mette Vesterager, Thomas Christensen and Erik Zenner") - - (synopsis "Rabbit stream cipher")) diff --git a/rabbit.release-info b/rabbit.release-info index 828f9b8..3c9b7fa 100644 --- a/rabbit.release-info +++ b/rabbit.release-info @@ -1,7 +1,4 @@ -;; -*- 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 "v1.1") +;; -*- lisp-data -*- +(repo git "git://git.linuxposting.xyz/afiw/chicken-rabbit.git") +(uri targz "https://git.linuxposting.xyz/afiw/chicken-rabbit/archive/{egg-release}.tar.gz") +(release "3.0") diff --git a/rabbit.scm b/rabbit.scm index e202259..7fcfd67 100644 --- a/rabbit.scm +++ b/rabbit.scm @@ -6,66 +6,46 @@ ;; Based on lambdanative rabbit lib, ported to Chicken Scheme by Ivan Raikov -(module rabbit - - (rabbit-debuglevel - rabbit-make - rabbit-destroy! - rabbit-encode! - rabbit-decode!) - - (import scheme chicken foreign) - (import (only extras printf)) - - (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)))) #> -#define C_bytevector_length(x) (C_header_size(x)) +#define C_bytevector_length(x) (C_header_size(x)) #include "rabbitlib.c" <# - -(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 " (utf8->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))) - )) - -(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)) - ) - (let ((res (not (equal? data (rabbit-decode! ctx (rabbit-encode! ctx data)))))) - (rabbit-destroy! ctx) - res)) - #f - (loop (- n 1))))))) - -;; eof +(test-group "rabbit 1000 random vectors" + (let loop ((n 1000)) + (test-assert + (if (= n 0) + #t + (if (let* ((keylen (+ (pseudo-random-integer 10) 24)) + (key (random-bytes (make-bytevector keylen))) + (datalen (pseudo-random-integer 100000)) + (data (random-bytes (make-bytevector datalen))) + (ctx (make-context key))) + (let ((res (not (equal? data (decode! ctx (encode! ctx data)))))) + (destroy-context! ctx) + res)) + #f + (loop (- n 1)))))))