;; ;; sha1 - Scheme wrapper for Steve Reid's Public Domain sha1 implementation ;; ;; All code in this egg is in the Public Domain #> #include "sha1-base.c" <# (module sha1 (;export sha1-primitive) (import scheme (chicken base) (chicken foreign) message-digest-primitive) (define-foreign-variable *digest-length* unsigned-int "SHA1_DIGEST_LENGTH") (define-foreign-variable *block-length* unsigned-int "SHA1_BLOCK_LENGTH") (define-foreign-variable *context-size* unsigned-int "sizeof(SHA1_CTX)") (define init (foreign-lambda void SHA1Init c-pointer)) (define update (foreign-lambda void SHA1Update c-pointer scheme-pointer unsigned-int)) (define final (foreign-lambda void SHA1Final c-pointer scheme-pointer)) (define raw-update (foreign-lambda void SHA1Update c-pointer c-pointer unsigned-int)) (define sha1-primitive (let ((the-sha1-primitive #f)) (lambda () (unless the-sha1-primitive (set! the-sha1-primitive (make-message-digest-primitive *context-size* *digest-length* init update final #:block-length *block-length* #:raw-update raw-update #:name 'sha1)) ) the-sha1-primitive ) ) ) )