;;;; sha1.scm (module sha1 (;export sha1-binary-digest sha1-digest sha1-primitive) (import scheme chicken foreign) (require-extension message-digest) (declare (fixnum) (no-procedure-checks) ) #> #include "sha1-base.c" <# ;; (define-foreign-variable context-size int "sizeof(sha1_context)") (define starts (foreign-lambda void "sha1_starts" c-pointer)) (define update (foreign-lambda void "sha1_update" c-pointer pointer int)) (define finish (foreign-lambda void "sha1_finish" c-pointer pointer)) (define-constant digest-length 20) ;; (define (sha1-binary-digest obj) (make-binary-message-digest obj context-size digest-length starts update finish 'sha1-binary-digest) ) (define (sha1-digest obj) (make-message-digest obj context-size digest-length starts update finish 'sha1-digest) ) (define (sha1-primitive) (make-message-digest-primitive context-size digest-length starts update finish (gensym 'sha1-primitive)) ) ) ;module sha1