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