void winpr_MD5_Final(WINPR_MD5_CTX* ctx, BYTE* output) { #if defined(WITH_OPENSSL) MD5_Final(output, (MD5_CTX*) ctx); #elif defined(WITH_MBEDTLS) && defined(MBEDTLS_MD5_C) mbedtls_md5_finish((mbedtls_md5_context*) ctx, output); mbedtls_md5_free((mbedtls_md5_context*) ctx); #endif }
char *calc_keepalive_data(time_t timestamp) { static char keepalive_data[64]; u_char timebytes[4]; u_char md5_result[16]; mbedtls_md5_context md5; if (strlen(keepalive_data) == 0) { strcpy(keepalive_data, DEFAULT_KEEPALIVE_DATA); } int2byte((int)timestamp, timebytes); mbedtls_md5_init(&md5); mbedtls_md5_starts(&md5); mbedtls_md5_update(&md5, timebytes, 4); mbedtls_md5_update(&md5, (const u_char *)keepalive_data, strlen(keepalive_data)); mbedtls_md5_finish(&md5, md5_result); byte2str(md5_result, 16, keepalive_data); return keepalive_data; }
static void md5_finish_wrap( void *ctx, unsigned char *output ) { mbedtls_md5_finish( (mbedtls_md5_context *) ctx, output ); }