void newhope_sharedb(unsigned char *sharedkey, unsigned char *send, const unsigned char *received) { poly sp, ep, v, a, pka, c, epp, bp; unsigned char seed[NEWHOPE_SEEDBYTES]; unsigned char noiseseed[32]; randombytes(noiseseed, 32); decode_a(&pka, seed, received); gen_a(&a, seed); poly_getnoise(&sp,noiseseed,0); poly_ntt(&sp); poly_getnoise(&ep,noiseseed,1); poly_ntt(&ep); poly_pointwise(&bp, &a, &sp); poly_add(&bp, &bp, &ep); poly_pointwise(&v, &pka, &sp); poly_bitrev(&v); poly_invntt(&v); poly_getnoise(&epp,noiseseed,2); poly_add(&v, &v, &epp); helprec(&c, &v, noiseseed, 3); encode_b(send, &bp, &c); rec(sharedkey, &v, &c); sha3256(sharedkey, sharedkey, 32); }
int encode_inter( pbs_attribute *attr, /* ptr to pbs_attribute */ tlist_head *phead, /* head of pbs_attribute list */ const char *atname, /* pbs_attribute name */ const char *rsname, /* resource name or null */ int mode, /* encode mode, unused here */ int perm) /* only used for resources */ { if (mode == ATR_ENCODE_CLIENT) return (encode_b(attr, phead, atname, rsname, mode, perm)); else return (encode_l(attr, phead, atname, rsname, mode, perm)); }