mirror of
https://github.com/mtrojnar/osslsigncode.git
synced 2025-07-03 03:32:47 -05:00
Rewrite making test certificates (#393)
Also updates obsolete curl dependencies with zlib.
This commit is contained in:

committed by
GitHub

parent
a53bd2bdb3
commit
6e5bef14e9
108
tests/start_server.py
Normal file
108
tests/start_server.py
Normal file
@ -0,0 +1,108 @@
|
||||
#!/usr/bin/python3
|
||||
"""Wait for all tests certificate, compute leafhash"""
|
||||
|
||||
import argparse
|
||||
import binascii
|
||||
import hashlib
|
||||
import os
|
||||
import pathlib
|
||||
import platform
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
RESULT_PATH = os.getcwd()
|
||||
CERTS_PATH = os.path.join(RESULT_PATH, "./Testing/certs/")
|
||||
LOGS_PATH = os.path.join(RESULT_PATH, "./Testing/logs/")
|
||||
SERVER_LOG = os.path.join(LOGS_PATH, "./server.log")
|
||||
if platform.system() == 'Windows':
|
||||
DEFAULT_PYTHON = "C:/Program Files/Python/Python311/pythonw.exe"
|
||||
DEFAULT_PROG = os.path.join(RESULT_PATH, "./Testing/server_http.pyw")
|
||||
else:
|
||||
DEFAULT_PYTHON = "/usr/bin/python3"
|
||||
DEFAULT_PROG = os.path.join(RESULT_PATH, "./Testing/server_http.py")
|
||||
|
||||
|
||||
def compute_sha256(file_name) -> str:
|
||||
"""Compute a SHA256 hash of the leaf certificate (in DER form)"""
|
||||
|
||||
sha256_hash = hashlib.sha256()
|
||||
file_path = os.path.join(CERTS_PATH, file_name)
|
||||
with open(file_path, mode="rb") as file:
|
||||
for bajt in iter(lambda: file.read(4096),b""):
|
||||
sha256_hash.update(bajt)
|
||||
return sha256_hash.hexdigest()
|
||||
|
||||
def clear_catalog(certs_path) -> None:
|
||||
""""Clear a test certificates catalog."""
|
||||
|
||||
if os.path.exists(certs_path):
|
||||
#Remove old test certificates
|
||||
for root, _, files in os.walk(certs_path):
|
||||
for file in files:
|
||||
os.remove(os.path.join(root, file))
|
||||
else:
|
||||
os.mkdir(certs_path)
|
||||
|
||||
# Generate 16 random bytes and convert to hex
|
||||
random_hex = binascii.b2a_hex(os.urandom(16)).decode()
|
||||
serial = os.path.join(certs_path, "./tsa-serial")
|
||||
with open(serial, mode="w", encoding="utf-8") as file:
|
||||
file.write(random_hex)
|
||||
|
||||
def main() -> None:
|
||||
"""Wait for all tests certificate, compute leafhash"""
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"--exe",
|
||||
type=pathlib.Path,
|
||||
default=DEFAULT_PYTHON,
|
||||
help=f"the path to the python3 executable to use"
|
||||
f"(default: {DEFAULT_PYTHON})",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--script",
|
||||
type=pathlib.Path,
|
||||
default=DEFAULT_PROG,
|
||||
help=f"the path to the python script to run"
|
||||
f"(default: {DEFAULT_PROG})",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
try:
|
||||
clear_catalog(CERTS_PATH)
|
||||
#pylint: disable=consider-using-with
|
||||
subprocess.Popen([str(args.exe), str(args.script)])
|
||||
|
||||
cert_log = os.path.join(CERTS_PATH, "./cert.log")
|
||||
while not (os.path.exists(cert_log) and os.path.getsize(cert_log) > 0):
|
||||
time.sleep(1)
|
||||
|
||||
leafhash = compute_sha256("cert.der")
|
||||
file_path = os.path.join(CERTS_PATH, "./leafhash.txt")
|
||||
with open(file_path, mode="w", encoding="utf-8") as file:
|
||||
file.write("SHA256:{}".format(leafhash))
|
||||
|
||||
except OSError as err:
|
||||
with open(SERVER_LOG, mode="w", encoding="utf-8") as file:
|
||||
file.write("OSError: {}".format(err))
|
||||
sys.exit(1)
|
||||
|
||||
except Exception as err: # pylint: disable=broad-except
|
||||
with open(SERVER_LOG, mode="w", encoding="utf-8") as file:
|
||||
file.write("Error: {}".format(err))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
|
||||
# pylint: disable=pointless-string-statement
|
||||
"""Local Variables:
|
||||
c-basic-offset: 4
|
||||
tab-width: 4
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
vim: set ts=4 expandtab:
|
||||
"""
|
Reference in New Issue
Block a user