src/web_adaptor/httpauth.c
void digest_calc_ha1(
		const char*alg,	        /* 算法名称 md5||md5-sess */
		const char*user,	    /* login user name */
		const char*realm,	    /* realm name */
		const char*pswd,	    /* login password */
		const char*nonce,	    /* 服务器随机产生的nonce返回串 */
		const char*cnonce,      /* 客户端随机产生的nonce串 */
		hashhex_t session_key   /* OUT H(A1) */
		)
{
	md5context_t md5ctx;
	hash_t ha1;

	md5_init(&md5ctx);
	md5_update(&md5ctx, user, strlen(user));
	md5_update(&md5ctx, ":", 1);
	md5_update(&md5ctx, realm, strlen(realm));
	md5_update(&md5ctx, ":", 1);
	md5_update(&md5ctx, pswd, strlen(pswd));
	md5_final(ha1, &md5ctx);
	if (strcasecmp(alg, "md5-sess") == 0)
    {
		md5_init(&md5ctx);
		md5_update(&md5ctx, ha1, HASHLEN);
		md5_update(&md5ctx, ":", 1);
		md5_update(&md5ctx, nonce, strlen(nonce));
		md5_update(&md5ctx, ":", 1);
		md5_update(&md5ctx, cnonce, strlen(cnonce));
		md5_final(ha1, &md5ctx);
	};
	cvthex(ha1, session_key);
}
/* calculate H(A1) as per spec */
calculate H(A1) as per spec
calculate H ( A1 ) as per spec
void digest_calc_ha1(
		const char*alg,	        
		const char*user,	    
		const char*realm,	    
		const char*pswd,	    
		const char*nonce,	    
		const char*cnonce,      
		hashhex_t session_key   
		)
{
	md5context_t md5ctx;
	hash_t ha1;
	md5_init(&md5ctx);
	md5_update(&md5ctx, user, strlen(user));
	md5_update(&md5ctx, ":", 1);
	md5_update(&md5ctx, realm, strlen(realm));
	md5_update(&md5ctx, ":", 1);
	md5_update(&md5ctx, pswd, strlen(pswd));
	md5_final(ha1, &md5ctx);
	if (strcasecmp(alg, "md5-sess") == 0)
    {
		md5_init(&md5ctx);
		md5_update(&md5ctx, ha1, HASHLEN);
		md5_update(&md5ctx, ":", 1);
		md5_update(&md5ctx, nonce, strlen(nonce));
		md5_update(&md5ctx, ":", 1);
		md5_update(&md5ctx, cnonce, strlen(cnonce));
		md5_final(ha1, &md5ctx);
	};
	cvthex(ha1, session_key);
}
void digest_calc_ha1 ( const char * alg , const char * user , const char * realm , const char * pswd , const char * nonce , const char * cnonce , hashhex_t session_key ) { md5context_t md5ctx ; hash_t ha1 ; md5_init ( & md5ctx ) ; md5_update ( & md5ctx , user , strlen ( user ) ) ; md5_update ( & md5ctx , " " , 1 ) ; md5_update ( & md5ctx , realm , strlen ( realm ) ) ; md5_update ( & md5ctx , " " , 1 ) ; md5_update ( & md5ctx , pswd , strlen ( pswd ) ) ; md5_final ( ha1 , & md5ctx ) ; if ( strcasecmp ( alg , " " ) == 0 ) { md5_init ( & md5ctx ) ; md5_update ( & md5ctx , ha1 , HASHLEN ) ; md5_update ( & md5ctx , " " , 1 ) ; md5_update ( & md5ctx , nonce , strlen ( nonce ) ) ; md5_update ( & md5ctx , " " , 1 ) ; md5_update ( & md5ctx , cnonce , strlen ( cnonce ) ) ; md5_final ( ha1 , & md5ctx ) ; } ; cvthex ( ha1 , session_key ) ; }
calculate H(A1) as per spec
calculate H ( A1 ) as per spec
/* 算法名称 md5||md5-sess */ /* login user name */ /* realm name */ /* login password */ /* 服务器随机产生的nonce返回串 */ /* 客户端随机产生的nonce串 */ /* OUT H(A1) */