""" Stegasoo - Secure Steganography with Multi-Factor Authentication (v4.0.1) Changes in v4.0.0: - Added channel key support for deployment/group isolation - New functions: get_channel_key, get_channel_fingerprint, generate_channel_key, etc. - encode() and decode() now accept channel_key parameter """ __version__ = "4.3.0" # Core functionality # Channel key management (v4.0.0) from .channel import ( clear_channel_key, format_channel_key, generate_channel_key, get_channel_key, get_channel_status, has_channel_key, set_channel_key, validate_channel_key, ) # Audio support — gated by STEGASOO_AUDIO env var and dependency availability from .constants import AUDIO_ENABLED, VIDEO_ENABLED # Crypto functions from .crypto import get_active_channel_key, get_channel_fingerprint, has_argon2 from .decode import decode, decode_file, decode_text from .encode import encode # Credential generation from .generate import ( export_rsa_key_pem, generate_credentials, generate_passphrase, generate_pin, generate_rsa_key, load_rsa_key, ) # Image utilities from .image_utils import ( compare_capacity, get_image_info, ) # Backend registry from .backends import EmbeddingBackend, registry as backend_registry # Platform presets from .platform_presets import PLATFORMS, get_preset # Steganalysis from .steganalysis import check_image from .backends.registry import BackendNotFoundError # Steganography functions from .steganography import ( calculate_capacity_by_mode, compare_modes, has_dct_support, will_fit_by_mode, ) # Utilities from .utils import generate_filename HAS_AUDIO_SUPPORT = AUDIO_ENABLED HAS_VIDEO_SUPPORT = VIDEO_ENABLED if AUDIO_ENABLED: from .audio_utils import ( detect_audio_format, get_audio_info, has_ffmpeg_support, validate_audio, ) from .decode import decode_audio from .encode import encode_audio else: detect_audio_format = None get_audio_info = None has_ffmpeg_support = None validate_audio = None encode_audio = None decode_audio = None # Video support — gated by STEGASOO_VIDEO env var and ffmpeg + audio deps if VIDEO_ENABLED: from .decode import decode_video from .encode import encode_video from .video_utils import ( calculate_video_capacity, detect_video_format, get_video_info, validate_video, ) else: detect_video_format = None get_video_info = None validate_video = None calculate_video_capacity = None encode_video = None decode_video = None # QR Code utilities - optional, may not be available try: from .qr_utils import ( detect_and_crop_qr, extract_key_from_qr, generate_qr_code, ) HAS_QR_UTILS = True except ImportError: HAS_QR_UTILS = False generate_qr_code = None extract_key_from_qr = None detect_and_crop_qr = None # Validation from .validation import ( validate_file_payload, validate_image, validate_message, validate_passphrase, validate_pin, validate_rsa_key, validate_security_factors, ) # Validation aliases for public API validate_reference_photo = validate_image validate_carrier = validate_image # Additional validators # Constants from .constants import ( DEFAULT_PASSPHRASE_WORDS, EMBED_MODE_AUDIO_AUTO, EMBED_MODE_AUDIO_LSB, EMBED_MODE_AUDIO_SPREAD, EMBED_MODE_AUTO, EMBED_MODE_DCT, EMBED_MODE_LSB, EMBED_MODE_VIDEO_AUTO, EMBED_MODE_VIDEO_LSB, FORMAT_VERSION, LOSSLESS_FORMATS, MAX_FILE_PAYLOAD_SIZE, MAX_IMAGE_PIXELS, MAX_MESSAGE_SIZE, MAX_PASSPHRASE_WORDS, MAX_PIN_LENGTH, MIN_IMAGE_PIXELS, MIN_PASSPHRASE_WORDS, MIN_PIN_LENGTH, RECOMMENDED_PASSPHRASE_WORDS, ) # Exceptions from .exceptions import ( AudioCapacityError, AudioError, AudioExtractionError, AudioTranscodeError, AudioValidationError, CapacityError, CryptoError, DecryptionError, EmbeddingError, EncryptionError, ExtractionError, ImageValidationError, InvalidHeaderError, InvalidMagicBytesError, KeyDerivationError, KeyGenerationError, KeyPasswordError, KeyValidationError, MessageValidationError, ModeMismatchError, NoDataFoundError, PinValidationError, ReedSolomonError, SecurityFactorError, SteganographyError, StegasooError, UnsupportedAudioFormatError, UnsupportedVideoFormatError, ValidationError, VideoCapacityError, VideoError, VideoExtractionError, VideoTranscodeError, VideoValidationError, ) # Models from .models import ( AudioCapacityInfo, AudioEmbedStats, AudioInfo, CapacityComparison, Credentials, DecodeResult, EncodeResult, FilePayload, GenerateResult, ImageInfo, ValidationResult, VideoCapacityInfo, VideoEmbedStats, VideoInfo, ) from .validation import ( validate_audio_embed_mode, validate_audio_file, validate_dct_color_mode, validate_dct_output_format, validate_embed_mode, ) # Aliases for backward compatibility MIN_MESSAGE_LENGTH = 1 MAX_MESSAGE_LENGTH = MAX_MESSAGE_SIZE MAX_PAYLOAD_SIZE = MAX_MESSAGE_SIZE # MAX_FILE_PAYLOAD_SIZE imported from constants above SUPPORTED_IMAGE_FORMATS = LOSSLESS_FORMATS LSB_BYTES_PER_PIXEL = 3 / 8 DCT_BYTES_PER_PIXEL = 0.125 __all__ = [ # Version "__version__", # Core "encode", "decode", "decode_file", "decode_text", # Audio (v4.3.0) "encode_audio", "decode_audio", "detect_audio_format", "get_audio_info", "has_ffmpeg_support", "validate_audio", "HAS_AUDIO_SUPPORT", "HAS_VIDEO_SUPPORT", "validate_audio_embed_mode", "validate_audio_file", # Video (v4.4.0) "encode_video", "decode_video", "detect_video_format", "get_video_info", "validate_video", "calculate_video_capacity", # Generation "generate_pin", "generate_passphrase", "generate_rsa_key", "generate_credentials", "export_rsa_key_pem", "load_rsa_key", # Channel key management (v4.0.0) "generate_channel_key", "get_channel_key", "set_channel_key", "clear_channel_key", "has_channel_key", "get_channel_status", "validate_channel_key", "format_channel_key", "get_active_channel_key", "get_channel_fingerprint", # Image utilities "get_image_info", "compare_capacity", # Utilities "generate_filename", # Crypto "has_argon2", # Backends "EmbeddingBackend", "backend_registry", "BackendNotFoundError", # Platform presets "get_preset", "PLATFORMS", # Steganalysis "check_image", # Steganography "has_dct_support", "calculate_capacity_by_mode", "compare_modes", "will_fit_by_mode", # QR utilities "generate_qr_code", "extract_key_from_qr", "detect_and_crop_qr", "HAS_QR_UTILS", # Validation "validate_reference_photo", "validate_carrier", "validate_message", "validate_file_payload", "validate_passphrase", "validate_pin", "validate_rsa_key", "validate_security_factors", "validate_embed_mode", "validate_dct_output_format", "validate_dct_color_mode", "validate_channel_key", # Models "ImageInfo", "CapacityComparison", "GenerateResult", "EncodeResult", "DecodeResult", "FilePayload", "Credentials", "ValidationResult", # Audio models "AudioEmbedStats", "AudioInfo", "AudioCapacityInfo", # Video models "VideoEmbedStats", "VideoInfo", "VideoCapacityInfo", # Exceptions "StegasooError", "ValidationError", "PinValidationError", "MessageValidationError", "ImageValidationError", "KeyValidationError", "SecurityFactorError", "CryptoError", "EncryptionError", "DecryptionError", "KeyDerivationError", "KeyGenerationError", "KeyPasswordError", "SteganographyError", "CapacityError", "ExtractionError", "EmbeddingError", "InvalidHeaderError", "InvalidMagicBytesError", "ReedSolomonError", "NoDataFoundError", "ModeMismatchError", # Audio exceptions "AudioError", "AudioValidationError", "AudioCapacityError", "AudioExtractionError", "AudioTranscodeError", "UnsupportedAudioFormatError", # Video exceptions "VideoError", "VideoValidationError", "VideoCapacityError", "VideoExtractionError", "VideoTranscodeError", "UnsupportedVideoFormatError", # Constants "FORMAT_VERSION", "MIN_PASSPHRASE_WORDS", "RECOMMENDED_PASSPHRASE_WORDS", "DEFAULT_PASSPHRASE_WORDS", "MAX_PASSPHRASE_WORDS", "MIN_PIN_LENGTH", "MAX_PIN_LENGTH", "MIN_MESSAGE_LENGTH", "MAX_MESSAGE_LENGTH", "MAX_MESSAGE_SIZE", "MAX_PAYLOAD_SIZE", "MAX_FILE_PAYLOAD_SIZE", "MIN_IMAGE_PIXELS", "MAX_IMAGE_PIXELS", "SUPPORTED_IMAGE_FORMATS", "LOSSLESS_FORMATS", "LSB_BYTES_PER_PIXEL", "DCT_BYTES_PER_PIXEL", "EMBED_MODE_LSB", "EMBED_MODE_DCT", "EMBED_MODE_AUTO", # Audio constants "EMBED_MODE_AUDIO_LSB", "EMBED_MODE_AUDIO_SPREAD", "EMBED_MODE_AUDIO_AUTO", # Video constants "EMBED_MODE_VIDEO_LSB", "EMBED_MODE_VIDEO_AUTO", ]