X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=SecurityPkg%2FLibrary%2FHashLibTpm2%2FHashLibTpm2.c;fp=SecurityPkg%2FLibrary%2FHashLibTpm2%2FHashLibTpm2.c;h=00ba80b884e859e5755e3ed801ee0956afdc9d79;hp=876b15fad4d3ee2d67547e5704fe71f6f5c510d5;hb=c411b485b63a671a1e276700cff025c73997233c;hpb=39de741e2dcb8f11e9b4438e37224797643d8451 diff --git a/SecurityPkg/Library/HashLibTpm2/HashLibTpm2.c b/SecurityPkg/Library/HashLibTpm2/HashLibTpm2.c index 876b15fad4..00ba80b884 100644 --- a/SecurityPkg/Library/HashLibTpm2/HashLibTpm2.c +++ b/SecurityPkg/Library/HashLibTpm2/HashLibTpm2.c @@ -17,15 +17,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include typedef struct { - TPM_ALG_ID AlgoId; - UINT32 Mask; + TPM_ALG_ID AlgoId; + UINT32 Mask; } TPM2_HASH_MASK; -TPM2_HASH_MASK mTpm2HashMask[] = { - {TPM_ALG_SHA1, HASH_ALG_SHA1}, - {TPM_ALG_SHA256, HASH_ALG_SHA256}, - {TPM_ALG_SHA384, HASH_ALG_SHA384}, - {TPM_ALG_SHA512, HASH_ALG_SHA512}, +TPM2_HASH_MASK mTpm2HashMask[] = { + { TPM_ALG_SHA1, HASH_ALG_SHA1 }, + { TPM_ALG_SHA256, HASH_ALG_SHA256 }, + { TPM_ALG_SHA384, HASH_ALG_SHA384 }, + { TPM_ALG_SHA512, HASH_ALG_SHA512 }, }; /** @@ -38,11 +38,11 @@ Tpm2GetAlgoFromHashMask ( VOID ) { - UINT32 HashMask; - UINTN Index; + UINT32 HashMask; + UINTN Index; HashMask = PcdGet32 (PcdTpm2HashMask); - for (Index = 0; Index < sizeof(mTpm2HashMask)/sizeof(mTpm2HashMask[0]); Index++) { + for (Index = 0; Index < sizeof (mTpm2HashMask)/sizeof (mTpm2HashMask[0]); Index++) { if (mTpm2HashMask[Index].Mask == HashMask) { return mTpm2HashMask[Index].AlgoId; } @@ -62,12 +62,12 @@ Tpm2GetAlgoFromHashMask ( EFI_STATUS EFIAPI HashStart ( - OUT HASH_HANDLE *HashHandle + OUT HASH_HANDLE *HashHandle ) { - TPMI_DH_OBJECT SequenceHandle; - EFI_STATUS Status; - TPM_ALG_ID AlgoId; + TPMI_DH_OBJECT SequenceHandle; + EFI_STATUS Status; + TPM_ALG_ID AlgoId; AlgoId = Tpm2GetAlgoFromHashMask (); @@ -75,6 +75,7 @@ HashStart ( if (!EFI_ERROR (Status)) { *HashHandle = (HASH_HANDLE)SequenceHandle; } + return Status; } @@ -90,25 +91,24 @@ HashStart ( EFI_STATUS EFIAPI HashUpdate ( - IN HASH_HANDLE HashHandle, - IN VOID *DataToHash, - IN UINTN DataToHashLen + IN HASH_HANDLE HashHandle, + IN VOID *DataToHash, + IN UINTN DataToHashLen ) { - UINT8 *Buffer; - UINT64 HashLen; - TPM2B_MAX_BUFFER HashBuffer; - EFI_STATUS Status; + UINT8 *Buffer; + UINT64 HashLen; + TPM2B_MAX_BUFFER HashBuffer; + EFI_STATUS Status; Buffer = (UINT8 *)(UINTN)DataToHash; - for (HashLen = DataToHashLen; HashLen > sizeof(HashBuffer.buffer); HashLen -= sizeof(HashBuffer.buffer)) { - - HashBuffer.size = sizeof(HashBuffer.buffer); - CopyMem(HashBuffer.buffer, Buffer, sizeof(HashBuffer.buffer)); - Buffer += sizeof(HashBuffer.buffer); + for (HashLen = DataToHashLen; HashLen > sizeof (HashBuffer.buffer); HashLen -= sizeof (HashBuffer.buffer)) { + HashBuffer.size = sizeof (HashBuffer.buffer); + CopyMem (HashBuffer.buffer, Buffer, sizeof (HashBuffer.buffer)); + Buffer += sizeof (HashBuffer.buffer); - Status = Tpm2SequenceUpdate((TPMI_DH_OBJECT)HashHandle, &HashBuffer); - if (EFI_ERROR(Status)) { + Status = Tpm2SequenceUpdate ((TPMI_DH_OBJECT)HashHandle, &HashBuffer); + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } } @@ -117,9 +117,9 @@ HashUpdate ( // Last one // HashBuffer.size = (UINT16)HashLen; - CopyMem(HashBuffer.buffer, Buffer, (UINTN)HashLen); - Status = Tpm2SequenceUpdate((TPMI_DH_OBJECT)HashHandle, &HashBuffer); - if (EFI_ERROR(Status)) { + CopyMem (HashBuffer.buffer, Buffer, (UINTN)HashLen); + Status = Tpm2SequenceUpdate ((TPMI_DH_OBJECT)HashHandle, &HashBuffer); + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } @@ -140,31 +140,30 @@ HashUpdate ( EFI_STATUS EFIAPI HashCompleteAndExtend ( - IN HASH_HANDLE HashHandle, - IN TPMI_DH_PCR PcrIndex, - IN VOID *DataToHash, - IN UINTN DataToHashLen, - OUT TPML_DIGEST_VALUES *DigestList + IN HASH_HANDLE HashHandle, + IN TPMI_DH_PCR PcrIndex, + IN VOID *DataToHash, + IN UINTN DataToHashLen, + OUT TPML_DIGEST_VALUES *DigestList ) { - UINT8 *Buffer; - UINT64 HashLen; - TPM2B_MAX_BUFFER HashBuffer; - EFI_STATUS Status; - TPM_ALG_ID AlgoId; - TPM2B_DIGEST Result; + UINT8 *Buffer; + UINT64 HashLen; + TPM2B_MAX_BUFFER HashBuffer; + EFI_STATUS Status; + TPM_ALG_ID AlgoId; + TPM2B_DIGEST Result; AlgoId = Tpm2GetAlgoFromHashMask (); Buffer = (UINT8 *)(UINTN)DataToHash; - for (HashLen = DataToHashLen; HashLen > sizeof(HashBuffer.buffer); HashLen -= sizeof(HashBuffer.buffer)) { + for (HashLen = DataToHashLen; HashLen > sizeof (HashBuffer.buffer); HashLen -= sizeof (HashBuffer.buffer)) { + HashBuffer.size = sizeof (HashBuffer.buffer); + CopyMem (HashBuffer.buffer, Buffer, sizeof (HashBuffer.buffer)); + Buffer += sizeof (HashBuffer.buffer); - HashBuffer.size = sizeof(HashBuffer.buffer); - CopyMem(HashBuffer.buffer, Buffer, sizeof(HashBuffer.buffer)); - Buffer += sizeof(HashBuffer.buffer); - - Status = Tpm2SequenceUpdate((TPMI_DH_OBJECT)HashHandle, &HashBuffer); - if (EFI_ERROR(Status)) { + Status = Tpm2SequenceUpdate ((TPMI_DH_OBJECT)HashHandle, &HashBuffer); + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } } @@ -173,9 +172,9 @@ HashCompleteAndExtend ( // Last one // HashBuffer.size = (UINT16)HashLen; - CopyMem(HashBuffer.buffer, Buffer, (UINTN)HashLen); + CopyMem (HashBuffer.buffer, Buffer, (UINTN)HashLen); - ZeroMem(DigestList, sizeof(*DigestList)); + ZeroMem (DigestList, sizeof (*DigestList)); DigestList->count = HASH_COUNT; if (AlgoId == TPM_ALG_NULL) { @@ -191,11 +190,11 @@ HashCompleteAndExtend ( &HashBuffer, &Result ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } - DigestList->count = 1; + DigestList->count = 1; DigestList->digests[0].hashAlg = AlgoId; CopyMem (&DigestList->digests[0].digest, Result.buffer, Result.size); Status = Tpm2PcrExtend ( @@ -203,9 +202,11 @@ HashCompleteAndExtend ( DigestList ); } - if (EFI_ERROR(Status)) { + + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } + return EFI_SUCCESS; } @@ -222,61 +223,63 @@ HashCompleteAndExtend ( EFI_STATUS EFIAPI HashAndExtend ( - IN TPMI_DH_PCR PcrIndex, - IN VOID *DataToHash, - IN UINTN DataToHashLen, - OUT TPML_DIGEST_VALUES *DigestList + IN TPMI_DH_PCR PcrIndex, + IN VOID *DataToHash, + IN UINTN DataToHashLen, + OUT TPML_DIGEST_VALUES *DigestList ) { - EFI_STATUS Status; - UINT8 *Buffer; - UINT64 HashLen; - TPMI_DH_OBJECT SequenceHandle; - TPM2B_MAX_BUFFER HashBuffer; - TPM_ALG_ID AlgoId; - TPM2B_EVENT EventData; - TPM2B_DIGEST Result; + EFI_STATUS Status; + UINT8 *Buffer; + UINT64 HashLen; + TPMI_DH_OBJECT SequenceHandle; + TPM2B_MAX_BUFFER HashBuffer; + TPM_ALG_ID AlgoId; + TPM2B_EVENT EventData; + TPM2B_DIGEST Result; - DEBUG((DEBUG_VERBOSE, "\n HashAndExtend Entry \n")); + DEBUG ((DEBUG_VERBOSE, "\n HashAndExtend Entry \n")); SequenceHandle = 0xFFFFFFFF; // Know bad value AlgoId = Tpm2GetAlgoFromHashMask (); - if ((AlgoId == TPM_ALG_NULL) && (DataToHashLen <= sizeof(EventData.buffer))) { + if ((AlgoId == TPM_ALG_NULL) && (DataToHashLen <= sizeof (EventData.buffer))) { EventData.size = (UINT16)DataToHashLen; CopyMem (EventData.buffer, DataToHash, DataToHashLen); Status = Tpm2PcrEvent (PcrIndex, &EventData, DigestList); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } + return EFI_SUCCESS; } - Status = Tpm2HashSequenceStart(AlgoId, &SequenceHandle); - if (EFI_ERROR(Status)) { + Status = Tpm2HashSequenceStart (AlgoId, &SequenceHandle); + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } - DEBUG((DEBUG_VERBOSE, "\n Tpm2HashSequenceStart Success \n")); - Buffer = (UINT8 *)(UINTN)DataToHash; - for (HashLen = DataToHashLen; HashLen > sizeof(HashBuffer.buffer); HashLen -= sizeof(HashBuffer.buffer)) { + DEBUG ((DEBUG_VERBOSE, "\n Tpm2HashSequenceStart Success \n")); - HashBuffer.size = sizeof(HashBuffer.buffer); - CopyMem(HashBuffer.buffer, Buffer, sizeof(HashBuffer.buffer)); - Buffer += sizeof(HashBuffer.buffer); + Buffer = (UINT8 *)(UINTN)DataToHash; + for (HashLen = DataToHashLen; HashLen > sizeof (HashBuffer.buffer); HashLen -= sizeof (HashBuffer.buffer)) { + HashBuffer.size = sizeof (HashBuffer.buffer); + CopyMem (HashBuffer.buffer, Buffer, sizeof (HashBuffer.buffer)); + Buffer += sizeof (HashBuffer.buffer); - Status = Tpm2SequenceUpdate(SequenceHandle, &HashBuffer); - if (EFI_ERROR(Status)) { + Status = Tpm2SequenceUpdate (SequenceHandle, &HashBuffer); + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } } - DEBUG((DEBUG_VERBOSE, "\n Tpm2SequenceUpdate Success \n")); + + DEBUG ((DEBUG_VERBOSE, "\n Tpm2SequenceUpdate Success \n")); HashBuffer.size = (UINT16)HashLen; - CopyMem(HashBuffer.buffer, Buffer, (UINTN)HashLen); + CopyMem (HashBuffer.buffer, Buffer, (UINTN)HashLen); - ZeroMem(DigestList, sizeof(*DigestList)); + ZeroMem (DigestList, sizeof (*DigestList)); DigestList->count = HASH_COUNT; if (AlgoId == TPM_ALG_NULL) { @@ -286,32 +289,35 @@ HashAndExtend ( &HashBuffer, DigestList ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } - DEBUG((DEBUG_VERBOSE, "\n Tpm2EventSequenceComplete Success \n")); + + DEBUG ((DEBUG_VERBOSE, "\n Tpm2EventSequenceComplete Success \n")); } else { Status = Tpm2SequenceComplete ( SequenceHandle, &HashBuffer, &Result ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } - DEBUG((DEBUG_VERBOSE, "\n Tpm2SequenceComplete Success \n")); - DigestList->count = 1; + DEBUG ((DEBUG_VERBOSE, "\n Tpm2SequenceComplete Success \n")); + + DigestList->count = 1; DigestList->digests[0].hashAlg = AlgoId; CopyMem (&DigestList->digests[0].digest, Result.buffer, Result.size); Status = Tpm2PcrExtend ( PcrIndex, DigestList ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } - DEBUG((DEBUG_VERBOSE, "\n Tpm2PcrExtend Success \n")); + + DEBUG ((DEBUG_VERBOSE, "\n Tpm2PcrExtend Success \n")); } return EFI_SUCCESS; @@ -329,7 +335,7 @@ HashAndExtend ( EFI_STATUS EFIAPI RegisterHashInterfaceLib ( - IN HASH_INTERFACE *HashInterface + IN HASH_INTERFACE *HashInterface ) { return EFI_UNSUPPORTED;