<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.0" />

Org.BouncyCastle.Crypto.Digests.TupleHash

public class TupleHash : IXof, IDigest
TupleHash - a hash designed to simply hash a tuple of input strings, any or all of which may be empty strings, in an unambiguous way with an optional XOF mode.

From NIST Special Publication 800-185 - SHA-3 Derived Functions:cSHAKE, KMAC, TupleHash and ParallelHash

namespace Org.BouncyCastle.Crypto.Digests { public class TupleHash : IXof, IDigest { public virtual string AlgorithmName { get; } public TupleHash(int bitLength, byte[] S); public TupleHash(int bitLength, byte[] S, int outputSize); public TupleHash(TupleHash original); public virtual int GetByteLength(); public virtual int GetDigestSize(); public virtual void Update(byte b); public virtual void BlockUpdate(byte[] inBuf, int inOff, int len); public virtual int DoFinal(byte[] outBuf, int outOff); public virtual int OutputFinal(byte[] outBuf, int outOff, int outLen); public virtual int Output(byte[] outBuf, int outOff, int outLen); public virtual void Reset(); } } namespace Org.BouncyCastle.Math.EC { public abstract class ECFieldElement { public abstract string FieldName { get; } public abstract int FieldSize { get; } public virtual int BitLength { get; } public virtual bool IsOne { get; } public virtual bool IsZero { get; } public abstract BigInteger ToBigInteger(); public abstract ECFieldElement Add(ECFieldElement b); public abstract ECFieldElement AddOne(); public abstract ECFieldElement Subtract(ECFieldElement b); public abstract ECFieldElement Multiply(ECFieldElement b); public abstract ECFieldElement Divide(ECFieldElement b); public abstract ECFieldElement Negate(); public abstract ECFieldElement Square(); public abstract ECFieldElement Invert(); public abstract ECFieldElement Sqrt(); public virtual ECFieldElement MultiplyMinusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y); public virtual ECFieldElement MultiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y); public virtual ECFieldElement SquareMinusProduct(ECFieldElement x, ECFieldElement y); public virtual ECFieldElement SquarePlusProduct(ECFieldElement x, ECFieldElement y); public virtual ECFieldElement SquarePow(int pow); public virtual bool TestBitZero(); public virtual bool Equals(ECFieldElement other); public virtual byte[] GetEncoded(); public virtual int GetEncodedLength(); public virtual void EncodeTo(byte[] buf, int off); protected ECFieldElement(); } }