Navigation


Changeset 409:c2fb5b26bfcb in freeDiameter for extensions/app_sip/md5.c


Ignore:
Timestamp:
Jul 8, 2010, 4:19:28 PM (14 years ago)
Author:
Alexandre Westfahl <awestfahl@freediameter.net>
Branch:
default
Phase:
public
Message:

Fix for ticket 8

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/app_sip/md5.c

    r360 r409  
    5353
    5454      MD5Init(&Md5Ctx);
    55       MD5Update(&Md5Ctx, pszUserName, strlen(pszUserName));
    56       MD5Update(&Md5Ctx, ":", 1);
    57       MD5Update(&Md5Ctx, pszRealm, strlen(pszRealm));
    58       MD5Update(&Md5Ctx, ":", 1);
    59       MD5Update(&Md5Ctx, pszPassword, strlen(pszPassword));
    60       MD5Final(HA1, &Md5Ctx);
     55      MD5Update(&Md5Ctx, (const unsigned char *)pszUserName, strlen(pszUserName));
     56      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     57      MD5Update(&Md5Ctx, (const unsigned char *)pszRealm, strlen(pszRealm));
     58      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     59      MD5Update(&Md5Ctx, (const unsigned char *)pszPassword, strlen(pszPassword));
     60      MD5Final((unsigned char *)HA1, &Md5Ctx);
    6161      if (strcmp(pszAlg, "md5-sess") == 0) {   
    6262                MD5Init(&Md5Ctx);
    63                 MD5Update(&Md5Ctx, HA1, HASHLEN);
    64                 MD5Update(&Md5Ctx, ":", 1);
    65                 MD5Update(&Md5Ctx, pszNonce, strlen(pszNonce));
    66                 MD5Update(&Md5Ctx, ":", 1);
    67                 MD5Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
    68                 MD5Final(HA1, &Md5Ctx);
     63                MD5Update(&Md5Ctx, (const unsigned char *)HA1, HASHLEN);
     64                MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     65                MD5Update(&Md5Ctx, (const unsigned char *)pszNonce, strlen(pszNonce));
     66                MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     67                MD5Update(&Md5Ctx, (const unsigned char *)pszCNonce, strlen(pszCNonce));
     68                MD5Final((unsigned char *)HA1, &Md5Ctx);
    6969      }
    7070      CvtHex(HA1, SessionKey);
     
    8181      // calculate H(A2)
    8282      MD5Init(&Md5Ctx);
    83       MD5Update(&Md5Ctx, pszMethod, strlen(pszMethod));
    84       MD5Update(&Md5Ctx, ":", 1);
    85       MD5Update(&Md5Ctx, pszDigestUri, strlen(pszDigestUri));
     83      MD5Update(&Md5Ctx, (const unsigned char *)pszMethod, strlen(pszMethod));
     84      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     85      MD5Update(&Md5Ctx, (const unsigned char *)pszDigestUri, strlen(pszDigestUri));
    8686      if (strcmp(pszQop, "auth-int") == 0) {
    87             MD5Update(&Md5Ctx, ":", 1);
    88             MD5Update(&Md5Ctx, HEntity, HASHHEXLEN);
     87            MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     88            MD5Update(&Md5Ctx, (const unsigned char *)HEntity, HASHHEXLEN);
    8989      }
    90       MD5Final(HA2, &Md5Ctx);
     90      MD5Final((unsigned char *)HA2, &Md5Ctx);
    9191       CvtHex(HA2, HA2Hex);
    9292       
    9393      // calculate response
    9494      MD5Init(&Md5Ctx);
    95       MD5Update(&Md5Ctx, HA1, HASHHEXLEN);
    96       MD5Update(&Md5Ctx, ":", 1);
    97       MD5Update(&Md5Ctx, pszNonce, strlen(pszNonce));
    98       MD5Update(&Md5Ctx, ":", 1);
     95      MD5Update(&Md5Ctx, (const unsigned char *)HA1, HASHHEXLEN);
     96      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     97      MD5Update(&Md5Ctx,(const unsigned char *) pszNonce, strlen(pszNonce));
     98      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
    9999      if (*pszQop) {
    100           MD5Update(&Md5Ctx, pszNonceCount, strlen(pszNonceCount));
    101           MD5Update(&Md5Ctx, ":", 1);
    102           MD5Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
    103           MD5Update(&Md5Ctx, ":", 1);
    104           MD5Update(&Md5Ctx, pszQop, strlen(pszQop));
    105           MD5Update(&Md5Ctx, ":", 1);
     100          MD5Update(&Md5Ctx, (const unsigned char *)pszNonceCount, strlen(pszNonceCount));
     101          MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     102          MD5Update(&Md5Ctx, (const unsigned char *)pszCNonce, strlen(pszCNonce));
     103          MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     104          MD5Update(&Md5Ctx, (const unsigned char *)pszQop, strlen(pszQop));
     105          MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
    106106      }
    107       MD5Update(&Md5Ctx, HA2Hex, HASHHEXLEN);
    108       MD5Final(RespHash, &Md5Ctx);
     107      MD5Update(&Md5Ctx, (const unsigned char *)HA2Hex, HASHHEXLEN);
     108      MD5Final((unsigned char *)RespHash, &Md5Ctx);
    109109      CvtHex(RespHash, Response);
    110110}
     
    119119      // calculate H(A2)
    120120      MD5Init(&Md5Ctx);
    121       MD5Update(&Md5Ctx, ":", 1);
    122       MD5Update(&Md5Ctx, pszDigestUri, strlen(pszDigestUri));
     121      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     122      MD5Update(&Md5Ctx, (const unsigned char *)pszDigestUri, strlen(pszDigestUri));
    123123      if (strcmp(pszQop, "auth-int") == 0) {
    124             MD5Update(&Md5Ctx, ":", 1);
    125             MD5Update(&Md5Ctx, HEntity, HASHHEXLEN);
     124            MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     125            MD5Update(&Md5Ctx, (const unsigned char *)HEntity, HASHHEXLEN);
    126126      }
    127       MD5Final(HA2, &Md5Ctx);
     127      MD5Final((unsigned char *)HA2, &Md5Ctx);
    128128       CvtHex(HA2, HA2Hex);
    129129       
    130130      // calculate response
    131131      MD5Init(&Md5Ctx);
    132       MD5Update(&Md5Ctx, HA1, HASHHEXLEN);
    133       MD5Update(&Md5Ctx, ":", 1);
    134       MD5Update(&Md5Ctx, pszNonce, strlen(pszNonce));
    135       MD5Update(&Md5Ctx, ":", 1);
     132      MD5Update(&Md5Ctx, (const unsigned char *)HA1, HASHHEXLEN);
     133      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     134      MD5Update(&Md5Ctx, (const unsigned char *)pszNonce, strlen(pszNonce));
     135      MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
    136136      if (*pszQop) {
    137           MD5Update(&Md5Ctx, pszNonceCount, strlen(pszNonceCount));
    138           MD5Update(&Md5Ctx, ":", 1);
    139           MD5Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
    140           MD5Update(&Md5Ctx, ":", 1);
    141           MD5Update(&Md5Ctx, pszQop, strlen(pszQop));
    142           MD5Update(&Md5Ctx, ":", 1);
     137          MD5Update(&Md5Ctx, (const unsigned char *)pszNonceCount, strlen(pszNonceCount));
     138          MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     139          MD5Update(&Md5Ctx, (const unsigned char *)pszCNonce, strlen(pszCNonce));
     140          MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
     141          MD5Update(&Md5Ctx, (const unsigned char *)pszQop, strlen(pszQop));
     142          MD5Update(&Md5Ctx, (const unsigned char *)":", 1);
    143143      }
    144       MD5Update(&Md5Ctx, HA2Hex, HASHHEXLEN);
    145       MD5Final(RespHash, &Md5Ctx);
     144      MD5Update(&Md5Ctx, (const unsigned char *)HA2Hex, HASHHEXLEN);
     145      MD5Final((unsigned char *)RespHash, &Md5Ctx);
    146146      CvtHex(RespHash, Response);
    147147}
Note: See TracChangeset for help on using the changeset viewer.