/* reponse available within RSPTYP record. */
/* */
/********************************************************/
-_Bool dig_checkresp(RSPTYP *resp,char *secret)
+PUBLIC char *dig_hashresp(RSPTYP *resp,char *mode,char *secret)
{
-_Bool isok;
+char *HA0;
char *HA1;
char *HA2;
-char *HA3;
char seq[400];
int phase;
_Bool proceed;
-isok=false;
-(void) memset(seq,'\000',sizeof(seq));
+HA0=(char *)0;
HA1=(char *)0;
HA2=(char *)0;
-HA3=(char *)0;
+(void) memset(seq,'\000',sizeof(seq));
phase=0;
proceed=(resp!=(RSPTYP *)0);
while (proceed==true) {
case 1 : { //computing HA2
MD5TYP *A2;
- (void) snprintf(seq,sizeof(seq),"AUTHENTICATE:%s",resp->digesturi);
+ (void) snprintf(seq,sizeof(seq),"%s:%s",mode,resp->digesturi);
A2=dig_hashmd5((unsigned char *)seq,strlen(seq));
HA2=cnv_tohexa((char *)A2,sizeof(MD5TYP));
(void) free(A2);
}
break;
case 2 : { //computing response
- MD5TYP *A3;
+ MD5TYP *A0;
(void) snprintf(seq,sizeof(seq),"%s:%s:%08lx:%s:%s:%s",
HA1,resp->nonce,resp->nc,
resp->cnonce,resp->qop,HA2);
- A3=dig_hashmd5((unsigned char *)seq,strlen(seq));
- HA3=cnv_tohexa((char *)A3,sizeof(MD5TYP));
- (void) free(A3);
+ A0=dig_hashmd5((unsigned char *)seq,strlen(seq));
+ HA0=cnv_tohexa((char *)A0,sizeof(MD5TYP));
+ (void) free(A0);
}
break;
- case 3 : //comparing annoced response versus computed response
- if (strcmp(HA3,resp->response)==0)
- isok=true;
- break;
default : //SAFE Guard
proceed=false;
break;
}
phase++;
}
-HA3=rou_freestr(HA3);
HA2=rou_freestr(HA2);
HA1=rou_freestr(HA1);
-return isok;
+return HA0;
}