Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
926072a
add reversible RandomX MSR authority
Deadbytes101 Jul 7, 2026
3e41085
wire reversible RandomX MSR service
Deadbytes101 Jul 7, 2026
72a8725
order miner after RandomX MSR authority
Deadbytes101 Jul 7, 2026
dbb4c8e
make kmod an explicit MSR runtime dependency
Deadbytes101 Jul 7, 2026
edae33a
run MSR authority through packaged Python runtime
Deadbytes101 Jul 7, 2026
7425965
allow absent MSR device path before module load
Deadbytes101 Jul 7, 2026
12229b8
test reversible RandomX MSR authority
Deadbytes101 Jul 7, 2026
4d0363c
verify RandomX performance authority inside image
Deadbytes101 Jul 7, 2026
2c771ba
gate image build on RandomX authority tests
Deadbytes101 Jul 7, 2026
1489db7
use performance-gated image build entrypoint
Deadbytes101 Jul 7, 2026
60eb695
format RandomX MSR authority tests
Deadbytes101 Jul 7, 2026
528c4e4
preserve non-login builder entrypoint contract
Deadbytes101 Jul 7, 2026
afbda05
add RandomX MSR gate skeleton
Deadbytes101 Jul 7, 2026
ab77896
implement fail-closed RandomX MSR miner gate
Deadbytes101 Jul 7, 2026
2546994
run RandomX MSR gate without privileged hardware access
Deadbytes101 Jul 7, 2026
3b8d0f7
enforce RandomX MSR safety in existing miner gate
Deadbytes101 Jul 7, 2026
967a533
remove superseded standalone MSR gate
Deadbytes101 Jul 7, 2026
5340c49
test miner gate against RandomX MSR authority outcomes
Deadbytes101 Jul 7, 2026
5c5d62c
preserve synthetic miner-gate fixtures without weakening production M…
Deadbytes101 Jul 7, 2026
c84dee3
strengthen built-image RandomX authority verification
Deadbytes101 Jul 7, 2026
3b8f051
format MSR miner-gate denial assertion
Deadbytes101 Jul 8, 2026
810a1b0
enforce LF for USB version authority
Deadbytes101 Jul 8, 2026
4093cc9
read image version from exact Git blob
Deadbytes101 Jul 8, 2026
96ef72a
test exact Git version authority for performance build
Deadbytes101 Jul 8, 2026
cd5abcb
accept modular or built-in kernel MSR support
Deadbytes101 Jul 8, 2026
bb799c9
test modular and built-in kernel MSR image support
Deadbytes101 Jul 8, 2026
72d6b75
format kernel MSR verifier regression assertion
Deadbytes101 Jul 8, 2026
d85acbc
format kernel MSR verifier regression assertion
Deadbytes101 Jul 8, 2026
b0d50d9
fix pipefail false negative in MSR image verifier
Deadbytes101 Jul 8, 2026
abb7b4d
lock out quiet-grep pipefail false negatives
Deadbytes101 Jul 8, 2026
5281b25
run image verifier regression before USB build
Deadbytes101 Jul 8, 2026
c41c2ee
enable RandomX MSR authority in appliance image
Deadbytes101 Jul 8, 2026
de65630
test RandomX MSR authority image enablement
Deadbytes101 Jul 8, 2026
0cde0df
add persistent SSH host-key authority
Deadbytes101 Jul 8, 2026
6159763
wire persistent SSH host identity service
Deadbytes101 Jul 8, 2026
6f55ec1
point sshd at persistent host identity
Deadbytes101 Jul 8, 2026
15cb81b
make ssh require persistent host identity
Deadbytes101 Jul 8, 2026
1945ed7
extend state-ready ordering
Deadbytes101 Jul 8, 2026
169c086
enable persistent host-key authority in appliance
Deadbytes101 Jul 8, 2026
2ef593e
verify persistent host-key boot ordering
Deadbytes101 Jul 8, 2026
56cfbc6
use direct host-key authority entrypoint
Deadbytes101 Jul 8, 2026
940cdde
verify persistent SSH identity source contract
Deadbytes101 Jul 8, 2026
310d9d6
run SSH identity checks before image build
Deadbytes101 Jul 8, 2026
72d7df7
verify persistent SSH identity in exact image
Deadbytes101 Jul 8, 2026
546f929
correct host-key service entrypoint check
Deadbytes101 Jul 8, 2026
862d5b0
verify persistent SSH identity in appliance image
Deadbytes101 Jul 8, 2026
f473c2f
add loopback-only authenticated XMRig API authority
Deadbytes101 Jul 8, 2026
eb24ace
replace journal-only miner health with authenticated XMRig API evidence
Deadbytes101 Jul 8, 2026
3e0d64b
allow miner observer to query loopback XMRig API only
Deadbytes101 Jul 8, 2026
fdd43b7
test authenticated XMRig API health evidence
Deadbytes101 Jul 8, 2026
c89b2cb
run authenticated miner observer regression before image build
Deadbytes101 Jul 8, 2026
c1301af
add exact-image verifier for authenticated miner telemetry
Deadbytes101 Jul 8, 2026
adeb6fa
gate image build on authenticated miner observer verifier
Deadbytes101 Jul 8, 2026
943dbb3
keep xmrig api token outside render staging
Deadbytes101 Jul 8, 2026
db5da19
wire persistent xmrig api token authority
Deadbytes101 Jul 8, 2026
a995812
test runtime token publication across staging cleanup
Deadbytes101 Jul 8, 2026
4bfc023
gate image build on token publication regression
Deadbytes101 Jul 8, 2026
898aece
verify token publication in exact image
Deadbytes101 Jul 8, 2026
c6a4c50
derive pool connectivity from active connection evidence
Deadbytes101 Jul 8, 2026
9c49e02
test stale pool connection classification
Deadbytes101 Jul 8, 2026
885e427
gate build on active pool classification regression
Deadbytes101 Jul 8, 2026
b28e99b
verify active pool evidence in exact image
Deadbytes101 Jul 8, 2026
d593f81
require active pool before api ready state
Deadbytes101 Jul 8, 2026
2ebb4d0
test disconnected historical hashrate classification
Deadbytes101 Jul 8, 2026
13ce9f7
behaviorally verify observer state truth in image
Deadbytes101 Jul 8, 2026
2b67a29
classify journal fallback from latest evidence
Deadbytes101 Jul 8, 2026
f3e2c55
test ordered journal fallback evidence
Deadbytes101 Jul 8, 2026
3438768
gate build on ordered journal evidence regression
Deadbytes101 Jul 8, 2026
114bdcd
verify ordered journal fallback in exact image
Deadbytes101 Jul 8, 2026
432f9bc
use current 10 second hashrate as ready authority
Deadbytes101 Jul 8, 2026
715a08e
test current hashrate readiness authority
Deadbytes101 Jul 8, 2026
24f65b4
verify current hashrate authority in exact image
Deadbytes101 Jul 8, 2026
ba47ba1
fail closed on api authority errors
Deadbytes101 Jul 8, 2026
56ee101
test fail closed api authority errors
Deadbytes101 Jul 8, 2026
a5ad30f
gate build on api authority error regression
Deadbytes101 Jul 8, 2026
b50be0d
verify api authority errors fail closed in image
Deadbytes101 Jul 8, 2026
14ed885
add authoritative miner observer source gate
Deadbytes101 Jul 8, 2026
0f952cf
keep observer authority test clippy clean cross platform
Deadbytes101 Jul 8, 2026
5d3c1c9
run authoritative observer gate before image build
Deadbytes101 Jul 8, 2026
3a7a746
verify observer source gate is build mandatory
Deadbytes101 Jul 8, 2026
f88460a
reject fractional api counters
Deadbytes101 Jul 8, 2026
1155a5f
test strict xmrig api counter schema
Deadbytes101 Jul 8, 2026
45a411e
gate build on strict api schema regression
Deadbytes101 Jul 8, 2026
ad9f1c2
include strict api schema in observer authority
Deadbytes101 Jul 8, 2026
06caba5
verify strict api counter schema in image
Deadbytes101 Jul 8, 2026
13d4404
require integer uptime evidence
Deadbytes101 Jul 8, 2026
bdb2c28
test strict uptime schema
Deadbytes101 Jul 8, 2026
87839f0
verify strict uptime authority in image
Deadbytes101 Jul 8, 2026
55fec76
gate miner stability integration on unix
Deadbytes101 Jul 8, 2026
affbf57
gate runtime publication integration on unix
Deadbytes101 Jul 8, 2026
5df80c0
avoid windows-only unused permissions warning
Deadbytes101 Jul 8, 2026
201fa37
guard unix integration platform gates
Deadbytes101 Jul 8, 2026
27421dc
gate RandomX MSR integration on unix
Deadbytes101 Jul 8, 2026
12f6475
guard RandomX MSR Unix platform gate
Deadbytes101 Jul 8, 2026
b28aeee
document Windows and Linux source gate separation
Deadbytes101 Jul 8, 2026
f460391
format miner observer authority test
Deadbytes101 Jul 8, 2026
4b92ee9
add fail-closed WSL source gate launcher
Deadbytes101 Jul 8, 2026
9cc5d0a
test WSL source gate launcher contract
Deadbytes101 Jul 8, 2026
524eafb
document fail-closed WSL source verification
Deadbytes101 Jul 8, 2026
cd4d422
harden WSL source gate prerequisite checks
Deadbytes101 Jul 8, 2026
b0d6f2f
lock WSL tool and Rust component preflight
Deadbytes101 Jul 8, 2026
e0deca8
document complete WSL prerequisite preflight
Deadbytes101 Jul 8, 2026
f14d9ae
fix PowerShell script root resolution
Deadbytes101 Jul 8, 2026
d9d0da6
resolve observer test repository root at runtime
Deadbytes101 Jul 8, 2026
a867e35
make WSL launcher test relocation-safe
Deadbytes101 Jul 8, 2026
1c4097d
fix observer relocation regression assertion
Deadbytes101 Jul 8, 2026
8060bb3
fix WSL relocation regression assertion
Deadbytes101 Jul 8, 2026
568135e
preserve Windows paths across WSL transport
Deadbytes101 Jul 8, 2026
01b35d4
guard raw Windows path transport into WSL
Deadbytes101 Jul 8, 2026
b81f7c6
format relocation-safe observer authority test
Deadbytes101 Jul 8, 2026
64a16f8
add WSL source gate entrypoint
Deadbytes101 Jul 8, 2026
b4c2c21
use file entrypoint for WSL source gate
Deadbytes101 Jul 8, 2026
03df37b
test file-based WSL source gate transport
Deadbytes101 Jul 8, 2026
c11a15f
document file-based WSL gate transport
Deadbytes101 Jul 8, 2026
6aee41f
make state-ready ordering test semantic
Deadbytes101 Jul 8, 2026
cf2b95b
test exact runtime HTTP authority
Deadbytes101 Jul 8, 2026
a3bb28a
exercise miner stability through authenticated API
Deadbytes101 Jul 8, 2026
9e73cb7
isolate WSL Python bytecode artifacts
Deadbytes101 Jul 8, 2026
d0a041c
ignore Python bytecode artifacts
Deadbytes101 Jul 8, 2026
407d555
guard WSL pycache isolation
Deadbytes101 Jul 8, 2026
cb9e882
format authenticated miner stability integration
Deadbytes101 Jul 8, 2026
01a0840
lock lifecycle scripts to LF
Deadbytes101 Jul 8, 2026
695bbcd
mark lifecycle script LF contract
Deadbytes101 Jul 8, 2026
8741c9d
cover lifecycle LF and POSIX syntax
Deadbytes101 Jul 8, 2026
2b98c52
remove obsolete checkout literal from WSL gate test
Deadbytes101 Jul 8, 2026
4c8b4ac
remove obsolete namespace from Windows source gate docs
Deadbytes101 Jul 8, 2026
c239e9d
add token-aware runtime dependency scanner
Deadbytes101 Jul 8, 2026
d5ad663
test token-aware runtime dependency scan
Deadbytes101 Jul 8, 2026
ec2ce30
use token-aware runtime dependency scanner
Deadbytes101 Jul 8, 2026
01bf2c1
format runtime dependency scanner test
Deadbytes101 Jul 8, 2026
1ffb9be
execute runtime dependency scanner directly in tests
Deadbytes101 Jul 8, 2026
527fdbd
separate scanner from dependency scan fixture
Deadbytes101 Jul 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@
*.conf text eol=lf
*.ps1 text eol=crlf

