40 for (
i = 0;
i < HASHLEN;
i++)
42 j = (Bin[
i] >> 4) & 0xf;
45 Hex[
i * 2] = (j +
'0');
49 Hex[
i * 2] = (j +
'a' - 10);
54 Hex[
i * 2 + 1] = (j +
'0');
58 Hex[
i * 2 + 1] = (j +
'a' - 10);
61 Hex[HASHHEXLEN] =
'\0';
64#if defined(__GNUC__) || defined(__clang__)
65#pragma GCC diagnostic push
66#pragma GCC diagnostic ignored "-Wconversion"
71DigestCalcHA1(IN
char *pszAlg, IN
char *pszUserName, IN
char *pszRealm, IN
char *pszPassword,
72 IN
char *pszNonce, IN
char *pszCNonce, OUT HASHHEX SessionKey)
78 md_ctx_update(md5_ctx, (
const uint8_t *)pszUserName, strlen(pszUserName));
80 md_ctx_update(md5_ctx, (
const uint8_t *)pszRealm, strlen(pszRealm));
82 md_ctx_update(md5_ctx, (
const uint8_t *)pszPassword, strlen(pszPassword));
84 if (pszAlg && strcasecmp(pszAlg,
"md5-sess") == 0)
89 md_ctx_update(md5_ctx, (
const uint8_t *)pszNonce, strlen(pszNonce));
91 md_ctx_update(md5_ctx, (
const uint8_t *)pszCNonce, strlen(pszCNonce));
103 IN
char *pszNonceCount,
107 IN
char *pszDigestUri,
120 md_ctx_update(md5_ctx, (
const uint8_t *)pszMethod, strlen(pszMethod));
122 md_ctx_update(md5_ctx, (
const uint8_t *)pszDigestUri, strlen(pszDigestUri));
123 if (strcasecmp(pszQop,
"auth-int") == 0)
135 md_ctx_update(md5_ctx, (
const uint8_t *)pszNonce, strlen(pszNonce));
139 md_ctx_update(md5_ctx, (
const uint8_t *)pszNonceCount, strlen(pszNonceCount));
141 md_ctx_update(md5_ctx, (
const uint8_t *)pszCNonce, strlen(pszCNonce));
143 md_ctx_update(md5_ctx, (
const uint8_t *)pszQop, strlen(pszQop));
150 CvtHex(RespHash, Response);
153#if defined(__GNUC__) || defined(__clang__)
154#pragma GCC diagnostic pop
Data Channel Cryptography Module.
md_ctx_t * md_ctx_new(void)
void md_ctx_update(md_ctx_t *ctx, const uint8_t *src, int src_len)
void md_ctx_cleanup(md_ctx_t *ctx)
void md_ctx_final(md_ctx_t *ctx, uint8_t *dst)
void md_ctx_init(md_ctx_t *ctx, const char *mdname)
Initialises the given message digest context.
void md_ctx_free(md_ctx_t *ctx)
mbedtls_md_context_t md_ctx_t
Generic message digest context.
void DigestCalcHA1(IN char *pszAlg, IN char *pszUserName, IN char *pszRealm, IN char *pszPassword, IN char *pszNonce, IN char *pszCNonce, OUT HASHHEX SessionKey)
static void CvtHex(IN HASH Bin, OUT HASHHEX Hex)
void DigestCalcResponse(IN HASHHEX HA1, IN char *pszNonce, IN char *pszNonceCount, IN char *pszCNonce, IN char *pszQop, IN char *pszMethod, IN char *pszDigestUri, IN HASHHEX HEntity, OUT HASHHEX Response)