"""
Synor Crypto SDK for Python

Quantum-resistant cryptographic primitives for the Synor blockchain.

Features:
- Hybrid Ed25519 + Dilithium3 signatures (quantum-resistant)
- BIP-39 mnemonic support (12-24 words)
- BIP-44 hierarchical key derivation
- Post-quantum algorithms: Falcon, SPHINCS+
- Secure key derivation (HKDF, PBKDF2)

Example:
    ```python
    from synor_crypto import SynorCrypto, CryptoConfig, Network

    async def main():
        crypto = SynorCrypto(CryptoConfig(api_key='your-api-key'))

        # Generate a mnemonic
        mnemonic = await crypto.mnemonic.generate(24)
        print(f'Backup words: {mnemonic.phrase}')

        # Create keypair from mnemonic
        keypair = await crypto.keypairs.from_mnemonic(mnemonic)
        address = keypair.address(Network.MAINNET)
        print(f'Address: {address}')

        # Sign a message
        message = b'Hello, Synor!'
        signature = await crypto.signing.sign(keypair, message)

        # Verify signature
        valid = await crypto.signing.verify(keypair.public_key, message, signature)
        print(f'Signature valid: {valid}')

        await crypto.close()
    ```
"""

from .types import (
    # Enumerations
    Network,
    FalconVariant,
    SphincsVariant,
    PqAlgorithm,
    AlgorithmFamily,

    # Configuration
    CryptoConfig,
    DerivationConfig,
    PasswordDerivationConfig,
    DerivationPath,

    # Keys
    HybridPublicKey,
    SecretKey,
    FalconPublicKey,
    FalconSecretKey,
    SphincsPublicKey,
    SphincsSecretKey,

    # Signatures
    HybridSignature,
    FalconSignature,
    SphincsSignature,

    # Keypairs
    HybridKeypair,
    FalconKeypair,
    SphincsKeypair,

    # Mnemonic
    Mnemonic,
    MnemonicValidation,

    # Address & Hash
    Address,
    Hash256,

    # Negotiation
    AlgorithmCapabilities,
    NegotiationPolicy,
    NegotiationResult,
    SessionParams,

    # Error
    CryptoError,

    # Constants
    CryptoConstants,
    ALGORITHM_SIZES,
)

from .client import (
    SynorCrypto,
    MnemonicClient,
    KeypairClient,
    SigningClient,
    FalconClient,
    SphincsClient,
    KdfClient,
    HashClient,
    NegotiationClient,
)

__version__ = '0.1.0'
__all__ = [
    # Main client
    'SynorCrypto',

    # Sub-clients
    'MnemonicClient',
    'KeypairClient',
    'SigningClient',
    'FalconClient',
    'SphincsClient',
    'KdfClient',
    'HashClient',
    'NegotiationClient',

    # Enumerations
    'Network',
    'FalconVariant',
    'SphincsVariant',
    'PqAlgorithm',
    'AlgorithmFamily',

    # Configuration
    'CryptoConfig',
    'DerivationConfig',
    'PasswordDerivationConfig',
    'DerivationPath',

    # Keys
    'HybridPublicKey',
    'SecretKey',
    'FalconPublicKey',
    'FalconSecretKey',
    'SphincsPublicKey',
    'SphincsSecretKey',

    # Signatures
    'HybridSignature',
    'FalconSignature',
    'SphincsSignature',

    # Keypairs
    'HybridKeypair',
    'FalconKeypair',
    'SphincsKeypair',

    # Mnemonic
    'Mnemonic',
    'MnemonicValidation',

    # Address & Hash
    'Address',
    'Hash256',

    # Negotiation
    'AlgorithmCapabilities',
    'NegotiationPolicy',
    'NegotiationResult',
    'SessionParams',

    # Error
    'CryptoError',

    # Constants
    'CryptoConstants',
    'ALGORITHM_SIZES',
]
