;;;; 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 SHA384 #include "sha2-base.c" #undef SHA384 #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_SHA384_Final(SHA384_CTX* context, sha2_byte digest[]) { SHA384_Final(digest, context); } <# (module sha384-api (;export name version context-size digest-length block-length init update final raw-update) (import scheme (chicken base) (chicken foreign)) ;; (define name 'sha384) (define version "1.0.1") (define-foreign-variable DIGEST_LENGTH unsigned-int "SHA384_DIGEST_LENGTH") (define-foreign-variable BLOCK_LENGTH unsigned-int "SHA384_BLOCK_LENGTH") (define-foreign-variable CONTEXT_SIZE unsigned-int "sizeof(SHA384_CTX)") (define context-size CONTEXT_SIZE) (define digest-length DIGEST_LENGTH) (define block-length BLOCK_LENGTH) (define init (foreign-lambda void "SHA384_Init" nonnull-c-pointer)) (define update (foreign-lambda void "SHA384_Update" nonnull-c-pointer nonnull-scheme-pointer unsigned-int)) (define final (foreign-lambda void "shim_SHA384_Final" nonnull-c-pointer nonnull-scheme-pointer)) (define raw-update (foreign-lambda void "SHA384_Update" nonnull-c-pointer nonnull-c-pointer unsigned-int)) ) ;module sha384-api