Crypt::...::CHAES(3)
π NAME π
Okay bestie, so you're reading the Crypt::...::CHAES page from the Perl User Contributed Perl Documentation, and the main character today is Crypt::Digest::CHAES β a hash function, specifically a CipherHash based on AES [size: 128 bits]. β¨ It's giving cryptographic realness, no cap.
πΈ SYNOPSIS πΈ
Here's the whole vibe in code, fr fr:
### Functional interface:
use Crypt::Digest::CHAES qw( chaes chaes_hex chaes_b64 chaes_b64u
chaes_file chaes_file_hex chaes_file_b64 chaes_file_b64u );
# calculate digest from string/buffer
my $data = 'data string';
my $chaes_raw = chaes($data);
my $chaes_hex = chaes_hex($data);
my $chaes_b64 = chaes_b64($data);
my $chaes_b64u = chaes_b64u($data);
# or from file
my $chaes_file_raw = chaes_file('filename.dat');
my $chaes_file_hex = chaes_file_hex('filename.dat');
my $chaes_file_b64 = chaes_file_b64('filename.dat');
my $chaes_file_b64u = chaes_file_b64u('filename.dat');
# or from filehandle
my $filehandle = ...; # existing binary-mode filehandle
my $chaes_fh_raw = chaes_file($filehandle);
my $chaes_fh_hex = chaes_file_hex($filehandle);
my $chaes_fh_b64 = chaes_file_b64($filehandle);
my $chaes_fh_b64u = chaes_file_b64u($filehandle);
### OO interface:
use Crypt::Digest::CHAES;
my $d = Crypt::Digest::CHAES->new;
$d->add('any data');
my $result_raw = $d->digest; # raw bytes
my $result_hex = $d->hexdigest; # hexadecimal form
my $result_b64 = $d->b64digest; # Base64 form
my $result_b64u = $d->b64udigest; # Base64 URL-safe form
# or hash a file instead
my $file_result_raw = Crypt::Digest::CHAES->new->addfile('filename.dat')->digest;
π¦ DESCRIPTION π¦
It provides an interface to the CHAES digest algorithm. Literally that's the whole description, and honestly? Iconic minimalism. π
π EXPORT π
Nothing is exported by default. Nada. Zero. Zip. π
But you can export selected functions if you're feeling picky:
use Crypt::Digest::CHAES qw(chaes chaes_hex chaes_b64 chaes_b64u
chaes_file chaes_file_hex chaes_file_b64 chaes_file_b64u);
Or all of them at once, because why not go full main character energy:
use Crypt::Digest::CHAES ':all';
β¨ FUNCTIONS β¨
π chaes
Joins all arguments into a single string and returns its CHAES digest encoded as a binary string. It's giving "smoosh it all together and hash it". π«Ά
Data arguments for the functional helpers are converted to byte strings 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. The same rules apply to chaes_hex, chaes_b64, and chaes_b64u. No cap, that's the rule.
my $chaes_raw = chaes('data string');
#or
my $chaes_raw = chaes('any data', 'more data', 'even more data');
π chaes_hex
Joins all arguments into a single string and returns its CHAES digest encoded as a hexadecimal string. Hex girl summer! π₯
my $chaes_hex = chaes_hex('data string');
#or
my $chaes_hex = chaes_hex('any data', 'more data', 'even more data');
π§ chaes_b64
Joins all arguments into a single string and returns its CHAES digest encoded as a Base64 string, with trailing = padding. The padding is part of the look, bestie. π
my $chaes_b64 = chaes_b64('data string');
#or
my $chaes_b64 = chaes_b64('any data', 'more data', 'even more data');
π¦ chaes_b64u
Joins all arguments into a single string and returns its CHAES digest encoded as a Base64 URL-safe string (see RFC 4648 section 5). URL-safe means it behaves in URLs, iykyk. π
my $chaes_b64url = chaes_b64u('data string');
#or
my $chaes_b64url = chaes_b64u('any data', 'more data', 'even more data');
π chaes_file
Reads a file given by a filename or filehandle and returns its CHAES digest encoded as a binary string. File-based hashing? Obsessed. πβ¨
my $chaes_raw = chaes_file('filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $chaes_raw = chaes_file($filehandle);
πΈ chaes_file_hex
Reads a file given by a filename or filehandle and returns its CHAES digest encoded as a hexadecimal string. Slay. π₯
my $chaes_hex = chaes_file_hex('filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $chaes_hex = chaes_file_hex($filehandle);
Note: The filehandle must be in binary mode before you pass it to addfile(). This is not optional, bestie β do the binary-mode thing. π
π«Ά chaes_file_b64
Reads a file given by a filename or filehandle and returns its CHAES digest encoded as a Base64 string, with trailing = padding. Cute and padded. π
my $chaes_b64 = chaes_file_b64('filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $chaes_b64 = chaes_file_b64($filehandle);
π
chaes_file_b64u
Reads a file given by a filename or filehandle and returns its CHAES digest encoded as a Base64 URL-safe string (see RFC 4648 section 5). It's giving URL-safe royalty. π
my $chaes_b64url = chaes_file_b64u('filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
my $chaes_b64url = chaes_file_b64u($filehandle);
π METHODS π
The OO interface provides the same set of functions as Crypt::Digest. Unless noted otherwise, assume $d is an existing digest object created via new, for example:
my $d = Crypt::Digest::CHAES->new();
π new
my $d = Crypt::Digest::CHAES->new();
Fresh object, fresh vibes. β¨
π¦ clone
$d->clone();
π reset
$d->reset();
π add
Appends data to the message. Returns the object itself (for chaining). Chaining is so satisfying, ngl. π
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. Same energy as the functional helpers, fr fr.
$d->add('any data');
#or
$d->add('any data', 'more data', 'even more data');
π addfile
Reads the file content and appends it to the message. Returns the object itself (for chaining). Filehandle bestie, remember the binary-mode rule. π«Ά
$d->addfile('filename.dat');
#or
my $filehandle = ...; # existing binary-mode filehandle
$d->addfile($filehandle);
π§ hashsize
$d->hashsize;
#or
Crypt::Digest::CHAES->hashsize();
#or
Crypt::Digest::CHAES::hashsize();
Three ways to ask, one iconic answer. π
π digest
Returns the binary digest (raw bytes). The first call finalizes the digest object. Any later add(), addfile(), digest(), hexdigest(), b64digest(), or b64udigest() call will fail until you call reset(). This is the part where you gotta commit, bestie β no take-backs until reset. π
my $result_raw = $d->digest();
π₯ hexdigest
Returns the digest encoded as a lowercase hexadecimal string. Like digest(), the first call finalizes the digest object. Lowercase hex is the aesthetic. πΈ
my $result_hex = $d->hexdigest();
π b64digest
Returns the digest encoded as a Base64 string with trailing = padding. Like digest(), the first call finalizes the digest object. Padding stays on. Periodt. π
my $result_b64 = $d->b64digest();
π¦ b64udigest
Returns the digest encoded as a Base64 URL-safe string (no trailing =). Like digest(), the first call finalizes the digest object. URL-safe and unpadded, she's lowkey effortless. β¨
my $result_b64url = $d->b64udigest();
π SEE ALSO π
CryptX,Crypt::Digest- <https://en.wikipedia.org/wiki/Cryptographic_hash_function#Hash_functions_based_on_block_ciphers>
Okay that's the whole page, bestie. π This masterpiece is brought to you by perl v5.42.0, dated 2026-05-11, and honestly? She ate. π«Άβ¨π
π¦ where this page comes from
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms