---
name: "Crypt::Digest::SHAKE"
section: "3pm"
platform: "linux"
package: "perl-cryptx"
version: "0.091-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Crypt::Digest::SHAKE"
---

# Crypt::Digest::SHAKE(3pm)

Hash functions SHAKE128, SHAKE256 from SHA3 family

## NAME

Crypt::Digest::SHAKE - Hash functions SHAKE128, SHAKE256 from SHA3 family

## SYNOPSIS

```
   use Crypt::Digest::SHAKE;
   my $d = Crypt::Digest::SHAKE->new(128);
   $d->add('any data');
   my $part1 = $d->done(100); # 100 raw bytes
   my $part2 = $d->done(100); # another 100 raw bytes
   #...
   # or absorb input from a file instead
   my $file_d = Crypt::Digest::SHAKE->new(128);
   $file_d->addfile('filename.dat');
   my $file_part1 = $file_d->done(100);
```

## DESCRIPTION

*Since: CryptX-0.048*

Provides an interface to the SHA3's sponge function SHAKE.

This is an XOF (extendable output function). Feed input with `add()` / `addfile()`, then read output with one or more `done($len)` calls. After the first `done()`, treat the object as being in output mode: do not call `add()` again on that state. Use `reset()` or a new object to start hashing a new message.

## METHODS

Unless noted otherwise, assume `$d` is an existing SHAKE object created via `"new"`, for example:

```
 my $d = Crypt::Digest::SHAKE->new(128);
```

### new

```
 my $d = Crypt::Digest::SHAKE->new($num);
 # $num ... [integer] 128 or 256 (selects SHAKE128 or SHAKE256)
```

### clone

```
 my $d2 = $d->clone();
```

### reset

```
 $d->reset();
```

### add

Appends data to the message. Returns the object itself (for chaining).

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.

```
 $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).

```
 $d->addfile('filename.dat');
 #or
 my $filehandle = ...; # existing binary-mode filehandle
 $d->addfile($filehandle);
```

### done

Returns `$len` bytes of output as a binary string. Can be called repeatedly to stream an unlimited amount of output from the same absorbed input. The `$len` argument is required and must be a positive integer. Single `done()` calls are limited to 1,000,000,000 bytes, but the recommended way to read large output is to call `done()` repeatedly in 10 MB chunks.

After the first `done()` call the object is in output mode. Calling `add()` in this state croaks; use `reset()` or create a new object to hash a different message.

```
 my $result_raw = $d->done($len);
 # can be called multiple times; $len is the number of output bytes to read
 # after the first done(), add() croaks until you call reset()
```

## SEE ALSO

- •

  CryptX, Crypt::Digest

- •

  \<https://csrc.nist.gov/pubs/fips/202/final\>
