To attend:
# base4096_expander.py
# Recursive Base-4096 Encoder (MEGC symbolic expansion prototype)
import hashlib
import hmac
from base4096 import encode, decode
VERSION = b'\x02'
DOMAIN = b'MEGC-Recursive-Symbol'
EXPAND_SIZE = 384 # 256 Base-4096 characters
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def recursive_base4096_encode(data: bytes, depth: int = 3) -> str:
current = data
for i in range(depth):
# Encode current blob to base4096
encoded = encode(current)
# Fingerprint with SHA-256
digest = hashlib.sha256(encoded.encode('utf-8')).digest()
# Expand fingerprint recursively into entropy block
salt = hashlib.sha256(VERSION + DOMAIN + bytes([i])).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION + bytes([i]), EXPAND_SIZE)
# Base4096 encode the expanded blob as the new current
current = encode(expanded).encode('utf-8')
return current.decode('utf-8')
if __name__ == "__main__":
with open("input.bin", "rb") as f:
payload = f.read()
result = recursive_base4096_encode(payload, depth=3)
with open("recursive_encoded.b4096", "w", encoding="utf-8") as f:
f.write(result)
print("✅ Recursive Base-4096 encoding complete. Output written to 'recursive_encoded.b4096'")
# b4096x_encoder.py
# Recursive Base4096 Archive Encoder — ZCHG.org
import hashlib
import hmac
import json
import zlib
from base4096 import encode as b4096_encode, decode as b4096_decode
from base64 import urlsafe_b64encode, urlsafe_b64decode
from typing import List
# =======================
# Canonical Modus Operators
# =======================
def revbit(data: bytes) -> bytes:
return bytes(int('{:08b}'.format(b)[::-1], 2) for b in data)
def xor_stream(data: bytes, key: bytes) -> bytes:
return bytes([b ^ key[i % len(key)] for i, b in enumerate(data)])
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
output, prev, counter = b"", b"", 1
while len(output) < length:
prev = hmac.new(salt, prev + info + bytes([counter]), hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def compress_deflate(data: bytes) -> bytes:
return zlib.compress(data)
def decompress_deflate(data: bytes) -> bytes:
return zlib.decompress(data)
MODUS_REGISTRY = {
"mod.revbit": {
"apply": revbit,
"reverse": revbit
},
"mod.xor": {
"apply": lambda d, ctx: xor_stream(d, ctx["xor_key"]),
"reverse": lambda d, ctx: xor_stream(d, ctx["xor_key"])
},
"mod.hkdf384": {
"apply": lambda d, ctx: hkdf_expand_sha256(d, ctx["salt"], b"ZCHG-HKDF", 384),
"reverse": lambda d, ctx: d[:ctx["orig_len"]]
},
"mod.deflate": {
"apply": compress_deflate,
"reverse": decompress_deflate
}
}
# =======================
# Recursive Encoding
# =======================
def recursive_encode(payload: bytes, layers: List[str], seed: bytes) -> str:
context = {
"xor_key": hashlib.sha256(seed).digest(),
"salt": hashlib.sha256(b"ZCHG-SALT" + seed).digest(),
"orig_len": len(payload)
}
metadata_stack = []
for i, modus_id in enumerate(layers):
modus = MODUS_REGISTRY[modus_id]
context["depth"] = i + 1
payload = modus["apply"](payload, context) if modus_id.startswith("mod.") else payload
payload_b4096 = b4096_encode(payload)
metadata_stack.append({
"layer": i + 1,
"modus": modus_id,
"len": len(payload_b4096)
})
payload = payload_b4096.encode("utf-8")
envelope = {
"b4096x": {
"version": "1.0",
"stack": metadata_stack,
"payload": payload.decode("utf-8")
}
}
return json.dumps(envelope, indent=2)
# =======================
# Recursive Decoding
# =======================
def recursive_decode(json_blob: str, seed: bytes) -> bytes:
context = {
"xor_key": hashlib.sha256(seed).digest(),
"salt": hashlib.sha256(b"ZCHG-SALT" + seed).digest()
}
envelope = json.loads(json_blob)
stack = envelope["b4096x"]["stack"]
payload = envelope["b4096x"]["payload"].encode("utf-8")
for layer in reversed(stack):
modus_id = layer["modus"]
context["depth"] = layer["layer"]
decoded = b4096_decode(payload.decode("utf-8"))
modus = MODUS_REGISTRY[modus_id]
decoded = modus["reverse"](decoded, context) if modus_id.startswith("mod.") else decoded
payload = decoded
return payload
# =======================
# Example Usage
# =======================
if __name__ == "__main__":
seed = b"zchg.org canonical"
input_data = b"This is your recursive symbolic genome."
encoded = recursive_encode(input_data, ["mod.revbit", "mod.xor", "mod.hkdf384"], seed)
print("Encoded Envelope:\n", encoded)
decoded = recursive_decode(encoded, seed)
print("Decoded Output:\n", decoded.decode("utf-8"))
# b4096x_encoder.py
# Recursive Base-4096 Archive Encoder
import hashlib
import json
import zlib
from base4096 import encode as b4096_encode
from base4096 import decode as b4096_decode
from sign_base4096 import canonical_fingerprint
# --- Canonical Modus Operators ---
def mod_revbit(data: bytes) -> bytes:
return bytes(int(f"{b:08b}"[::-1], 2) for b in data)
def mod_xor(data: bytes, key: bytes = b'ZCHG') -> bytes:
return bytes(b ^ key[i % len(key)] for i, b in enumerate(data))
def mod_deflate(data: bytes) -> bytes:
return zlib.compress(data)
def mod_hkdf384(data: bytes) -> bytes:
# HKDF using SHA-256, 384-byte expansion
salt = hashlib.sha256(b'b4096x-v1').digest()
info = b'b4096x-mode-hkdf384'
output = b''
prev = b''
counter = 1
while len(output) < 384:
prev = hashlib.pbkdf2_hmac('sha256', prev + info + bytes([counter]), salt, 1)
output += prev
counter += 1
return output[:384]
MODS = {
"revbit": mod_revbit,
"xor": mod_xor,
"deflate": mod_deflate,
"hkdf384": mod_hkdf384
}
# --- Encoder ---
def encode_b4096x(data: bytes, mode_stack: list[str]) -> dict:
transformed = data
for mode in mode_stack:
mod_fn = MODS[mode]
transformed = mod_fn(transformed)
encoded = b4096_encode(transformed)
header = {
"version": 1,
"mode_stack": mode_stack,
"signature": canonical_fingerprint(encoded),
"payload_type": "binary",
"meta": {
"length": len(data),
"hash": hashlib.sha256(data).hexdigest(),
}
}
return {
"header": header,
"data": encoded
}
# --- Export ---
def export_b4096x(obj: dict, path: str):
with open(path, 'w', encoding='utf-8') as f:
json.dump(obj, f, ensure_ascii=False, indent=2)
# --- Test ---
if __name__ == "__main__":
raw = b"This is the core payload of b4096x."
stack = ["revbit", "xor", "deflate", "hkdf384"]
archive = encode_b4096x(raw, stack)
export_b4096x(archive, "test.b4096x")
print("✅ b4096x archive written to test.b4096x")
# b4096x_recursive_encoder.py
# Author: Josef Kulovany - ZCHG.org
# Recursive Base-4096 Encoder/Decoder with Canonical Modus Operators
import zlib
import hashlib
import hmac
from base4096 import encode, decode
MODES = ["revbit", "xor", "deflate", "hkdf384"]
# Reverse bits in each byte
def revbit(data):
return bytes(int(f'{b:08b}'[::-1], 2) for b in data)
def xor(data, key=b"ZCHGbase4096"):
keycycle = (key * ((len(data) // len(key)) + 1))[:len(data)]
return bytes(a ^ b for a, b in zip(data, keycycle))
def deflate(data):
return zlib.compress(data)
def inflate(data):
return zlib.decompress(data)
def hkdf384(data, salt=b"b4096x", info=b"ZCHG-expansion"):
out, prev = b"", b""
for i in range(1, 7): # 6 * 32 = 192 bytes = 1536 bits = 384 base4096 bits
prev = hmac.new(salt, prev + info + bytes([i]), hashlib.sha256).digest()
out += prev
return out[:384]
# Recursive encoder
def recursive_encode(data: bytes, layers: list) -> str:
for mode in layers:
if mode not in MODES:
raise ValueError(f"Unsupported mode: {mode}")
if mode == "revbit":
data = revbit(data)
elif mode == "xor":
data = xor(data)
elif mode == "deflate":
data = deflate(data)
elif mode == "hkdf384":
data = hkdf384(data)
return encode(data)
# Recursive decoder
def recursive_decode(encoded: str, layers: list) -> bytes:
data = decode(encoded)
for mode in reversed(layers):
if mode not in MODES:
raise ValueError(f"Unsupported mode: {mode}")
if mode == "revbit":
data = revbit(data)
elif mode == "xor":
data = xor(data)
elif mode == "deflate":
data = inflate(data)
elif mode == "hkdf384":
raise ValueError("hkdf384 is not reversible")
return data
if __name__ == "__main__":
sample = b"ZCHG Base4096 recursive encoding test."
modes = ["deflate", "xor", "revbit", "hkdf384"]
encoded = recursive_encode(sample, modes)
print("Encoded:", encoded)
decoded = recursive_decode(encoded, modes[:-1]) # Skip hkdf384
print("Decoded:", decoded)
assert sample in decoded, "Original sample not found in decoded output."
# recursive_base4096_archive.py
# Author: Josef Kulovany — ZCHG.org
# Canonical Recursive Base-4096 Archive Toolkit v1.0.0
import hashlib
import zlib
import hmac
from base4096 import encode, decode
# --- Canonical Modus Operators ---
def revbit(data: bytes) -> bytes:
return bytes(int(f"{b:08b}"[::-1], 2) for b in data)
def xor(data: bytes, key: bytes) -> bytes:
return bytes(b ^ key[i % len(key)] for i, b in enumerate(data))
def deflate(data: bytes) -> bytes:
return zlib.compress(data)
def inflate(data: bytes) -> bytes:
return zlib.decompress(data)
def hkdf384(data: bytes, salt: bytes, info: bytes = b"ZCHG-HKDF-Recursive") -> bytes:
out, prev = b"", b""
for i in range(1, 7): # 6 blocks × 64 bytes = 384
prev = hmac.new(salt, prev + info + bytes([i]), hashlib.sha256).digest()
out += prev
return out[:384]
# --- Recursive Encoding Stack ---
MODES = {
"revbit": revbit,
"xor": xor,
"deflate": deflate,
"hkdf384": hkdf384,
}
REVERSE_MODES = {
"revbit": revbit,
"xor": xor,
"inflate": inflate,
}
# --- Recursive Archive Packager ---
def recursive_encode(data: bytes, layers: list, key: bytes = b"zchg") -> str:
stack_info = []
for layer in layers:
if layer == "xor":
data = xor(data, key)
elif layer == "hkdf384":
data = hkdf384(data, salt=key)
else:
data = MODES[layer](data)
stack_info.append(layer)
payload = encode(data)
return "|".join(stack_info) + "||" + payload
def recursive_decode(encoded: str, key: bytes = b"zchg") -> bytes:
header, payload = encoded.split("||", 1)
layers = header.split("|")[::-1]
data = decode(payload)
for layer in layers:
if layer == "xor":
data = xor(data, key)
elif layer == "hkdf384":
print("⚠️ Irreversible layer 'hkdf384' reached. Returning current state.")
return data
else:
data = REVERSE_MODES[layer](data)
return data
# --- Usage Example ---
if __name__ == "__main__":
original = b"Hello, Recursive Base-4096 Archive World!"
layers = ["deflate", "xor", "revbit", "hkdf384"]
encoded = recursive_encode(original, layers)
print("\n🔐 ENCODED ARCHIVE:")
print(encoded)
decoded = recursive_decode(encoded)
print("\n📤 DECODED OUTPUT (partial):")
print(decoded)
# b4096r.py
# Canonical Base-4096 Recursive Archive Format Toolkit (v1.0)
import zlib, struct, hashlib, hmac
from base4096 import encode as b4096_encode, decode as b4096_decode
MAGIC = b"B4096R"
VERSION = b"\x01"
# Canonical Layer IDs
MOD_DEFLATE = 0x01
MOD_XORPAD = 0x02
MOD_REVERSE = 0x03
MOD_HKDF384 = 0x04
MOD_B4096 = 0x05
# -- Modus Operators --
def layer_deflate(data):
return zlib.compress(data)
def layer_inflate(data):
return zlib.decompress(data)
def layer_xorpad(data, key=b"ZCHG-XORPAD-KEY"):
pad = hashlib.sha256(key).digest()
return bytes([b ^ pad[i % len(pad)] for i, b in enumerate(data)])
def layer_reverse_bits(data):
return bytes([int('{:08b}'.format(b)[::-1], 2) for b in data])
# Irreversible entropy expansion
def layer_hkdf384(data):
salt = hashlib.sha256(b"ZCHG-SALT").digest()
info = b"ZCHG-Base4096r"
output = b""
prev = b""
counter = 1
while len(output) < 384:
prev = hmac.new(salt, prev + info + bytes([counter]), hashlib.sha256).digest()
output += prev
counter += 1
return output[:384]
# -- Encoder --
def encode_b4096r(data: bytes, layers: list[int]) -> str:
for lid in layers:
if lid == MOD_DEFLATE:
data = layer_deflate(data)
elif lid == MOD_XORPAD:
data = layer_xorpad(data)
elif lid == MOD_REVERSE:
data = layer_reverse_bits(data)
elif lid == MOD_HKDF384:
data = layer_hkdf384(data)
elif lid == MOD_B4096:
data = b4096_encode(data).encode("utf-8")
else:
raise ValueError(f"Unknown layer ID: {lid}")
header = MAGIC + VERSION + bytes([len(layers)]) + bytes(layers)
return b4096_encode(header + data)
# -- Decoder --
def decode_b4096r(b4096r_str: str) -> bytes:
raw = b4096_decode(b4096r_str)
if not raw.startswith(MAGIC + VERSION):
raise ValueError("Invalid archive header")
n = raw[6]
layers = list(raw[7:7+n])
payload = raw[7+n:]
# Reverse-apply
for lid in reversed(layers):
if lid == MOD_DEFLATE:
payload = layer_inflate(payload)
elif lid == MOD_XORPAD:
payload = layer_xorpad(payload)
elif lid == MOD_REVERSE:
payload = layer_reverse_bits(payload)
elif lid == MOD_HKDF384:
raise ValueError("Cannot reverse HKDF384 layer (entropy expansion)")
elif lid == MOD_B4096:
payload = b4096_decode(payload.decode("utf-8"))
else:
raise ValueError(f"Unknown layer ID: {lid}")
return payload
# Example usage
if __name__ == "__main__":
sample = b"Hello, Base-4096 Recursive World!"
layers = [MOD_DEFLATE, MOD_XORPAD, MOD_REVERSE, MOD_B4096]
encoded = encode_b4096r(sample, layers)
print("Encoded Archive:", encoded[:80] + "...")
decoded = decode_b4096r(encoded)
assert decoded == sample
print("✅ Round-trip successful.")
# recursive_signer.py
# Author: Josef Kulovany - ZCHG.org
# Recursive Base-4096 Signature Expansion System (Fixed Point Finder)
import hashlib
import hmac
from base4096 import encode # Assumes deterministic Base-4096 encoder already defined
VERSION = b'\x01'
DOMAIN = b'ZCHG-Recursive-Signature'
EXPAND_SIZE = 384 # 384 bytes = 256 Base-4096 characters
MAX_RECURSION_DEPTH = 256
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def recursive_fingerprint(seed: str) -> str:
seed_bytes = seed.encode("utf-8")
digest = hashlib.sha256(seed_bytes).digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
return encode(expanded)
def find_fixed_point_signature(seed: str, max_depth=MAX_RECURSION_DEPTH):
seen = set()
current = recursive_fingerprint(seed)
for depth in range(max_depth):
if current in seen:
raise ValueError("Cycle detected — no fixed point within max depth")
seen.add(current)
next_fp = recursive_fingerprint(current)
if next_fp == current:
print(f"✅ Fixed point reached at depth {depth}!")
return current
current = next_fp
raise TimeoutError("No fixed point found within recursion limit")
def emit_signature_block(fp_text: str, version="2", domain="ZCHG-Recursive-Signature") -> str:
lines = [fp_text[i:i+64] for i in range(0, len(fp_text), 64)]
return (
"---BEGIN BASE4096 SIGNATURE---\n"
f"Version: {version}\n"
f"Hash: SHA-256\n"
f"Domain: {domain}\n"
f"Length: {len(fp_text)}\n"
"Recursive-Fingerprint:\n" +
"\n".join(lines) +
"\n---END BASE4096 SIGNATURE---\n"
)
if __name__ == "__main__":
seed_input = input("Enter seed data (or frozen alphabet): ")
fixed_fp = find_fixed_point_signature(seed_input.strip())
print("\nFinal Signature Block:")
print(emit_signature_block(fixed_fp))
# base4096_chain.py
# Recursive Base-4096 Fingerprint Expander and Verifier
import hashlib
import hmac
from base4096 import encode, decode
VERSION = b'\x01'
DOMAIN = b'ZCHG-Base4096-Fingerprint'
EXPAND_SIZE = 384 # 384 bytes = 3072 bits = 256 Base4096 characters
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def base4096_fingerprint(source: bytes, version: bytes = VERSION, domain: bytes = DOMAIN) -> str:
digest = hashlib.sha256(source).digest()
salt = hashlib.sha256(version + domain).digest()
expanded = hkdf_expand_sha256(digest, salt, domain + version, EXPAND_SIZE)
return encode(expanded)
def recursive_fingerprint_chain(seed: bytes, depth: int = 3) -> list[str]:
chain = []
current = seed
for i in range(depth):
fp = base4096_fingerprint(current)
chain.append(fp)
current = fp.encode("utf-8")
return chain
def extract_short_identity(fp: str, bits: int = 48) -> str:
required_chars = (bits + 11) // 12 # round up for base4096 (12 bits/char)
return fp[:required_chars]
if __name__ == '__main__':
# Example: start with frozen alphabet file
with open("frozen_base4096_alphabet.txt", "r", encoding="utf-8") as f:
seed_text = f.read().replace("\n", "").encode("utf-8")
print("🔁 Generating recursive fingerprint chain (depth 3)...")
chain = recursive_fingerprint_chain(seed_text, depth=3)
for i, fp in enumerate(chain):
print(f"Level {i}: {extract_short_identity(fp, 96)}... [{len(fp)} chars]")
# Save full chain
with open("base4096_chain.sig4096", "w", encoding="utf-8") as f:
for i, fp in enumerate(chain):
f.write(f"---BEGIN BASE4096 CHAIN LEVEL {i}---\n")
for j in range(0, len(fp), 64):
f.write(fp[j:j+64] + "\n")
f.write(f"---END BASE4096 CHAIN LEVEL {i}---\n\n")
print("✅ Chain written to base4096_chain.sig4096")
# fpce4096.py
# Fixed-Point Collapse Encryption (FPCE) using Base4096 + HKDF + SHA256
import hashlib
import hmac
from base4096 import encode
# Parameters
VERSION = b'\x01'
DOMAIN = b'ZCHG-FPCE4096'
EXPAND_SIZE = 384 # Bytes = 3072 bits = 256 Base4096 characters
FIXED_LENGTH = 256 # Characters in Base4096 output
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def collapse_fpce(seed_text: str, rounds: int = 10, early_stop=True) -> str:
identity = seed_text.encode("utf-8")
previous = None
salt = hashlib.sha256(VERSION + DOMAIN).digest()
info = DOMAIN + VERSION
for round in range(rounds):
digest = hashlib.sha256(identity).digest()
expanded = hkdf_expand_sha256(digest, salt, info, EXPAND_SIZE)
fingerprint = encode(expanded)
if early_stop and fingerprint == previous:
print(f"✅ Fixed-point reached at round {round}.")
break
previous = fingerprint
identity = fingerprint.encode("utf-8")
return fingerprint
if __name__ == "__main__":
import sys
if len(sys.argv) != 2:
print("Usage: python fpce4096.py <input_string>")
sys.exit(1)
seed = sys.argv[1]
result = collapse_fpce(seed, rounds=32)
print("\n📌 Final Fixed-Point Fingerprint:\n")
for i in range(0, len(result), 64):
print(result[i:i+64])
# fpce4096.py
# Fixed-Point Collapse Encryption (FPCE) with Recursive Signing over Base-4096
import hashlib
import hmac
from base4096 import encode, decode
VERSION = b'\x01'
DOMAIN = b'ZCHG-FPCE4096'
EXPAND_SIZE = 384 # Base output for one round
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def canonical_fpce_round(data: bytes) -> str:
digest = hashlib.sha256(data).digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
return encode(expanded)
def fixed_point_fpce(input_text: str, max_depth=64) -> str:
state = input_text.encode("utf-8")
prev = None
history = set()
for depth in range(max_depth):
result = canonical_fpce_round(state)
if result in history or result == prev:
print(f"\u2705 Converged at depth {depth}")
return result
history.add(result)
prev = result
state = result.encode("utf-8")
raise RuntimeError("\u274C Failed to converge within max_depth")
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("Usage: python fpce4096.py \"your input\"")
sys.exit(1)
input_text = sys.argv[1]
fingerprint = fixed_point_fpce(input_text)
print("\n---BEGIN FPCE4096 FIXED POINT---")
print(fingerprint)
print("---END FPCE4096 FIXED POINT---")
# chain_fpce.py
# Chained Fixed-Point Collapse Encryption (FPCE)
# Author: Josef Kulovany - ZCHG.org
import hashlib
import hmac
import os
from base4096 import encode
VERSION = b'\x01'
DOMAIN = b'ZCHG-Base4096-Fingerprint'
EXPAND_SIZE = 384 # 256 Base-4096 characters
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def canonical_fingerprint(txt: str) -> str:
flattened = txt.replace("\n", "").encode("utf-8")
digest = hashlib.sha256(flattened).digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
result = encode(expanded)
assert len(result) == 256
return result
def chain_fpce(input_text: str, max_depth: int = 6):
history = set()
chain = []
current = input_text.replace("\n", "")
for i in range(max_depth):
fp = canonical_fingerprint(current)
if fp in history:
print(f"Fixed point reached at depth {i}")
break
chain.append(fp)
history.add(fp)
current = fp
return chain
def emit_chain_file(chain, output_path):
with open(output_path, "w", encoding="utf-8") as f:
f.write("---BEGIN BASE4096 CHAIN SIGNATURE---\n")
f.write(f"Depth: {len(chain)}\n")
f.write(f"Hash: SHA-256\n")
f.write(f"Domain: ZCHG-Base4096-Fingerprint\n")
for i, fp in enumerate(chain):
f.write(f"\n-- Layer {i+1} --\n")
for j in range(0, len(fp), 64):
f.write(fp[j:j+64] + "\n")
f.write("---END BASE4096 CHAIN SIGNATURE---\n")
print(f"✅ Chain written to {output_path}")
if __name__ == "__main__":
with open("frozen_base4096_alphabet.txt", "r", encoding="utf-8") as f:
initial = f.read()
chain = chain_fpce(initial, max_depth=6)
emit_chain_file(chain, "base4096.sig4096.chain")
# recursive_genome_fpce.py
# Symbolic Recursive Genome Tree using Chained Fixed-Point Collapse Encryption (FPCE)
# Author: Josef Kulovany - ZCHG.org
import hashlib
import hmac
from typing import List, Optional, Dict, Tuple
from base4096 import encode
VERSION = b'\x01'
DOMAIN = b'ZCHG-Base4096-Fingerprint'
EXPAND_SIZE = 384 # 256 base4096 characters
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def canonical_fingerprint_fpce(data: bytes, mode: Optional[str], child_fps: List[str]) -> str:
m = hashlib.sha256()
m.update(data)
if mode:
m.update(mode.encode('utf-8'))
for fp in sorted(child_fps):
m.update(fp.encode('utf-8'))
digest = m.digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
return encode(expanded) # 256 base4096 characters
class GenomeNode:
def __init__(
self,
data: bytes,
mode: Optional[str] = None,
children: Optional[List['GenomeNode']] = None
):
self.data = data
self.mode = mode
self.children = children or []
self._fingerprint = None
@property
def fingerprint(self) -> str:
if self._fingerprint is None:
child_fps = [c.fingerprint for c in self.children]
self._fingerprint = canonical_fingerprint_fpce(self.data, self.mode, child_fps)
return self._fingerprint
class SymbolicGenomeStore:
def __init__(self):
self.store: Dict[str, GenomeNode] = {}
def add_node(self, node: GenomeNode):
fp = node.fingerprint
if fp not in self.store:
self.store[fp] = node
def get_node(self, fingerprint: str) -> GenomeNode:
return self.store[fingerprint]
merge_cache: Dict[Tuple[str, str], str] = {}
def symbolic_merge(fp_a: str, fp_b: str, store: SymbolicGenomeStore, depth=0, max_depth=1000) -> str:
if depth > max_depth:
raise RecursionError("Max depth exceeded")
key = tuple(sorted((fp_a, fp_b)))
if key in merge_cache:
return merge_cache[key]
node_a = store.get_node(fp_a)
node_b = store.get_node(fp_b)
if fp_a == fp_b:
merge_cache[key] = fp_a
return fp_a
# Merge children by unique union
all_children = {c.fingerprint: c for c in node_a.children + node_b.children}
merged_children = list(all_children.values())
merged_node = GenomeNode(
data=node_a.data,
mode=node_a.mode or node_b.mode,
children=merged_children
)
store.add_node(merged_node)
merge_cache[key] = merged_node.fingerprint
return merged_node.fingerprint
def traverse_tree(fp: str, store: SymbolicGenomeStore, depth=0, max_depth=5, visited=None):
if visited is None:
visited = set()
indent = ' ' * depth
if fp in visited:
print(f"{indent}(loop to {fp[:8]}...)")
return
visited.add(fp)
node = store.get_node(fp)
print(f"{indent}- Node {fp[:8]} mode={node.mode} data_len={len(node.data)}")
if depth >= max_depth:
print(f"{indent} ... max depth")
return
for child in node.children:
traverse_tree(child.fingerprint, store, depth + 1, max_depth, visited)
if __name__ == "__main__":
store = SymbolicGenomeStore()
leaf = GenomeNode(b"leaf", mode="L")
store.add_node(leaf)
recursive = GenomeNode(b"self", mode="R", children=[leaf])
recursive.children.append(recursive) # symbolic self-reference
store.add_node(recursive)
peer = GenomeNode(b"peer", mode="P", children=[leaf])
store.add_node(peer)
merged_fp = symbolic_merge(recursive.fingerprint, peer.fingerprint, store)
print("Merged Fingerprint:", merged_fp[:64])
print("\nTraverse Merged Tree:")
traverse_tree(merged_fp, store)
# symbolic_vm.py
# Author: Josef Kulovany - ZCHG.org
# Symbol512 Recursive Compiler + Virtual Machine
import hashlib
import hmac
from base4096 import encode, decode
VERSION = b'\x03'
DOMAIN = b'ZCHG-Symbol512-VM'
EXPAND_SIZE = 512 # 512-bit symbol = ~43 base4096 chars
# === Core Symbol Encoding ===
def hkdf_expand_sha512(seed: bytes, salt: bytes, info: bytes, length: int = 64) -> bytes:
out, prev = b"", b""
for i in range(1, (length // 32) + 3):
prev = hmac.new(salt, prev + info + bytes([i]), hashlib.sha256).digest()
out += prev
return out[:length]
def symbol512(input_text: str) -> str:
digest = hashlib.sha512(input_text.encode()).digest()[:32]
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha512(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
return encode(expanded)[:43] # Base4096 symbol
# === Symbolic Compiler (Human -> Symbol Tree) ===
def compile_script(lines: list) -> list:
return [symbol512(line) for line in lines if line.strip() and not line.strip().startswith("#")]
# === Symbolic Hypergraph Tree Merging ===
def merge_symbols(symbols: list) -> str:
joined = "".join(symbols).encode()
digest = hashlib.sha512(joined).digest()[:32]
salt = hashlib.sha256(b"MERGE" + DOMAIN).digest()
merged = hkdf_expand_sha512(digest, salt, DOMAIN + b"-MERGED", EXPAND_SIZE)
return encode(merged)[:43]
# === Virtual Machine Execution ===
def interpret(symbols: list):
for i, sym in enumerate(symbols):
print(f"\n[Layer {i+1}] Executing symbol universe:")
expanded = decode(sym)
digest = hashlib.sha256(expanded).hexdigest()
print(f" Symbol[{i}] = {sym}")
print(f" SHA-256(entropy) = {digest}")
print(f" First 16 bytes (preview): {expanded[:16].hex()}")
# === Example Entry ===
if __name__ == "__main__":
sample_script = [
"SET x = 42",
"INCREMENT x",
"IF x > 100 GOTO END",
"LOOP x TIMES",
"END"
]
compiled = compile_script(sample_script)
print("\n🛠️ Compiled Symbols:")
for sym in compiled:
print(sym)
print("\n🔗 Merged Hypergraph Symbol:")
merged = merge_symbols(compiled)
print(merged)
interpret([merged])
# symbol512_transcompiler.py
# Author: Josef Kulovany - ZCHG.org
# Transcompiler: Human ↔ Symbol512 ↔ Execution
import hashlib
import hmac
import zlib
from base4096 import encode, decode
VERSION = b'\x01'
DOMAIN = b'ZCHG-Symbol512-Transcompiler'
EXPAND_SIZE = 384 # 384 bytes → 512 Base4096 characters
# Language mappings
SYMBOL_LANGUAGE = {
"NOP": b"noop",
"ADD": b"add",
"SUB": b"sub",
"MUL": b"mul",
"DIV": b"div",
"PUSH": b"push",
"POP": b"pop",
"CALL": b"call",
"RET": b"ret",
"RECURSE": b"recurse",
"PRINT": b"print",
"ASSERT": b"assert",
"HALT": b"halt",
}
# Reverse map
REVERSE_SYMBOL_LANGUAGE = {v: k for k, v in SYMBOL_LANGUAGE.items()}
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def compile_to_symbol512(program: str) -> str:
lines = program.strip().splitlines()
binary = b"\n".join([SYMBOL_LANGUAGE.get(line.strip().split()[0].upper(), b"nop") + b" " + b" ".join(word.encode() for word in line.strip().split()[1:]) for line in lines])
digest = hashlib.sha256(binary).digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
return encode(expanded)
def decode_symbol512(symbol: str) -> str:
decoded_bytes = decode(symbol)
commands = []
for i in range(0, len(decoded_bytes), 16):
chunk = decoded_bytes[i:i+16].rstrip(b"\x00")
if not chunk:
continue
parts = chunk.split(b" ", 1)
op = parts[0].strip()
args = parts[1:] if len(parts) > 1 else []
command = REVERSE_SYMBOL_LANGUAGE.get(op, "NOP")
commands.append(f"{command} {' '.join(arg.decode(errors='ignore') for arg in args)}")
return "\n".join(commands)
# Example usage
if __name__ == "__main__":
code = """
PUSH 5
PUSH 10
ADD
PRINT
HALT
"""
print("Human Code:")
print(code)
symbol = compile_to_symbol512(code)
print("\nEncoded Symbol512:")
print(symbol)
decoded = decode_symbol512(symbol)
print("\nDecoded Back to Human Code:")
print(decoded)
# symbolic_vm_transcompiler.py
# Transcompiler between human-readable instructions and Symbol512 code
# Author: Josef Kulovany - ZCHG.org
import hashlib
import hmac
from base4096 import encode, decode
# Constants
VERSION = b'\x01'
DOMAIN = b'Symbol512-Recursive-VM'
EXPAND_BITS = 512 # bits per symbol
EXPAND_BYTES = EXPAND_BITS // 8
# Base operator map (can be expanded)
OPCODES = {
'NOP': b'\x00',
'PUSH': b'\x01',
'POP': b'\x02',
'ADD': b'\x03',
'SUB': b'\x04',
'MUL': b'\x05',
'DIV': b'\x06',
'PRINT': b'\x07',
'HALT': b'\xFF'
}
# Inverse map
OPCODES_INV = {v: k for k, v in OPCODES.items()}
def canonical_expand(data: bytes, salt: bytes, info: bytes, length: int) -> bytes:
out, prev = b"", b""
for i in range(1, (length // 32) + 2):
prev = hmac.new(salt, prev + info + bytes([i]), hashlib.sha256).digest()
out += prev
return out[:length]
def human_to_symbol(instructions: list[str]) -> str:
"""Compile human-readable ops into Symbol512 fingerprint"""
bytecode = b""
for instr in instructions:
parts = instr.strip().split()
op = parts[0].upper()
bytecode += OPCODES[op]
if len(parts) > 1:
arg = int(parts[1]).to_bytes(4, 'big') # Expand later
bytecode += arg
digest = hashlib.sha256(bytecode).digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = canonical_expand(digest, salt, DOMAIN + VERSION, EXPAND_BYTES)
return encode(expanded)
def symbol_to_human(symbol_code: str) -> list[str]:
"""Decompile Symbol512 fingerprint into human-readable instructions (best-effort)"""
raw = decode(symbol_code)
approx_bytes = raw[:32] # reverse SHA-256 input isn't precise, so stub
ptr = 0
instructions = []
while ptr < len(approx_bytes):
opcode = approx_bytes[ptr:ptr+1]
ptr += 1
name = OPCODES_INV.get(opcode, f'UNK_{opcode.hex()}')
if name == 'PUSH':
val = int.from_bytes(approx_bytes[ptr:ptr+4], 'big')
ptr += 4
instructions.append(f'PUSH {val}')
else:
instructions.append(name)
return instructions
if __name__ == "__main__":
sample = ["PUSH 42", "PUSH 17", "ADD", "PRINT", "HALT"]
print("Original:", sample)
encoded = human_to_symbol(sample)
print("Encoded Symbol512:", encoded)
recovered = symbol_to_human(encoded)
print("Recovered:", recovered)
# symbol_program_compiler.py
# Author: Josef Kulovany - ZCHG.org
# Compiles human-readable SymbolPrograms into SymbolNodes for the SymbolVM
import hashlib
import hmac
from base4096 import encode
from symbol_vm_core import SymbolNode, SymbolHypergraph, derive_gradient_operator
SYMBOL_BIT_LENGTH = 512 # Each Symbol encodes 512 bits (64 bytes)
DOMAIN = b"ZCHG-SymbolProgram"
VERSION = b"\x01"
def symbol_hash(data: bytes) -> str:
"""Hashes and encodes 512-bit symbol from source data."""
digest = hashlib.sha512(data).digest() # 64 bytes
return encode(digest) # Base4096 representation
def compile_symbol_program(lines):
"""
Compiles a human-readable SymbolProgram into a hypergraph of SymbolNodes.
Each line defines a symbolic instruction or identity with optional children.
Example input:
LOAD $a
ADD $a, $b
IF $a > $b THEN JUMP label1
label1:
HALT
"""
graph = SymbolHypergraph()
label_map = {}
node_chain = []
for idx, line in enumerate(lines):
stripped = line.strip()
if not stripped:
continue
if stripped.endswith(":"):
label = stripped[:-1]
label_map[label] = len(node_chain)
continue
symbol_bits = hashlib.sha512(stripped.encode()).digest()
symbol_encoded = encode(symbol_bits)
gradient = derive_gradient_operator(symbol_bits, idx)
node = SymbolNode(symbol512=symbol_encoded, gradient_op=[gradient], metadata={"source": stripped})
graph.add_node(node)
node_chain.append(symbol_encoded)
# Connect to previous
if len(node_chain) > 1:
graph.connect(node_chain[-2], node_chain[-1], condition=gradient)
# Post-process labels for jump resolution
for node_id in node_chain:
node = graph.nodes[node_id]
src = node.metadata.get("source", "")
if "JUMP" in src:
parts = src.split()
if "JUMP" in parts:
idx = parts.index("JUMP")
if idx + 1 < len(parts):
label = parts[idx + 1]
if label in label_map:
dest_sym = node_chain[label_map[label]]
graph.connect(node.symbol512, dest_sym, condition="JUMP")
return graph
if __name__ == "__main__":
program = [
"LOAD $a",
"LOAD $b",
"ADD $a, $b",
"IF $a > $b THEN JUMP end",
"MUL $a, 2",
"end:",
"HALT"
]
sym_graph = compile_symbol_program(program)
print(f"Compiled {len(sym_graph.nodes)} symbols into graph.")
for sym in sym_graph.nodes:
print("Symbol:", sym, "→ Gradient:", sym_graph.nodes[sym].gradient_op)
# symbolvm_engine.py
# Author: Josef Kulovany - ZCHG.org
# SymbolVM Execution Engine + Hypergraph Visual Debugger
import hashlib
import hmac
import networkx as nx
import matplotlib.pyplot as plt
from base4096 import encode, decode
# --- Symbol Utilities ---
VERSION = b"\x01"
DOMAIN = b"ZCHG-Symbol512"
EXPAND_BITS = 512
EXPAND_BYTES = EXPAND_BITS // 8
def symbol_hash(payload: bytes) -> bytes:
salt = hashlib.sha256(VERSION + DOMAIN).digest()
return hmac.new(salt, payload, hashlib.sha512).digest()[:EXPAND_BYTES]
def symbol_encode(payload: bytes) -> str:
return encode(payload)
def symbol_decode(encoded: str) -> bytes:
return decode(encoded)
# --- SymbolVM Program Node ---
class SymbolNode:
def __init__(self, label, payload, operator=None):
self.label = label
self.payload = payload # raw string or bytes
self.operator = operator or "id"
self.children = [] # sub-symbols (edges)
self.encoded = symbol_encode(symbol_hash(payload.encode() if isinstance(payload, str) else payload))
def add_child(self, child_node):
self.children.append(child_node)
def __repr__(self):
return f"SymbolNode(label={self.label}, op={self.operator}, symbol={self.encoded[:10]}...)"
# --- SymbolVM Hypergraph Compiler ---
def compile_to_symbol_graph(source_code: str):
lines = [l.strip() for l in source_code.splitlines() if l.strip() and not l.strip().startswith("#")]
root = SymbolNode("root", "program")
last_node = root
for line in lines:
if line.startswith("=>"):
# define operator chain
op = line[2:].strip()
op_node = SymbolNode(f"op:{op}", op.encode(), operator=op)
last_node.add_child(op_node)
last_node = op_node
else:
node = SymbolNode(f"stmt:{line[:10]}", line)
last_node.add_child(node)
return root
# --- SymbolVM Executor ---
def execute_symbol_tree(node: SymbolNode, depth=0):
indent = " " * depth
print(f"{indent}- Executing {node.label} [{node.operator}]")
if node.operator == "id":
pass # Identity operator, do nothing
elif node.operator == "print":
print(f"{indent} Output: {node.payload}")
# TODO: Add gradient/op lookup logic
for child in node.children:
execute_symbol_tree(child, depth + 1)
# --- Visual Debugger ---
def visualize_symbol_tree(root: SymbolNode):
G = nx.DiGraph()
labels = {}
def walk(node, parent_id=None):
node_id = id(node)
labels[node_id] = f"{node.label}\n{node.operator}"
G.add_node(node_id)
if parent_id:
G.add_edge(parent_id, node_id)
for child in node.children:
walk(child, node_id)
walk(root)
pos = nx.spring_layout(G, seed=42)
plt.figure(figsize=(12, 8))
nx.draw(G, pos, with_labels=False, arrows=True, node_color="#ddf", node_size=1500)
nx.draw_networkx_labels(G, pos, labels)
plt.title("SymbolVM Hypergraph Debug View")
plt.show()
# --- Example Program ---
if __name__ == "__main__":
program = """
=> print
Hello from SymbolVM
=> print
Another instruction
"""
root_node = compile_to_symbol_graph(program)
print("\n--- EXECUTION ---")
execute_symbol_tree(root_node)
print("\n--- VISUALIZATION ---")
visualize_symbol_tree(root_node)
# Native symbolic editor + FPCE signing, loading, and base4096 serialization
# Dependencies: tkinter (for UI), base4096.py must implement encode()/decode() for Base-4096 encoding
import json
import hashlib
import hmac
import tkinter as tk
from tkinter import simpledialog
import math
from base4096 import encode, decode # You must provide this implementation
VERSION = b'\x01'
DOMAIN = b'ZCHG-Base4096-Fingerprint'
EXPAND_SIZE = 384 # 256 base4096 characters
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def canonical_fingerprint(txt: str) -> str:
flattened = txt.replace("\n", "").encode("utf-8")
digest = hashlib.sha256(flattened).digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
result = encode(expanded)
assert len(result) == 256
return result
class SymbolNode:
def __init__(self, symbol, x=0, y=0, color='lightblue'):
self.symbol = symbol
self.x = x
self.y = y
self.color = color
self.edges = []
def add_edge(self, node):
if node not in self.edges:
self.edges.append(node)
class HypergraphVMEditor(tk.Tk):
NODE_RADIUS = 20
def __init__(self):
super().__init__()
self.title("Symbolic Hypergraph VM Editor with FPCE")
self.geometry("1000x700")
self.canvas = tk.Canvas(self, bg="white")
self.canvas.pack(fill=tk.BOTH, expand=True)
self.nodes = []
self.selected_node = None
self.dragging = False
self.build_sample_graph()
self.layout_nodes()
self.draw_graph()
self.canvas.bind("<ButtonPress-1>", self.on_click)
self.canvas.bind("<ButtonRelease-1>", self.on_release)
self.canvas.bind("<B1-Motion>", self.on_drag)
self.canvas.bind("<Double-1>", self.on_double_click)
def build_sample_graph(self):
for i, sym in enumerate('ABCDE'):
node = SymbolNode(sym)
self.nodes.append(node)
self.nodes[0].add_edge(self.nodes[1])
self.nodes[0].add_edge(self.nodes[2])
self.nodes[1].add_edge(self.nodes[3])
self.nodes[2].add_edge(self.nodes[4])
def layout_nodes(self):
n = len(self.nodes)
cx, cy = 500, 350
r = 200
for i, node in enumerate(self.nodes):
angle = 2 * math.pi * i / n
node.x = cx + r * math.cos(angle)
node.y = cy + r * math.sin(angle)
def draw_graph(self):
self.canvas.delete("all")
for node in self.nodes:
for target in node.edges:
self.canvas.create_line(node.x, node.y, target.x, target.y, fill='black', width=2)
for node in self.nodes:
self.canvas.create_oval(
node.x - self.NODE_RADIUS,
node.y - self.NODE_RADIUS,
node.x + self.NODE_RADIUS,
node.y + self.NODE_RADIUS,
fill=node.color, outline='black', width=2)
self.canvas.create_text(node.x, node.y, text=node.symbol, font=("Consolas", 20))
def find_node_at(self, x, y):
for node in self.nodes:
dx = x - node.x
dy = y - node.y
if dx * dx + dy * dy <= self.NODE_RADIUS ** 2:
return node
return None
def on_click(self, event):
node = self.find_node_at(event.x, event.y)
if node:
self.selected_node = node
self.dragging = True
self.offset_x = node.x - event.x
self.offset_y = node.y - event.y
else:
self.selected_node = None
def on_release(self, event):
self.dragging = False
def on_drag(self, event):
if self.dragging and self.selected_node:
self.selected_node.x = event.x + self.offset_x
self.selected_node.y = event.y + self.offset_y
self.draw_graph()
def on_double_click(self, event):
node = self.find_node_at(event.x, event.y)
if node:
new_sym = simpledialog.askstring("Edit Symbol", "Enter new Base4096 symbol:", initialvalue=node.symbol)
if new_sym and len(new_sym) == 1:
node.symbol = new_sym
self.draw_graph()
def serialize_graph(self):
id_map = {node: idx for idx, node in enumerate(self.nodes)}
serialized_nodes = []
for node in self.nodes:
node_dict = {
'id': id_map[node],
'symbol': node.symbol,
'x': node.x,
'y': node.y,
'color': node.color,
'edges': [id_map[edge] for edge in node.edges],
}
serialized_nodes.append(node_dict)
graph_dict = {
'nodes': serialized_nodes,
'version': 1,
'description': "Symbolic Hypergraph with FPCE signature",
}
return json.dumps(graph_dict, separators=(',', ':'))
def save_graph_to_file(self, filename):
json_str = self.serialize_graph()
fpce_signature = canonical_fingerprint(json_str)
encoded_graph = encode(json_str.encode('utf-8'))
with open(filename, 'w', encoding='utf-8') as f:
f.write("---BEGIN SYMBOLIC HYPERGRAPH FPCE FILE---\n")
f.write(f"Signature: {fpce_signature}\n")
f.write(f"Encoded-Length: {len(encoded_graph)}\n\n")
f.write(encoded_graph)
f.write("\n---END SYMBOLIC HYPERGRAPH FPCE FILE---\n")
print(f"Graph saved with FPCE signature to {filename}")
def load_graph_from_file(self, filename):
with open(filename, 'r', encoding='utf-8') as f:
lines = f.read().splitlines()
if lines[0] != "---BEGIN SYMBOLIC HYPERGRAPH FPCE FILE---" or lines[-1] != "---END SYMBOLIC HYPERGRAPH FPCE FILE---":
raise ValueError("Invalid file format")
signature = lines[1].split(":", 1)[1].strip()
encoded_length = int(lines[2].split(":", 1)[1].strip())
encoded_graph = ''.join(lines[4:-1])
if len(encoded_graph) != encoded_length:
raise ValueError("Encoded length mismatch")
json_bytes = decode(encoded_graph)
json_str = json_bytes.decode('utf-8')
computed_signature = canonical_fingerprint(json_str)
if computed_signature != signature:
raise ValueError("FPCE signature mismatch! File may be corrupted.")
graph_dict = json.loads(json_str)
self.nodes.clear()
node_map = {}
for node_dict in graph_dict['nodes']:
node = SymbolNode(node_dict['symbol'], node_dict['x'], node_dict['y'], node_dict['color'])
node_map[node_dict['id']] = node
self.nodes.append(node)
for node_dict in graph_dict['nodes']:
node = node_map[node_dict['id']]
for edge_id in node_dict['edges']:
node.add_edge(node_map[edge_id])
self.draw_graph()
print(f"Graph loaded successfully from {filename}")
if __name__ == "__main__":
app = HypergraphVMEditor()
button_frame = tk.Frame(app)
button_frame.pack(side=tk.BOTTOM, fill=tk.X)
save_btn = tk.Button(button_frame, text="Save Graph with FPCE", command=lambda: app.save_graph_to_file("saved_hypergraph.fpce"))
save_btn.pack(side=tk.LEFT, padx=5, pady=5)
load_btn = tk.Button(button_frame, text="Load Graph with FPCE", command=lambda: app.load_graph_from_file("saved_hypergraph.fpce"))
load_btn.pack(side=tk.LEFT, padx=5, pady=5)
app.mainloop()
# symbolvm_fpce_engine.py
# Author: Josef Kulovany - ZCHG.org
# Fully integrated SymbolVM execution engine with Base4096 + FPCE signing
import hashlib
import hmac
import zlib
import json
from typing import List, Dict, Optional
from base4096 import encode as b4096e, decode as b4096d
VERSION = b'\x01'
DOMAIN = b'ZCHG-SymbolVM'
EXPAND_SIZE = 384 # 256 base4096 characters
# ---------- Symbol Definitions ----------
class Symbol:
def __init__(self, id: str, code: str, refs: Optional[List[str]] = None):
self.id = id
self.code = code # could be lambda, expression, opcode, etc.
self.refs = refs or []
def execute(self, context: Dict[str, 'Symbol'], stack: List[str]) -> str:
stack.append(self.id)
try:
if self.code.startswith('lit:'):
return self.code[4:]
elif self.code.startswith('sym:'):
ref_id = self.code[4:]
return context[ref_id].execute(context, stack)
elif self.code.startswith('cat:'):
parts = [context[r].execute(context, stack) for r in self.refs]
return ''.join(parts)
else:
return self.code # raw code fallback
finally:
stack.pop()
# ---------- FPCE Signing ----------
def hkdf_expand_sha256(secret: bytes, salt: bytes, info: bytes, length: int) -> bytes:
blocks = []
output = b''
prev = b''
counter = 1
while len(output) < length:
data = prev + info + bytes([counter])
prev = hmac.new(salt, data, hashlib.sha256).digest()
output += prev
counter += 1
return output[:length]
def fpce_sign(payload: str) -> str:
digest = hashlib.sha256(payload.encode()).digest()
salt = hashlib.sha256(VERSION + DOMAIN).digest()
expanded = hkdf_expand_sha256(digest, salt, DOMAIN + VERSION, EXPAND_SIZE)
return b4096e(expanded)
# ---------- Serialization ----------
def serialize_symbol_tree(symbols: Dict[str, Symbol]) -> str:
data = {
'version': 1,
'symbols': {
sid: {'code': s.code, 'refs': s.refs} for sid, s in symbols.items()
}
}
raw = json.dumps(data, sort_keys=True)
comp = zlib.compress(raw.encode())
return b4096e(comp)
def deserialize_symbol_tree(encoded: str) -> Dict[str, Symbol]:
comp = b4096d(encoded)
raw = zlib.decompress(comp).decode()
obj = json.loads(raw)
symbols = {
sid: Symbol(sid, d['code'], d.get('refs'))
for sid, d in obj['symbols'].items()
}
return symbols
# ---------- Execution and Bundle ----------
def evaluate_and_sign(symbols: Dict[str, Symbol], root_id: str) -> Dict:
output = symbols[root_id].execute(symbols, [])
serialized = serialize_symbol_tree(symbols)
signature = fpce_sign(serialized)
return {
'output': output,
'base4096': serialized,
'signature': signature
}
# ---------- Example ----------
if __name__ == '__main__':
symbols = {
'A': Symbol('A', 'lit:Hello'),
'B': Symbol('B', 'lit:World'),
'C': Symbol('C', 'cat:', refs=['A', 'B']),
'ROOT': Symbol('ROOT', 'sym:C')
}
result = evaluate_and_sign(symbols, 'ROOT')
print("\nOutput:", result['output'])
print("\nSerialized Base4096:\n", result['base4096'])
print("\nSignature (FPCE):\n", result['signature'])
# SymbolVM Visual Editor (Post-Browser Native)
# Author: Josef Kulovany - ZCHG.org
# UI Framework: Tkinter (native, minimal)
# Graph Engine: NetworkX + Matplotlib (optional)
# Purpose: Explore, edit, sign, and execute SymbolVM hypergraph trees
import tkinter as tk
from tkinter import filedialog, simpledialog, messagebox
import networkx as nx
import matplotlib.pyplot as plt
from base4096 import encode, decode
from chain_fpce import canonical_fingerprint, chain_fpce
import hashlib
class SymbolNode:
def __init__(self, symbol, op=None, children=None):
self.symbol = symbol
self.op = op or "NOP"
self.children = children or []
class SymbolEditor:
def __init__(self, master):
self.master = master
self.master.title("SymbolVM Hypergraph Editor")
self.symbols = {} # symbol -> SymbolNode
self.graph = nx.DiGraph()
self.canvas = tk.Canvas(master, width=800, height=600, bg='white')
self.canvas.pack(fill=tk.BOTH, expand=True)
self.toolbar = tk.Frame(master)
self.toolbar.pack()
tk.Button(self.toolbar, text="Add Symbol", command=self.add_symbol).pack(side=tk.LEFT)
tk.Button(self.toolbar, text="Link", command=self.link_symbols).pack(side=tk.LEFT)
tk.Button(self.toolbar, text="Visualize", command=self.draw_graph).pack(side=tk.LEFT)
tk.Button(self.toolbar, text="Sign", command=self.sign_tree).pack(side=tk.LEFT)
tk.Button(self.toolbar, text="Save", command=self.save_serialized).pack(side=tk.LEFT)
def add_symbol(self):
s = simpledialog.askstring("Symbol", "Enter symbol:")
if not s: return
op = simpledialog.askstring("Operator", "Enter operator (default NOP):") or "NOP"
self.symbols[s] = SymbolNode(s, op)
self.graph.add_node(s, op=op)
def link_symbols(self):
src = simpledialog.askstring("From", "Parent symbol:")
dst = simpledialog.askstring("To", "Child symbol:")
if src in self.symbols and dst in self.symbols:
self.symbols[src].children.append(dst)
self.graph.add_edge(src, dst)
def draw_graph(self):
plt.figure(figsize=(8,6))
pos = nx.spring_layout(self.graph)
nx.draw(self.graph, pos, with_labels=True, node_color='lightblue')
labels = nx.get_node_attributes(self.graph, 'op')
nx.draw_networkx_labels(self.graph, pos, labels=labels)
plt.title("SymbolVM Hypergraph")
plt.show()
def serialize_tree(self):
lines = []
for sym, node in self.symbols.items():
line = f"{sym}:{node.op}:{','.join(node.children)}"
lines.append(line)
return "\n".join(lines)
def sign_tree(self):
data = self.serialize_tree()
chain = chain_fpce(data)
messagebox.showinfo("Signature", f"Depth: {len(chain)}\nFinal Fingerprint:\n{chain[-1]}")
def save_serialized(self):
data = self.serialize_tree()
b4096_encoded = encode(data.encode())
file = filedialog.asksaveasfilename(defaultextension=".b4096")
if file:
with open(file, "w", encoding="utf-8") as f:
f.write(b4096_encoded)
messagebox.showinfo("Saved", f"Serialized + encoded structure saved as {file}")
if __name__ == "__main__":
root = tk.Tk()
app = SymbolEditor(root)
root.mainloop()