org.bouncycastle.crypto.generators
Class Poly1305KeyGenerator
java.lang.Object
|
+--org.bouncycastle.crypto.CipherKeyGenerator
|
+--org.bouncycastle.crypto.generators.Poly1305KeyGenerator
- public class Poly1305KeyGenerator
- extends CipherKeyGenerator
Generates keys for the Poly1305 MAC.
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.
- See Also:
Poly1305
Method Summary |
static void |
checkKey(byte[] key)
Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. |
static void |
clamp(byte[] key)
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. |
byte[] |
generateKey()
Generates a 256 bit key in the format required for Poly1305 - e.g. |
void |
init(KeyGenerationParameters param)
Initialises the key generator. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Poly1305KeyGenerator
public Poly1305KeyGenerator()
init
public void init(KeyGenerationParameters param)
- Initialises the key generator.
Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored.
- Overrides:
init
in class CipherKeyGenerator
- Following copied from class:
org.bouncycastle.crypto.CipherKeyGenerator
- Parameters:
param
- the parameters to be used for key generation
generateKey
public byte[] generateKey()
- 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[])
.
- Overrides:
generateKey
in class CipherKeyGenerator
- Following copied from class:
org.bouncycastle.crypto.CipherKeyGenerator
- Returns:
- a byte array containing the key value.
clamp
public static void clamp(byte[] key)
- 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})
- Parameters:
key
- a 32 byte key value k[0] [] k[15], r[0] [] r[15]
checkKey
public static void checkKey(byte[] key)
- 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[])
.
- Throws:
java.lang.IllegalArgumentException
- if the key is of the wrong length, or has invalid bits set
in the r portion of the key.