mirror of https://github.com/acidanthera/audk.git
323 lines
7.7 KiB
C
323 lines
7.7 KiB
C
|
/** @file
|
||
|
Definition related to the Security operation.
|
||
|
|
||
|
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
||
|
|
||
|
This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php.
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
**/
|
||
|
|
||
|
#ifndef _EFI_IPSEC_CRYPTIO_H_
|
||
|
#define _EFI_IPSEC_CRYPTIO_H_
|
||
|
|
||
|
#include <Protocol/IpSecConfig.h>
|
||
|
#include <Library/DebugLib.h>
|
||
|
|
||
|
#define IPSEC_ENCRYPT_ALGORITHM_LIST_SIZE 2
|
||
|
#define IPSEC_AUTH_ALGORITHM_LIST_SIZE 3
|
||
|
|
||
|
/**
|
||
|
Prototype of Hash GetContextSize.
|
||
|
|
||
|
Retrieves the size, in bytes, of the context buffer required.
|
||
|
|
||
|
@return The size, in bytes, of the context buffer required.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
UINTN
|
||
|
(EFIAPI *CPL_HASH_GETCONTEXTSIZE) (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Prototype of Hash Operation Initiating.
|
||
|
|
||
|
Initialization with a new context.
|
||
|
|
||
|
|
||
|
@param[in,out] Context Input Context.
|
||
|
|
||
|
@retval TRUE Initialization Successfully.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *CPL_HASH_INIT) (
|
||
|
IN OUT VOID *Context
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Prototype of HASH update.
|
||
|
Hash update operation. Continue an Hash message digest operation, processing
|
||
|
another message block, and updating the Hash context.
|
||
|
|
||
|
If Context is NULL, then ASSERT().
|
||
|
If Data is NULL, then ASSERT().
|
||
|
|
||
|
@param[in,out] Context The Specified Context.
|
||
|
@param[in,out] Data The Input Data to hash.
|
||
|
@param[in] DataLength The length, in bytes, of Data.
|
||
|
|
||
|
@retval TRUE Update data successfully.
|
||
|
@retval FALSE The Context has been finalized.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(EFIAPI *CPL_HASH_UPDATE) (
|
||
|
IN OUT VOID *Context,
|
||
|
IN CONST VOID *Data,
|
||
|
IN UINTN DataLength
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Prototype of Hash finallization.
|
||
|
Terminate a Hash message digest operation and output the message digest.
|
||
|
|
||
|
If Context is NULL, then ASSERT().
|
||
|
If HashValue is NULL, then ASSERT().
|
||
|
|
||
|
@param[in,out] Context The specified Context.
|
||
|
@param[out] HashValue Pointer to a 16-byte message digest output buffer.
|
||
|
|
||
|
@retval TRUE Finalized successfully.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(EFIAPI *CPL_HASH_FINAL) (
|
||
|
IN OUT VOID *Context,
|
||
|
OUT UINT8 *HashValue
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Prototype of Cipher GetContextSize.
|
||
|
|
||
|
Retrieves the size, in bytes, of the context buffer required.
|
||
|
|
||
|
@return The size, in bytes, of the context buffer required.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
UINTN
|
||
|
(EFIAPI *CPL_CIPHER_GETCONTEXTSIZE) (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Prototype of Cipher initiation.
|
||
|
Intializes the user-supplied key as the specifed context (key materials) for both
|
||
|
encryption and decryption operations.
|
||
|
|
||
|
If Context is NULL, then ASSERT().
|
||
|
If Key is NULL, then generate random key for usage.
|
||
|
|
||
|
@param[in,out] Context The specified Context.
|
||
|
@param[in] Key User-supplied TDES key (64/128/192 bits).
|
||
|
@param[in] KeyBits Key length in bits.
|
||
|
|
||
|
@retval TRUE TDES Initialization was successful.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(EFIAPI *CPL_CIPHER_INIT) (
|
||
|
IN OUT VOID *Context,
|
||
|
IN CONST UINT8 *Key,
|
||
|
IN CONST UINTN KeyBits
|
||
|
);
|
||
|
|
||
|
|
||
|
/**
|
||
|
Prototype of Cipher encryption.
|
||
|
Encrypts plaintext message with the specified cipher.
|
||
|
|
||
|
If Context is NULL, then ASSERT().
|
||
|
if InData is NULL, then ASSERT().
|
||
|
If Size of input data is not multiple of Cipher algorithm related block size,
|
||
|
then ASSERT().
|
||
|
|
||
|
@param[in] Context The specified Context.
|
||
|
@param[in] InData The input plaintext data to be encrypted.
|
||
|
@param[out] OutData The resultant encrypted ciphertext.
|
||
|
@param[in] DataLength Length of input data in bytes.
|
||
|
|
||
|
@retval TRUE Encryption successful.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(EFIAPI *CPL_CIPHER_ENCRYPT) (
|
||
|
IN VOID *Context,
|
||
|
IN CONST UINT8 *InData,
|
||
|
OUT UINT8 *OutData,
|
||
|
IN CONST UINTN DataLength
|
||
|
);
|
||
|
|
||
|
|
||
|
/**
|
||
|
Prototype of Cipher decryption.
|
||
|
Decrypts cipher message with specified cipher.
|
||
|
|
||
|
If Context is NULL, then ASSERT().
|
||
|
if InData is NULL, then ASSERT().
|
||
|
If Size of input data is not a multiple of a certaion block size , then ASSERT().
|
||
|
|
||
|
@param[in] Context The specified Context.
|
||
|
@param[in] InData The input ciphertext data to be decrypted.
|
||
|
@param[out] OutData The resultant decrypted plaintext.
|
||
|
@param[in] DataLength Length of input data in bytes.
|
||
|
|
||
|
@retval TRUE Decryption successful.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(EFIAPI *CPL_CIPHER_DECRYPT) (
|
||
|
IN CONST VOID *Context,
|
||
|
IN CONST UINT8 *InData,
|
||
|
OUT UINT8 *OutData,
|
||
|
IN CONST UINTN DataLength
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// The struct used to store the informatino and operation of Cipher algorithm.
|
||
|
//
|
||
|
typedef struct _ENCRYPT_ALGORITHM {
|
||
|
//
|
||
|
// The ID of the Algorithm
|
||
|
//
|
||
|
UINT8 AlgorithmId;
|
||
|
//
|
||
|
// The Key length of the Algorithm
|
||
|
//
|
||
|
UINTN KeyLength;
|
||
|
//
|
||
|
// Iv Size of the Algorithm
|
||
|
//
|
||
|
UINTN IvLength;
|
||
|
//
|
||
|
// The Block Size of the Algorithm
|
||
|
//
|
||
|
UINTN BlockSize;
|
||
|
//
|
||
|
// The Function pointer of GetContextSize.
|
||
|
//
|
||
|
CPL_CIPHER_GETCONTEXTSIZE CipherGetContextSize;
|
||
|
//
|
||
|
// The Function pointer of Cipher intitiaion.
|
||
|
//
|
||
|
CPL_CIPHER_INIT CipherInitiate;
|
||
|
//
|
||
|
// The Function pointer of Cipher Encryption.
|
||
|
//
|
||
|
CPL_CIPHER_ENCRYPT CipherEncrypt;
|
||
|
//
|
||
|
// The Function pointer of Cipher Decrption.
|
||
|
//
|
||
|
CPL_CIPHER_DECRYPT CipherDecrypt;
|
||
|
} ENCRYPT_ALGORITHM;
|
||
|
|
||
|
//
|
||
|
// The struct used to store the informatino and operation of Autahentication algorithm.
|
||
|
//
|
||
|
typedef struct _AUTH_ALGORITHM {
|
||
|
//
|
||
|
// ID of the Algorithm
|
||
|
//
|
||
|
UINT8 AlgorithmId;
|
||
|
//
|
||
|
// The Key length of the Algorithm
|
||
|
//
|
||
|
UINTN KeyLength;
|
||
|
//
|
||
|
// The ICV length of the Algorithm
|
||
|
//
|
||
|
UINTN IcvLength;
|
||
|
//
|
||
|
// The block size of the Algorithm
|
||
|
//
|
||
|
UINTN BlockSize;
|
||
|
//
|
||
|
// The function pointer of GetContextSize.
|
||
|
//
|
||
|
CPL_HASH_GETCONTEXTSIZE HashGetContextSize;
|
||
|
//
|
||
|
// The function pointer of Initiatoion
|
||
|
//
|
||
|
CPL_HASH_INIT HashInitiate;
|
||
|
//
|
||
|
// The function pointer of Hash Update.
|
||
|
//
|
||
|
CPL_HASH_UPDATE HashUpdate;
|
||
|
//
|
||
|
// The fucntion pointer of Hash Final
|
||
|
//
|
||
|
CPL_HASH_FINAL HashFinal;
|
||
|
} AUTH_ALGORITHM;
|
||
|
|
||
|
/**
|
||
|
Get the IV size of encrypt alogrithm. IV size is different from different algorithm.
|
||
|
|
||
|
@param[in] AlgorithmId The encrypt algorithm ID.
|
||
|
|
||
|
@return The value of IV size.
|
||
|
|
||
|
**/
|
||
|
UINTN
|
||
|
IpSecGetEncryptIvLength (
|
||
|
IN UINT8 AlgorithmId
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Get the block size of encrypt alogrithm. Block size is different from different algorithm.
|
||
|
|
||
|
@param[in] AlgorithmId The encrypt algorithm ID.
|
||
|
|
||
|
@return The value of block size.
|
||
|
|
||
|
**/
|
||
|
UINTN
|
||
|
IpSecGetEncryptBlockSize (
|
||
|
IN UINT8 AlgorithmId
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
Get the ICV size of Authenticaion alogrithm. ICV size is different from different algorithm.
|
||
|
|
||
|
@param[in] AuthAlgorithmId The Authentication algorithm ID.
|
||
|
|
||
|
@return The value of ICV size.
|
||
|
|
||
|
**/
|
||
|
UINTN
|
||
|
IpSecGetIcvLength (
|
||
|
IN UINT8 AuthAlgorithmId
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
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.
|
||
|
|
||
|
@retval EFI_SUCCESS Create random data for IV.
|
||
|
|
||
|
**/
|
||
|
EFI_STATUS
|
||
|
IpSecGenerateIv (
|
||
|
IN UINT8 *IvBuffer,
|
||
|
IN UINTN IvSize
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|