Table of Contents

Class Poly1305KeyGenerator

Namespace
Org.BouncyCastle.Crypto.Generators
Assembly
BouncyCastle.Cryptography.dll

Generates keys for the Poly1305 MAC.

public class Poly1305KeyGenerator : CipherKeyGenerator
Inheritance
Poly1305KeyGenerator
Inherited Members

Remarks

Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
The {@code r} value has a specific format with some bits required to be cleared, resulting in an effective 106 bit key.
A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the {@link #clamp(byte[])} method to clear the required bits.

Methods

CheckKey(byte[])

Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g.

k[0] ... k[15], r[0] ... r[15]
with the required bits in
r
cleared

as per Clamp(byte[]).

public static void CheckKey(byte[] key)

Parameters

key byte[]

Key.

Exceptions

ArgumentException

if the key is of the wrong length, or has invalid bits set in the

r
portion of the key.

Clamp(byte[])

Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by clearing required bits in the

r
(second 16 bytes) portion of the key.
Specifically:
  • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
  • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
public static void Clamp(byte[] key)

Parameters

key byte[]

a 32 byte key value

k[0] ... k[15], r[0] ... r[15]

Clamp(Span<byte>)

public static void Clamp(Span<byte> key)

Parameters

key Span<byte>

EngineGenerateKey()

Generates a 256 bit key in the format required for Poly1305 - e.g.

k[0] ... k[15], r[0] ... r[15]
with the required bits in
r
cleared

as per Clamp(byte[]).

protected override byte[] EngineGenerateKey()

Returns

byte[]

EngineGenerateKeyParameter()

protected override KeyParameter EngineGenerateKeyParameter()

Returns

KeyParameter

EngineInit(KeyGenerationParameters)

Initialises the key generator.

protected override void EngineInit(KeyGenerationParameters param)

Parameters

param KeyGenerationParameters

Remarks

Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored.

See Also