Compare commits

..

No commits in common. "mistress" and "2.0" have entirely different histories.

8 changed files with 126 additions and 69 deletions

7
rabbit.c5.release-info Normal file
View file

@ -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")

View file

@ -1,8 +1,12 @@
;; -*- lisp-data -*- ;;;; -*- Scheme -*-
((synopsis "Rabbit stream cipher.") ((synopsis "Rabbit stream cipher.")
(license "Public Domain") (license "Public Domain")
(category crypt) (category crypt)
(test-dependencies test) (dependencies datatype matchable yasos srfi-1)
(maintainer "Lilianna Smólska") (test-dependencies test srfi-1)
(maintainer "Ivan Raikov")
(author "Martin Boesgaard, Mette Vesterager, Thomas Christensen and Erik Zenner") (author "Martin Boesgaard, Mette Vesterager, Thomas Christensen and Erik Zenner")
(components (extension rabbit (source "rabbit.sld")))) (components (extension rabbit))
)

25
rabbit.meta Normal file
View file

@ -0,0 +1,25 @@
;; -*- 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"))

View file

@ -1,4 +1,7 @@
;; -*- lisp-data -*- ;; -*- scheme -*-
(repo git "git://git.linuxposting.xyz/afiw/chicken-rabbit.git")
(uri targz "https://git.linuxposting.xyz/afiw/chicken-rabbit/archive/{egg-release}.tar.gz") (repo git "git://github.com/iraikov/chicken-rabbit.git")
(release "3.0") (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")

View file

@ -6,46 +6,61 @@
;; Based on lambdanative rabbit lib, ported to Chicken Scheme by Ivan Raikov ;; Based on lambdanative rabbit lib, ported to Chicken Scheme by Ivan Raikov
(define debuglevel (make-parameter 0)) (module rabbit
(define (logger level . x)
(if (>= (debuglevel) level) (apply printf (append (list "rabbit: ") x)))) (debuglevel make-context destroy-context! encode! decode!)
(import scheme (chicken base) (chicken foreign) (chicken blob) (chicken format))
(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" #include "rabbitlib.c"
<# <#
(define (make-context key) ; key must be at least 24 bytes
(logger 1 "make-context " (utf8->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)) ((foreign-safe-lambda* nonnull-c-pointer ((scheme-object key))
#<<EOT #<<END
int len; int len; void* keydata, *result;
void *keydata, *result; len = C_bytevector_length(key);
len = C_bytevector_length(key); keydata = C_c_bytevector (key);
keydata = C_c_bytevector(key); result = (void *)_rabbit_make(keydata, len);
result = (void *)_rabbit_make(keydata, len); C_return (result);
C_return(result); END
EOT ) key)
) key)) )
(define (destroy-context! ctx) (define (destroy-context! ctx)
(logger 1 "destroy-context " ctx) (logger 1 "destroy-context " ctx)
((foreign-lambda* void ((nonnull-c-pointer ctx)) "_rabbit_destroy(ctx);") ctx)) ((foreign-lambda* void ((nonnull-c-pointer ctx))
#<<END
_rabbit_destroy(ctx);
END
) ctx)
)
(define (encode! ctx v) (define (encode! ctx v)
(logger 2 "encode/decode " ctx " " v) (logger 2 "encode/decode " ctx " " v)
(if (bytevector? v) (if (blob? v)
(begin (begin
((foreign-lambda* void ((nonnull-c-pointer ctx) (scheme-object v)) ((foreign-lambda* void ((nonnull-c-pointer ctx) (scheme-object v))
#<<EOT #<<EOF
int len; int len; void* data;
void *data; data = C_c_bytevector (v);
data = C_c_bytevector(v); len = C_bytevector_length(v);
len = C_bytevector_length(v); _rabbit_encode(ctx,data,len);
_rabbit_encode(ctx, data, len); EOF
EOT ) ctx v)
) ctx v)
v) v)
#f)) #f))
(define decode! encode!) (define decode! encode!)
)

20
rabbit.setup Normal file
View file

@ -0,0 +1,20 @@
;; -*- Hen -*-
(define (dynld-name fn)
(make-pathname #f fn ##sys#load-dynamic-extension))
(compile -S -O2 -d0 -I. -s rabbit.scm -j rabbit)
(compile -O2 -d0 -s rabbit.import.scm)
(install-extension
; Name of your extension:
'rabbit
; Files to install for your extension:
`(,(dynld-name "rabbit") ,(dynld-name "rabbit.import") )
; Assoc list with properties for your extension:
`((version "v1.1")
))

View file

@ -1,14 +0,0 @@
(define-library rabbit
(import
(scheme base)
(chicken base)
(chicken bytevector)
(chicken foreign)
(chicken format))
(export
debuglevel
make-context
destroy-context!
encode!
decode!)
(include "rabbit.scm"))

View file

@ -1,23 +1,20 @@
(import (import scheme (chicken base) (chicken random) (chicken blob) rabbit test)
(scheme base)
(chicken base) (test-group "rabbit 1000 random vectors"
(chicken random) (let loop ((n 1000))
(chicken bytevector) (test-assert
(rabbit) (if (= n 0) #t
(test)) (if (let* (
(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 (decode! ctx (encode! ctx data))))))
(destroy-context! ctx)
res))
#f
(loop (- n 1)))))))
(test-group "rabbit 1000 random vectors" ;; eof
(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)))))))