1*3c5ca68bSWarner Losh /** @file 2*3c5ca68bSWarner Losh EFI_HASH_SERVICE_BINDING_PROTOCOL as defined in UEFI 2.0. 3*3c5ca68bSWarner Losh EFI_HASH_PROTOCOL as defined in UEFI 2.0. 4*3c5ca68bSWarner Losh The EFI Hash Service Binding Protocol is used to locate hashing services support 5*3c5ca68bSWarner Losh provided by a driver and to create and destroy instances of the EFI Hash Protocol 6*3c5ca68bSWarner Losh so that a multiple drivers can use the underlying hashing services. 7*3c5ca68bSWarner Losh 8*3c5ca68bSWarner Losh Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> 9*3c5ca68bSWarner Losh SPDX-License-Identifier: BSD-2-Clause-Patent 10*3c5ca68bSWarner Losh 11*3c5ca68bSWarner Losh **/ 12*3c5ca68bSWarner Losh 13*3c5ca68bSWarner Losh #ifndef __EFI_HASH_PROTOCOL_H__ 14*3c5ca68bSWarner Losh #define __EFI_HASH_PROTOCOL_H__ 15*3c5ca68bSWarner Losh 16*3c5ca68bSWarner Losh #define EFI_HASH_SERVICE_BINDING_PROTOCOL_GUID \ 17*3c5ca68bSWarner Losh { \ 18*3c5ca68bSWarner Losh 0x42881c98, 0xa4f3, 0x44b0, {0xa3, 0x9d, 0xdf, 0xa1, 0x86, 0x67, 0xd8, 0xcd } \ 19*3c5ca68bSWarner Losh } 20*3c5ca68bSWarner Losh 21*3c5ca68bSWarner Losh #define EFI_HASH_PROTOCOL_GUID \ 22*3c5ca68bSWarner Losh { \ 23*3c5ca68bSWarner Losh 0xc5184932, 0xdba5, 0x46db, {0xa5, 0xba, 0xcc, 0x0b, 0xda, 0x9c, 0x14, 0x35 } \ 24*3c5ca68bSWarner Losh } 25*3c5ca68bSWarner Losh 26*3c5ca68bSWarner Losh #define EFI_HASH_ALGORITHM_SHA1_GUID \ 27*3c5ca68bSWarner Losh { \ 28*3c5ca68bSWarner Losh 0x2ae9d80f, 0x3fb2, 0x4095, {0xb7, 0xb1, 0xe9, 0x31, 0x57, 0xb9, 0x46, 0xb6 } \ 29*3c5ca68bSWarner Losh } 30*3c5ca68bSWarner Losh 31*3c5ca68bSWarner Losh #define EFI_HASH_ALGORITHM_SHA224_GUID \ 32*3c5ca68bSWarner Losh { \ 33*3c5ca68bSWarner Losh 0x8df01a06, 0x9bd5, 0x4bf7, {0xb0, 0x21, 0xdb, 0x4f, 0xd9, 0xcc, 0xf4, 0x5b } \ 34*3c5ca68bSWarner Losh } 35*3c5ca68bSWarner Losh 36*3c5ca68bSWarner Losh #define EFI_HASH_ALGORITHM_SHA256_GUID \ 37*3c5ca68bSWarner Losh { \ 38*3c5ca68bSWarner Losh 0x51aa59de, 0xfdf2, 0x4ea3, {0xbc, 0x63, 0x87, 0x5f, 0xb7, 0x84, 0x2e, 0xe9 } \ 39*3c5ca68bSWarner Losh } 40*3c5ca68bSWarner Losh 41*3c5ca68bSWarner Losh #define EFI_HASH_ALGORITHM_SHA384_GUID \ 42*3c5ca68bSWarner Losh { \ 43*3c5ca68bSWarner Losh 0xefa96432, 0xde33, 0x4dd2, {0xae, 0xe6, 0x32, 0x8c, 0x33, 0xdf, 0x77, 0x7a } \ 44*3c5ca68bSWarner Losh } 45*3c5ca68bSWarner Losh 46*3c5ca68bSWarner Losh #define EFI_HASH_ALGORITHM_SHA512_GUID \ 47*3c5ca68bSWarner Losh { \ 48*3c5ca68bSWarner Losh 0xcaa4381e, 0x750c, 0x4770, {0xb8, 0x70, 0x7a, 0x23, 0xb4, 0xe4, 0x21, 0x30 } \ 49*3c5ca68bSWarner Losh } 50*3c5ca68bSWarner Losh 51*3c5ca68bSWarner Losh #define EFI_HASH_ALGORTIHM_MD5_GUID \ 52*3c5ca68bSWarner Losh { \ 53*3c5ca68bSWarner Losh 0xaf7c79c, 0x65b5, 0x4319, {0xb0, 0xae, 0x44, 0xec, 0x48, 0x4e, 0x4a, 0xd7 } \ 54*3c5ca68bSWarner Losh } 55*3c5ca68bSWarner Losh 56*3c5ca68bSWarner Losh #define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \ 57*3c5ca68bSWarner Losh { \ 58*3c5ca68bSWarner Losh 0x24c5dc2f, 0x53e2, 0x40ca, {0x9e, 0xd6, 0xa5, 0xd9, 0xa4, 0x9f, 0x46, 0x3b } \ 59*3c5ca68bSWarner Losh } 60*3c5ca68bSWarner Losh 61*3c5ca68bSWarner Losh #define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \ 62*3c5ca68bSWarner Losh { \ 63*3c5ca68bSWarner Losh 0x8628752a, 0x6cb7, 0x4814, {0x96, 0xfc, 0x24, 0xa8, 0x15, 0xac, 0x22, 0x26 } \ 64*3c5ca68bSWarner Losh } 65*3c5ca68bSWarner Losh 66*3c5ca68bSWarner Losh // 67*3c5ca68bSWarner Losh // Note: Use of the following algorithms with EFI_HASH_PROTOCOL is deprecated. 68*3c5ca68bSWarner Losh // EFI_HASH_ALGORITHM_SHA1_GUID 69*3c5ca68bSWarner Losh // EFI_HASH_ALGORITHM_SHA224_GUID 70*3c5ca68bSWarner Losh // EFI_HASH_ALGORITHM_SHA256_GUID 71*3c5ca68bSWarner Losh // EFI_HASH_ALGORITHM_SHA384_GUID 72*3c5ca68bSWarner Losh // EFI_HASH_ALGORITHM_SHA512_GUID 73*3c5ca68bSWarner Losh // EFI_HASH_ALGORTIHM_MD5_GUID 74*3c5ca68bSWarner Losh // 75*3c5ca68bSWarner Losh 76*3c5ca68bSWarner Losh typedef struct _EFI_HASH_PROTOCOL EFI_HASH_PROTOCOL; 77*3c5ca68bSWarner Losh 78*3c5ca68bSWarner Losh typedef UINT8 EFI_MD5_HASH[16]; 79*3c5ca68bSWarner Losh typedef UINT8 EFI_SHA1_HASH[20]; 80*3c5ca68bSWarner Losh typedef UINT8 EFI_SHA224_HASH[28]; 81*3c5ca68bSWarner Losh typedef UINT8 EFI_SHA256_HASH[32]; 82*3c5ca68bSWarner Losh typedef UINT8 EFI_SHA384_HASH[48]; 83*3c5ca68bSWarner Losh typedef UINT8 EFI_SHA512_HASH[64]; 84*3c5ca68bSWarner Losh 85*3c5ca68bSWarner Losh typedef union { 86*3c5ca68bSWarner Losh EFI_MD5_HASH *Md5Hash; 87*3c5ca68bSWarner Losh EFI_SHA1_HASH *Sha1Hash; 88*3c5ca68bSWarner Losh EFI_SHA224_HASH *Sha224Hash; 89*3c5ca68bSWarner Losh EFI_SHA256_HASH *Sha256Hash; 90*3c5ca68bSWarner Losh EFI_SHA384_HASH *Sha384Hash; 91*3c5ca68bSWarner Losh EFI_SHA512_HASH *Sha512Hash; 92*3c5ca68bSWarner Losh } EFI_HASH_OUTPUT; 93*3c5ca68bSWarner Losh 94*3c5ca68bSWarner Losh /** 95*3c5ca68bSWarner Losh Returns the size of the hash which results from a specific algorithm. 96*3c5ca68bSWarner Losh 97*3c5ca68bSWarner Losh @param[in] This Points to this instance of EFI_HASH_PROTOCOL. 98*3c5ca68bSWarner Losh @param[in] HashAlgorithm Points to the EFI_GUID which identifies the algorithm to use. 99*3c5ca68bSWarner Losh @param[out] HashSize Holds the returned size of the algorithm's hash. 100*3c5ca68bSWarner Losh 101*3c5ca68bSWarner Losh @retval EFI_SUCCESS Hash size returned successfully. 102*3c5ca68bSWarner Losh @retval EFI_INVALID_PARAMETER HashSize is NULL or HashAlgorithm is NULL. 103*3c5ca68bSWarner Losh @retval EFI_UNSUPPORTED The algorithm specified by HashAlgorithm is not supported 104*3c5ca68bSWarner Losh by this driver. 105*3c5ca68bSWarner Losh 106*3c5ca68bSWarner Losh **/ 107*3c5ca68bSWarner Losh typedef 108*3c5ca68bSWarner Losh EFI_STATUS 109*3c5ca68bSWarner Losh (EFIAPI *EFI_HASH_GET_HASH_SIZE)( 110*3c5ca68bSWarner Losh IN CONST EFI_HASH_PROTOCOL *This, 111*3c5ca68bSWarner Losh IN CONST EFI_GUID *HashAlgorithm, 112*3c5ca68bSWarner Losh OUT UINTN *HashSize 113*3c5ca68bSWarner Losh ); 114*3c5ca68bSWarner Losh 115*3c5ca68bSWarner Losh /** 116*3c5ca68bSWarner Losh Creates a hash for the specified message text. 117*3c5ca68bSWarner Losh 118*3c5ca68bSWarner Losh @param[in] This Points to this instance of EFI_HASH_PROTOCOL. 119*3c5ca68bSWarner Losh @param[in] HashAlgorithm Points to the EFI_GUID which identifies the algorithm to use. 120*3c5ca68bSWarner Losh @param[in] Extend Specifies whether to create a new hash (FALSE) or extend the specified 121*3c5ca68bSWarner Losh existing hash (TRUE). 122*3c5ca68bSWarner Losh @param[in] Message Points to the start of the message. 123*3c5ca68bSWarner Losh @param[in] MessageSize The size of Message, in bytes. 124*3c5ca68bSWarner Losh @param[in,out] Hash On input, if Extend is TRUE, then this parameter holds a pointer 125*3c5ca68bSWarner Losh to a pointer to an array containing the hash to extend. If Extend 126*3c5ca68bSWarner Losh is FALSE, then this parameter holds a pointer to a pointer to a 127*3c5ca68bSWarner Losh caller-allocated array that will receive the result of the hash 128*3c5ca68bSWarner Losh computation. On output (regardless of the value of Extend), the 129*3c5ca68bSWarner Losh array will contain the result of the hash computation. 130*3c5ca68bSWarner Losh 131*3c5ca68bSWarner Losh @retval EFI_SUCCESS Hash returned successfully. 132*3c5ca68bSWarner Losh @retval EFI_INVALID_PARAMETER Message or Hash, HashAlgorithm is NULL or MessageSize is 0. 133*3c5ca68bSWarner Losh MessageSize is not an integer multiple of block size. 134*3c5ca68bSWarner Losh @retval EFI_UNSUPPORTED The algorithm specified by HashAlgorithm is not supported by this 135*3c5ca68bSWarner Losh driver. Or, Extend is TRUE, and the algorithm doesn't support extending the hash. 136*3c5ca68bSWarner Losh 137*3c5ca68bSWarner Losh **/ 138*3c5ca68bSWarner Losh typedef 139*3c5ca68bSWarner Losh EFI_STATUS 140*3c5ca68bSWarner Losh (EFIAPI *EFI_HASH_HASH)( 141*3c5ca68bSWarner Losh IN CONST EFI_HASH_PROTOCOL *This, 142*3c5ca68bSWarner Losh IN CONST EFI_GUID *HashAlgorithm, 143*3c5ca68bSWarner Losh IN BOOLEAN Extend, 144*3c5ca68bSWarner Losh IN CONST UINT8 *Message, 145*3c5ca68bSWarner Losh IN UINT64 MessageSize, 146*3c5ca68bSWarner Losh IN OUT EFI_HASH_OUTPUT *Hash 147*3c5ca68bSWarner Losh ); 148*3c5ca68bSWarner Losh 149*3c5ca68bSWarner Losh /// 150*3c5ca68bSWarner Losh /// This protocol allows creating a hash of an arbitrary message digest 151*3c5ca68bSWarner Losh /// using one or more hash algorithms. 152*3c5ca68bSWarner Losh /// 153*3c5ca68bSWarner Losh struct _EFI_HASH_PROTOCOL { 154*3c5ca68bSWarner Losh EFI_HASH_GET_HASH_SIZE GetHashSize; 155*3c5ca68bSWarner Losh EFI_HASH_HASH Hash; 156*3c5ca68bSWarner Losh }; 157*3c5ca68bSWarner Losh 158*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashServiceBindingProtocolGuid; 159*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashProtocolGuid; 160*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmSha1Guid; 161*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmSha224Guid; 162*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmSha256Guid; 163*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmSha384Guid; 164*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmSha512Guid; 165*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmMD5Guid; 166*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmSha1NoPadGuid; 167*3c5ca68bSWarner Losh extern EFI_GUID gEfiHashAlgorithmSha256NoPadGuid; 168*3c5ca68bSWarner Losh 169*3c5ca68bSWarner Losh #endif 170