Ejemplo n.º 1
0
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;
    }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;

}
Ejemplo n.º 4
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
}
Ejemplo n.º 5
0
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 );
}
Ejemplo n.º 6
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;
  }
Ejemplo n.º 7
0
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);
	}