void blufi_dh_negotiate_data_handler(uint8_t *data, int len, uint8_t **output_data, int *output_len, bool *need_free) { int ret; uint8_t type = data[0]; if (blufi_sec == NULL) { BLUFI_ERROR("BLUFI Security is not initialized"); return; } switch (type) { case SEC_TYPE_DH_PARAM_LEN: blufi_sec->dh_param_len = ((data[1]<<8)|data[2]); if (blufi_sec->dh_param) { free(blufi_sec->dh_param); } blufi_sec->dh_param = (uint8_t *)malloc(blufi_sec->dh_param_len); if (blufi_sec->dh_param == NULL) { return; } break; case SEC_TYPE_DH_PARAM_DATA: memcpy(blufi_sec->dh_param, &data[1], blufi_sec->dh_param_len); ret = mbedtls_dhm_read_params(&blufi_sec->dhm, &blufi_sec->dh_param, &blufi_sec->dh_param[blufi_sec->dh_param_len]); if (ret) { BLUFI_ERROR("%s read param failed %d\n", __func__, ret); return; } ret = mbedtls_dhm_make_public(&blufi_sec->dhm, (int) mbedtls_mpi_size( &blufi_sec->dhm.P ), blufi_sec->self_public_key, blufi_sec->dhm.len, myrand, NULL); if (ret) { BLUFI_ERROR("%s make public failed %d\n", __func__, ret); return; } mbedtls_dhm_calc_secret( &blufi_sec->dhm, blufi_sec->share_key, SHARE_KEY_BIT_LEN, &blufi_sec->share_len, NULL, NULL); mbedtls_md5(blufi_sec->share_key, blufi_sec->share_len, blufi_sec->psk); mbedtls_aes_setkey_enc(&blufi_sec->aes, blufi_sec->psk, 128); /* alloc output data */ *output_data = &blufi_sec->self_public_key[0]; *output_len = blufi_sec->dhm.len; *need_free = false; break; case SEC_TYPE_DH_P: break; case SEC_TYPE_DH_G: break; case SEC_TYPE_DH_PUBLIC: break; } }
unsigned char * crypto_md5(const unsigned char *d, size_t n, unsigned char *md) { static unsigned char m[16]; if (md == NULL) { md = m; } mbedtls_md5(d, n, md); return md; }
int main(int argc, char **argv) { int i; uint8_t digest[16]; if (argc != 2) { printf("%s <string>\n", argv[0]); return -1; } mbedtls_md5(argv[1], strlen(argv[1]), digest); digest_print(digest, sizeof(digest)); return 0; }
unsigned char *enc_md5(const unsigned char *d, size_t n, unsigned char *md) { #if defined(USE_CRYPTO_OPENSSL) return MD5(d, n, md); #elif defined(USE_CRYPTO_POLARSSL) static unsigned char m[16]; if (md == NULL) { md = m; } md5(d, n, md); return md; #elif defined(USE_CRYPTO_MBEDTLS) static unsigned char m[16]; if (md == NULL) { md = m; } mbedtls_md5(d, n, md); return md; #endif }
int main( void ) { int i; unsigned char digest[16]; char str[] = "Hello, world!"; mbedtls_printf( "\n MD5('%s') = ", str ); mbedtls_md5( (unsigned char *) str, 13, digest ); for( i = 0; i < 16; i++ ) mbedtls_printf( "%02x", digest[i] ); mbedtls_printf( "\n\n" ); #if defined(_WIN32) mbedtls_printf( " Press Enter to exit this program.\n" ); fflush( stdout ); getchar(); #endif return( 0 ); }
std::optional<Header> ReadHeader() override { if (!m_uid || !m_gid) return {}; const auto banner = m_fs->OpenFile(*m_uid, *m_gid, m_data_dir + "/banner.bin", FS::Mode::Read); if (!banner) return {}; Header header{}; header.banner_size = banner->GetStatus()->size; header.tid = m_tid; header.md5 = s_md5_blanker; const u8 mode = GetBinMode(m_data_dir + "/banner.bin"); if (!mode || !banner->Read(header.banner, header.banner_size)) return {}; header.permissions = mode; // remove nocopy flag header.banner[7] &= ~1; Md5 md5_calc; mbedtls_md5(reinterpret_cast<const u8*>(&header), sizeof(Header), md5_calc.data()); header.md5 = std::move(md5_calc); return header; }
pthread_addr_t tls_benchmark_cb(void *args) { int i; int argc; char **argv; unsigned char tmp[200]; char title[TITLE_LEN]; todo_list todo; #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) unsigned char alloc_buf[HEAP_SIZE] = { 0 }; #endif argc = ((struct pthread_arg *)args)->argc; argv = ((struct pthread_arg *)args)->argv; if (argc <= 1) { memset(&todo, 1, sizeof(todo)); } else { memset(&todo, 0, sizeof(todo)); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "md4") == 0) { todo.md4 = 1; } else if (strcmp(argv[i], "md5") == 0) { todo.md5 = 1; } else if (strcmp(argv[i], "ripemd160") == 0) { todo.ripemd160 = 1; } else if (strcmp(argv[i], "sha1") == 0) { todo.sha1 = 1; } else if (strcmp(argv[i], "sha256") == 0) { todo.sha256 = 1; } else if (strcmp(argv[i], "sha512") == 0) { todo.sha512 = 1; } else if (strcmp(argv[i], "arc4") == 0) { todo.arc4 = 1; } else if (strcmp(argv[i], "des3") == 0) { todo.des3 = 1; } else if (strcmp(argv[i], "des") == 0) { todo.des = 1; } else if (strcmp(argv[i], "aes_cbc") == 0) { todo.aes_cbc = 1; } else if (strcmp(argv[i], "aes_gcm") == 0) { todo.aes_gcm = 1; } else if (strcmp(argv[i], "aes_ccm") == 0) { todo.aes_ccm = 1; } else if (strcmp(argv[i], "aes_cmac") == 0) { todo.aes_cmac = 1; } else if (strcmp(argv[i], "des3_cmac") == 0) { todo.des3_cmac = 1; } else if (strcmp(argv[i], "camellia") == 0) { todo.camellia = 1; } else if (strcmp(argv[i], "blowfish") == 0) { todo.blowfish = 1; } else if (strcmp(argv[i], "havege") == 0) { todo.havege = 1; } else if (strcmp(argv[i], "ctr_drbg") == 0) { todo.ctr_drbg = 1; } else if (strcmp(argv[i], "hmac_drbg") == 0) { todo.hmac_drbg = 1; } else if (strcmp(argv[i], "rsa") == 0) { todo.rsa = 1; } else if (strcmp(argv[i], "dhm") == 0) { todo.dhm = 1; } else if (strcmp(argv[i], "ecdsa") == 0) { todo.ecdsa = 1; } else if (strcmp(argv[i], "ecdh") == 0) { todo.ecdh = 1; } else { mbedtls_printf("Unrecognized option: %s\n", argv[i]); mbedtls_printf("Available options: " OPTIONS); } } } mbedtls_printf("\n"); #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) mbedtls_memory_buffer_alloc_init(alloc_buf, sizeof(alloc_buf)); #endif memset(buf, 0xAA, sizeof(buf)); memset(tmp, 0xBB, sizeof(tmp)); #if defined(MBEDTLS_MD4_C) if (todo.md4) { TIME_AND_TSC("MD4", mbedtls_md4(buf, BUFSIZE, tmp)); } #endif #if defined(MBEDTLS_MD5_C) if (todo.md5) { TIME_AND_TSC("MD5", mbedtls_md5(buf, BUFSIZE, tmp)); } #endif #if defined(MBEDTLS_RIPEMD160_C) if (todo.ripemd160) { TIME_AND_TSC("RIPEMD160", mbedtls_ripemd160(buf, BUFSIZE, tmp)); } #endif #if defined(MBEDTLS_SHA1_C) if (todo.sha1) { TIME_AND_TSC("SHA-1", mbedtls_sha1(buf, BUFSIZE, tmp)); } #endif #if defined(MBEDTLS_SHA256_C) if (todo.sha256) { TIME_AND_TSC("SHA-256", mbedtls_sha256(buf, BUFSIZE, tmp, 0)); } #endif #if defined(MBEDTLS_SHA512_C) if (todo.sha512) { TIME_AND_TSC("SHA-512", mbedtls_sha512(buf, BUFSIZE, tmp, 0)); } #endif #if defined(MBEDTLS_ARC4_C) if (todo.arc4) { mbedtls_arc4_context arc4; mbedtls_arc4_init(&arc4); mbedtls_arc4_setup(&arc4, tmp, 32); TIME_AND_TSC("ARC4", mbedtls_arc4_crypt(&arc4, BUFSIZE, buf, buf)); mbedtls_arc4_free(&arc4); } #endif #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) if (todo.des3) { mbedtls_des3_context des3; mbedtls_des3_init(&des3); mbedtls_des3_set3key_enc(&des3, tmp); TIME_AND_TSC("3DES", mbedtls_des3_crypt_cbc(&des3, MBEDTLS_DES_ENCRYPT, BUFSIZE, tmp, buf, buf)); mbedtls_des3_free(&des3); } if (todo.des) { mbedtls_des_context des; mbedtls_des_init(&des); mbedtls_des_setkey_enc(&des, tmp); TIME_AND_TSC("DES", mbedtls_des_crypt_cbc(&des, MBEDTLS_DES_ENCRYPT, BUFSIZE, tmp, buf, buf)); mbedtls_des_free(&des); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CMAC_C) if (todo.des3_cmac) { unsigned char output[8]; const mbedtls_cipher_info_t *cipher_info; memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); cipher_info = mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_DES_EDE3_ECB); TIME_AND_TSC("3DES-CMAC", mbedtls_cipher_cmac(cipher_info, tmp, 192, buf, BUFSIZE, output)); } #endif /* MBEDTLS_CMAC_C */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) if (todo.aes_cbc) { int keysize; mbedtls_aes_context aes; mbedtls_aes_init(&aes); for (keysize = 128; keysize <= 256; keysize += 64) { mbedtls_snprintf(title, sizeof(title), "AES-CBC-%d", keysize); memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); mbedtls_aes_setkey_enc(&aes, tmp, keysize); TIME_AND_TSC(title, mbedtls_aes_crypt_cbc(&aes, MBEDTLS_AES_ENCRYPT, BUFSIZE, tmp, buf, buf)); } mbedtls_aes_free(&aes); } #endif #if defined(MBEDTLS_GCM_C) if (todo.aes_gcm) { int keysize; mbedtls_gcm_context gcm; mbedtls_gcm_init(&gcm); for (keysize = 128; keysize <= 256; keysize += 64) { mbedtls_snprintf(title, sizeof(title), "AES-GCM-%d", keysize); memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); mbedtls_gcm_setkey(&gcm, MBEDTLS_CIPHER_ID_AES, tmp, keysize); TIME_AND_TSC(title, mbedtls_gcm_crypt_and_tag(&gcm, MBEDTLS_GCM_ENCRYPT, BUFSIZE, tmp, 12, NULL, 0, buf, buf, 16, tmp)); mbedtls_gcm_free(&gcm); } } #endif #if defined(MBEDTLS_CCM_C) if (todo.aes_ccm) { int keysize; mbedtls_ccm_context ccm; mbedtls_ccm_init(&ccm); for (keysize = 128; keysize <= 256; keysize += 64) { mbedtls_snprintf(title, sizeof(title), "AES-CCM-%d", keysize); memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); mbedtls_ccm_setkey(&ccm, MBEDTLS_CIPHER_ID_AES, tmp, keysize); TIME_AND_TSC(title, mbedtls_ccm_encrypt_and_tag(&ccm, BUFSIZE, tmp, 12, NULL, 0, buf, buf, tmp, 16)); mbedtls_ccm_free(&ccm); } } #endif #if defined(MBEDTLS_CMAC_C) if (todo.aes_cmac) { unsigned char output[16]; const mbedtls_cipher_info_t *cipher_info; mbedtls_cipher_type_t cipher_type; int keysize; for (keysize = 128, cipher_type = MBEDTLS_CIPHER_AES_128_ECB; keysize <= 256; keysize += 64, cipher_type++) { mbedtls_snprintf(title, sizeof(title), "AES-CMAC-%d", keysize); memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); cipher_info = mbedtls_cipher_info_from_type(cipher_type); TIME_AND_TSC(title, mbedtls_cipher_cmac(cipher_info, tmp, keysize, buf, BUFSIZE, output)); } memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); TIME_AND_TSC("AES-CMAC-PRF-128", mbedtls_aes_cmac_prf_128(tmp, 16, buf, BUFSIZE, output)); } #endif /* MBEDTLS_CMAC_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) && defined(MBEDTLS_CIPHER_MODE_CBC) if (todo.camellia) { int keysize; mbedtls_camellia_context camellia; mbedtls_camellia_init(&camellia); for (keysize = 128; keysize <= 256; keysize += 64) { mbedtls_snprintf(title, sizeof(title), "CAMELLIA-CBC-%d", keysize); memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); mbedtls_camellia_setkey_enc(&camellia, tmp, keysize); TIME_AND_TSC(title, mbedtls_camellia_crypt_cbc(&camellia, MBEDTLS_CAMELLIA_ENCRYPT, BUFSIZE, tmp, buf, buf)); } mbedtls_camellia_free(&camellia); } #endif #if defined(MBEDTLS_BLOWFISH_C) && defined(MBEDTLS_CIPHER_MODE_CBC) if (todo.blowfish) { int keysize; mbedtls_blowfish_context blowfish; mbedtls_blowfish_init(&blowfish); for (keysize = 128; keysize <= 256; keysize += 64) { mbedtls_snprintf(title, sizeof(title), "BLOWFISH-CBC-%d", keysize); memset(buf, 0, sizeof(buf)); memset(tmp, 0, sizeof(tmp)); mbedtls_blowfish_setkey(&blowfish, tmp, keysize); TIME_AND_TSC(title, mbedtls_blowfish_crypt_cbc(&blowfish, MBEDTLS_BLOWFISH_ENCRYPT, BUFSIZE, tmp, buf, buf)); } mbedtls_blowfish_free(&blowfish); } #endif #if defined(MBEDTLS_HAVEGE_C) if (todo.havege) { mbedtls_havege_state hs; mbedtls_havege_init(&hs); TIME_AND_TSC("HAVEGE", mbedtls_havege_random(&hs, buf, BUFSIZE)); mbedtls_havege_free(&hs); } #endif #if defined(MBEDTLS_CTR_DRBG_C) if (todo.ctr_drbg) { mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ctr_drbg_init(&ctr_drbg); if (mbedtls_ctr_drbg_seed(&ctr_drbg, myrand, NULL, NULL, 0) != 0) { mbedtls_exit(1); } TIME_AND_TSC("CTR_DRBG (NOPR)", if (mbedtls_ctr_drbg_random(&ctr_drbg, buf, BUFSIZE) != 0) mbedtls_exit(1)); if (mbedtls_ctr_drbg_seed(&ctr_drbg, myrand, NULL, NULL, 0) != 0) { mbedtls_exit(1); } mbedtls_ctr_drbg_set_prediction_resistance(&ctr_drbg, MBEDTLS_CTR_DRBG_PR_ON); TIME_AND_TSC("CTR_DRBG (PR)", if (mbedtls_ctr_drbg_random(&ctr_drbg, buf, BUFSIZE) != 0) mbedtls_exit(1)); mbedtls_ctr_drbg_free(&ctr_drbg); }