Beispiel #1
0
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);
}
Beispiel #2
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);
}
Beispiel #3
0
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);
}