const digest_type_t *get_digest_type(const char *digest) { if (digest == NULL) { LOGE("get_digest_type(): Digest name is null"); return NULL; } #if defined(USE_CRYPTO_OPENSSL) return EVP_get_digestbyname(digest); #elif defined(USE_CRYPTO_POLARSSL) return md_info_from_string(digest); #endif }
const md_info_t * md_kt_get (const char *digest) { const md_info_t *md = NULL; ASSERT (digest); md = md_info_from_string(digest); if (!md) msg (M_FATAL, "Message hash algorithm '%s' not found", digest); if (md->size > MAX_HMAC_KEY_LENGTH) msg (M_FATAL, "Message hash algorithm '%s' uses a default hash size (%d bytes) which is larger than " PACKAGE_NAME "'s current maximum hash size (%d bytes)", digest, md->size, MAX_HMAC_KEY_LENGTH); return md; }
int main( int argc, char *argv[] ) { int ret, i; const md_info_t *md_info; md_context_t md_ctx; md_init( &md_ctx ); if( argc == 1 ) { const int *list; printf( "print mode: generic_sum <md> <file> <file> ...\n" ); printf( "check mode: generic_sum <md> -c <checksum file>\n" ); printf( "\nAvailable message digests:\n" ); list = md_list(); while( *list ) { md_info = md_info_from_type( *list ); printf( " %s\n", md_info->name ); list++; } #if defined(_WIN32) printf( "\n Press Enter to exit this program.\n" ); fflush( stdout ); getchar(); #endif return( 1 ); } /* * Read the MD from the command line */ md_info = md_info_from_string( argv[1] ); if( md_info == NULL ) { fprintf( stderr, "Message Digest '%s' not found\n", argv[1] ); return( 1 ); } if( md_init_ctx( &md_ctx, md_info) ) { fprintf( stderr, "Failed to initialize context.\n" ); return( 1 ); } ret = 0; if( argc == 4 && strcmp( "-c", argv[2] ) == 0 ) { ret |= generic_check( md_info, argv[3] ); goto exit; } for( i = 2; i < argc; i++ ) ret |= generic_print( md_info, argv[i] ); exit: md_free( &md_ctx ); return( ret ); }