diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index 8ec2b3973..4f29ec73f 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -3271,9 +3271,12 @@ int wc_ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key, int curve_id) } /* populate key->pubkey */ - err = mp_read_unsigned_bin(key->pubkey.x, key->pubkey_raw, 32); + err = mp_read_unsigned_bin(key->pubkey.x, key->pubkey_raw, + ECC_MAX_CRYPTO_HW_SIZE); if (err = MP_OKAY) - err = mp_read_unsigned_bin(key->pubkey.y, key->pubkey_raw + 32, 32); + err = mp_read_unsigned_bin(key->pubkey.y, + key->pubkey_raw + ECC_MAX_CRYPTO_HW_SIZE, + ECC_MAX_CRYPTO_HW_SIZE); #else #ifdef WOLFSSL_HAVE_SP_ECC @@ -4616,7 +4619,7 @@ int wc_ecc_import_point_der(byte* in, word32 inLen, const int curve_idx, #ifdef WOLFSSL_ATECC508A /* populate key->pubkey_raw */ - XMEMCPY(key->pubkey_raw, (byte*)in, PUB_KEY_SIZE); + XMEMCPY(key->pubkey_raw, (byte*)in, sizeof(key->pubkey_raw)); #endif /* read data */ diff --git a/wolfssl/wolfcrypt/ecc.h b/wolfssl/wolfcrypt/ecc.h index 3ce2dd570..710f8565f 100644 --- a/wolfssl/wolfcrypt/ecc.h +++ b/wolfssl/wolfcrypt/ecc.h @@ -122,6 +122,7 @@ enum { /* max crypto hardware size */ #ifdef WOLFSSL_ATECC508A ECC_MAX_CRYPTO_HW_SIZE = ATECC_KEY_SIZE, /* from port/atmel/atmel.h */ + ECC_MAX_CRYPTO_HW_PUBKEY_SIZE = (ATECC_KEY_SIZE*2) #elif defined(PLUTON_CRYPTO_ECC) ECC_MAX_CRYPTO_HW_SIZE = 32, #endif @@ -316,7 +317,7 @@ struct ecc_key { mp_int k; /* private key */ #ifdef WOLFSSL_ATECC508A int slot; /* Key Slot Number (-1 unknown) */ - byte pubkey_raw[PUB_KEY_SIZE]; + byte pubkey_raw[ECC_MAX_CRYPTO_HW_PUBKEY_SIZE]; #endif #ifdef PLUTON_CRYPTO_ECC int devId;