@@ -1553,6 +1553,7 @@ int RAMFUNCTION chacha_init(void)
15531553#elif defined(ENCRYPT_WITH_AES128 ) || defined(ENCRYPT_WITH_AES256 )
15541554
15551555Aes aes_dec , aes_enc ;
1556+
15561557/**
15571558 * @brief Initialize AES encryption.
15581559 *
@@ -1564,6 +1565,46 @@ Aes aes_dec, aes_enc;
15641565 */
15651566int aes_init (void )
15661567{
1568+ #if defined(WOLFBOOT_RENESAS_TSIP )
1569+ /* This structure is generated using Renesas Security Key Management Tool
1570+ * See docs/Renesas.md */
1571+ #include "enckey_data.h"
1572+ int ret ;
1573+ int devId = RENESAS_DEVID + 1 ;
1574+ wrap_enc_key_t * enc_key = (wrap_enc_key_t * )RENESAS_TSIP_INSTALLEDENCKEY_ADDR ;
1575+
1576+ XMEMSET (& aes_enc , 0 , sizeof (aes_enc ));
1577+ XMEMSET (& aes_dec , 0 , sizeof (aes_dec ));
1578+ wc_AesInit (& aes_enc , NULL , devId );
1579+ wc_AesInit (& aes_dec , NULL , devId );
1580+
1581+ /* Unwrap key and get key index */
1582+ #if ENCRYPT_KEY_SIZE == 32
1583+ ret = R_TSIP_GenerateAes256KeyIndex (enc_key -> wufpk , enc_key -> initial_vector ,
1584+ enc_key -> encrypted_user_key , & aes_enc .ctx .tsip_keyIdx );
1585+ #else
1586+ ret = R_TSIP_GenerateAes128KeyIndex (enc_key -> wufpk , enc_key -> initial_vector ,
1587+ enc_key -> encrypted_user_key , & aes_enc .ctx .tsip_keyIdx );
1588+ #endif
1589+ if (ret == TSIP_SUCCESS ) {
1590+ /* copy to decryption key */
1591+ XMEMCPY (& aes_dec .ctx , & aes_enc .ctx , sizeof (aes_enc .ctx ));
1592+
1593+ /* register AES crypto callback */
1594+ extern int wc_tsip_AesCipher (int devIdArg , struct wc_CryptoInfo * info , void * ctx );
1595+ wc_CryptoCb_RegisterDevice (devId , wc_tsip_AesCipher , NULL );
1596+
1597+ encrypt_initialized = 1 ;
1598+
1599+ /* AES_ENCRYPTION is used for both directions in CTR */
1600+ /* unwrapped key never leaves TSIP and is referenced by tsip_keyIdx */
1601+ wc_AesSetKeyDirect (& aes_enc , enc_key -> encrypted_user_key ,
1602+ ENCRYPT_KEY_SIZE , enc_key -> initial_vector , AES_ENCRYPTION );
1603+ wc_AesSetKeyDirect (& aes_dec , enc_key -> encrypted_user_key ,
1604+ ENCRYPT_KEY_SIZE , enc_key -> initial_vector , AES_ENCRYPTION );
1605+ }
1606+ #else
1607+
15671608#if defined(MMU ) || defined(UNIT_TEST )
15681609 uint8_t * key = ENCRYPT_KEY ;
15691610#else
@@ -1582,8 +1623,8 @@ int aes_init(void)
15821623
15831624 XMEMSET (& aes_enc , 0 , sizeof (aes_enc ));
15841625 XMEMSET (& aes_dec , 0 , sizeof (aes_dec ));
1585- wc_AesInit (& aes_enc , NULL , 0 );
1586- wc_AesInit (& aes_dec , NULL , 0 );
1626+ wc_AesInit (& aes_enc , NULL , INVALID_DEVID );
1627+ wc_AesInit (& aes_dec , NULL , INVALID_DEVID );
15871628
15881629 /* Check against 'all 0xff' or 'all zero' cases */
15891630 XMEMSET (ff , 0xFF , ENCRYPT_KEY_SIZE );
@@ -1599,6 +1640,7 @@ int aes_init(void)
15991640 wc_AesSetKeyDirect (& aes_enc , key , ENCRYPT_KEY_SIZE , iv_buf , AES_ENCRYPTION );
16001641 wc_AesSetKeyDirect (& aes_dec , key , ENCRYPT_KEY_SIZE , iv_buf , AES_ENCRYPTION );
16011642 encrypt_initialized = 1 ;
1643+ #endif
16021644 return 0 ;
16031645}
16041646
0 commit comments