Compare commits

...

2 commits

Author SHA1 Message Date
b289073f0a Port to CHICKEN 6 2025-11-11 17:43:37 +01:00
Ivan Raikov
16608b0ee9 added release 2.1 to release-info 2018-12-18 07:27:30 -08:00
8 changed files with 69 additions and 126 deletions

View file

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

View file

@ -1,12 +1,8 @@
;;;; -*- Scheme -*- ;; -*- lisp-data -*-
((synopsis "Rabbit stream cipher.") ((synopsis "Rabbit stream cipher.")
(license "Public Domain") (license "Public Domain")
(category crypt) (category crypt)
(dependencies srfi-1) (test-dependencies test)
(test-dependencies test srfi-1) (maintainer "Lilianna Smólska")
(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)) (components (extension rabbit (source "rabbit.sld"))))
)

View file

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

View file

@ -1,7 +1,4 @@
;; -*- scheme -*- ;; -*- lisp-data -*-
(repo git "git://git.linuxposting.xyz/afiw/chicken-rabbit.git")
(repo git "git://github.com/iraikov/chicken-rabbit.git") (uri targz "https://git.linuxposting.xyz/afiw/chicken-rabbit/archive/{egg-release}.tar.gz")
(uri targz "https://github.com/iraikov/chicken-rabbit/tarball/{egg-release}") (release "3.0")
(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,61 +6,46 @@
;; Based on lambdanative rabbit lib, ported to Chicken Scheme by Ivan Raikov ;; Based on lambdanative rabbit lib, ported to Chicken Scheme by Ivan Raikov
(module rabbit (define debuglevel (make-parameter 0))
(define (logger level . x)
(debuglevel make-context destroy-context! encode! decode!) (if (>= (debuglevel) level) (apply printf (append (list "rabbit: ") x))))
(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
(define (make-context key) ;; key must be at least 24 bytes (logger 1 "make-context " (utf8->string key))
(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))
#<<END #<<EOT
int len; void* keydata, *result; int len;
len = C_bytevector_length(key); void *keydata, *result;
keydata = C_c_bytevector (key); len = C_bytevector_length(key);
result = (void *)_rabbit_make(keydata, len); keydata = C_c_bytevector(key);
C_return (result); result = (void *)_rabbit_make(keydata, len);
END C_return(result);
) key) EOT
) ) 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)) ((foreign-lambda* void ((nonnull-c-pointer ctx)) "_rabbit_destroy(ctx);") 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 (blob? v) (if (bytevector? v)
(begin (begin
((foreign-lambda* void ((nonnull-c-pointer ctx) (scheme-object v)) ((foreign-lambda* void ((nonnull-c-pointer ctx) (scheme-object v))
#<<EOF #<<EOT
int len; void* data; int len;
data = C_c_bytevector (v); void *data;
len = C_bytevector_length(v); data = C_c_bytevector(v);
_rabbit_encode(ctx,data,len); len = C_bytevector_length(v);
EOF _rabbit_encode(ctx, data, len);
) ctx v) EOT
) ctx v)
v) v)
#f)) #f))
(define decode! encode!) (define decode! encode!)
)

View file

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

14
rabbit.sld Normal file
View file

@ -0,0 +1,14 @@
(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,20 +1,23 @@
(import scheme (chicken base) (chicken random) (chicken blob) rabbit test) (import
(scheme base)
(test-group "rabbit 1000 random vectors" (chicken base)
(let loop ((n 1000)) (chicken random)
(test-assert (chicken bytevector)
(if (= n 0) #t (rabbit)
(if (let* ( (test))
(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)))))))
;; 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)))))))