New files: - LICENSE (MIT) - Required legal file - CHANGELOG.md - Version history following Keep a Changelog - CONTRIBUTING.md - Contributor guidelines - CODE_OF_CONDUCT.md - Community standards - .github/ISSUE_TEMPLATE/ - Bug report and feature request forms - .github/PULL_REQUEST_TEMPLATE.md - PR checklist - src/stegasoo/py.typed - PEP 561 type hint marker - examples/ - Usage examples (basic, file embedding, channel keys) Updated: - README.md - Added CI status badges 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Channel Keys Example
|
|
|
|
Channel keys allow you to create private communication channels.
|
|
Only people with the same channel key can decode messages.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
|
|
import stegasoo
|
|
from stegasoo.channel import generate_channel_key, get_channel_fingerprint
|
|
|
|
|
|
def main():
|
|
# Generate a channel key for your group
|
|
channel_key = generate_channel_key()
|
|
fingerprint = get_channel_fingerprint(channel_key)
|
|
|
|
print("=== Channel Key Generated ===")
|
|
print(f"Key: {channel_key}")
|
|
print(f"Fingerprint: {fingerprint}")
|
|
print("\nShare this key securely with your group members!")
|
|
print("-" * 40)
|
|
|
|
# Load images
|
|
reference_photo = Path("my_secret_photo.png").read_bytes()
|
|
carrier_image = Path("carrier.png").read_bytes()
|
|
|
|
# Encode with channel key
|
|
print("\nEncoding message with channel key...")
|
|
result = stegasoo.encode(
|
|
message="Secret group message!",
|
|
reference_photo=reference_photo,
|
|
carrier_image=carrier_image,
|
|
passphrase="correct horse battery staple",
|
|
pin="123456",
|
|
channel_key=channel_key, # Add the channel key
|
|
)
|
|
|
|
stego_data = result.stego_image
|
|
print(f"Encoded successfully!")
|
|
|
|
# Decode with correct channel key
|
|
print("\nDecoding with correct channel key...")
|
|
decoded = stegasoo.decode(
|
|
stego_image=stego_data,
|
|
reference_photo=reference_photo,
|
|
passphrase="correct horse battery staple",
|
|
pin="123456",
|
|
channel_key=channel_key, # Same channel key
|
|
)
|
|
print(f"Message: {decoded.message}")
|
|
|
|
# Try to decode with wrong channel key
|
|
print("\nTrying to decode with wrong channel key...")
|
|
wrong_key = generate_channel_key()
|
|
try:
|
|
stegasoo.decode(
|
|
stego_image=stego_data,
|
|
reference_photo=reference_photo,
|
|
passphrase="correct horse battery staple",
|
|
pin="123456",
|
|
channel_key=wrong_key, # Different channel key
|
|
)
|
|
print("ERROR: Should have failed!")
|
|
except (stegasoo.DecryptionError, stegasoo.ExtractionError):
|
|
print("Correctly rejected - wrong channel key!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|