The following example illustrates the usage of the RSA library to encrypt data using the public key and to decrypt the data using private key.
Note: Application should take care of the padding.
static
u32 SecureRsaExample(void
)
{
u32 Index;
/* RSA signature decrypt with private key */
/*
* Initialize the Rsa driver with private key components
* so that it's ready to use
*/
XSecure_RsaInitialize
(&Secure_Rsa, Modulus, NULL, PrivateExp);
if
(XST_SUCCESS != XSecure_RsaPrivateDecrypt
(&Secure_Rsa, Data,
Size, Signature)) {
xil_printf("Failed at RSA signature decryption\n\r");
return
XST_FAILURE;
}
xil_printf("\r\n Decrypted Signature with private key\r\n ");
for
(Index = 0; Index < Size; Index++) {
xil_printf(" %02x ", Signature[Index]);
}
xil_printf(" \r\n ");
/* Verification if Data is expected */
for
(Index = 0; Index < Size; Index++) {
if
(Signature[Index] != ExpectedSign[Index]) {
xil_printf("\r\nError at verification of RSA signature"
" Decryption\n\r");
return
XST_FAILURE;
}
}
/* RSA signature encrypt with Public key components */
/*
* Initialize the Rsa driver with public key components
* so that it's ready to use
*/
XSecure_RsaInitialize
(&Secure_Rsa, Modulus, NULL, (u8 *)&PublicExp);
if
(XST_SUCCESS != XSecure_RsaPublicEncrypt
(&Secure_Rsa, Signature,
Size, EncryptSignatureOut)) {
xil_printf("\r\nFailed at RSA signature encryption\n\r");
return
XST_FAILURE;
}
xil_printf("\r\n Encrypted Signature with public key\r\n ");
for
(Index = 0; Index < Size; Index++) {
xil_printf(" %02x ", EncryptSignatureOut[Index]);
}
/* Verification if Data is expected */
for
(Index = 0; Index < Size; Index++) {
if
(EncryptSignatureOut[Index] != Data[Index]) {
xil_printf("\r\nError at verification of RSA signature"
" encryption\n\r");
return
XST_FAILURE;
}
}
return
XST_SUCCESS;
}
Note: Relevant examples are available in the <library-install-path>\examples folder. Where <library-install-path> is the XilSecure library installation path.