⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genkat.c

📁 Keccak hash加密算法
💻 C
📖 第 1 页 / 共 2 页
字号:
    if ( FindMarker(fp_in, "Repeat = ") )        fscanf(fp_in, "%d", &repeat);    else {        printf("ERROR: unable to read 'Repeat' from <ExtremelyLongMsgKAT.txt>\n");        return KAT_DATA_ERROR;    }        if ( FindMarker(fp_in, "Text = ") )        fscanf(fp_in, "%s", Text);    else {        printf("ERROR: unable to read 'Text' from <ExtremelyLongMsgKAT.txt>\n");        return KAT_DATA_ERROR;    }    //  memcpy(Text, "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno", 64);        if ( (retval = Init(&state, hashbitlen)) != KAT_SUCCESS ) {        printf("Init returned <%d> in genExtremelyLongMsg\n", retval);        return KAT_HASH_ERROR;    }    for ( i=0; i<repeat; i++ )        if ( (retval = Update(&state, Text, 512)) != KAT_SUCCESS ) {            printf("Update returned <%d> in genExtremelyLongMsg\n", retval);            return KAT_HASH_ERROR;        }    if ( (retval = Final(&state, MD)) != KAT_SUCCESS ) {        printf("Final returned <%d> in genExtremelyLongMsg\n", retval);        return KAT_HASH_ERROR;    }#ifdef TestSqueezing    if (hashbitlen == 0)        Squeeze(&state, Squeezed, SqueezingOutputLength);#endif    fprintf(fp_out, "Repeat = %d\n", repeat);    fprintf(fp_out, "Text = %s\n", Text);#ifdef TestSqueezing    if (hashbitlen > 0)        fprintBstr(fp_out, "MD = ", MD, hashbitlen/8);    else        fprintBstr(fp_out, "Squeezed = ", Squeezed, SqueezingOutputLength/8);#else    fprintBstr(fp_out, "MD = ", MD, hashbitlen/8);#endif    printf("finished ExtremelyLongMsgKAT for <%d>\n", hashbitlen);        fclose(fp_in);    fclose(fp_out);        return KAT_SUCCESS;}STATUS_CODESgenMonteCarlo(int hashbitlen){    char        fn[32], line[SUBMITTER_INFO_LEN];    BitSequence Seed[128], Msg[128], MD[64], Temp[128];    int         i, j, bytelen;    FILE        *fp_in, *fp_out;        if ( (fp_in = fopen("MonteCarlo.txt", "r")) == NULL ) {        printf("Couldn't open <MonteCarlo.txt> for read\n");        return KAT_FILE_OPEN_ERROR;    }        sprintf(fn, "MonteCarlo_%d.txt", hashbitlen);    if ( (fp_out = fopen(fn, "w")) == NULL ) {        printf("Couldn't open <%s> for write\n", fn);        return KAT_FILE_OPEN_ERROR;    }    fprintf(fp_out, "# %s\n", fn);    if ( FindMarker(fp_in, "# Algorithm Name:") ) {        fscanf(fp_in, "%[^\n]\n", line);        fprintf(fp_out, "# Algorithm Name:%s\n", line);    }    else {        printf("genMonteCarlo: Couldn't read Algorithm Name\n");        return KAT_HEADER_ERROR;    }    if ( FindMarker(fp_in, "# Principal Submitter:") ) {        fscanf(fp_in, "%[^\n]\n", line);        fprintf(fp_out, "# Principal Submitter:%s\n\n", line);    }    else {        printf("genMonteCarlo: Couldn't read Principal Submitter\n");        return KAT_HEADER_ERROR;    }        if ( !ReadHex(fp_in, Seed, 128, "Seed = ") ) {        printf("ERROR: unable to read 'Seed' from <MonteCarlo.txt>\n");        return KAT_DATA_ERROR;    }        bytelen = hashbitlen / 8;    memcpy(Msg, Seed, 128);    fprintBstr(fp_out, "Seed = ", Seed, 128);    for ( j=0; j<100; j++ ) {        for ( i=0; i<1000; i++ ) {            Hash(hashbitlen, Msg, 1024, MD);            memcpy(Temp, Msg, 128-bytelen);            memcpy(Msg, MD, bytelen);            memcpy(Msg+bytelen, Temp, 128-bytelen);        }        fprintf(fp_out, "\nj = %d\n", j);        fprintBstr(fp_out, "MD = ", MD, bytelen);    }    printf("finished MonteCarloKAT for <%d>\n", hashbitlen);    fclose(fp_in);    fclose(fp_out);        return KAT_SUCCESS;}#ifdef TestSqueezingSTATUS_CODESgenMonteCarloSqueezing(int hashbitlen){    char        fn[32], line[SUBMITTER_INFO_LEN];    BitSequence Seed[128], Msg[128], MD[64], Temp[128];    int         i, j, bytelen;    FILE        *fp_in, *fp_out;    hashState   state;    HashReturn  retval;        if ( (fp_in = fopen("MonteCarlo.txt", "r")) == NULL ) {        printf("Couldn't open <MonteCarlo.txt> for read\n");        return KAT_FILE_OPEN_ERROR;    }        sprintf(fn, "MonteCarlo_%d.txt", hashbitlen);    if ( (fp_out = fopen(fn, "w")) == NULL ) {        printf("Couldn't open <%s> for write\n", fn);        return KAT_FILE_OPEN_ERROR;    }    fprintf(fp_out, "# %s\n", fn);    if ( FindMarker(fp_in, "# Algorithm Name:") ) {        fscanf(fp_in, "%[^\n]\n", line);        fprintf(fp_out, "# Algorithm Name:%s\n", line);    }    else {        printf("genMonteCarlo: Couldn't read Algorithm Name\n");        return KAT_HEADER_ERROR;    }    if ( FindMarker(fp_in, "# Principal Submitter:") ) {        fscanf(fp_in, "%[^\n]\n", line);        fprintf(fp_out, "# Principal Submitter:%s\n\n", line);    }    else {        printf("genMonteCarlo: Couldn't read Principal Submitter\n");        return KAT_HEADER_ERROR;    }        if ( !ReadHex(fp_in, Seed, 128, "Seed = ") ) {        printf("ERROR: unable to read 'Seed' from <MonteCarlo.txt>\n");        return KAT_DATA_ERROR;    }        fprintBstr(fp_out, "Seed = ", Seed, 128);    if ( (retval = Init(&state, hashbitlen)) != KAT_SUCCESS ) {        printf("Init returned <%d> in genMonteCarloSqueezing\n", retval);        return KAT_HASH_ERROR;    }    if ( (retval = Update(&state, Seed, 128*8)) != KAT_SUCCESS ) {        printf("Update returned <%d> in genMonteCarloSqueezing\n", retval);        return KAT_HASH_ERROR;    }    if ( (retval = Final(&state, 0)) != KAT_SUCCESS ) {        printf("Final returned <%d> in genMonteCarloSqueezing\n", retval);        return KAT_HASH_ERROR;    }    bytelen = 64;    for ( j=0; j<100; j++ ) {        for ( i=0; i<1000; i++ ) {            if ( (retval = Squeeze(&state, MD, bytelen*8)) != KAT_SUCCESS ) {                printf("Squeeze returned <%d> in genMonteCarloSqueezing\n", retval);                return KAT_HASH_ERROR;            }        }        fprintf(fp_out, "\nj = %d\n", j);        fprintBstr(fp_out, "MD = ", MD, bytelen);    }    printf("finished MonteCarloKAT for <%d>\n", hashbitlen);    fclose(fp_in);    fclose(fp_out);        return KAT_SUCCESS;}#endif//// ALLOW TO READ HEXADECIMAL ENTRY (KEYS, DATA, TEXT, etc.)//intFindMarker(FILE *infile, const char *marker){    char    line[MAX_MARKER_LEN];    int     i, len;    len = (int)strlen(marker);    if ( len > MAX_MARKER_LEN-1 )        len = MAX_MARKER_LEN-1;    for ( i=0; i<len; i++ )        if ( (line[i] = fgetc(infile)) == EOF )            return 0;    line[len] = '\0';    while ( 1 ) {        if ( !strncmp(line, marker, len) )            return 1;        for ( i=0; i<len-1; i++ )            line[i] = line[i+1];        if ( (line[len-1] = fgetc(infile)) == EOF )            return 0;        line[len] = '\0';    }    // shouldn't get here    return 0;}//// ALLOW TO READ HEXADECIMAL ENTRY (KEYS, DATA, TEXT, etc.)//intReadHex(FILE *infile, BitSequence *A, int Length, char *str){    int         i, ch, started;    BitSequence ich;    if ( Length == 0 ) {        A[0] = 0x00;        return 1;    }    memset(A, 0x00, Length);    started = 0;    if ( FindMarker(infile, str) )        while ( (ch = fgetc(infile)) != EOF ) {            if ( !isxdigit(ch) ) {                if ( !started ) {                    if ( ch == '\n' )                        break;                    else                        continue;                }                else                    break;            }            started = 1;            if ( (ch >= '0') && (ch <= '9') )                ich = ch - '0';            else if ( (ch >= 'A') && (ch <= 'F') )                ich = ch - 'A' + 10;            else if ( (ch >= 'a') && (ch <= 'f') )                ich = ch - 'a' + 10;                        for ( i=0; i<Length-1; i++ )                A[i] = (A[i] << 4) | (A[i+1] >> 4);            A[Length-1] = (A[Length-1] << 4) | ich;        }    else        return 0;    return 1;}voidfprintBstr(FILE *fp, char *S, BitSequence *A, int L){    int     i;    fprintf(fp, "%s", S);    for ( i=0; i<L; i++ )        fprintf(fp, "%02X", A[i]);    if ( L == 0 )        fprintf(fp, "00");    fprintf(fp, "\n");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -