Skip to content

Commit a77c6d1

Browse files
authored
Merge pull request #7269 from JacobBarthelmeh/cryptocb
add support for crypto cb only with ECC and CAAM
2 parents aa444c1 + 2f6cd76 commit a77c6d1

1 file changed

Lines changed: 34 additions & 19 deletions

File tree

wolfcrypt/src/ecc.c

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,17 @@ ECC Curve Sizes:
245245
#define HAVE_ECC_MAKE_PUB
246246
#endif
247247

248+
249+
/* macro guard for ecc_check_pubkey_order functionality */
248250
#if !defined(WOLFSSL_SP_MATH) && \
249251
!defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
250252
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SILABS_SE_ACCEL) && \
251253
!defined(WOLFSSL_SE050) && !defined(WOLFSSL_STM32_PKA) && \
252-
!defined(WOLF_CRYPTO_CB_ONLY_ECC)
254+
(!defined(WOLF_CRYPTO_CB_ONLY_ECC) || defined(WOLFSSL_IMXRT1170_CAAM) || \
255+
defined(WOLFSSL_QNX_CAAM))
256+
257+
/* CAAM builds use public key validation as a means to check if an
258+
* imported private key is an encrypted black key or not */
253259
#undef HAVE_ECC_CHECK_PUBKEY_ORDER
254260
#define HAVE_ECC_CHECK_PUBKEY_ORDER
255261
#endif
@@ -1842,7 +1848,9 @@ static void alt_fp_init(mp_int* a)
18421848

18431849

18441850
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
1845-
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLF_CRYPTO_CB_ONLY_ECC)
1851+
!defined(WOLFSSL_CRYPTOCELL) && \
1852+
(!defined(WOLF_CRYPTO_CB_ONLY_ECC) || defined(WOLFSSL_QNX_CAAM) || \
1853+
defined(WOLFSSL_IMXRT1170_CAAM))
18461854

18471855
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_PUBLIC_ECC_ADD_DBL)
18481856
static int _ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a,
@@ -3971,7 +3979,7 @@ int wc_ecc_mulmod(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
39713979
return wc_ecc_mulmod_ex(k, G, R, a, modulus, map, NULL);
39723980
}
39733981

3974-
#endif /* !WOLFSSL_ATECC508A */
3982+
#endif
39753983

39763984
/**
39773985
* Allocate a new ECC point (if one not provided)
@@ -5139,7 +5147,9 @@ int wc_ecc_point_is_on_curve(ecc_point *p, int curve_idx)
51395147
#endif /* USE_ECC_B_PARAM */
51405148

51415149
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
5142-
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLF_CRYPTO_CB_ONLY_ECC)
5150+
!defined(WOLFSSL_CRYPTOCELL) && \
5151+
(!defined(WOLF_CRYPTO_CB_ONLY_ECC) || defined(WOLFSSL_QNX_CAAM) || \
5152+
defined(WOLFSSL_IMXRT1170_CAAM))
51435153
/* return 1 if point is at infinity, 0 if not, < 0 on error */
51445154
int wc_ecc_point_is_at_infinity(ecc_point* p)
51455155
{
@@ -5150,7 +5160,7 @@ int wc_ecc_point_is_at_infinity(ecc_point* p)
51505160

51515161
return 0;
51525162
}
5153-
#endif /* !WOLFSSL_ATECC508A && !WOLFSSL_CRYPTOCELL */
5163+
#endif
51545164

51555165
/* generate random and ensure its greater than 0 and less than order */
51565166
int wc_ecc_gen_k(WC_RNG* rng, int size, mp_int* k, mp_int* order)
@@ -7769,7 +7779,9 @@ int wc_ecc_free(ecc_key* key)
77697779

77707780
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
77717781
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SP_MATH) && \
7772-
!defined(WOLF_CRYPTO_CB_ONLY_ECC)
7782+
(!defined(WOLF_CRYPTO_CB_ONLY_ECC) || defined(WOLFSSL_QNX_CAAM) || \
7783+
defined(WOLFSSL_IMXRT1170_CAAM))
7784+
77737785
/* Handles add failure cases:
77747786
*
77757787
* Before add:
@@ -7883,8 +7895,11 @@ int ecc_projective_dbl_point_safe(ecc_point *P, ecc_point *R, mp_int* a,
78837895

78847896
return err;
78857897
}
7886-
#endif /* !WOLFSSL_ATECC508A && !WOLFSSL_ATECC608A
7887-
&& !WOLFSSL_CRYPTOCELL && !WOLFSSL_SP_MATH */
7898+
#endif /* !(WOLFSSL_ATECC508A) && !(WOLFSSL_ATECC608A) && \
7899+
!(WOLFSSL_CRYPTOCELL) && !(WOLFSSL_SP_MATH) && \
7900+
(!(WOLF_CRYPTO_CB_ONLY_ECC) || (WOLFSSL_QNX_CAAM) || \
7901+
(WOLFSSL_IMXRT1170_CAAM))
7902+
*/
78887903

