static void test_precomp(void) { long long i, j; pseudorandombytes(space, sizeof space); checksum_zero(); for (i = 0; i < 1080; ++i) { for (j = 31; j >= 0; --j) sk[j ] = skdata[i][j]; for (j = 31; j >= 0; --j) sk[j + 32] = skdata[i][j]; for (j = 63; j >= 0; --j) pk[j ] = pkdata[i][j]; if (iszero(sk)) continue; crypto_sign_nistp256ecdsa(sm, &smlen, space, MLEN - i, sk); checksum(sm, crypto_sign_nistp256ecdsa_BYTES); if (crypto_sign_nistp256ecdsa_open(m, &mlen, sm, smlen, pk) != 0) { fail_printdata("sm", sm, smlen); fail_printdata("pk", pk, crypto_sign_nistp256ecdsa_PUBLICKEYBYTES); fail_printdata("sk", sk, crypto_sign_nistp256ecdsa_SECRETKEYBYTES); fail("crypto_sign_nistp256ecdsa_open() failure, please report it !!!!!!!!!"); } } if (!checksum_check((test_precomp_checksumsha2)) && !checksum_check((test_precomp_checksumsha3))) { fail_whenbadchecksum(test_precomp_checksumsha3); } }
int recognize_packet(uint8_t * buff){ struct nhrp_fixed_h *fixed = (struct nhrp_fixed_h *)buff; uint8_t type; if(!checksum_check(buff)){ printf("mpcd: p_recogn.c: checksum error!\n"); return -1; } if (fixed->ar_extoff > (fixed->ar_pktsz - sizeof(struct nhrp_extension))) { printf("mpcd: p_recogn.c: extension offset beyond packet limits!\n"); return -1; } type = fixed->ar_op_type; dprintf("mpcd: p_recogn.c: "); switch(type){ case NHRP_PURGE_REQUEST : dprintf("purge request received.\n"); return nhrp_purge_request(buff); case MPOA_CACHE_IMPOSITION_REQUEST : dprintf("cache imposition request recieved.\n"); return mpoa_cache_imposition_request(buff); case MPOA_EGRESS_CACHE_PURGE_REPLY : dprintf("mpoa egress cache purge reply recieved.\n"); return mpoa_egress_cache_purge_reply(buff); case MPOA_KEEP_ALIVE : dprintf("keep alive recieved. \n"); return mpoa_keep_alive(buff); case MPOA_TRIGGER : printf("mpoa trigger recieved. \n"); return mpoa_trigger(buff); case MPOA_RESOLUTION_REPLY: dprintf("mpoa resolution reply recieved. \n"); return mpoa_resolution_reply(buff); default: printf("p_recogn.c: unrecognized packet: %d\n",type); return -1; } }