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 🌈


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