---
name: "Crypt::Digest::TurboSHAKE"
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::TurboSHAKE"
---

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

XOF (extendable output) hash functions TurboSHAKE128 and TurboSHAKE256

## NAME

Crypt::Digest::TurboSHAKE - XOF (extendable output) hash functions TurboSHAKE128 and TurboSHAKE256

## SYNOPSIS

```
   use Crypt::Digest::TurboSHAKE;
   my $d = Crypt::Digest::TurboSHAKE->new(128); # TurboSHAKE128
   $d->add('any data');
   my $result = $d->done(32);                   # 32 bytes of output
   # or absorb input from a file instead
   my $file_d = Crypt::Digest::TurboSHAKE->new(128);
   $file_d->addfile('filename.dat');
   my $file_result = $file_d->done(32);
```

## DESCRIPTION

*Since: CryptX-0.089*

Provides an interface to TurboSHAKE128 and TurboSHAKE256 as defined in RFC 9861 \<https://www.rfc-editor.org/rfc/rfc9861\>.

TurboSHAKE is a faster variant of SHAKE based on the reduced-round KeccakP-1600 permutation. Like SHAKE, it is an XOF (extendable output function): `done()` can be called multiple times to stream arbitrary amounts of output.

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 TurboSHAKE object created via `"new"`, for example:

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

### new

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

### 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::SHAKE, Crypt::Digest::KangarooTwelve

- •

  RFC 9861 \<https://www.rfc-editor.org/rfc/rfc9861\>
