4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Application for Hash Primitives Validation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "Cryptest.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Max Known Digest Size is SHA512 Output (64 bytes) by far
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAX_DIGEST_SIZE 64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Message string for digest validation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HashData = "abc";
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Result for MD4("abc"). (From "A.5 Test suite" of IETF RFC1320)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md4Digest[MD4_DIGEST_SIZE] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52, 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Result for MD5("abc"). (From "A.5 Test suite" of IETF RFC1321)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md5Digest[MD5_DIGEST_SIZE] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Result for SHA-1("abc"). (From "A.1 SHA-1 Example" of NIST FIPS 180-2)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha1Digest[SHA1_DIGEST_SIZE] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x9c, 0xd0, 0xd8, 0x9d
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Result for SHA-256("abc"). (From "B.1 SHA-256 Example" of NIST FIPS 180-2)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha256Digest[SHA256_DIGEST_SIZE] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Validate UEFI-OpenSSL Digest Interfaces.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Validation succeeded.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ABORTED Validation failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncValidateCryptDigest (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN CtxSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *HashCtx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN DataSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Digest[MAX_DIGEST_SIZE];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L" UEFI-OpenSSL Hash Engine Testing:\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSize = AsciiStrLen (HashData);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"- MD4: ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // MD4 Digest Validation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (Digest, MAX_DIGEST_SIZE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CtxSize = Md4GetContextSize ();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HashCtx = AllocatePool (CtxSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Init... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Md4Init (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Update... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Md4Update (HashCtx, HashData, DataSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Finalize... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Md4Final (HashCtx, Digest);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Check Value... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (CompareMem (Digest, Md4Digest, MD5_DIGEST_SIZE) != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Pass]\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"- MD5: ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // MD5 Digest Validation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (Digest, MAX_DIGEST_SIZE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CtxSize = Md5GetContextSize ();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HashCtx = AllocatePool (CtxSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Init... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Md5Init (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Update... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Md5Update (HashCtx, HashData, DataSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Finalize... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Md5Final (HashCtx, Digest);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Check Value... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (CompareMem (Digest, Md5Digest, MD5_DIGEST_SIZE) != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Pass]\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"- SHA1: ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // SHA-1 Digest Validation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (Digest, MAX_DIGEST_SIZE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CtxSize = Sha1GetContextSize ();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HashCtx = AllocatePool (CtxSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Init... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Sha1Init (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Update... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Sha1Update (HashCtx, HashData, DataSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Finalize... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Sha1Final (HashCtx, Digest);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Check Value... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (CompareMem (Digest, Sha1Digest, SHA1_DIGEST_SIZE) != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Pass]\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"- SHA256: ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // SHA256 Digest Validation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (Digest, MAX_DIGEST_SIZE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CtxSize = Sha256GetContextSize ();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HashCtx = AllocatePool (CtxSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Init... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Sha256Init (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Update... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Sha256Update (HashCtx, HashData, DataSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Finalize... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = Sha256Final (HashCtx, Digest);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Status) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (HashCtx);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"Check Value... ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (CompareMem (Digest, Sha256Digest, SHA256_DIGEST_SIZE) != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Fail]");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_ABORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"[Pass]\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}