mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 10:47:28 +02:00
Merge pull request #7017 from SparkiDev/asn_tmpl_ecc_raw_to_sig_fix
ASN template: StoreECC_DSA_Sig_Bin
This commit is contained in:
@ -32062,6 +32062,14 @@ int StoreECC_DSA_Sig_Bin(byte* out, word32* outLen, const byte* r, word32 rLen,
|
|||||||
|
|
||||||
/* Clear dynamic data and set buffers for r and s */
|
/* Clear dynamic data and set buffers for r and s */
|
||||||
XMEMSET(dataASN, 0, sizeof(dataASN));
|
XMEMSET(dataASN, 0, sizeof(dataASN));
|
||||||
|
while ((rLen > 1) && (r[0] == 0)) {
|
||||||
|
rLen--;
|
||||||
|
r++;
|
||||||
|
}
|
||||||
|
while ((sLen > 1) && (s[0] == 0)) {
|
||||||
|
sLen--;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
SetASN_Buffer(&dataASN[DSASIGASN_IDX_R], r, rLen);
|
SetASN_Buffer(&dataASN[DSASIGASN_IDX_R], r, rLen);
|
||||||
SetASN_Buffer(&dataASN[DSASIGASN_IDX_S], s, sLen);
|
SetASN_Buffer(&dataASN[DSASIGASN_IDX_S], s, sLen);
|
||||||
|
|
||||||
|
@ -29918,6 +29918,58 @@ static wc_test_ret_t ecc_test_nonblock(WC_RNG* rng)
|
|||||||
}
|
}
|
||||||
#endif /* WC_ECC_NONBLOCK && WOLFSSL_HAVE_SP_ECC && WOLFSSL_PUBLIC_MP */
|
#endif /* WC_ECC_NONBLOCK && WOLFSSL_HAVE_SP_ECC && WOLFSSL_PUBLIC_MP */
|
||||||
|
|
||||||
|
#if !defined(NO_ASN) && !defined(HAVE_SELFTEST) && \
|
||||||
|
(!defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && \
|
||||||
|
(HAVE_FIPS_VERSION > 2)))
|
||||||
|
static int ecc_test_raw_enc_dec(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
unsigned char r[1];
|
||||||
|
word32 rSz;
|
||||||
|
unsigned char s[1];
|
||||||
|
word32 sSz;
|
||||||
|
unsigned char rZero[] = { 0, 0, 0, 0 };
|
||||||
|
unsigned char sOne[] = { 0, 0, 1 };
|
||||||
|
unsigned char sigRaw[32];
|
||||||
|
word32 sigRawSz;
|
||||||
|
unsigned char expSig[] = { 0x30, 0x06, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01 };
|
||||||
|
|
||||||
|
sigRawSz = sizeof(sigRaw);
|
||||||
|
ret = wc_ecc_rs_raw_to_sig(rZero, sizeof(rZero), sOne, sizeof(sOne),
|
||||||
|
sigRaw, &sigRawSz);
|
||||||
|
if (ret != 0) {
|
||||||
|
return WC_TEST_RET_ENC_EC(ret);
|
||||||
|
}
|
||||||
|
if (sigRawSz != sizeof(expSig)) {
|
||||||
|
return WC_TEST_RET_ENC_EC((int)sigRawSz);
|
||||||
|
}
|
||||||
|
if (XMEMCMP(sigRaw, expSig, sizeof(expSig)) != 0) {
|
||||||
|
return WC_TEST_RET_ENC_NC;
|
||||||
|
}
|
||||||
|
|
||||||
|
rSz = sizeof(r);
|
||||||
|
sSz = sizeof(s);
|
||||||
|
ret = wc_ecc_sig_to_rs(sigRaw, sigRawSz, r, &rSz, s, &sSz);
|
||||||
|
if (ret != 0) {
|
||||||
|
return WC_TEST_RET_ENC_EC(ret);
|
||||||
|
}
|
||||||
|
if (rSz != 1) {
|
||||||
|
return WC_TEST_RET_ENC_EC((int)rSz);
|
||||||
|
}
|
||||||
|
if (sSz != 1) {
|
||||||
|
return WC_TEST_RET_ENC_EC((int)sSz);
|
||||||
|
}
|
||||||
|
if (r[0] != 0) {
|
||||||
|
return WC_TEST_RET_ENC_EC(r[0]);
|
||||||
|
}
|
||||||
|
if (s[0] != 1) {
|
||||||
|
return WC_TEST_RET_ENC_EC(s[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test(void)
|
WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test(void)
|
||||||
{
|
{
|
||||||
wc_test_ret_t ret;
|
wc_test_ret_t ret;
|
||||||
@ -30042,6 +30094,16 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(NO_ASN) && !defined(HAVE_SELFTEST) && \
|
||||||
|
(!defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && \
|
||||||
|
(HAVE_FIPS_VERSION > 2)))
|
||||||
|
ret = ecc_test_raw_enc_dec();
|
||||||
|
if (ret != 0) {
|
||||||
|
printf("raw sig encode/decode\n");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WOLFSSL_CUSTOM_CURVES)
|
#if defined(WOLFSSL_CUSTOM_CURVES)
|
||||||
ret = ecc_test_custom_curves(&rng);
|
ret = ecc_test_custom_curves(&rng);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
|
Reference in New Issue
Block a user