void do_uac_auth(str *method, str *uri, struct uac_credential *crd, struct authenticate_body *auth, HASHHEX response) { HASHHEX ha1; HASHHEX ha2; if((auth->flags&QOP_AUTH) || (auth->flags&QOP_AUTH_INT)) { /* if qop generate nonce-count and cnonce */ cnonce.s = int2str(get_hash1_raw(auth->nonce.s, auth->nonce.len), &cnonce.len); /* do authentication */ uac_calc_HA1( crd, auth, &cnonce, ha1); uac_calc_HA2( method, uri, auth, 0/*hentity*/, ha2 ); uac_calc_response( ha1, ha2, auth, &nc, &cnonce, response); auth->nc = &nc; auth->cnonce = &cnonce; } else { /* do authentication */ uac_calc_HA1( crd, auth, 0/*cnonce*/, ha1); uac_calc_HA2( method, uri, auth, 0/*hentity*/, ha2 ); uac_calc_response( ha1, ha2, auth, 0/*nc*/, 0/*cnonce*/, response); } }
static inline void do_uac_auth(struct sip_msg *req, str *uri, struct uac_credential *crd, struct authenticate_body *auth, HASHHEX response) { HASHHEX ha1; HASHHEX ha2; /* do authentication */ uac_calc_HA1( crd, auth, 0/*cnonce*/, ha1); uac_calc_HA2( &req->first_line.u.request.method, uri, auth, 0/*hentity*/, ha2 ); uac_calc_response( ha1, ha2, auth, 0/*nc*/, 0/*cnonce*/, response); }