int main(int argc, char* argv[]) { struct timeval tstart, tend; unsigned char output[64 + 20]; int32 usec; int j; memset(output, 0, 64); if (gettimeofday(&tstart, NULL)) exit(1); for (j = 0; j < NITER; j++) { fPRF(prf_vec[0].key, prf_vec[0].key_len, (const unsigned char *)"prefix", 6, prf_vec[0].data, prf_vec[0].data_len, output, 64); } if (gettimeofday(&tend, NULL)) exit(1); dprintf("fPRF", output, 64, 0); usec = tend.tv_usec - tstart.tv_usec; usec += 1000000 * (tend.tv_sec - tstart.tv_sec); printf("usec %d\n", usec); memset(output, 0, 64); if (gettimeofday(&tstart, NULL)) exit(1); for (j = 0; j < NITER; j++) { PRF(prf_vec[0].key, prf_vec[0].key_len, (const unsigned char *)"prefix", 6, prf_vec[0].data, prf_vec[0].data_len, output, 64); } if (gettimeofday(&tend, NULL)) exit(1); dprintf("PRF", output, 64, 0); usec = tend.tv_usec - tstart.tv_usec; usec += 1000000 * (tend.tv_sec - tstart.tv_sec); printf("usec %d\n", usec); memset(output, 0, 64); if (gettimeofday(&tstart, NULL)) exit(1); for (j = 0; j < NITER; j++) { fPRF(prf_vec[0].key, prf_vec[0].key_len, (const unsigned char *)"prefix", 6, prf_vec[0].data, prf_vec[0].data_len, output, 64); } if (gettimeofday(&tend, NULL)) exit(1); dprintf("fPRF", output, 64, 0); usec = tend.tv_usec - tstart.tv_usec; usec += 1000000 * (tend.tv_sec - tstart.tv_sec); printf("usec %d\n", usec); memset(output, 0, 64); if (gettimeofday(&tstart, NULL)) exit(1); for (j = 0; j < NITER; j++) { PRF(prf_vec[0].key, prf_vec[0].key_len, (unsigned char *)"prefix", 6, prf_vec[0].data, prf_vec[0].data_len, output, 64); } if (gettimeofday(&tend, NULL)) exit(1); dprintf("PRF", output, 64, 0); usec = tend.tv_usec - tstart.tv_usec; usec += 1000000 * (tend.tv_sec - tstart.tv_sec); printf("usec %d\n", usec); return (0); }
int main(int argc, char* argv[]) { unsigned char digest[20]; unsigned char output[64 + 20]; int k, c, fail = 0; for (k = 0; k < NUM_VECTORS; k++) { printf("Test Vector %d:\n", k); hmac_sha1(prf_vec[k].data, prf_vec[k].data_len, prf_vec[k].key, prf_vec[k].key_len, digest); c = memcmp(digest, prf_vec[k].digest1, 20); dprintf("HMAC_SHA1", digest, 20, c); if (c) fail++; memset(output, 0, 64); if (PRF(prf_vec[k].key, prf_vec[k].key_len, prf_vec[k].prefix, prf_vec[k].prefix_len, prf_vec[k].data, prf_vec[k].data_len, output, 16)) fail++; c = memcmp(output, prf_vec[k].prf, 16); dprintf("PRF", output, 16, c); if (c) fail++; memset(output, 0, 64); if (fPRF(prf_vec[k].key, prf_vec[k].key_len, prf_vec[k].prefix, prf_vec[k].prefix_len, prf_vec[k].data, prf_vec[k].data_len, output, 16)) fail++; c = memcmp(output, prf_vec[k].prf, 16); dprintf("fPRF", output, 16, c); if (c) fail++; memset(output, 0, 64); if (PRF(prf_vec[k].key, prf_vec[k].key_len, prf_vec[k].prefix, prf_vec[k].prefix_len, prf_vec[k].data, prf_vec[k].data_len, output, 64)) fail++; c = memcmp(output, prf_vec[k].prf, 64); dprintf("PRF", output, 64, c); if (c) fail++; memset(output, 0, 64); if (fPRF(prf_vec[k].key, prf_vec[k].key_len, prf_vec[k].prefix, prf_vec[k].prefix_len, prf_vec[k].data, prf_vec[k].data_len, output, 64)) fail++; c = memcmp(output, prf_vec[k].prf, 64); dprintf("fPRF", output, 64, c); if (c) fail++; } fprintf(stderr, "%s: %s\n", *argv, fail?"FAILED":"PASSED"); return (fail); }
void BCMROMFN(wpa_calc_ptk)(struct ether_addr *auth_ea, struct ether_addr *sta_ea, uint8 *anonce, uint8* snonce, uint8 *pmk, uint pmk_len, uint8 *ptk, uint ptk_len) { uchar data[128], prf_buff[PRF_OUTBUF_LEN]; const char prefix[] = "Pairwise key expansion"; uint data_len = 0; /* Create the the data portion: * the lesser of the EAs, followed by the greater of the EAs, * followed by the lesser of the the nonces, followed by the * greater of the nonces. */ bcopy(wpa_array_cmp(MIN_ARRAY, (uint8 *)auth_ea, (uint8 *)sta_ea, ETHER_ADDR_LEN), (char *)&data[data_len], ETHER_ADDR_LEN); data_len += ETHER_ADDR_LEN; bcopy(wpa_array_cmp(MAX_ARRAY, (uint8 *)auth_ea, (uint8 *)sta_ea, ETHER_ADDR_LEN), (char *)&data[data_len], ETHER_ADDR_LEN); data_len += ETHER_ADDR_LEN; bcopy(wpa_array_cmp(MIN_ARRAY, snonce, anonce, EAPOL_WPA_KEY_NONCE_LEN), (char *)&data[data_len], EAPOL_WPA_KEY_NONCE_LEN); data_len += EAPOL_WPA_KEY_NONCE_LEN; bcopy(wpa_array_cmp(MAX_ARRAY, snonce, anonce, EAPOL_WPA_KEY_NONCE_LEN), (char *)&data[data_len], EAPOL_WPA_KEY_NONCE_LEN); data_len += EAPOL_WPA_KEY_NONCE_LEN; /* generate the PTK */ ASSERT(strlen(prefix) + data_len + 1 <= PRF_MAX_I_D_LEN); fPRF(pmk, (int)pmk_len, (uchar *)prefix, strlen(prefix), data, data_len, prf_buff, (int)ptk_len); bcopy(prf_buff, (char*)ptk, ptk_len); }