/****************************************************************************** * 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