15. Usage Examples

This section provides practical examples for using wFabricSecurity.


15.1. Basic Zero Trust System


15.1.1. Complete Security Workflow


from wFabricSecurity import FabricSecurity

# Initialize
security = FabricSecurity(
    me="Master",
    msp_path="/path/to/msp"
)

# Register identity
security.register_identity()

# Register code with hash
security.register_code(["master.py"], "1.0.0")

# Register communication permissions
security.register_communication("CN=Master", "CN=Slave")

# Create signed message
message = security.create_message(
    recipient="CN=Slave",
    content='{"operation": "process_data"}'
)

# Verify message
if security.verify_message(message):
    print("Message is authentic!")

15.2. Code Integrity


15.2.1. Registering and Verifying Code


from wFabricSecurity import FabricSecurity, CodeIntegrityError

security = FabricSecurity(me="Service")

# Register your code
security.register_code(["my_service.py", "helpers.py"], "1.0.0")

# Verify code integrity (automatic)
if security.verify_code():
    print("Code is intact!")

# Manual verification
is_valid = security.verify_code(["my_service.py"])
print(f"Code valid: {is_valid}")

# Detect tampering
try:
    security.verify_code(["modified_file.py"])
except CodeIntegrityError:
    print("Code has been tampered with!")

15.3. Digital Signatures


15.3.1. ECDSA Signing and Verification


from wFabricSecurity import SigningService

service = SigningService(private_key=None)  # Uses MSP key

# Sign data
data = "Important data to sign"
signer_id = "CN=Master"
signature = service.sign(data, signer_id)

print(f"Signature: {signature[:50]}...")

# Verify signature
def cert_getter(signer_id):
    return "certificate_pem"

is_valid = service.verify(data, signature, cert_getter, signer_id)
print(f"Signature valid: {is_valid}")

15.4. Communication Permissions


15.4.1. Permission Management


from wFabricSecurity import FabricSecurity, PermissionDeniedError

security = FabricSecurity(me="Master")

# Register communication permission
security.register_communication("CN=Master", "CN=Slave")

# Check permission
can_communicate = security.can_communicate_with("CN=Master", "CN=Slave")
print(f"Communication allowed: {can_communicate}")

# Permission enforcement
try:
    if not security.can_communicate_with("Unknown", "CN=Slave"):
        raise PermissionDeniedError("Not authorized")
except PermissionDeniedError as e:
    print(f"Permission denied: {e}")

15.5. Rate Limiting


15.5.1. Token Bucket Rate Limiter


from wFabricSecurity import RateLimiter, RateLimitError

# Create rate limiter
limiter = RateLimiter(requests_per_second=100, burst=50)

# Blocking acquire
limiter.acquire()
limiter.acquire()

# Non-blocking try_acquire
if limiter.try_acquire():
    process_request()
else:
    print("Rate limit exceeded, try again later")

# Get statistics
stats = limiter.get_stats()
print(f"Available tokens: {stats['available_tokens']}")
print(f"Recent requests (1s): {stats['recent_requests_1s']}")

15.6. Retry Logic


15.6.1. Exponential Backoff


from wFabricSecurity import with_retry

@with_retry(max_attempts=3, backoff_factor=2.0, initial_delay=0.1)
def unreliable_fabric_call():
    # Simulate potential failure
    import random
    if random.random() < 0.5:
        raise ConnectionError("Fabric temporarily unavailable")
    return "success"

# Use the function
result = unreliable_fabric_call()
print(f"Result: {result}")

15.7. Message Management


15.7.1. Creating and Verifying Messages


from wFabricSecurity import MessageManager, DataType

manager = MessageManager(gateway, ttl_seconds=3600)

# Create message with TTL
msg = manager.create_message(
    sender="CN=Master",
    recipient="CN=Slave",
    content="Sensitive data",
    data_type=DataType.JSON,
    ttl_seconds=3600
)

# Verify message integrity
is_valid = manager.verify_message(msg)
print(f"Message valid: {is_valid}")

# Cleanup expired messages
expired_count = manager.cleanup_expired_messages()
print(f"Cleaned up {expired_count} expired messages")

15.8. Master-Slave Decorators


15.8.1. Audited Task Delegation


from wFabricSecurity import FabricSecuritySimple

security = FabricSecuritySimple(me="Master")

# MASTER: Decorator for audited task sending
@security.master_audit(
    task_prefix="TASK",
    trusted_slaves=["CN=Slave1", "CN=Slave2"]
)
def send_to_slave(payload, task_id, hash_a, sig, my_id):
    """This function is automatically signed and audited."""
    return http_post("http://slave/process", payload)

# SLAVE: Decorator for verified task receiving
@security.slave_verify(trusted_masters=["CN=Master"])
def process_task(payload):
    """Automatically verifies Master's identity and code."""
    return process(payload)

# Usage
result = send_to_slave({"data": "value"})