! Copyright (C) 2008, 2010, 2016 Slava Pestov, Alexander Ilin
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types alien.data checksums
-checksums.common destructors kernel openssl openssl.libcrypto
-sequences ;
+USING: accessors alien.c-types alien.data checksums checksums.common
+destructors kernel namespaces openssl openssl.libcrypto sequences ;
IN: checksums.openssl
ERROR: unknown-digest name ;
TUPLE: evp-md-context < disposable handle ;
+: evp-md-ctx-new ( -- ctx )
+ ssl-new-api? get-global [ EVP_MD_CTX_new ] [ EVP_MD_CTX_create ] if ;
+
+: evp-md-ctx-free ( ctx -- )
+ ssl-new-api? get-global [ EVP_MD_CTX_free ] [ EVP_MD_CTX_destroy ] if ;
+
: <evp-md-context> ( -- ctx )
- evp-md-context new-disposable
- EVP_MD_CTX_create >>handle ;
+ evp-md-context new-disposable evp-md-ctx-new >>handle ;
M: evp-md-context dispose*
- handle>> EVP_MD_CTX_destroy ;
+ handle>> evp-md-ctx-free ;
: digest-named ( name -- md )
dup EVP_get_digestbyname [ ] [ unknown-digest ] ?if ;
{ flags ulong }
{ md_data void* } ;
+! ------------------------------------------------------------------------------
+! API >= 1.1.0
+! ------------------------------------------------------------------------------
+FUNCTION: ulong OpenSSL_version_num ( )
+FUNCTION: EVP_MD_CTX* EVP_MD_CTX_new ( )
+FUNCTION: void EVP_MD_CTX_free ( EVP_MD_CTX* ctx )
+
! ------------------------------------------------------------------------------
! API < 1.1.0, removed in new versions
! ------------------------------------------------------------------------------
FUNCTION: void OpenSSL_add_all_ciphers ( )
FUNCTION: void OpenSSL_add_all_digests ( )
+FUNCTION: EVP_MD_CTX* EVP_MD_CTX_create ( )
+FUNCTION: void EVP_MD_CTX_destroy ( EVP_MD_CTX* ctx )
! ------------------------------------------------------------------------------
! Clean them up before exiting
FUNCTION: void EVP_MD_CTX_init ( EVP_MD* ctx )
FUNCTION: int EVP_MD_CTX_cleanup ( EVP_MD_CTX* ctx )
-
-FUNCTION: EVP_MD_CTX* EVP_MD_CTX_create ( )
-
-FUNCTION: void EVP_MD_CTX_destroy ( EVP_MD_CTX* ctx )
-
FUNCTION: int EVP_MD_CTX_copy_ex ( EVP_MD_CTX* out, EVP_MD_CTX* in )
FUNCTION: int EVP_DigestInit_ex ( EVP_MD_CTX* ctx, EVP_MD* type, ENGINE* impl )