mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-05-11 19:32:36 +02:00
668ce16dc7
Gate messages now propagate via the Infonet hashchain as encrypted blobs — every node syncs them through normal chain sync while only Gate members with MLS keys can decrypt. Added mesh reputation system, peer push workers, voluntary Wormhole opt-in for node participation, fork recovery, killwormhole scripts, obfuscated terminology, and hardened the self-updater to protect encryption keys and chain state during updates. New features: Shodan search, train tracking, Sentinel Hub imagery, 8 new intelligence layers, CCTV expansion to 11,000+ cameras across 6 countries, Mesh Terminal CLI, prediction markets, desktop-shell scaffold, and comprehensive mesh test suite (215 frontend + backend tests passing). Community contributors: @wa1id, @AlborzNazari, @adust09, @Xpirix, @imqdcr, @csysp, @suranyami, @chr0n1x, @johan-martensson, @singularfailure, @smithbh, @OrfeoTerkuci, @deuza, @tm-const, @Elhard1, @ttulttul
194 lines
5.7 KiB
Python
194 lines
5.7 KiB
Python
import base64
|
|
import json
|
|
|
|
import pytest
|
|
from cryptography.hazmat.primitives import serialization
|
|
from cryptography.hazmat.primitives.asymmetric import ed25519
|
|
|
|
from services.mesh.mesh_bootstrap_manifest import (
|
|
BOOTSTRAP_MANIFEST_VERSION,
|
|
BootstrapManifestError,
|
|
bootstrap_signer_public_key_b64,
|
|
build_bootstrap_manifest_payload,
|
|
generate_bootstrap_signer,
|
|
load_bootstrap_manifest,
|
|
write_signed_bootstrap_manifest,
|
|
)
|
|
from services.mesh.mesh_crypto import canonical_json
|
|
|
|
|
|
def _write_signed_manifest(
|
|
path,
|
|
*,
|
|
private_key,
|
|
peers,
|
|
issued_at=1_700_000_000,
|
|
valid_until=1_800_000_000,
|
|
signer_id="bootstrap-test",
|
|
):
|
|
payload = {
|
|
"version": BOOTSTRAP_MANIFEST_VERSION,
|
|
"issued_at": issued_at,
|
|
"valid_until": valid_until,
|
|
"signer_id": signer_id,
|
|
"peers": peers,
|
|
}
|
|
signature = base64.b64encode(private_key.sign(canonical_json(payload).encode("utf-8"))).decode("utf-8")
|
|
manifest = dict(payload)
|
|
manifest["signature"] = signature
|
|
path.write_text(json.dumps(manifest), encoding="utf-8")
|
|
return manifest
|
|
|
|
|
|
def test_load_bootstrap_manifest_roundtrip(tmp_path):
|
|
private_key = ed25519.Ed25519PrivateKey.generate()
|
|
public_key_b64 = base64.b64encode(
|
|
private_key.public_key().public_bytes(
|
|
serialization.Encoding.Raw,
|
|
serialization.PublicFormat.Raw,
|
|
)
|
|
).decode("utf-8")
|
|
manifest_path = tmp_path / "bootstrap.json"
|
|
_write_signed_manifest(
|
|
manifest_path,
|
|
private_key=private_key,
|
|
peers=[
|
|
{
|
|
"peer_url": "https://seed.example",
|
|
"transport": "clearnet",
|
|
"role": "seed",
|
|
"label": "Primary seed",
|
|
},
|
|
{
|
|
"peer_url": "http://alphaexample.onion",
|
|
"transport": "onion",
|
|
"role": "relay",
|
|
},
|
|
],
|
|
)
|
|
|
|
manifest = load_bootstrap_manifest(
|
|
manifest_path,
|
|
signer_public_key_b64=public_key_b64,
|
|
now=1_750_000_000,
|
|
)
|
|
|
|
assert manifest.signer_id == "bootstrap-test"
|
|
assert [peer.peer_url for peer in manifest.peers] == [
|
|
"https://seed.example",
|
|
"http://alphaexample.onion",
|
|
]
|
|
assert [peer.transport for peer in manifest.peers] == ["clearnet", "onion"]
|
|
|
|
|
|
def test_load_bootstrap_manifest_fails_on_tamper(tmp_path):
|
|
private_key = ed25519.Ed25519PrivateKey.generate()
|
|
public_key_b64 = base64.b64encode(
|
|
private_key.public_key().public_bytes(
|
|
serialization.Encoding.Raw,
|
|
serialization.PublicFormat.Raw,
|
|
)
|
|
).decode("utf-8")
|
|
manifest_path = tmp_path / "bootstrap.json"
|
|
manifest = _write_signed_manifest(
|
|
manifest_path,
|
|
private_key=private_key,
|
|
peers=[
|
|
{
|
|
"peer_url": "https://seed.example",
|
|
"transport": "clearnet",
|
|
"role": "seed",
|
|
}
|
|
],
|
|
)
|
|
manifest["peers"][0]["peer_url"] = "https://evil.example"
|
|
manifest_path.write_text(json.dumps(manifest), encoding="utf-8")
|
|
|
|
with pytest.raises(BootstrapManifestError, match="signature invalid"):
|
|
load_bootstrap_manifest(
|
|
manifest_path,
|
|
signer_public_key_b64=public_key_b64,
|
|
now=1_750_000_000,
|
|
)
|
|
|
|
|
|
def test_load_bootstrap_manifest_rejects_expired_manifest(tmp_path):
|
|
private_key = ed25519.Ed25519PrivateKey.generate()
|
|
public_key_b64 = base64.b64encode(
|
|
private_key.public_key().public_bytes(
|
|
serialization.Encoding.Raw,
|
|
serialization.PublicFormat.Raw,
|
|
)
|
|
).decode("utf-8")
|
|
manifest_path = tmp_path / "bootstrap.json"
|
|
_write_signed_manifest(
|
|
manifest_path,
|
|
private_key=private_key,
|
|
peers=[
|
|
{
|
|
"peer_url": "https://seed.example",
|
|
"transport": "clearnet",
|
|
"role": "seed",
|
|
}
|
|
],
|
|
issued_at=100,
|
|
valid_until=200,
|
|
)
|
|
|
|
with pytest.raises(BootstrapManifestError, match="expired"):
|
|
load_bootstrap_manifest(
|
|
manifest_path,
|
|
signer_public_key_b64=public_key_b64,
|
|
now=500,
|
|
)
|
|
|
|
|
|
def test_generate_bootstrap_signer_roundtrip():
|
|
signer = generate_bootstrap_signer()
|
|
assert signer["private_key_b64"]
|
|
assert signer["public_key_b64"]
|
|
assert bootstrap_signer_public_key_b64(signer["private_key_b64"]) == signer["public_key_b64"]
|
|
|
|
|
|
def test_write_signed_bootstrap_manifest_roundtrip(tmp_path):
|
|
signer = generate_bootstrap_signer()
|
|
manifest_path = tmp_path / "bootstrap.json"
|
|
|
|
manifest = write_signed_bootstrap_manifest(
|
|
manifest_path,
|
|
signer_id="seed-alpha",
|
|
signer_private_key_b64=signer["private_key_b64"],
|
|
peers=[
|
|
{
|
|
"peer_url": "https://seed.example",
|
|
"transport": "clearnet",
|
|
"role": "seed",
|
|
"label": "Primary seed",
|
|
}
|
|
],
|
|
valid_for_hours=24,
|
|
)
|
|
|
|
loaded = load_bootstrap_manifest(
|
|
manifest_path,
|
|
signer_public_key_b64=signer["public_key_b64"],
|
|
now=manifest.issued_at + 60,
|
|
)
|
|
|
|
assert loaded.signer_id == "seed-alpha"
|
|
assert [peer.peer_url for peer in loaded.peers] == ["https://seed.example"]
|
|
|
|
|
|
def test_build_bootstrap_manifest_payload_rejects_invalid_peers():
|
|
with pytest.raises(BootstrapManifestError, match="clearnet bootstrap peers must use https://"):
|
|
build_bootstrap_manifest_payload(
|
|
signer_id="seed-alpha",
|
|
peers=[
|
|
{
|
|
"peer_url": "http://seed.example",
|
|
"transport": "clearnet",
|
|
"role": "seed",
|
|
}
|
|
],
|
|
)
|