in src/ecdh_support.c [152:187]
int HMAC(int sha,const octet *m,const octet *k,int olen,octet *tag)
{
/* Input is from an octet m *
* olen is requested output length in bytes. k is the key *
* The output is the calculated tag */
int hlen;
int b;
char h[128];
char k0[128];
octet H= {0,sizeof(h),h};
octet K0= {0,sizeof(k0),k0};
hlen=sha;
if (hlen>32) b=128;
else b=64;
if (olen<4 /*|| olen>hlen*/) return 0;
if (k->len > b) ehashit(sha,k,-1,NULL,&K0,0);
else OCT_copy(&K0,k);
OCT_jbyte(&K0,0,b-K0.len);
OCT_xorbyte(&K0,0x36);
ehashit(sha,&K0,-1,m,&H,0);
OCT_xorbyte(&K0,0x6a); /* 0x6a = 0x36 ^ 0x5c */
ehashit(sha,&K0,-1,&H,&H,olen);
OCT_empty(tag);
OCT_jbytes(tag,H.val,olen);
return 1;
}