build/usb/version.env text eol=lf
build/usb/hooks/* text eol=lf
build/usb/package-lists/rigos.list.chroot text eol=lf
build/usb/includes.chroot/usr/local/bin/* text eol=lf
build/usb/includes.chroot/usr/local/sbin/rigos-* text eol=lf
build/usb/includes.chroot/usr/lib/rigos/rigos-randomx-msr text eol=lf
build/usb/includes.chroot/usr/lib/rigos/rigos-runtime-* text eol=lf
build/usb/includes.chroot/usr/lib/rigos/rigos-miner-* text eol=lf
build/usb/includes.chroot/usr/lib/rigos/rigos-remote-* text eol=lf
build/usb/includes.chroot/usr/lib/rigos/rigos-lifecycle-* text eol=lf
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@
*.age.partial
*.pem
*.key
__pycache__/
*.py[cod]
2 changes: 1 addition & 1 deletion build/usb/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ RUN command -v cargo \
&& rustc --version

WORKDIR /source
ENTRYPOINT ["/bin/bash", "-c", "python3 ./scripts/check-alpha8-ssh-hotfix.py && exec ./scripts/build-usb-image.sh"]
ENTRYPOINT ["/bin/bash", "-c", "exec /bin/bash ./scripts/build-usb-image-entrypoint.sh"]
7 changes: 4 additions & 3 deletions build/usb/hooks/010-rigos.chroot
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ set -eu
useradd --system --home-dir /var/lib/rigos --shell /usr/sbin/nologin --user-group rigos
useradd --create-home --shell /bin/bash --groups sudo rigosadmin
passwd --lock rigosadmin
install -d -o rigos -g rigos -m 0750 /var/lib/rigos
install -d -o root -g rigos -m 0750 /var/lib/rigos
install -d -m 0755 /usr/lib/rigos /usr/local/bin
systemd-tmpfiles --create /usr/lib/tmpfiles.d/rigos.conf

chmod 0755 /usr/local/bin/rigosd /usr/local/bin/rigosctl /usr/local/sbin/rigos-firstboot /usr/local/sbin/rigos-recovery-access /usr/local/sbin/rigos-state-orchestrate /usr/lib/rigos/rigos-miner-gate /usr/lib/rigos/rigos-miner-health /usr/lib/rigos/rigos-runtime-render /usr/lib/rigos/rigos-runtime-publish /usr/lib/rigos/rigos-runtime-gate /usr/lib/rigos/rigos-state-init /usr/lib/rigos/rigos-state-ready /usr/lib/rigos/rigos-config /usr/lib/rigos/rigos-performance /usr/lib/rigos/rigos-lifecycle-cycles /usr/lib/rigos/rigos-identity-seed /usr/lib/rigos/xmrig
systemctl enable NetworkManager.service ssh.service rigos-state.service rigos-recovery-access.service rigos-state-ready.service rigos-profile-apply.service rigos-runtime-render.service rigos-hugepages.service rigos-firstboot.service rigos-miner.service rigos-miner-health.timer tmp.mount
rm -f /etc/ssh/ssh_host_*_key /etc/ssh/ssh_host_*_key.pub
chmod 0755 /usr/local/bin/rigosd /usr/local/bin/rigosctl /usr/local/sbin/rigos-firstboot /usr/local/sbin/rigos-recovery-access /usr/local/sbin/rigos-state-orchestrate /usr/lib/rigos/rigos-miner-gate /usr/lib/rigos/rigos-miner-health /usr/lib/rigos/rigos-runtime-render /usr/lib/rigos/rigos-runtime-publish /usr/lib/rigos/rigos-runtime-gate /usr/lib/rigos/rigos-randomx-msr /usr/lib/rigos/rigos-ssh-hostkeys /usr/lib/rigos/rigos-state-init /usr/lib/rigos/rigos-state-ready /usr/lib/rigos/rigos-config /usr/lib/rigos/rigos-performance /usr/lib/rigos/rigos-lifecycle-cycles /usr/lib/rigos/rigos-identity-seed /usr/lib/rigos/xmrig
systemctl enable NetworkManager.service ssh.service rigos-state.service rigos-recovery-access.service rigos-state-ready.service rigos-ssh-hostkeys.service rigos-profile-apply.service rigos-runtime-render.service rigos-hugepages.service rigos-firstboot.service rigos-randomx-msr.service rigos-miner.service rigos-miner-health.timer tmp.mount
systemctl disable ssh.socket 2>/dev/null || true
systemctl disable apt-daily.timer apt-daily-upgrade.timer logrotate.timer fstrim.timer 2>/dev/null || true
systemctl disable systemd-journald-audit.socket 2>/dev/null || true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
HostKey /var/lib/rigos/system/ssh-hostkeys/ssh_host_ed25519_key
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ ProtectSystem=strict
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictAddressFamilies=AF_UNIX
RestrictAddressFamilies=AF_UNIX AF_INET
IPAddressDeny=any
IPAddressAllow=127.0.0.0/8
RestrictNamespaces=yes
LockPersonality=yes
ReadWritePaths=/run/rigos
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[Unit]
Wants=rigos-randomx-msr.service
After=rigos-randomx-msr.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[Unit]
Description=Apply reversible RIGOS RandomX MSR optimization
After=rigos-state-ready.service rigos-profile-apply.service
Requires=rigos-state-ready.service rigos-profile-apply.service
Before=rigos-miner.service
ConditionArchitecture=x86-64
ConditionPathExists=/var/lib/rigos/current

[Service]
Type=oneshot
ExecStartPre=-/usr/sbin/modprobe msr
ExecStart=/usr/bin/python3 /usr/lib/rigos/rigos-randomx-msr apply
ExecStop=/usr/bin/python3 /usr/lib/rigos/rigos-randomx-msr restore
RemainAfterExit=yes
TimeoutStartSec=20s
TimeoutStopSec=20s
NoNewPrivileges=yes
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=strict
ProtectKernelTunables=yes
ProtectKernelModules=no
ProtectControlGroups=yes
RestrictAddressFamilies=AF_UNIX
RestrictNamespaces=yes
LockPersonality=yes
CapabilityBoundingSet=CAP_SYS_MODULE CAP_SYS_RAWIO
AmbientCapabilities=CAP_SYS_MODULE CAP_SYS_RAWIO
ReadWritePaths=/run/rigos -/dev/cpu

[Install]
WantedBy=multi-user.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[Unit]
Description=Establish persistent RIGOS SSH host identity
After=rigos-state-ready.service
Requires=rigos-state-ready.service
Before=ssh.service

[Service]
Type=oneshot
ExecStart=/usr/lib/rigos/rigos-ssh-hostkeys
RemainAfterExit=yes
UMask=0077
NoNewPrivileges=yes
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=strict
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictAddressFamilies=AF_UNIX
RestrictNamespaces=yes
LockPersonality=yes
ReadWritePaths=/var/lib/rigos /run/rigos

[Install]
WantedBy=multi-user.target
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Description=Verify RIGOS persistent state readiness
After=rigos-state.service rigos-recovery-access.service
Requires=rigos-state.service
Before=rigos-profile-apply.service rigos-firstboot.service rigos-hugepages.service rigos-miner.service
Before=rigos-ssh-hostkeys.service rigos-profile-apply.service rigos-firstboot.service rigos-hugepages.service rigos-miner.service

[Service]
Type=oneshot
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[Unit]
After=rigos-recovery-access.service
After=rigos-recovery-access.service rigos-ssh-hostkeys.service
Requires=rigos-ssh-hostkeys.service
Wants=rigos-remote-access-observe.service
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/bin/sh
# Repository contract: LF line endings are required for appliance execution.
set -eu

cycles="${1:-20}"
Expand Down
79 changes: 78 additions & 1 deletion build/usb/includes.chroot/usr/lib/rigos/rigos-miner-gate
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ import sys
from pathlib import Path

MAX_JSON_BYTES = 2 * 1024 * 1024
PRODUCTION_STATE = Path("/var/lib/rigos")
DEFAULT_MSR_STATUS = Path("/run/rigos/randomx-msr-status.json")
DEFAULT_MSR_STATE = Path("/run/rigos/randomx-msr-state.json")
DEFAULT_BOOT_ID = Path("/proc/sys/kernel/random/boot_id")
MSR_REGISTER = "0x00000000000001a4"
MSR_TARGET = "0x000000000000000f"


def emit(outcome: str, reason: str | None = None) -> None:
Expand Down Expand Up @@ -32,10 +38,71 @@ def deny(reason: str) -> int:
return 2


def validate_msr_authority(
status_path: Path,
state_path: Path,
boot_id_path: Path,
) -> str | None:
try:
status = read_object(status_path)
boot_id = boot_id_path.read_text(encoding="ascii").strip()
except (OSError, UnicodeError, ValueError, json.JSONDecodeError):
return "randomx_msr_status_unreadable"

if not boot_id:
return "randomx_msr_boot_id_unreadable"
if status.get("schema") != "rigos.randomx-msr-status/v1":
return "randomx_msr_status_schema_invalid"
if status.get("boot_id") != boot_id:
return "randomx_msr_status_stale"
if status.get("register") != MSR_REGISTER:
return "randomx_msr_register_invalid"
if status.get("target_value") != MSR_TARGET:
return "randomx_msr_target_invalid"

outcome = status.get("outcome")
if outcome == "ready":
if not state_path.exists():
return "randomx_msr_restore_state_missing"
return None

if outcome in {"unsupported", "unavailable"}:
if state_path.exists():
return "randomx_msr_baseline_has_mutation_state"
return None

if (
outcome == "degraded"
and status.get("reason") == "apply_failed_rolled_back"
and status.get("rollback") == {"attempted": True, "complete": True}
):
if state_path.exists():
return "randomx_msr_rollback_state_present"
return None

return "randomx_msr_authority_unsafe"


def resolve_msr_paths(args: argparse.Namespace) -> tuple[Path, Path, Path] | None:
supplied = (args.msr_status, args.msr_state, args.boot_id)
if any(value is not None for value in supplied):
if not all(value is not None for value in supplied):
raise ValueError("MSR fixture paths must be supplied together")
return args.msr_status, args.msr_state, args.boot_id

if args.state == PRODUCTION_STATE:
return DEFAULT_MSR_STATUS, DEFAULT_MSR_STATE, DEFAULT_BOOT_ID

return None


def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--state", type=Path, default=Path("/var/lib/rigos"))
parser.add_argument("--state", type=Path, default=PRODUCTION_STATE)
parser.add_argument("--cmdline", type=Path, default=Path("/proc/cmdline"))
parser.add_argument("--msr-status", type=Path)
parser.add_argument("--msr-state", type=Path)
parser.add_argument("--boot-id", type=Path)
args = parser.parse_args()

policy_path = args.state / "current" / "policy.json"
Expand Down Expand Up @@ -65,6 +132,16 @@ def main() -> int:
except (OSError, ValueError, json.JSONDecodeError):
return deny("xmrig_config_unreadable")

try:
msr_paths = resolve_msr_paths(args)
except ValueError:
return deny("randomx_msr_fixture_paths_incomplete")

if msr_paths is not None:
msr_reason = validate_msr_authority(*msr_paths)
if msr_reason is not None:
return deny(msr_reason)

emit("allowed")
return 0

Expand Down
Loading