Port to CHICKEN 6

This commit is contained in:
cælōrum spectātrīx 2025-11-11 17:25:59 +01:00
parent 16608b0ee9
commit 7fca09fbf6
8 changed files with 69 additions and 127 deletions

View file

@ -1,8 +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.1")
(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/{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
(debuglevel make-context destroy-context! encode! decode!)
(import scheme (chicken base) (chicken foreign) (chicken blob) (chicken format))
(define debuglevel (make-parameter 0)) (define debuglevel (make-parameter 0))
(define (logger level . x) (define (logger level . x)
(if (>= (debuglevel) level) (apply printf (append (list "rabbit: ") 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;
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)) ((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;
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!)
)

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)
(chicken base)
(chicken random)
(chicken bytevector)
(rabbit)
(test))
(test-group "rabbit 1000 random vectors" (test-group "rabbit 1000 random vectors"
(let loop ((n 1000)) (let loop ((n 1000))
(test-assert (test-assert
(if (= n 0) #t (if (= n 0)
(if (let* ( #t
(keylen (+ (pseudo-random-integer 10) 24)) (if (let* ((keylen (+ (pseudo-random-integer 10) 24))
(key (random-bytes (make-blob keylen))) (key (random-bytes (make-bytevector keylen)))
(datalen (pseudo-random-integer 100000)) (datalen (pseudo-random-integer 100000))
(data (random-bytes (make-blob datalen))) (data (random-bytes (make-bytevector datalen)))
(ctx (make-context key)) (ctx (make-context key)))
)
(let ((res (not (equal? data (decode! ctx (encode! ctx data)))))) (let ((res (not (equal? data (decode! ctx (encode! ctx data))))))
(destroy-context! ctx) (destroy-context! ctx)
res)) res))
#f #f
(loop (- n 1))))))) (loop (- n 1)))))))
;; eof