sm4-ff1 0.1.1

SM4 FF1 implementation
Documentation
use thiserror::Error;

#[derive(Error, Debug)]
pub enum FF1Error {
    #[error("Cryptography error")]
    Crypto(),
    #[error("Invalid input length n={n}: must be minlen <= n <= maxlen")]
    InvalidLength { n: usize },
    #[error("Invalid radix={radix}: must be 2 <= radix <= 2^16")]
    InvalidRadix { radix: u32 },
    #[error("Invalid tweak length t={t}: must be 0 <= t <= maxTlen")]
    InvalidTweakLength { t: usize },
    #[error("Constraint violation: radix^minlen ({radix}^{minlen}) must be >= 100")]
    ConstraintViolation { radix: u32, minlen: usize },
    #[error("Internal error: BigUint conversion failed")]
    BigUintConversion,
    #[error("Internal error: Failed to convert number to bytes")]
    NumToBytesConversion,
    #[error("Internal error: Failed to convert bytes to number")]
    BytesToNumConversion,
    #[error("Internal error: String conversion length mismatch")]
    StrLenMismatch,
    #[error("Internal error: Cipher output length mismatch (expected 16 bytes)")]
    CipherLengthError,
    #[error("Invalid digit in input: {0} >= radix {1}")]
    InvalidDigit(u32, u32),
    #[error("Invalid character in input: '{0}' is not a valid digit in radix {1}")]
    InvalidCharDigit(char, u32),
}