You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.3 KiB

'''
This is an example validator to be used with oem commands that allow you to
upload data afterwards that you wish to validate locally.
'''
import sys
import os
import hashlib
def eprint(msg):
'''
A helper function for logging error messages to fuzzy_fastboot
Use this function as you would "print()"
'''
sys.stderr.write(msg + '\n')
def main():
'''
Data is sent back to the parent fuzzy_fastboot process through the stderr pipe.
If this script has a non-zero return code, anything written to STDERR is part of
the error message that will logged by FF to explain why this validation failed.
Feel free to print to to STDOUT with print() as usual to print info to console
'''
if len(sys.argv) != 3:
eprint("This script is intended to be called by fuzzy_fastboot")
return -1
script, command, fname = sys.argv
with open(fname, "rb") as fd:
buf = fd.read()
sha = buf[0x10:0x30]
tlvs = buf[0x30:]
hash = hashlib.sha256(tlvs)
# Assert the hash matches
pretty = "".join("{:02x}".format(ord(c)) for c in sha)
if hash.digest() != sha:
eprint("'%s' does not match '%s'" % (hash.hexdigest(), pretty))
assert hash.digest() == sha
# non-zero return code signals error
return 0
if __name__ == "__main__":
sys.exit(main())