docs(cipher-factory): document public API types

Add doc comments to OutputFormat, OperationMode enums and their methods.
Add crate-level documentation describing the factory's purpose.
This commit is contained in:
Kristofers Solo 2025-12-31 00:26:31 +02:00
parent dd07a1d29b
commit 220baa09ad
Signed by: kristoferssolo
GPG Key ID: 8687F2D3EEE6F0ED
7 changed files with 21 additions and 8 deletions

View File

@ -1,6 +1,6 @@
use crate::Block128; use crate::Block128;
/// Mixes each column using matrix multiplication in GF(2^8) (MixColumns step). /// Mixes each column using matrix multiplication in GF(2^8) ([`MixColumns`] step).
/// ///
/// Each column is treated as a polynomial and multiplied by a fixed polynomial /// Each column is treated as a polynomial and multiplied by a fixed polynomial
/// modulo x^4 + 1. This provides diffusion across the rows. /// modulo x^4 + 1. This provides diffusion across the rows.

View File

@ -1,6 +1,6 @@
use crate::{Block128, key::Subkey}; use crate::{Block128, key::Subkey};
/// XORs the state with a round key (AddRoundKey step). /// XORs the state with a round key ([`AddRoundKey`] step).
/// ///
/// Each round of AES combines the current state with a derived subkey /// Each round of AES combines the current state with a derived subkey
/// using bitwise XOR. This operation is its own inverse. /// using bitwise XOR. This operation is its own inverse.

View File

@ -1,6 +1,6 @@
use crate::Block128; use crate::Block128;
/// Cyclically shifts rows of the state matrix (ShiftRows step). /// Cyclically shifts rows of the state matrix ([`ShiftRows`] step).
/// ///
/// Row 0: no shift, Row 1: shift left 1, Row 2: shift left 2, Row 3: shift left 3. /// Row 0: no shift, Row 1: shift left 1, Row 2: shift left 2, Row 3: shift left 3.
/// This provides diffusion across the columns. /// This provides diffusion across the columns.

View File

@ -1,6 +1,6 @@
use crate::{Block128, sbox::SboxLookup}; use crate::{Block128, sbox::SboxLookup};
/// Substitutes each byte using the AES S-box (SubBytes step). /// Substitutes each byte using the AES S-box ([`SubBytes`] step).
/// ///
/// Provides non-linearity by replacing each byte with its S-box lookup value. /// Provides non-linearity by replacing each byte with its S-box lookup value.
/// The S-box is derived from the multiplicative inverse in GF(2^8). /// The S-box is derived from the multiplicative inverse in GF(2^8).

View File

@ -1,3 +1,8 @@
//! Cipher factory for creating and configuring block ciphers.
//!
//! Provides a unified interface for AES and DES encryption/decryption
//! with configurable output formats.
mod algorithm; mod algorithm;
mod context; mod context;
mod operation; mod operation;

View File

@ -1,14 +1,18 @@
use std::{convert::Infallible, fmt::Display, str::FromStr}; use std::{convert::Infallible, fmt::Display, str::FromStr};
/// Cipher operation mode - encrypt or decrypt.
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum OperationMode { pub enum OperationMode {
/// Transform plaintext to ciphertext.
#[default] #[default]
Encrypt, Encrypt,
/// Transform ciphertext to plaintext.
Decrypt, Decrypt,
} }
impl OperationMode { impl OperationMode {
/// Returns the opposite operation mode.
#[must_use] #[must_use]
pub const fn invert(self) -> Self { pub const fn invert(self) -> Self {
match self { match self {

View File

@ -2,21 +2,25 @@ use cipher_core::Output;
use std::{convert::Infallible, fmt::Display, str::FromStr}; use std::{convert::Infallible, fmt::Display, str::FromStr};
use strum::EnumIter; use strum::EnumIter;
/// Output format for displaying cipher results.
///
/// Controls how decrypted data is presented to the user.
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, EnumIter)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Default, EnumIter)]
pub enum OutputFormat { pub enum OutputFormat {
/// Binary output /// Binary (base-2) representation.
Binary, Binary,
/// Octal output /// Octal (base-8) representation.
Octal, Octal,
/// Decimal output /// Hexadecimal (base-16) representation.
#[default] #[default]
Hex, Hex,
/// Text output (ASCII) /// ASCII text (attempts UTF-8 decoding).
Text, Text,
} }
impl OutputFormat { impl OutputFormat {
/// Formats the cipher output according to this format.
#[must_use] #[must_use]
pub fn format(&self, value: &Output) -> String { pub fn format(&self, value: &Output) -> String {
match self { match self {