Port to CHICKEN 6
This commit is contained in:
parent
16608b0ee9
commit
d6381ca8a1
8 changed files with 68 additions and 124 deletions
|
|
@ -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")
|
||||
12
rabbit.egg
12
rabbit.egg
|
|
@ -1,12 +1,8 @@
|
|||
;;;; -*- Scheme -*-
|
||||
|
||||
;; -*- lisp-data -*-
|
||||
((synopsis "Rabbit stream cipher.")
|
||||
(license "Public Domain")
|
||||
(category crypt)
|
||||
(dependencies srfi-1)
|
||||
(test-dependencies test srfi-1)
|
||||
(maintainer "Ivan Raikov")
|
||||
(test-dependencies test)
|
||||
(maintainer "Lilianna Smólska")
|
||||
(author "Martin Boesgaard, Mette Vesterager, Thomas Christensen and Erik Zenner")
|
||||
(components (extension rabbit))
|
||||
)
|
||||
|
||||
(components (extension rabbit (source "rabbit.sld"))))
|
||||
|
|
|
|||
25
rabbit.meta
25
rabbit.meta
|
|
@ -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"))
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
;; -*- 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)
|
||||
(repo git "git://git.linuxposting.xyz/afiw/chicken-rabbit.git")
|
||||
(uri targz "https://git.linuxposting.xyz/afiw/chicken-rabbit/{egg-release}.tar.gz")
|
||||
|
||||
(release "v1.1")
|
||||
(release "3.0")
|
||||
|
|
|
|||
65
rabbit.scm
65
rabbit.scm
|
|
@ -6,61 +6,46 @@
|
|||
|
||||
;; 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 (logger level . x)
|
||||
(if (>= (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 (make-context key) ;; key must be at least 24 bytes
|
||||
(logger 1 "make-context " (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))
|
||||
#<<END
|
||||
_rabbit_destroy(ctx);
|
||||
END
|
||||
) ctx)
|
||||
)
|
||||
((foreign-lambda* void ((nonnull-c-pointer ctx)) "_rabbit_destroy(ctx);") ctx))
|
||||
|
||||
(define (encode! ctx v)
|
||||
(logger 2 "encode/decode " ctx " " v)
|
||||
(if (blob? 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);
|
||||
len = C_bytevector_length(v);
|
||||
_rabbit_encode(ctx,data,len);
|
||||
EOF
|
||||
) ctx v)
|
||||
#<<EOT
|
||||
int len;
|
||||
void *data;
|
||||
data = C_c_bytevector(v);
|
||||
len = C_bytevector_length(v);
|
||||
_rabbit_encode(ctx, data, len);
|
||||
EOT
|
||||
) ctx v)
|
||||
v)
|
||||
#f))
|
||||
|
||||
(define decode! encode!)
|
||||
|
||||
)
|
||||
|
|
|
|||
20
rabbit.setup
20
rabbit.setup
|
|
@ -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
14
rabbit.sld
Normal 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"))
|
||||
|
|
@ -1,20 +1,23 @@
|
|||
(import scheme (chicken base) (chicken random) (chicken blob) rabbit test)
|
||||
|
||||
(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-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)))))))
|
||||
(import
|
||||
(scheme base)
|
||||
(chicken base)
|
||||
(chicken random)
|
||||
(chicken bytevector)
|
||||
(rabbit)
|
||||
(test))
|
||||
|
||||
;; 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)))))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue