All pastes #738646 Raw Edit

hmac-sha-256

public c v1 · immutable
·published 2007-10-16 15:08 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sha256.h>#define KEY "Secured"/* *Key =          4a656665                          ("Jefe")  Data =         7768617420646f2079612077616e7420  ("what do ya want ")                 666f72206e6f7468696e673f          ("for nothing?") HMAC-SHA-256 = 5bdcc146bf60754e6a042426089575c7                5a003f089d2739839dec58b964ec3843*/void hmac (unsigned char * key, unsigned char * message){        unsigned char new_key[32];        unsigned char ipad[32];        unsigned char opad[32];        unsigned char * new_msg;        unsigned char digest[32] = "";        unsigned char digest2[32];        SHA256_CTX context;        new_msg = malloc(strlen(message) + 32);        int i;        memset(new_key, '\0', 32);        memcpy(&new_key, key, strlen(key));        for (i = 0; i < 32; i++)        {                ipad[i] = 0x36 ^ new_key[i];                opad[i] = 0x5c ^ new_key[i];        }        memcpy(new_msg, &ipad, 32);        memcpy(new_msg+32, message, strlen(message));        SHA256_Init(&context);        SHA256_Update(&context, new_msg, strlen(message)+32);        SHA256_Final(digest, &context);        memset(new_key, '\0', 64);        memcpy(new_msg, &opad, 32);        memcpy(new_msg+32, &digest, 32);        SHA256_Init(&context);        SHA256_Update(&context, new_msg, 64);        SHA256_Final(digest2, &context);        printf("HMAC: ");        for (i = 0; i < 32; i++)        {                printf("%2x", digest2[i]);                if (((i+1) % 4) == 0 && i != 32-1)                        printf("-");        }        printf("\n");        free(new_msg);        return;}int main (){        unsigned char input[128] = "";        unsigned char c;        int i = 0;        while ((c = getchar()) != '\n' && i != 127)        {                input[i] = c;                i++;        }        input[i+1] = '0';        hmac("Jefe", input);        return 0;}