-! Copyright (C) 2008 Slava Pestov
+! Copyright (C) 2008, 2010 Slava Pestov
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors byte-arrays alien.c-types kernel continuations
-destructors sequences io openssl openssl.libcrypto checksums ;
+USING: accessors byte-arrays alien.c-types alien.data kernel
+continuations destructors sequences io openssl openssl.libcrypto
+checksums checksums.stream classes.struct ;
IN: checksums.openssl
ERROR: unknown-digest name ;
TUPLE: openssl-checksum name ;
-: openssl-md5 T{ openssl-checksum f "md5" } ;
+CONSTANT: openssl-md5 T{ openssl-checksum f "md5" }
-: openssl-sha1 T{ openssl-checksum f "sha1" } ;
+CONSTANT: openssl-sha1 T{ openssl-checksum f "sha1" }
-INSTANCE: openssl-checksum checksum
+INSTANCE: openssl-checksum stream-checksum
C: <openssl-checksum> openssl-checksum
<PRIVATE
-TUPLE: evp-md-context handle ;
+TUPLE: evp-md-context < disposable handle ;
: <evp-md-context> ( -- ctx )
- "EVP_MD_CTX" <c-object>
- dup EVP_MD_CTX_init evp-md-context boa ;
+ evp-md-context new-disposable
+ EVP_MD_CTX_create >>handle ;
-M: evp-md-context dispose
- handle>> EVP_MD_CTX_cleanup drop ;
+M: evp-md-context dispose*
+ handle>> EVP_MD_CTX_destroy ;
: with-evp-md-context ( quot -- )
- maybe-init-ssl >r <evp-md-context> r> with-disposal ; inline
+ maybe-init-ssl [ <evp-md-context> ] dip with-disposal ; inline
: digest-named ( name -- md )
dup EVP_get_digestbyname
: digest-value ( ctx -- value )
handle>>
- EVP_MAX_MD_SIZE <byte-array> 0 <int>
- [ EVP_DigestFinal_ex ssl-error ] 2keep
- *int memory>byte-array ;
+ { { int EVP_MAX_MD_SIZE } int }
+ [ EVP_DigestFinal_ex ssl-error ]
+ [ memory>byte-array ]
+ with-out-parameters ;
PRIVATE>