~ubuntu-branches/ubuntu/feisty/lighttpd/feisty

« back to all changes in this revision

Viewing changes to src/http_auth_digest.c

  • Committer: Bazaar Package Importer
  • Author(s): Krzysztof Krzyzaniak (eloy)
  • Date: 2006-01-16 20:06:39 UTC
  • mto: This revision was merged to the branch mainline in revision 6.
  • Revision ID: james.westby@ubuntu.com-20060116200639-nejjwyvlkgjhzasa
Tags: upstream-1.4.9
ImportĀ upstreamĀ versionĀ 1.4.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
        Hex[HASHHEXLEN] = '\0';
18
18
}
19
19
 
20
 
/* calculate H(A1) as per spec */
21
 
void DigestCalcHA1(
22
 
    IN char * pszAlg,
23
 
    IN char * pszUserName,
24
 
    IN char * pszRealm,
25
 
    IN char * pszPassword,
26
 
    IN char * pszNonce,
27
 
    IN char * pszCNonce,
28
 
    OUT HASHHEX SessionKey
29
 
    )
30
 
{
31
 
      MD5_CTX Md5Ctx;
32
 
      HASH HA1;
33
 
 
34
 
      MD5_Init(&Md5Ctx);
35
 
      MD5_Update(&Md5Ctx, (unsigned char *)pszUserName, strlen(pszUserName));
36
 
      MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
37
 
      MD5_Update(&Md5Ctx, (unsigned char *)pszRealm, strlen(pszRealm));
38
 
      MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
39
 
      MD5_Update(&Md5Ctx, (unsigned char *)pszPassword, strlen(pszPassword));
40
 
      MD5_Final(HA1, &Md5Ctx);
41
 
      if (strcasecmp(pszAlg, "md5-sess") == 0) {
42
 
            MD5_Init(&Md5Ctx);
43
 
            MD5_Update(&Md5Ctx, (unsigned char *)HA1, HASHLEN);
44
 
            MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
45
 
            MD5_Update(&Md5Ctx, (unsigned char *)pszNonce, strlen(pszNonce));
46
 
            MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
47
 
            MD5_Update(&Md5Ctx, (unsigned char *)pszCNonce, strlen(pszCNonce));
48
 
            MD5_Final(HA1, &Md5Ctx);
49
 
      }
50
 
      CvtHex(HA1, SessionKey);
51
 
}
52
 
 
53
 
/* calculate request-digest/response-digest as per HTTP Digest spec */
54
 
void DigestCalcResponse(
55
 
    IN HASHHEX HA1,           /* H(A1) */
56
 
    IN char * pszNonce,       /* nonce from server */
57
 
    IN char * pszNonceCount,  /* 8 hex digits */
58
 
    IN char * pszCNonce,      /* client nonce */
59
 
    IN char * pszQop,         /* qop-value: "", "auth", "auth-int" */
60
 
    IN char * pszMethod,      /* method from the request */
61
 
    IN char * pszDigestUri,   /* requested URL */
62
 
    IN HASHHEX HEntity,       /* H(entity body) if qop="auth-int" */
63
 
    OUT HASHHEX Response      /* request-digest or response-digest */
64
 
    )
65
 
{
66
 
      MD5_CTX Md5Ctx;
67
 
      HASH HA2;
68
 
      HASH RespHash;
69
 
       HASHHEX HA2Hex;
70
 
 
71
 
      /* calculate H(A2) */
72
 
      MD5_Init(&Md5Ctx);
73
 
      MD5_Update(&Md5Ctx, (unsigned char *)pszMethod, strlen(pszMethod));
74
 
      MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
75
 
      MD5_Update(&Md5Ctx, (unsigned char *)pszDigestUri, strlen(pszDigestUri));
76
 
      if (strcasecmp(pszQop, "auth-int") == 0) {
77
 
            MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
78
 
            MD5_Update(&Md5Ctx, (unsigned char *)HEntity, HASHHEXLEN);
79
 
      };
80
 
      MD5_Final(HA2, &Md5Ctx);
81
 
       CvtHex(HA2, HA2Hex);
82
 
 
83
 
      /* calculate response */
84
 
      MD5_Init(&Md5Ctx);
85
 
      MD5_Update(&Md5Ctx, (unsigned char *)HA1, HASHHEXLEN);
86
 
      MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
87
 
      MD5_Update(&Md5Ctx, (unsigned char *)pszNonce, strlen(pszNonce));
88
 
      MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
89
 
      if (*pszQop) {
90
 
          MD5_Update(&Md5Ctx, (unsigned char *)pszNonceCount, strlen(pszNonceCount));
91
 
          MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
92
 
          MD5_Update(&Md5Ctx, (unsigned char *)pszCNonce, strlen(pszCNonce));
93
 
          MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
94
 
          MD5_Update(&Md5Ctx, (unsigned char *)pszQop, strlen(pszQop));
95
 
          MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
96
 
      }
97
 
      MD5_Update(&Md5Ctx, (unsigned char *)HA2Hex, HASHHEXLEN);
98
 
      MD5_Final(RespHash, &Md5Ctx);
99
 
      CvtHex(RespHash, Response);
100
 
}
101