78897904
#if !defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_ATECC508A) && \
78907905
!defined(WOLFSSL_ATECC608A) && !defined(WOLFSSL_CRYPTOCELL) && \
@@ -9608,7 +9623,9 @@ int wc_ecc_export_x963_ex(ecc_key* key, byte* out, word32* outLen,
96089623

96099624
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
96109625
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SE050) && \
9611-
!defined(WOLF_CRYPTO_CB_ONLY_ECC) && !defined(WOLFSSL_STM32_PKA)
9626+
!defined(WOLFSSL_STM32_PKA) && \
9627+
(!defined(WOLF_CRYPTO_CB_ONLY_ECC) || defined(WOLFSSL_QNX_CAAM) || \
9628+
defined(WOLFSSL_IMXRT1170_CAAM))
96129629

96139630
/* is ecc point on curve described by dp ? */
96149631
static int _ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime)
@@ -10107,7 +10124,11 @@ static int ecc_check_pubkey_order(ecc_key* key, ecc_point* pubkey, mp_int* a,
1010710124
}
1010810125
#endif /* !WOLFSSL_SP_MATH */
1010910126

10110-
#endif /* !WOLFSSL_ATECC508A && !WOLFSSL_CRYPTOCELL*/
10127+
#endif /* !WOLFSSL_ATECC508A && !WOLFSSL_ATECC608A &&
10128+
!WOLFSSL_CRYPTOCELL && !WOLFSSL_SE050 && !WOLFSSL_STM32_PKA &&
10129+
(!WOLF_CRYPTO_CB_ONLY_ECC || WOLFSSL_QNX_CAAM ||
10130+
WOLFSSL_IMXRT1170_CAAM)
10131+
*/
1011110132

1011210133
#ifdef OPENSSL_EXTRA
1011310134
int wc_ecc_get_generator(ecc_point* ecp, int curve_idx)
@@ -10147,11 +10168,7 @@ int wc_ecc_get_generator(ecc_point* ecp, int curve_idx)
1014710168
static int _ecc_validate_public_key(ecc_key* key, int partial, int priv)
1014810169
{
1014910170
int err = MP_OKAY;
10150-
#ifndef WOLFSSL_SP_MATH
10151-
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
10152-
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SILABS_SE_ACCEL) && \
10153-
!defined(WOLFSSL_SE050) && !defined(WOLF_CRYPTO_CB_ONLY_ECC) && \
10154-
!defined(WOLF_CRYPTO_CB_ONLY_ECC) && !defined(WOLFSSL_STM32_PKA)
10171+
#ifdef HAVE_ECC_CHECK_PUBKEY_ORDER
1015510172
mp_int* b = NULL;
1015610173
#ifdef USE_ECC_B_PARAM
1015710174
DECLARE_CURVE_SPECS(4);
@@ -10161,9 +10178,7 @@ static int _ecc_validate_public_key(ecc_key* key, int partial, int priv)
1016110178
#endif
1016210179
DECLARE_CURVE_SPECS(3);
1016310180
#endif /* USE_ECC_B_PARAM */
10164-
#endif /* !WOLFSSL_ATECC508A && !WOLFSSL_ATECC608A &&
10165-
!WOLFSSL_CRYPTOCELL && !WOLFSSL_SILABS_SE_ACCEL && !WOLFSSL_SE050 */
10166-
#endif /* !WOLFSSL_SP_MATH */
10181+
#endif /* HAVE_ECC_CHECK_PUBKEY_ORDER */
1016710182

1016810183
ASSERT_SAVED_VECTOR_REGISTERS();
1016910184

@@ -10208,7 +10223,7 @@ static int _ecc_validate_public_key(ecc_key* key, int partial, int priv)
1020810223
/* consider key check success on HW crypto
1020910224
* ex: ATECC508/608A, CryptoCell and Silabs
1021010225
*
10211-
* consider key check success on Crypt Cb
10226+
* consider key check success on most Crypt Cb only builds
1021210227
*/
1021310228
err = MP_OKAY;
1021410229

0 commit comments

Comments
 (0)