Harden CI digest parsing and failure cleanup
This commit is contained in:
1 parent
7985b23be5
commit
195b9fccf3
6 files changed
+492
-239
No files matched your search
@@ -0,0 +1,34 @@
|
||||
"""Run in an x64 VS developer shell with Windows SDK and Python 3 installed.
|
||||
|
||||
Extracts the actual production functions without changing their bodies, replacing
|
||||
only kernel dependencies with the test harness. No driver is loaded. This tests
|
||||
parsing, hashing and cleanup, not real CI policy or kernel I/O synchronization.
|
||||
"""
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--source-root', type=Path, default=Path(__file__).resolve().parents[1])
|
||||
parser.add_argument('--digest-source', type=Path)
|
||||
args = parser.parse_args()
|
||||
root = args.source_root
|
||||
digest = (args.digest_source or root / 'src/Domito.CodeIntegrity.cpp').read_text(encoding='utf-8-sig')
|
||||
digest = digest.replace('#include "Domito.Internal.h"', '').replace('#include "Domito.MinCrypt.h"', '')
|
||||
common = (root / 'src/Domito.cpp').read_text(encoding='utf-8-sig')
|
||||
start = common.rfind('_Success_', 0, common.index('DomitoMemorySearchPattern('))
|
||||
end = common.index('_Success_', common.index('DomitoMemorySearchPattern('))
|
||||
search = common[start:end]
|
||||
public = (root / 'include/Domito.h').read_text(encoding='utf-8-sig')
|
||||
start = public.index('#if !defined(CALG_SHA1)')
|
||||
end = public.index('/*', public.index('DOMITO_CALG_TO_BCRYPT_ALGORITHM('))
|
||||
algorithm = public[start:end]
|
||||
with tempfile.TemporaryDirectory(prefix='domito-digest-tests-') as temp:
|
||||
build = Path(temp)
|
||||
(build / 'digest-under-test.inc').write_text(algorithm + '\n' + search + '\n' + digest, encoding='utf-8')
|
||||
test_source = Path(__file__).with_name('digest-tests.cpp')
|
||||
subprocess.run(['cl', '/nologo', '/EHsc', '/W4', '/WX', '/std:c++17',
|
||||
'/I' + str(build), str(test_source), '/Fe' + str(build/'digest-tests.exe'),
|
||||
'/Fo' + str(build/'digest-tests.obj'), '/link', 'bcrypt.lib'], cwd=build, check=True)
|
||||
subprocess.run([str(build/'digest-tests.exe')], cwd=build, check=True)
|
||||
Reference in new issue
Block a user