add scripts to prepare firmware
This commit is contained in:
parent
cdbce138b7
commit
073a167516
|
@ -1 +1,5 @@
|
||||||
/Debug/
|
/Debug/
|
||||||
|
/scripts/
|
||||||
|
!/scripts/*.py
|
||||||
|
!/scripts/*.sh
|
||||||
|
*.cfg
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
"firmware")
|
||||||
|
address="0x8002000"
|
||||||
|
;;
|
||||||
|
"recovery")
|
||||||
|
address="0x8041000"
|
||||||
|
;;
|
||||||
|
"upgrade")
|
||||||
|
address="0x8080000"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "You must tell which part of memory you want to load. Possible values are firmware, recovery and upgrade"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
st-flash write fw.bin $address
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import struct
|
||||||
|
|
||||||
|
SIGNATURE_AREA_SIZE = 512 - 8
|
||||||
|
|
||||||
|
def main():
|
||||||
|
fw = open("fw.bin", "rb").read()
|
||||||
|
|
||||||
|
if fw[:4] == b'SHWF':
|
||||||
|
print("Firmware already prepared")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
header = b'SHWF'
|
||||||
|
header += struct.pack('<I', len(fw))
|
||||||
|
header += b'\x00' * SIGNATURE_AREA_SIZE
|
||||||
|
open("fw.bin", "wb").write(header + fw)
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,32 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import ecdsa
|
||||||
|
import hashlib
|
||||||
|
import sys
|
||||||
|
|
||||||
|
SIG_LEN = 64
|
||||||
|
SIG_OFF = 8
|
||||||
|
HEADER_SIZE = 512
|
||||||
|
|
||||||
|
def main(index):
|
||||||
|
fw = open("fw.bin", "rb").read()
|
||||||
|
|
||||||
|
if index < 0 or index > 6:
|
||||||
|
print("Index must be between 0 and 6")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if fw[:4] != b'SHWF':
|
||||||
|
print("Firmware must be prepared with fw_prepare.py first!")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
sk_pem = open("secret_key.pem", "r").read()
|
||||||
|
sk = ecdsa.SigningKey.from_pem(sk_pem)
|
||||||
|
plain_fw = fw[HEADER_SIZE:]
|
||||||
|
fw_sig = sk.sign_deterministic(plain_fw, hashfunc=hashlib.sha256)
|
||||||
|
fw = fw[:SIG_OFF + SIG_LEN * (index) ] + fw_sig + fw[SIG_OFF + SIG_LEN * (index + 1):]
|
||||||
|
open("fw.bin", "wb").write(fw)
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print("You must insert the (zero-based) index of the signature")
|
||||||
|
exit(1)
|
||||||
|
main(int(sys.argv[1]))
|
Loading…
Reference in New Issue