]>
git.proxmox.com Git - mirror_edk2.git/blob - CryptoPkg/Library/BaseCryptLib/Hash/CryptSha1.c
2 SHA-1 Digest Wrapper Implementation over OpenSSL.
4 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "InternalCryptLib.h"
16 #include <openssl/sha.h>
20 Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.
22 @return The size, in bytes, of the context buffer required for SHA-1 hash operations.
32 // Retrieves OpenSSL SHA Context Size
34 return (UINTN
)(sizeof (SHA_CTX
));
38 Initializes user-supplied memory pointed by Sha1Context as SHA-1 hash context for
41 If Sha1Context is NULL, then ASSERT().
43 @param[out] Sha1Context Pointer to SHA-1 context being initialized.
45 @retval TRUE SHA-1 context initialization succeeded.
46 @retval FALSE SHA-1 context initialization failed.
56 // ASSERT if Sha1Context is NULL
58 ASSERT (Sha1Context
!= NULL
);
61 // OpenSSL SHA-1 Context Initialization
63 return (BOOLEAN
) (SHA1_Init ((SHA_CTX
*)Sha1Context
));
67 Makes a copy of an existing SHA-1 context.
69 If Sha1Context is NULL, then ASSERT().
70 If NewSha1Context is NULL, then ASSERT().
72 @param[in] Sha1Context Pointer to SHA-1 context being copied.
73 @param[out] NewSha1Context Pointer to new SHA-1 context.
75 @retval TRUE SHA-1 context copy succeeded.
76 @retval FALSE SHA-1 context copy failed.
82 IN CONST VOID
*Sha1Context
,
83 OUT VOID
*NewSha1Context
86 CopyMem (NewSha1Context
, Sha1Context
, sizeof (SHA_CTX
));
92 Digests the input data and updates SHA-1 context.
94 This function performs SHA-1 digest on a data buffer of the specified size.
95 It can be called multiple times to compute the digest of long or discontinuous data streams.
96 SHA-1 context should be already correctly intialized by Sha1Init(), and should not be finalized
97 by Sha1Final(). Behavior with invalid context is undefined.
99 If Sha1Context is NULL, then ASSERT().
101 @param[in, out] Sha1Context Pointer to the SHA-1 context.
102 @param[in] Data Pointer to the buffer containing the data to be hashed.
103 @param[in] DataSize Size of Data buffer in bytes.
105 @retval TRUE SHA-1 data digest succeeded.
106 @retval FALSE SHA-1 data digest failed.
112 IN OUT VOID
*Sha1Context
,
118 // ASSERT if Sha1Context is NULL
120 ASSERT (Sha1Context
!= NULL
);
123 // ASSERT if invalid parameters, in case that only DataLength was checked in OpenSSL
126 ASSERT (DataSize
== 0);
130 // OpenSSL SHA-1 Hash Update
132 return (BOOLEAN
) (SHA1_Update ((SHA_CTX
*)Sha1Context
, Data
, DataSize
));
136 Completes computation of the SHA-1 digest value.
138 This function completes SHA-1 hash computation and retrieves the digest value into
139 the specified memory. After this function has been called, the SHA-1 context cannot
141 SHA-1 context should be already correctly intialized by Sha1Init(), and should not be
142 finalized by Sha1Final(). Behavior with invalid SHA-1 context is undefined.
144 If Sha1Context is NULL, then ASSERT().
145 If HashValue is NULL, then ASSERT().
147 @param[in, out] Sha1Context Pointer to the SHA-1 context.
148 @param[out] HashValue Pointer to a buffer that receives the SHA-1 digest
151 @retval TRUE SHA-1 digest computation succeeded.
152 @retval FALSE SHA-1 digest computation failed.
158 IN OUT VOID
*Sha1Context
,
163 // ASSERT if Sha1Context is NULL or HashValue is NULL
165 ASSERT (Sha1Context
!= NULL
);
166 ASSERT (HashValue
!= NULL
);
169 // OpenSSL SHA-1 Hash Finalization
171 return (BOOLEAN
) (SHA1_Final (HashValue
, (SHA_CTX
*)Sha1Context
));