Skip to content

Commit c4ab1e6

Browse files
Merge pull request #7017 from SparkiDev/asn_tmpl_ecc_raw_to_sig_fix
ASN template: StoreECC_DSA_Sig_Bin
2 parents fa0362f + 21f662c commit c4ab1e6

2 files changed

Lines changed: 70 additions & 0 deletions

File tree

wolfcrypt/src/asn.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32062,6 +32062,14 @@ int StoreECC_DSA_Sig_Bin(byte* out, word32* outLen, const byte* r, word32 rLen,
3206232062

3206332063
/* Clear dynamic data and set buffers for r and s */
3206432064
XMEMSET(dataASN, 0, sizeof(dataASN));
32065+
while ((rLen > 1) && (r[0] == 0)) {
32066+
rLen--;
32067+
r++;
32068+
}
32069+
while ((sLen > 1) && (s[0] == 0)) {
32070+
sLen--;
32071+
s++;
32072+
}
3206532073
SetASN_Buffer(&dataASN[DSASIGASN_IDX_R], r, rLen);
3206632074
SetASN_Buffer(&dataASN[DSASIGASN_IDX_S], s, sLen);
3206732075

wolfcrypt/test/test.c

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29918,6 +29918,58 @@ static wc_test_ret_t ecc_test_nonblock(WC_RNG* rng)
2991829918
}
2991929919
#endif /* WC_ECC_NONBLOCK && WOLFSSL_HAVE_SP_ECC && WOLFSSL_PUBLIC_MP */
2992029920

29921+
#if !defined(NO_ASN) && !defined(HAVE_SELFTEST) && \
29922+
(!defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && \
29923+
(HAVE_FIPS_VERSION > 2)))
29924+
static int ecc_test_raw_enc_dec(void)
29925+
{
29926+
int ret;
29927+
unsigned char r[1];
29928+
word32 rSz;
29929+
unsigned char s[1];
29930+
word32 sSz;
29931+
unsigned char rZero[] = { 0, 0, 0, 0 };
29932+
unsigned char sOne[] = { 0, 0, 1 };
29933+
unsigned char sigRaw[32];
29934+
word32 sigRawSz;
29935+
unsigned char expSig[] = { 0x30, 0x06, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01 };
29936+
29937+
sigRawSz = sizeof(sigRaw);
29938+
ret = wc_ecc_rs_raw_to_sig(rZero, sizeof(rZero), sOne, sizeof(sOne),
29939+
sigRaw, &sigRawSz);
29940+
if (ret != 0) {
29941+
return WC_TEST_RET_ENC_EC(ret);
29942+
}
29943+
if (sigRawSz != sizeof(expSig)) {
29944+
return WC_TEST_RET_ENC_EC((int)sigRawSz);
29945+
}
29946+
if (XMEMCMP(sigRaw, expSig, sizeof(expSig)) != 0) {
29947+
return WC_TEST_RET_ENC_NC;
29948+
}
29949+
29950+
rSz = sizeof(r);
29951+
sSz = sizeof(s);
29952+
ret = wc_ecc_sig_to_rs(sigRaw, sigRawSz, r, &rSz, s, &sSz);
29953+
if (ret != 0) {
29954+
return WC_TEST_RET_ENC_EC(ret);
29955+
}
29956+
if (rSz != 1) {
29957+
return WC_TEST_RET_ENC_EC((int)rSz);
29958+
}
29959+
if (sSz != 1) {
29960+
return WC_TEST_RET_ENC_EC((int)sSz);
29961+
}
29962+
if (r[0] != 0) {
29963+
return WC_TEST_RET_ENC_EC(r[0]);
29964+
}
29965+
if (s[0] != 1) {
29966+
return WC_TEST_RET_ENC_EC(s[0]);
29967+
}
29968+
29969+
return ret;
29970+
}
29971+
#endif
29972+
2992129973
WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test(void)
2992229974
{
2992329975
wc_test_ret_t ret;
@@ -30042,6 +30094,16 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test(void)
3004230094
}
3004330095
#endif
3004430096

30097+
#if !defined(NO_ASN) && !defined(HAVE_SELFTEST) && \
30098+
(!defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && \
30099+
(HAVE_FIPS_VERSION > 2)))
30100+
ret = ecc_test_raw_enc_dec();
30101+
if (ret != 0) {
30102+
printf("raw sig encode/decode\n");
30103+
goto done;
30104+
}
30105+
#endif
30106+
3004530107
#if defined(WOLFSSL_CUSTOM_CURVES)
3004630108
ret = ecc_test_custom_curves(&rng);
3004730109
if (ret != 0) {

0 commit comments

Comments
 (0)