Home | History | Annotate | Download | only in Hash
      1 /*++
      2 
      3   Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
      4   This program and the accompanying materials
      5   are licensed and made available under the terms and conditions of the BSD License
      6   which accompanies this distribution.  The full text of the license may be found at
      7   http://opensource.org/licenses/bsd-license.php
      8 
      9   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14     Hash.h
     15 
     16 Abstract:
     17   EFI_HASH_SERVICE_BINDING_PROTOCOL as defined in UEFI 2.0.
     18   EFI_HASH_PROTOCOL as defined in UEFI 2.0.
     19   The EFI Hash Service Binding Protocol is used to locate hashing services support
     20   provided by a driver and create and destroy instances of the EFI Hash Protocol
     21   so that a multiple drivers can use the underlying hashing services.
     22   The EFI Service Binding Protocol defines the generic Service Binding Protocol functions.
     23 
     24 Revision History
     25 --*/
     26 
     27 #ifndef __EFI_HASH_PROTOCOL_H__
     28 #define __EFI_HASH_PROTOCOL_H__
     29 
     30 #define EFI_HASH_SERVICE_BINDING_PROTOCOL \
     31   { \
     32     0x42881c98, 0xa4f3, 0x44b0, {0xa3, 0x9d, 0xdf, 0xa1, 0x86, 0x67, 0xd8, 0xcd } \
     33   }
     34 
     35 #define EFI_HASH_PROTOCOL_GUID \
     36   { \
     37     0xc5184932, 0xdba5, 0x46db, {0xa5, 0xba, 0xcc, 0x0b, 0xda, 0x9c, 0x14, 0x35 } \
     38   }
     39 
     40 #define EFI_HASH_ALGORITHM_SHA1_GUID \
     41   { \
     42     0x2ae9d80f, 0x3fb2, 0x4095, {0xb7, 0xb1, 0xe9, 0x31, 0x57, 0xb9, 0x46, 0xb6 } \
     43   }
     44 
     45 #define EFI_HASH_ALGORITHM_SHA224_GUID \
     46   { \
     47     0x8df01a06, 0x9bd5, 0x4bf7, {0xb0, 0x21, 0xdb, 0x4f, 0xd9, 0xcc, 0xf4, 0x5b } \
     48   }
     49 
     50 #define EFI_HASH_ALGORITHM_SHA256_GUID \
     51   { \
     52     0x51aa59de, 0xfdf2, 0x4ea3, {0xbc, 0x63, 0x87, 0x5f, 0xb7, 0x84, 0x2e, 0xe9 } \
     53   }
     54 
     55 #define EFI_HASH_ALGORITHM_SHA384_GUID \
     56   { \
     57     0xefa96432, 0xde33, 0x4dd2, {0xae, 0xe6, 0x32, 0x8c, 0x33, 0xdf, 0x77, 0x7a } \
     58   }
     59 
     60 #define EFI_HASH_ALGORITHM_SHA512_GUID \
     61   { \
     62     0xcaa4381e, 0x750c, 0x4770, {0xb8, 0x70, 0x7a, 0x23, 0xb4, 0xe4, 0x21, 0x30 } \
     63   }
     64 
     65 #define EFI_HASH_ALGORTIHM_MD5_GUID \
     66   { \
     67     0xaf7c79c, 0x65b5, 0x4319, {0xb0, 0xae, 0x44, 0xec, 0x48, 0x4e, 0x4a, 0xd7 } \
     68   }
     69 
     70 typedef struct _EFI_HASH_PROTOCOL EFI_HASH_PROTOCOL;
     71 
     72 typedef UINT8  EFI_MD5_HASH[16];
     73 typedef UINT8  EFI_SHA1_HASH[20];
     74 typedef UINT8  EFI_SHA224_HASH[28];
     75 typedef UINT8  EFI_SHA256_HASH[32];
     76 typedef UINT8  EFI_SHA384_HASH[48];
     77 typedef UINT8  EFI_SHA512_HASH[64];
     78 
     79 typedef union {
     80   EFI_MD5_HASH     *Md5Hash;
     81   EFI_SHA1_HASH    *Sha1Hash;
     82   EFI_SHA224_HASH  *Sha224Hash;
     83   EFI_SHA256_HASH  *Sha256Hash;
     84   EFI_SHA384_HASH  *Sha384Hash;
     85   EFI_SHA512_HASH  *Sha512Hash;
     86 } EFI_HASH_OUTPUT;
     87 
     88 typedef
     89 EFI_STATUS
     90 (EFIAPI *EFI_HASH_GET_HASH_SIZE) (
     91   IN  CONST EFI_HASH_PROTOCOL     *This,
     92   IN  CONST EFI_GUID              *HashAlgorithm,
     93   OUT UINTN                       *HashSize
     94   )
     95 /*++
     96 
     97   Routine Description:
     98     Returns the size of the hash which results from a specific algorithm.
     99 
    100   Arguments:
    101     This             -  Points to this instance of EFI_HASH_PROTOCOL.
    102     HashAlgorithm    -  Points to the EFI_GUID which identifies the algorithm to use.
    103     HashSize         -  Holds the returned size of the algorithm's hash.
    104 
    105   Returns:
    106     EFI_SUCCESS            - Hash size returned successfully.
    107     EFI_INVALID_PARAMETER  - HashSize is NULL
    108     EFI_UNSUPPORTED        - The algorithm specified by HashAlgorithm is not supported
    109                              by this driver.
    110 --*/
    111 ;
    112 
    113 typedef
    114 EFI_STATUS
    115 (EFIAPI *EFI_HASH_HASH) (
    116   IN CONST EFI_HASH_PROTOCOL      *This,
    117   IN CONST EFI_GUID               *HashAlgorithm,
    118   IN BOOLEAN                      Extend,
    119   IN CONST UINT8                  *Message,
    120   IN UINT64                       MessageSize,
    121   IN OUT EFI_HASH_OUTPUT          *Hash
    122   )
    123 /*++
    124 
    125   Routine Description:
    126     Returns the size of the hash which results from a specific algorithm.
    127 
    128   Arguments:
    129     This           -  Points to this instance of EFI_HASH_PROTOCOL.
    130     HashAlgorithm  -  Points to the EFI_GUID which identifies the algorithm to use.
    131     Extend         -  Specifies whether to create a new hash (FALSE) or extend the specified
    132                       existing hash (TRUE).
    133     Message        -  Points to the start of the message.
    134     MessageSize    -  The size of Message, in bytes.
    135     Hash           -  On input, if Extend is TRUE, then this holds the hash to extend. On
    136                       output, holds the resulting hash computed from the message.
    137 
    138   Returns:
    139     EFI_SUCCESS            - Hash returned successfully.
    140     EFI_INVALID_PARAMETER  - Message or Hash is NULL
    141     EFI_UNSUPPORTED        - The algorithm specified by HashAlgorithm is not supported by this
    142                              driver. Or extend is TRUE and the algorithm doesn't support extending the hash.
    143 
    144 --*/
    145 ;
    146 
    147 struct _EFI_HASH_PROTOCOL {
    148   EFI_HASH_GET_HASH_SIZE          GetHashSize;
    149   EFI_HASH_HASH                   Hash;
    150 };
    151 
    152 extern EFI_GUID gEfiHashServiceBindingProtocolGuid;
    153 extern EFI_GUID gEfiHashProtocolGuid;
    154 extern EFI_GUID gEfiHashAlgorithmSha1Guid;
    155 extern EFI_GUID gEfiHashAlgorithmSha224Guid;
    156 extern EFI_GUID gEfiHashAlgorithmSha256Guid;
    157 extern EFI_GUID gEfiHashAlgorithmSha384Guid;
    158 extern EFI_GUID gEfiHashAlgorithmSha512Guid;
    159 extern EFI_GUID gEfiHashAlgorithmMD5Guid;
    160 
    161 #endif
    162