Compare commits

...

8 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
Ivan Raikov
1c1cdc0d20 removed redundant dependencies 2018-12-18 07:25:54 -08:00
Ivan Raikov
3fc6f5e678 added release 2.0 to c5 release info 2018-12-18 07:22:46 -08:00
Ivan Raikov
88c262ddd4 ported to CHICKEN 5 2018-12-18 07:20:55 -08:00
Ivan Raikov
0264d08972 moved release info to proper location 2016-01-20 15:17:35 -08:00
Ivan Raikov
c08eddfe98 version set to v1.1 2016-01-20 15:16:34 -08:00
Ivan Raikov
4c540a4ccd changed initial release to v1.0 2016-01-20 15:04:43 -08:00
8 changed files with 78 additions and 133 deletions

8
rabbit.egg Normal file
View file

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

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

4
rabbit.release-info Normal file
View file

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

View file

@ -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))
#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))
#<<END
int len; void* keydata, *result;
len = C_bytevector_length(key);
keydata = C_c_bytevector (key);
result = (void *)_rabbit_make(keydata, len);
C_return (result);
END
) key)
)
#<<EOT
int len;
void *keydata, *result;
len = C_bytevector_length(key);
keydata = C_c_bytevector(key);
result = (void *)_rabbit_make(keydata, len);
C_return(result);
EOT
) key))
(define (destroy-context! ctx)
(logger 1 "destroy-context " ctx)
((foreign-lambda* void ((nonnull-c-pointer ctx)) "_rabbit_destroy(ctx);") ctx))
(define (rabbit-destroy! ctx)
(rabbit-log 1 "rabbit-destroy " ctx)
((foreign-lambda* void ((nonnull-c-pointer ctx))
#<<END
_rabbit_destroy(ctx);
END
) ctx)
)
(define (rabbit-encode! ctx v)
(rabbit-log 2 "rabbit-encode/decode " ctx " " v)
(if (blob? v)
(define (encode! ctx v)
(logger 2 "encode/decode " ctx " " v)
(if (bytevector? v)
(begin
((foreign-lambda* void ((nonnull-c-pointer ctx) (scheme-object v))
#<<EOF
int len; void* data;
data = C_c_bytevector (v);
#<<EOT
int len;
void *data;
data = C_c_bytevector(v);
len = C_bytevector_length(v);
_rabbit_encode(ctx,data,len);
EOF
) ctx v)
_rabbit_encode(ctx, data, len);
EOT
) ctx v)
v)
#f))
(define rabbit-decode! rabbit-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 1.0)
))

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,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 "1.0")

View file

@ -1,32 +1,23 @@
(use rabbit srfi-4 test)
(randomize)
(define (random-blob n)
(let ((v (make-u8vector n)))
(let loop ((n n))
(if (> n 0)
(begin
(u8vector-set! v (- n 1) (random 255))
(loop (- n 1)))
(u8vector->blob v)))
))
(import
(scheme base)
(chicken base)
(chicken random)
(chicken bytevector)
(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))
)
(let ((res (not (equal? data (rabbit-decode! ctx (rabbit-encode! ctx data))))))
(rabbit-destroy! ctx)
(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)))))))
;; eof