/****************************************************************************** * Copyright (c) 2012 - 2022 Xilinx, Inc. All rights reserved. * SPDX-License-Identifier: MIT ******************************************************************************/ /*****************************************************************************/ /** * * @file rsa.c * * Contains code for the RSA authentication * *
* MODIFICATION HISTORY:
*
* Ver	Who	Date		Changes
* ----- ---- -------- -------------------------------------------------------
* 4.00a sgd	02/28/13 Initial release
* 6.00a kc	07/30/13 Added FSBL_DEBUG_RSA to print more RSA buffers
* 					 Fix for CR#724165 - Partition Header used by FSBL is
*                                        not authenticated
*                    Fix for CR#724166 - FSBL doesn’t use PPK authenticated
*                                        by Boot ROM for authenticating
*                                        the Partition images
*                    Fix for CR#722979 - Provide customer-friendly
*                                        changelogs in FSBL
* 9.00a kc  04/16/14 Fix for CR#724166 - SetPpk() will fail on secure
*					 					 fallback unless FSBL* and FSBL are
*					 					 identical in length
*					 Fix for CR#791245 - Use of xilrsa in FSBL
* 10.0  vns 03/18/22 Fixed CR#1125470 to authenticate the parition header buffer
*                    which is being used instead of one from DDR. Modified
*                    prototype of AuthenticatePartition() API
* 
* * @note * ******************************************************************************/ /***************************** Include Files *********************************/ #ifdef RSA_SUPPORT #include "fsbl.h" #include "rsa.h" #include "xilrsa.h" #ifdef XPAR_XWDTPS_0_BASEADDR #include "xwdtps.h" #endif /************************** Constant Definitions *****************************/ /**************************** Type Definitions *******************************/ /***************** Macros (Inline Functions) Definitions *********************/ /************************** Function Prototypes ******************************/ #ifdef XPAR_XWDTPS_0_BASEADDR extern XWdtPs Watchdog; /* Instance of WatchDog Timer */ #endif /************************** Variable Definitions *****************************/ static u8 *PpkModular; static u8 *PpkModularEx; static u32 PpkExp; static u32 PpkAlreadySet=0; extern u32 FsblLength; void FsblPrintArray (u8 *Buf, u32 Len, char *Str) { #ifdef FSBL_DEBUG_RSA int Index; fsbl_printf(DEBUG_INFO, "%s START\r\n", Str); for (Index=0;Index