herumi / bls

288 stars 132 forks source link

blsSignatureSetHexStr sets incorrect value (first char is missing) #81

Closed paceto256 closed 2 years ago

paceto256 commented 2 years ago
    char hexSig[] = "9933158d568e1701d2d3c044570b38e5362675783f8a73a80b53a4ca0a3e39fdd13ef6ae238620f95fb09ce7f34fee57";
    blsSignature sig;
    blsSignatureSetHexStr(&sig, hexSig, strlen(hexSig));

    unsigned char buf1[1024];
    size_t n1 = blsSignatureSerialize(buf1, sizeof(buf1), &sig);
    for (size_t i = n1; i > 0; i--) printf("%02x", buf1[i-1]);

    printf("\n");

    unsigned char buf[1024];
    size_t n = blsSignatureGetHexStr(buf, sizeof(buf), &sig);
    printf("%s", buf);

Expected: 9933158d568e1701d2d3c044570b38e5362675783f8a73a80b53a4ca0a3e39fdd13ef6ae238620f95fb09ce7f34fee57 9933158d568e1701d2d3c044570b38e5362675783f8a73a80b53a4ca0a3e39fdd13ef6ae238620f95fb09ce7f34fee57

Actual Response (first 9 is missing): 0933158d568e1701d2d3c044570b38e5362675783f8a73a80b53a4ca0a3e39fdd13ef6ae238620f95fb09ce7f34fee57 1 933158d568e1701d2d3c044570b38e5362675783f8a73a80b53a4ca0a3e39fdd13ef6ae238620f95fb09ce7f34fee57 ...

Am I doing something wrong? Any alternative way to set signature by hex string?

herumi commented 2 years ago

The value is larger than p = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab then it is truncated. see https://github.com/herumi/mcl/blob/master/api.md#set-string