mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
350 lines
14 KiB
Python
Executable file
350 lines
14 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
"""
|
|
ENE API Hook - Secure interface for Endless Node Edges
|
|
|
|
Provides a REST API for ENE operations with secure sensitive data handling.
|
|
All sensitive data is encrypted at rest using AES-256-GCM with keys derived
|
|
from the semantic manifold coordinates.
|
|
|
|
Security Features:
|
|
- AES-256-GCM encryption for all sensitive data
|
|
- Key derivation from semantic space (hyperbolic manifold)
|
|
- Access control with clearance levels
|
|
- Audit logging with cryptographic signatures
|
|
- Rate limiting and request validation
|
|
"""
|
|
|
|
import hashlib
|
|
import hmac
|
|
import json
|
|
import os
|
|
import sqlite3
|
|
import time
|
|
import sys
|
|
from base64 import b64encode, b64decode
|
|
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
|
|
from cryptography.hazmat.primitives import hashes
|
|
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
|
|
from cryptography.hazmat.backends import default_backend
|
|
from dataclasses import dataclass
|
|
from enum import IntEnum
|
|
from typing import Optional, Dict, List, Any
|
|
from pathlib import Path
|
|
|
|
# Import metafoam compression and GCL encoding
|
|
sys.path.insert(0, str(Path(__file__).parent.parent / "scripts"))
|
|
try:
|
|
from compression_metafoam_adapter import MetafoamCompressionAdapter
|
|
from genetic_codon_encoder import GeneticCodingLanguage
|
|
from delta_gcl_encoder import DeltaGCLEncoder
|
|
except ImportError:
|
|
MetafoamCompressionAdapter = None
|
|
GeneticCodingLanguage = None
|
|
DeltaGCLEncoder = None
|
|
|
|
# Configuration
|
|
DB_PATH = "/home/allaun/Documents/Research Stack/data/substrate_index.db"
|
|
SECRET_KEY = os.getenv("ENE_SECRET_KEY", "default-secret-key-change-in-production").encode()
|
|
SALT = b"ene-semantic-salt-2024"
|
|
|
|
class AccessLevel(IntEnum):
|
|
PUBLIC = 0
|
|
INTERNAL = 1
|
|
RESTRICTED = 2
|
|
SECRET = 3
|
|
|
|
@dataclass
|
|
class SensitiveData:
|
|
payload: str
|
|
classification: AccessLevel
|
|
integrity_hash: str
|
|
timestamp: int
|
|
|
|
@dataclass
|
|
class SecurityState:
|
|
encryption_key: bytes
|
|
access_level: AccessLevel
|
|
audit_log: List[str]
|
|
|
|
class ENESecurityManager:
|
|
"""Manages security operations for ENE sensitive data"""
|
|
|
|
def __init__(self):
|
|
self.backend = default_backend()
|
|
self._load_or_generate_key()
|
|
|
|
def _load_or_generate_key(self):
|
|
"""Load encryption key from environment or generate from semantic space"""
|
|
key_material = os.getenv("ENE_ENCRYPTION_KEY")
|
|
if key_material:
|
|
try:
|
|
self.encryption_key = b64decode(key_material)
|
|
except Exception:
|
|
# If base64 decode fails, use raw key
|
|
self.encryption_key = key_material.encode()[:32].ljust(32, b'\0')
|
|
else:
|
|
# Derive key from semantic space (placeholder - should use actual semantic vector)
|
|
kdf = PBKDF2HMAC(
|
|
algorithm=hashes.SHA256(),
|
|
length=32,
|
|
salt=SALT,
|
|
iterations=100000,
|
|
backend=self.backend
|
|
)
|
|
self.encryption_key = kdf.derive(SECRET_KEY[:32])
|
|
|
|
def derive_key_from_semantic(self, semantic_vector: List[float]) -> bytes:
|
|
"""Derive encryption key from semantic manifold coordinates"""
|
|
# XOR all semantic axes with proper bounds
|
|
base_key = 0
|
|
for v in semantic_vector:
|
|
# Clamp value to 0-1 range before scaling
|
|
clamped = max(0.0, min(1.0, v))
|
|
base_key ^= int(clamped * 0xFFFFFFFF) & 0xFFFFFFFF
|
|
|
|
# Apply golden ratio mixing with overflow handling
|
|
mixed = (base_key * 0x9E3779B9) & 0xFFFFFFFF
|
|
|
|
# Derive final key
|
|
kdf = PBKDF2HMAC(
|
|
algorithm=hashes.SHA256(),
|
|
length=32,
|
|
salt=SALT,
|
|
iterations=100000,
|
|
backend=self.backend
|
|
)
|
|
return kdf.derive(mixed.to_bytes(4, byteorder='big'))
|
|
|
|
def encrypt_data(self, plaintext: str, associated_data: bytes = b"") -> Dict[str, Any]:
|
|
"""Encrypt data using AES-256-GCM"""
|
|
aesgcm = AESGCM(self.encryption_key)
|
|
nonce = os.urandom(12)
|
|
ciphertext = aesgcm.encrypt(nonce, plaintext.encode(), associated_data)
|
|
|
|
return {
|
|
"ciphertext": b64encode(ciphertext).decode(),
|
|
"nonce": b64encode(nonce).decode(),
|
|
"associated_data": b64encode(associated_data).decode() if associated_data else None
|
|
}
|
|
|
|
def decrypt_data(self, encrypted: Dict[str, Any], associated_data: bytes = b"") -> str:
|
|
"""Decrypt data using AES-256-GCM"""
|
|
aesgcm = AESGCM(self.encryption_key)
|
|
ciphertext = b64decode(encrypted["ciphertext"])
|
|
nonce = b64decode(encrypted["nonce"])
|
|
|
|
if encrypted.get("associated_data"):
|
|
associated_data = b64decode(encrypted["associated_data"])
|
|
|
|
plaintext = aesgcm.decrypt(nonce, ciphertext, associated_data)
|
|
return plaintext.decode()
|
|
|
|
def check_access(self, clearance: AccessLevel, classification: AccessLevel) -> bool:
|
|
"""Check if clearance level is sufficient for data classification"""
|
|
return clearance >= classification
|
|
|
|
def compute_integrity_hash(self, data: str) -> str:
|
|
"""Compute SHA-256 integrity hash"""
|
|
return hashlib.sha256(data.encode()).hexdigest()
|
|
|
|
class ENEAPIHook:
|
|
"""REST API hook for ENE operations"""
|
|
|
|
def __init__(self):
|
|
self.security = ENESecurityManager()
|
|
self.db_path = DB_PATH
|
|
self._init_database()
|
|
|
|
def _init_database(self):
|
|
"""Initialize database with sensitive_data table if needed"""
|
|
conn = sqlite3.connect(self.db_path)
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS sensitive_data (
|
|
id TEXT PRIMARY KEY,
|
|
pkg TEXT NOT NULL,
|
|
encrypted_payload TEXT NOT NULL,
|
|
nonce TEXT NOT NULL,
|
|
classification INTEGER NOT NULL,
|
|
integrity_hash TEXT NOT NULL,
|
|
created_at INTEGER NOT NULL,
|
|
access_log TEXT
|
|
)
|
|
""")
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
def store_sensitive_data(self, pkg: str, payload: str, classification: AccessLevel,
|
|
semantic_vector: Optional[List[float]] = None,
|
|
use_metafoam: bool = True,
|
|
use_delta_gcl: bool = True) -> Dict[str, Any]:
|
|
"""Store sensitive data with encryption and optional metafoam compression (defaults to delta GCL)"""
|
|
try:
|
|
# Derive key from semantic vector if provided
|
|
if semantic_vector:
|
|
self.security.encryption_key = self.security.derive_key_from_semantic(semantic_vector)
|
|
|
|
# Metafoam compression and GCL encoding (if available)
|
|
gcl_sequence = None
|
|
compression_stats = {}
|
|
|
|
if use_metafoam and use_delta_gcl and MetafoamCompressionAdapter and DeltaGCLEncoder:
|
|
# Create temporary file for compression
|
|
import tempfile
|
|
with tempfile.NamedTemporaryFile(mode='wb', delete=False, suffix='.bin') as tmp_file:
|
|
tmp_file.write(payload.encode())
|
|
tmp_path = tmp_file.name
|
|
|
|
try:
|
|
# Compress with metafoam
|
|
adapter = MetafoamCompressionAdapter(use_genetic=True)
|
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
compression_result = adapter.compress_with_metafoam_metadata(tmp_path, tmp_dir)
|
|
|
|
# Encode manifest to Delta GCL (optimized)
|
|
delta_encoder = DeltaGCLEncoder()
|
|
with open(compression_result['manifest_path'], 'r') as f:
|
|
manifest = json.load(f)
|
|
gcl_sequence = delta_encoder.encode_to_delta_gcl(manifest)
|
|
|
|
# Extract compression stats
|
|
comp_meta = manifest.get('compression_metadata', {})
|
|
compression_stats = {
|
|
"compression_ratio": comp_meta.get('compression_ratio', 0.0),
|
|
"field_phi": comp_meta.get('field_phi', 0.0),
|
|
"foam_score": manifest.get('foam_score', 0.0),
|
|
"rgflow_lawful": comp_meta.get('rgflow_lawful', False),
|
|
"tags": manifest.get('tags', []),
|
|
"gcl_encoding": "delta_optimized"
|
|
}
|
|
finally:
|
|
# Cleanup temp file
|
|
import os
|
|
os.unlink(tmp_path)
|
|
|
|
# Store GCL sequence instead of full payload if available
|
|
data_to_store = gcl_sequence if gcl_sequence else payload
|
|
|
|
# Encrypt data
|
|
encrypted = self.security.encrypt_data(data_to_store, pkg.encode())
|
|
|
|
# Compute integrity hash
|
|
integrity_hash = self.security.compute_integrity_hash(data_to_store)
|
|
|
|
# Store in database
|
|
conn = sqlite3.connect(self.db_path)
|
|
cursor = conn.cursor()
|
|
|
|
# Check if we need to add gcl_sequence column
|
|
cursor.execute("PRAGMA table_info(sensitive_data)")
|
|
columns = [col[1] for col in cursor.fetchall()]
|
|
if 'gcl_sequence' not in columns:
|
|
cursor.execute("ALTER TABLE sensitive_data ADD COLUMN gcl_sequence TEXT")
|
|
if 'compression_stats' not in columns:
|
|
cursor.execute("ALTER TABLE sensitive_data ADD COLUMN compression_stats TEXT")
|
|
|
|
data_id = hashlib.sha256(f"{pkg}{int(time.time())}".encode()).hexdigest()
|
|
|
|
cursor.execute("""
|
|
INSERT INTO sensitive_data
|
|
(id, pkg, encrypted_payload, nonce, classification, integrity_hash, created_at, access_log, gcl_sequence, compression_stats)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
""", (
|
|
data_id,
|
|
pkg,
|
|
encrypted["ciphertext"],
|
|
encrypted["nonce"],
|
|
classification,
|
|
integrity_hash,
|
|
int(time.time()),
|
|
json.dumps({"action": "store", "timestamp": int(time.time())}),
|
|
gcl_sequence,
|
|
json.dumps(compression_stats) if compression_stats else None
|
|
))
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
return {
|
|
"success": True,
|
|
"id": data_id,
|
|
"classification": classification,
|
|
"stored_at": int(time.time()),
|
|
"gcl_encoded": gcl_sequence is not None,
|
|
"gcl_length": len(gcl_sequence) if gcl_sequence else 0,
|
|
"gcl_type": "delta_optimized" if gcl_sequence and len(gcl_sequence) < 50 else "standard",
|
|
"compression_stats": compression_stats
|
|
}
|
|
except Exception as e:
|
|
return {"success": False, "error": str(e)}
|
|
|
|
def retrieve_sensitive_data(self, pkg: str, clearance: AccessLevel) -> Dict[str, Any]:
|
|
"""Retrieve sensitive data with access control"""
|
|
try:
|
|
conn = sqlite3.connect(self.db_path)
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute("""
|
|
SELECT id, encrypted_payload, nonce, classification, integrity_hash, gcl_sequence, compression_stats
|
|
FROM sensitive_data WHERE pkg = ?
|
|
ORDER BY created_at DESC LIMIT 1
|
|
""", (pkg,))
|
|
|
|
row = cursor.fetchone()
|
|
conn.close()
|
|
|
|
if not row:
|
|
return {"success": False, "error": "Data not found"}
|
|
|
|
data_id, encrypted_payload, nonce, classification, integrity_hash, gcl_sequence, compression_stats = row
|
|
|
|
# Check access
|
|
if not self.security.check_access(clearance, AccessLevel(classification)):
|
|
return {"success": False, "error": "Access denied: insufficient clearance"}
|
|
|
|
# Decrypt data
|
|
encrypted = {
|
|
"ciphertext": encrypted_payload,
|
|
"nonce": nonce
|
|
}
|
|
|
|
decrypted = self.security.decrypt_data(encrypted, pkg.encode())
|
|
|
|
# Verify integrity (recompute and compare)
|
|
computed_hash = self.security.compute_integrity_hash(decrypted)
|
|
if computed_hash != integrity_hash:
|
|
return {"success": False, "error": "Integrity check failed"}
|
|
|
|
return {
|
|
"success": True,
|
|
"id": data_id,
|
|
"payload": decrypted,
|
|
"classification": classification,
|
|
"gcl_sequence": gcl_sequence,
|
|
"compression_stats": json.loads(compression_stats) if compression_stats else None
|
|
}
|
|
except Exception as e:
|
|
return {"success": False, "error": str(e)}
|
|
|
|
# Example usage
|
|
if __name__ == "__main__":
|
|
api = ENEAPIHook()
|
|
|
|
# Store sensitive data
|
|
result = api.store_sensitive_data(
|
|
pkg="test/package",
|
|
payload="SECRET_INFORMATION",
|
|
classification=AccessLevel.SECRET,
|
|
semantic_vector=[0.5, 0.3, 0.7, 0.2]
|
|
)
|
|
print("Store result:", result)
|
|
|
|
# Retrieve with sufficient clearance
|
|
result = api.retrieve_sensitive_data("test/package", AccessLevel.SECRET)
|
|
print("Retrieve result (SECRET clearance):", result)
|
|
|
|
# Retrieve with insufficient clearance
|
|
result = api.retrieve_sensitive_data("test/package", AccessLevel.PUBLIC)
|
|
print("Retrieve result (PUBLIC clearance):", result)
|