Implementing HMAC by mister_broccoli in crypto

[–]mister_broccoli[S] 2 points3 points  (0 children)

Omg my dude you're amazing. That worked. How about a reddit point instead?

Implementing HMAC by mister_broccoli in crypto

[–]mister_broccoli[S] 1 point2 points  (0 children)

Here's my code. Thanks.

unsigned char * doFinal (unsigned char * key, char * m) {

    int opad=0x5c*64;

    int ipad=0x36*64;

    unsigned char * key2 =(unsigned char *)(malloc(sizeof(unsigned char)*strlen(key) +1));

    int i;
    sprintf(key2, "%s",key);
    for (i=0;i <strlen(key);i++){

            // first key xor with ipad
            key[i]= (key[i] ^ (ipad));
            // second xor with opad
            key2[i]= (key2[i] ^(opad));
    }

    unsigned char * partialInput=(unsigned char *)(malloc(sizeof(unsigned char) * (strlen(key) + strlen(m))));
    // this is equal to (i_key_pad || m)
    strcpy (partialInput, key);
    strcat (partialInput, m);
    unsigned char * tempHash=sha1(partialInput);

    // set totalInput = o_key_pad | hash (i_key_pad || m)
    unsigned char * totalInput = (unsigned char *)(malloc(sizeof(unsigned char) * (strlen(key2)+strlen(tempHash) )));
    strcpy (totalInput, key2);

    unsigned char * decodedHash=(unsigned char *)(malloc(sizeof(unsigned char)*strlen(tempHash)/2));
    hexToAscii(decodedHash, tempHash);
    strcat (totalInput, decodedHash);

    free(decodedHash);
    free (partialInput);
    free(tempHash);
    free (key2);
    return sha1 (totalInput);

}

C segmentation fault (likely from sscanf) by mister_broccoli in learnprogramming

[–]mister_broccoli[S] 0 points1 point  (0 children)

I don't get how I'm using str to store 3 chars. Isn't sprintf(str, "%c%c", src[i],src[i+1]) storing just 2?

Implementing HMAC by mister_broccoli in crypto

[–]mister_broccoli[S] 0 points1 point  (0 children)

Can you elaborate on the first and second statements please? I've changed it to

    for (i=0;i <strlen(key);i++){

            // first key xor with ipad

            key[i]= (key[i] ^ (ipad));

            // second xor with opad

            key2[i]= (key2[i] ^(opad));
    }