;; ;; md5 - Scheme wrapper for Colin Plumb's Public Domain md5 implementation ;; ;; All code in this egg is in the Public Domain #>#include "md5-base.c"<# ;#>#include "md5-ssl.c"<# ;an alternative coding (module md5 (;export md5-primitive) (import scheme (chicken base) (chicken foreign) message-digest-primitive) (define digest-length (foreign-value "MD5_DIGEST_SIZE" unsigned-int)) (define block-length (foreign-value "MD5_BLOCK_SIZE" unsigned-int)) (define context-size (foreign-value "sizeof(struct MD5Context)" unsigned-int)) (define init (foreign-lambda void MD5Init c-pointer)) (define update (foreign-lambda void MD5Update c-pointer scheme-pointer unsigned-int)) (define final (foreign-lambda void MD5Final c-pointer scheme-pointer)) (define raw-update (foreign-lambda void MD5Update c-pointer c-pointer unsigned-int)) (define md5-primitive (let ((the-md5-primitive #f)) (lambda () (unless the-md5-primitive (set! the-md5-primitive (make-message-digest-primitive context-size digest-length init update final #:block-length block-length #:raw-update raw-update #:name 'md5)) ) the-md5-primitive ) ) ) )