Skip to content

Commit

Permalink
signrom: Rewrite as python script
Browse files Browse the repository at this point in the history
Now that we have a hard dependency on python anyway, we can replace the
slow shell script to calculate the option ROM checksum with a fast AND
portable python version. Tested both with python 2.7 and 3.1.

Signed-off-by: Jan Kiszka <[email protected]>
  • Loading branch information
jan-kiszka committed Apr 16, 2012
1 parent e6f5d0b commit 0d6b9cc
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 46 deletions.
2 changes: 1 addition & 1 deletion pc-bios/optionrom/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ build-all: multiboot.bin linuxboot.bin kvmvapic.bin
$(call quiet-command,$(OBJCOPY) -O binary -j .text $< $@," Building $(TARGET_DIR)$@")

%.bin: %.raw
$(call quiet-command,$(SHELL) $(SRC_PATH)/scripts/signrom.sh $< $@," Signing $(TARGET_DIR)$@")
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/signrom.py $< $@," Signing $(TARGET_DIR)$@")

clean:
rm -f *.o *.d *.raw *.img *.bin *~
40 changes: 40 additions & 0 deletions scripts/signrom.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#
# Option ROM signing utility
#
# Authors:
# Jan Kiszka <[email protected]>
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.

import sys
import struct

if len(sys.argv) < 3:
print('usage: signrom.py input output')
sys.exit(1)

fin = open(sys.argv[1], 'rb')
fout = open(sys.argv[2], 'wb')

fin.seek(2)
size = ord(fin.read(1)) * 512 - 1

fin.seek(0)
data = fin.read(size)
fout.write(data)

checksum = 0
for b in data:
# catch Python 2 vs. 3 differences
if isinstance(b, int):
checksum += b
else:
checksum += ord(b)
checksum = (256 - checksum) % 256

# Python 3 no longer allows chr(checksum)
fout.write(struct.pack('B', checksum))

fin.close()
fout.close()
45 changes: 0 additions & 45 deletions scripts/signrom.sh

This file was deleted.

0 comments on commit 0d6b9cc

Please sign in to comment.