0

I have implemented the following code for SHA3-224 which uses "shortmessage" in bit oriented mode, the message length is 47 bits and I am not able to get correct message digest which is supposed to be "6a1cdc94a6d676d598d7dd51be9461598bd931b6a8c45d6b34dfa6bb":

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/evp.h>
#include "basic_convertion.h"

#define HANDLE_ERROR(msg) { fprintf(stderr, "%s\n", msg); exit(EXIT_FAILURE); } #define HANDLE_ERROR2(msg, mdctx) { fprintf(stderr, "%s\n", msg); EVP_MD_CTX_destroy(mdctx); exit(EXIT_FAILURE); }

int main() { char *msg = "a1fc9771d600";

/*Len = 47
Msg = a1fc9771d600
MD = 6a1cdc94a6d676d598d7dd51be9461598bd931b6a8c45d6b34dfa6bb*/


int msg_len_byt = (strlen(msg)/2);
int msg_len_chr = strlen(msg);//*4;
int msg_len_bit = strlen(msg)*4;
printf(&quot;msg_len_byt = %d\n&quot;,msg_len_byt);
printf(&quot;msg_len_chr = %d\n&quot;,msg_len_chr);
printf(&quot;msg_len_bit = %d\n&quot;,msg_len_bit);
int i;

EVP_MD_CTX *mdctx;
int val;
unsigned char * digest;
unsigned int digest_len;
EVP_MD *algo = NULL;

algo = EVP_sha3_224();

if ((mdctx = EVP_MD_CTX_create()) == NULL) {
    HANDLE_ERROR(&quot;EVP_MD_CTX_create() error&quot;);
}

// initialize digest engine
if (EVP_DigestInit_ex(mdctx, algo, NULL) != 1) { // returns 1 if successful
    HANDLE_ERROR2(&quot;EVP_DigestInit_ex() error&quot;, mdctx)
}

//provide data to digest engine
if (EVP_DigestUpdate(mdctx, msg, 47) != 1) { // returns 1 if successful
    HANDLE_ERROR2(&quot;EVP_DigestUpdate() error&quot;, mdctx)
}

digest_len = EVP_MD_size(algo);
printf(&quot;digest_len = %d\n&quot;,digest_len);


if ((digest = (unsigned char *)OPENSSL_malloc(digest_len)) == NULL) {
    HANDLE_ERROR2(&quot;OPENSSL_malloc() error&quot;, mdctx)
}


if (EVP_DigestFinal_ex(mdctx, digest, &amp;digest_len) != 1) { // returns 1 if successful
    OPENSSL_free(digest);
    HANDLE_ERROR2(&quot;EVP_DigestFinal_ex() error&quot;, mdctx)
}

for (int i = 0; i &lt; digest_len; i++) {
    printf(&quot;%02x&quot;, digest[i]);
}

//OPENSSL_free(digest);
EVP_MD_CTX_destroy(mdctx);

return 0;

}

fgrieu
  • 140,762
  • 12
  • 307
  • 587

0 Answers0