Crypt::Mode::OFB(3)

πŸ’… Crypt::Mode::OFB β€” the perl doc for it, bestie πŸ¦‹

okay so real talk: this is the User Contributed Perl Documentation page for Crypt::Mode::OFB(3), and I'm literally about to make OFB make sense for you. no cap. 🫢


✨ NAME ✨

Crypt::Mode::OFB β€” Block cipher mode OFB [Output feedback]. that's it, that's the vibe. πŸ’«


🌸 SYNOPSIS 🌸

here's the whole thing in action, bestie β€” copy it, run it, love it:

use Crypt::Mode::OFB;
my $m = Crypt::Mode::OFB->new('AES');
my $key = '1234567890123456';
my $iv = '1234567890123456';
my $plaintext = 'example plaintext';
my $chunk1 = 'example ';
my $chunk2 = 'plaintext';

# encrypt or decrypt in one call
my $single_ciphertext = $m->encrypt($plaintext, $key, $iv);
my $single_plaintext = $m->decrypt($single_ciphertext, $key, $iv);

# encrypt more chunks
$m->start_encrypt($key, $iv);
my $chunked_ciphertext = '';
$chunked_ciphertext .= $m->add($chunk1);
$chunked_ciphertext .= $m->add($chunk2);

# decrypt more chunks
$m->start_decrypt($key, $iv);
my $chunked_plaintext = '';
$chunked_plaintext .= $m->add($chunked_ciphertext);

like, one-shot mode or chunked mode, your call. main character energy either way. πŸ‘‘


πŸ’œ DESCRIPTION πŸ’œ

This module implements OFB cipher mode. it's giving "streaming, no padding, we move." ✨

⚠️ heads up bestie: it works only with ciphers from CryptX (that's Crypt::Cipher::NNNN). don't come at it with anything else, it will simply not slay.

πŸŽ€ METHODS πŸŽ€

Unless noted otherwise, assume $m is an existing mode object created via "new", for example:

my $m = Crypt::Mode::OFB->new('AES');

🌈 new 🌈

my $m = Crypt::Mode::OFB->new($name);
#or
my $m = Crypt::Mode::OFB->new($name, $cipher_rounds);

# $name ............ [string] one of 'AES', 'Anubis', 'Blowfish', 'CAST5', 'Camellia', 'DES', 'DES_EDE',
#                    'KASUMI', 'Khazad', 'MULTI2', 'Noekeon', 'RC2', 'RC5', 'RC6',
#                    'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64',
#                    'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent'
#                    or any <NAME> for which there is a Crypt::Cipher::<NAME> module
# $cipher_rounds ... [integer] optional, number of rounds for given cipher

so $name is a string, one of those literal names up there ☝️, or literally any <NAME> as long as there's a Crypt::Cipher::<NAME> module for it. and $cipher_rounds is an optional integer β€” the number of rounds for the given cipher. fancy. πŸ’…


πŸ¦‹ encrypt πŸ¦‹

Encrypts the plaintext in a single call. Returns the ciphertext as a binary string. 🫧

The plaintext scalar is converted to bytes using Perl's usual scalar stringification. Defined scalars β€” including numbers and string-overloaded objects β€” are accepted. "undef" is treated as an empty string and may emit Perl's usual "uninitialized value" warning. (iykyk 😭)

my $ciphertext = $m->encrypt($plaintext, $key, $iv);

πŸ“ decrypt πŸ“

Decrypts the ciphertext in a single call. Returns the plaintext as a binary string. 🫧

The ciphertext scalar is converted to bytes using Perl's usual scalar stringification. Defined scalars β€” including numbers and string-overloaded objects β€” are accepted. "undef" is treated as an empty string and may emit Perl's usual "uninitialized value" warning. (same warning, same drama 😭)

my $plaintext = $m->decrypt($ciphertext, $key, $iv);

🧚 start_encrypt 🧚

Initializes encryption mode. Returns the object itself. so you can chain, obviously. πŸ’«

$m->start_encrypt($key, $iv);

πŸ’€ start_decrypt πŸ’€

Initializes decryption mode. Returns the object itself. yes, also chainable. iconic. ✨

$m->start_decrypt($key, $iv);

πŸ”₯ add πŸ”₯

Feeds data to the encryption or decryption stream. Returns a binary string. 🫢

Each argument is converted to bytes using Perl's usual scalar stringification. Defined scalars β€” including numbers and string-overloaded objects β€” are accepted. "undef" is treated as an empty string and may emit Perl's usual "uninitialized value" warning. (you already know πŸ™ˆ)

# in encrypt mode
my $ciphertext = $m->add($plaintext);

# in decrypt mode
my $plaintext = $m->add($ciphertext);

πŸ§šβ€β™€οΈ finish πŸ§šβ€β™€οΈ

okay so this one's lowkey funny: OFB is a streaming mode and doesn't use padding, so "finish" returns an empty string. 🫧 it literally exists just for API consistency with Crypt::Mode::CBC and Crypt::Mode::ECB, and you may safely call it or omit it. no pressure bestie, it's not mad at you. πŸ’–

$m->start_encrypt($key, $iv);
my $ciphertext = '';
$ciphertext .= $m->add($chunk1);
$ciphertext .= $m->add($chunk2);
$ciphertext .= $m->finish;   # returns ''

⭐ SEE ALSO ⭐


and that's the whole page, bestie πŸŽ€βœ¨πŸ¦‹ β€” this was perl v5.42.0, dated 2026-05-11, Crypt::Mode::OFB(3). go encrypt something cute. πŸ’œπŸŒΈπŸ«Ά

πŸ“¦ where this page comes from