%% options %% module #include "dk4md.h" #include "dk4strd.h" $!trace-include /** Message digest type names. Order must match the definition order in the enum in dk4md.h. */ static const dkChar * const dk4md_type_names[] = { $!string-table macro=dkT md5 sha-1 sha-224 sha-256 sha-384 sha-512 ripemd-160 sha1 sha224 sha256 sha384 sha512 ripemd160 $!end }; int dk4md_choose_type(const dkChar *name, dk4_er_t *erp) { int back = -1; if (NULL != name) { switch (dk4str_array_index(dk4md_type_names, name, 0)) { case 0: { back = DK4_MD_MD5; } break; case 1: case 7: { back = DK4_MD_SHA1; } break; case 2: case 8: { back = DK4_MD_SHA224; } break; case 3: case 9: { back = DK4_MD_SHA256; } break; case 4: case 10: { back = DK4_MD_SHA384; } break; case 5: case 11: { back = DK4_MD_SHA512; } break; case 6: case 12: { back = DK4_MD_RIPEMD_160; } break; } if (-1 == back) { dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4md_check_type(int mdtype) { int back = 0; switch (mdtype) { case DK4_MD_MD5 : { #if DK4_HAVE_OPENSSL_MD5_H back = 1; #endif } break; case DK4_MD_SHA1 : { #if DK4_HAVE_OPENSSL_SHA_H back = 1; #endif } break; case DK4_MD_SHA224 : { #if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA224 back = 1; #endif } break; case DK4_MD_SHA256 : { #if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA256 back = 1; #endif } break; case DK4_MD_SHA384 : { #if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA384 back = 1; #endif } break; case DK4_MD_SHA512 : { #if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA512 back = 1; #endif } break; case DK4_MD_RIPEMD_160 : { #if DK4_HAVE_OPENSSL_RIPEMD_H back = 1; #endif } break; } return back; }