xref: /freebsd/sys/contrib/edk2/Include/Protocol/Hash.h (revision 3c5ca68b9b7ce68a5376b8456edf6af57ed18f91)
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