/** Generate a random data for IV @param[in] IvBuffer The pointer of the IV buffer. @param[in] IvSize The IV size. @retval EFI_SUCCESS Create a random data for IV. @retval otherwise Failed. **/ EFI_STATUS IkeGenerateIv ( IN UINT8 *IvBuffer, IN UINTN IvSize ) { return IpSecCryptoIoGenerateRandomBytes (IvBuffer, IvSize); }
/** Generate a random data for IV. If the IvSize is zero, not needed to create IV and return EFI_SUCCESS. @param[in] IvBuffer The pointer of the IV buffer. @param[in] IvSize The IV size in bytes. @retval EFI_SUCCESS Create a random data for IV. **/ EFI_STATUS IpSecGenerateIv ( IN UINT8 *IvBuffer, IN UINTN IvSize ) { if (IvSize != 0) { return IpSecCryptoIoGenerateRandomBytes (IvBuffer, IvSize); } return EFI_SUCCESS; }
/** Call Crypto Lib to generate a random value with eight-octet length. @return the 64 byte vaule. **/ UINT64 IkeGenerateCookie ( VOID ) { UINT64 Cookie; EFI_STATUS Status; Status = IpSecCryptoIoGenerateRandomBytes ((UINT8 *)&Cookie, sizeof (UINT64)); if (EFI_ERROR (Status)) { return 0; } else { return Cookie; } }
/** Generate the random data for Nonce payload. @param[in] NonceSize Size of the data in bytes. @return Buffer which contains the random data of the spcified size. **/ UINT8 * IkeGenerateNonce ( IN UINTN NonceSize ) { UINT8 *Nonce; EFI_STATUS Status; Nonce = AllocateZeroPool (NonceSize); if (Nonce == NULL) { return NULL; } Status = IpSecCryptoIoGenerateRandomBytes (Nonce, NonceSize); if (EFI_ERROR (Status)) { FreePool (Nonce); return NULL; } else { return Nonce; } }