Table of Contents

Class Shake256

Namespace
CryptoHives.Foundation.Security.Cryptography.Hash
Assembly
CryptoHives.Foundation.Security.Cryptography.dll

Computes a variable-length output using SHAKE256 (XOF).

public sealed class Shake256 : KeccakXofCore, ICryptoTransform, IDisposable, IResettable, IExtendableOutput
Inheritance
Shake256
Implements
Inherited Members

Remarks

This is a fully managed implementation of SHAKE256 based on the Keccak sponge construction. It does not rely on OS or hardware cryptographic APIs, ensuring deterministic behavior across all platforms and runtimes.

SHAKE256 is an extendable-output function (XOF) based on the Keccak sponge construction. Unlike traditional hash functions, XOFs can produce output of arbitrary length.

SHAKE256 provides 256-bit security strength against all attacks.

Constructors

Shake256()

Initializes a new instance of the Shake256 class with default output size.

public Shake256()

Shake256(int)

Initializes a new instance of the Shake256 class with specified output size.

public Shake256(int outputBytes)

Parameters

outputBytes int

The desired output size in bytes.

Fields

CapacityBytes

The capacity in bytes (512 bits for SHAKE256).

public const int CapacityBytes = 64

Field Value

int

DefaultOutputBits

The default output size in bits.

public const int DefaultOutputBits = 512

Field Value

int

RateBytes

The rate in bytes (1088 bits for SHAKE256).

public const int RateBytes = 136

Field Value

int

Properties

AlgorithmName

Gets the name of the hash algorithm.

public override string AlgorithmName { get; }

Property Value

string

BlockSize

Gets the block size in bytes used by the hash algorithm.

public override int BlockSize { get; }

Property Value

int

Methods

Create()

Creates a new instance of the Shake256 class with default output size.

public static Shake256 Create()

Returns

Shake256

A new SHAKE256 instance.

Create(int)

Creates a new instance of the Shake256 class with specified output size.

public static Shake256 Create(int outputBytes)

Parameters

outputBytes int

The desired output size in bytes.

Returns

Shake256

A new SHAKE256 instance.

HashData(in ReadOnlySequence<byte>)

Computes the SHAKE256 hash of source using the default output size and returns it as a new byte array.

public static byte[] HashData(in ReadOnlySequence<byte> source)

Parameters

source ReadOnlySequence<byte>

The (possibly multi-segment) input sequence to hash.

Returns

byte[]

A new byte array containing the SHAKE256 hash.

HashData(ReadOnlySpan<byte>)

Computes the SHAKE256 hash of source using the default output size and returns it as a new byte array.

public static byte[] HashData(ReadOnlySpan<byte> source)

Parameters

source ReadOnlySpan<byte>

The input data to hash.

Returns

byte[]

A new byte array containing the SHAKE256 hash.

TryHashData(in ReadOnlySequence<byte>, Span<byte>, out int)

Computes the SHAKE256 hash of source using the default output size and writes it into destination.

public static bool TryHashData(in ReadOnlySequence<byte> source, Span<byte> destination, out int bytesWritten)

Parameters

source ReadOnlySequence<byte>

The (possibly multi-segment) input sequence to hash.

destination Span<byte>

The buffer to receive the hash value. Must be at least 64 bytes.

bytesWritten int

When this method returns, the number of bytes written into destination.

Returns

bool

true if destination was large enough; otherwise, false.

TryHashData(ReadOnlySpan<byte>, Span<byte>, out int)

Computes the SHAKE256 hash of source using the default output size and writes it into destination.

public static bool TryHashData(ReadOnlySpan<byte> source, Span<byte> destination, out int bytesWritten)

Parameters

source ReadOnlySpan<byte>

The input data to hash.

destination Span<byte>

The buffer to receive the hash value. Must be at least 64 bytes.

bytesWritten int

When this method returns, the number of bytes written into destination.

Returns

bool

true if destination was large enough; otherwise, false.