import binascii
from Crypto.Hash import SHA as SHA1
from Crypto.Hash import SHA256
def get_expected_pcr_value(hash_list):
"""
Description:
Given a list of hash strings, calculate the expected PCR values
For PCR0, extend by the Boot 0 hash and then the Boot Loader Hash
For PCR8, extend by the OS hash
Arg:
hash_list(list): PCR0 and PCR8 hashes
Return:
The calculated PCR value
"""
init = "0000000000000000000000000000000000000000000000000000000000000000"
pcr_init = init
pcr_bin = binascii.a2b_hex(pcr_init)
for hash_str in hash_list:
hash_bin = binascii.a2b_hex(hash_str)
hash_sha256_bin = SHA256.new(hash_bin).digest()
pcr_bin = SHA256.new(pcr_bin + hash_sha256_bin).digest()
return binascii.b2a_hex(pcr_bin).upper()
hash_list = ["06A33C4BDA63FF62738CD0D333C299090AE95C8CE429A3DC9847909D84E9326D",
"4C89F4201B140F8D5E4DEBA53616291FCA66F2A82EE757A966C5684203ED4A10D3BF7E8A4E211FD6BA9B5CEC6E3E1DBEE9DD2073642A941BDE28803AA0224F59"]
result_pcr0 = get_expected_pcr_value(hash_list).decode("utf-8")
print(result_pcr0)
aW1wb3J0IGJpbmFzY2lpCmZyb20gQ3J5cHRvLkhhc2ggaW1wb3J0IFNIQSBhcyBTSEExCmZyb20gQ3J5cHRvLkhhc2ggaW1wb3J0IFNIQTI1NgoKZGVmIGdldF9leHBlY3RlZF9wY3JfdmFsdWUoaGFzaF9saXN0KToKICAgICIiIgogICAgRGVzY3JpcHRpb246CiAgICAgICAgR2l2ZW4gYSBsaXN0IG9mIGhhc2ggc3RyaW5ncywgY2FsY3VsYXRlIHRoZSBleHBlY3RlZCBQQ1IgdmFsdWVzCiAgICAgICAgRm9yIFBDUjAsIGV4dGVuZCBieSB0aGUgQm9vdCAwIGhhc2ggYW5kIHRoZW4gdGhlIEJvb3QgTG9hZGVyIEhhc2gKICAgICAgICBGb3IgUENSOCwgZXh0ZW5kIGJ5IHRoZSBPUyBoYXNoCiAgICBBcmc6CiAgICAgICAgaGFzaF9saXN0KGxpc3QpOiBQQ1IwIGFuZCBQQ1I4IGhhc2hlcwogICAgUmV0dXJuOgogICAgICAgIFRoZSBjYWxjdWxhdGVkIFBDUiB2YWx1ZQogICAgIiIiCiAgICBpbml0ID0gIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCiAgICBwY3JfaW5pdCA9IGluaXQKICAgIHBjcl9iaW4gPSBiaW5hc2NpaS5hMmJfaGV4KHBjcl9pbml0KQogICAgZm9yIGhhc2hfc3RyIGluIGhhc2hfbGlzdDoKICAgICAgICBoYXNoX2JpbiA9IGJpbmFzY2lpLmEyYl9oZXgoaGFzaF9zdHIpCiAgICAgICAgaGFzaF9zaGEyNTZfYmluID0gU0hBMjU2Lm5ldyhoYXNoX2JpbikuZGlnZXN0KCkKICAgICAgICBwY3JfYmluID0gU0hBMjU2Lm5ldyhwY3JfYmluICsgaGFzaF9zaGEyNTZfYmluKS5kaWdlc3QoKQogICAgcmV0dXJuIGJpbmFzY2lpLmIyYV9oZXgocGNyX2JpbikudXBwZXIoKQoKaGFzaF9saXN0ID0gWyIwNkEzM0M0QkRBNjNGRjYyNzM4Q0QwRDMzM0MyOTkwOTBBRTk1QzhDRTQyOUEzREM5ODQ3OTA5RDg0RTkzMjZEIiwKICAgICAgICAgICAgICI0Qzg5RjQyMDFCMTQwRjhENUU0REVCQTUzNjE2MjkxRkNBNjZGMkE4MkVFNzU3QTk2NkM1Njg0MjAzRUQ0QTEwRDNCRjdFOEE0RTIxMUZENkJBOUI1Q0VDNkUzRTFEQkVFOUREMjA3MzY0MkE5NDFCREUyODgwM0FBMDIyNEY1OSJdCnJlc3VsdF9wY3IwID0gZ2V0X2V4cGVjdGVkX3Bjcl92YWx1ZShoYXNoX2xpc3QpLmRlY29kZSgidXRmLTgiKQpwcmludChyZXN1bHRfcGNyMCk=