summaryrefslogtreecommitdiff
path: root/NetworkPkg/IpSecDxe/IpSecCryptIo.h
diff options
context:
space:
mode:
Diffstat (limited to 'NetworkPkg/IpSecDxe/IpSecCryptIo.h')
-rw-r--r--NetworkPkg/IpSecDxe/IpSecCryptIo.h322
1 files changed, 322 insertions, 0 deletions
diff --git a/NetworkPkg/IpSecDxe/IpSecCryptIo.h b/NetworkPkg/IpSecDxe/IpSecCryptIo.h
new file mode 100644
index 000000000..d883a2ef7
--- /dev/null
+++ b/NetworkPkg/IpSecDxe/IpSecCryptIo.h
@@ -0,0 +1,322 @@
+/** @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
+