;;;; sha384-api.scm -*- Scheme -*- ;;;; Kon Lovett, Jul '18 #> #define SHA2_USE_INTTYPES_H 1 #define SHA2_USE_MEMSET_MEMCPY 1 #define SHA2_LITTLE_ENDIAN 1234 #define SHA2_BIG_ENDIAN 4321 #ifdef C_BIG_ENDIAN # define SHA2_BYTE_ORDER SHA2_BIG_ENDIAN #endif #ifdef C_LITTLE_ENDIAN # define SHA2_BYTE_ORDER SHA2_LITTLE_ENDIAN #endif #define SHA512 #include "sha2-base.c" #undef SHA512 #undef SHA2_LITTLE_ENDIAN #undef SHA2_BIG_ENDIAN #undef SHA2_BYTE_ORDER #undef SHA2_USE_MEMSET_MEMCPY #undef SHA2_USE_INTTYPES_H static void shim_SHA512_Final(SHA512_CTX* context, sha2_byte digest[]) { SHA512_Final(digest, context); } <# (module sha512-api (;export name version context-size digest-length block-length init update final raw-update) (import scheme (chicken base) (chicken foreign)) ;; (define name 'sha512) (define version "1.0.1") (define-foreign-variable DIGEST_LENGTH unsigned-int "SHA512_DIGEST_LENGTH") (define-foreign-variable BLOCK_LENGTH unsigned-int "SHA512_BLOCK_LENGTH") (define-foreign-variable CONTEXT_SIZE unsigned-int "sizeof(SHA512_CTX)") (define context-size CONTEXT_SIZE) (define digest-length DIGEST_LENGTH) (define block-length BLOCK_LENGTH) (define init (foreign-lambda void "SHA512_Init" nonnull-c-pointer)) (define update (foreign-lambda void "SHA512_Update" nonnull-c-pointer nonnull-scheme-pointer unsigned-int)) (define final (foreign-lambda void "shim_SHA512_Final" nonnull-c-pointer nonnull-scheme-pointer)) (define raw-update (foreign-lambda void "SHA512_Update" nonnull-c-pointer nonnull-c-pointer unsigned-int)) ) ;module sha512-api