GordianKnot Digests

Overview

Digests are supported via the GordianDigestFactory interface.

GordianKnot supports most Digests available from BouncyCastle plus some additional algorithms.

JCA provides a subset of available algorithms as indicated

Digests

A digest is created by specifying a GordianDigestSpec which comprises the digestType/OutputLength plus StateLength if applicable. The digest can be used in much the same way as a JCA Digest, allowing reset, update and finalise methods.

Sample


/* Access factory */
final GordianFactory myBaseFactory = GordianGenerator.createFactory();
final GordianDigestFactory myDigestFactory = myBaseFactory.getDigestFactory();

/* Create digest */
final GordianDigestSpec mySpec = GordianDigestSpecBuilder.sha2(GordianLength.LEN_256);
final GordianDigest myDigest = myDigestFactory.createDigest(mySpec);

/* Calculate digest */
final byte[] myMessage = ...
myDigest.update(myMessage);
final byte[] myResult = myDigest.finish();
                    

Extensible Output functions

Some digests can operate as extensible output functions, although the functionality is not available in JCA.

The **GordianDigestSpec** for the digest will indicate whether the digest supports Xof or not via the **isXof()** call. If the digest supports Xof then the digest will present the **GordianXof** interface

Sample

/* Access factory */ final GordianFactory myBaseFactory = GordianGenerator.createFactory(); final GordianDigestFactory myDigestFactory = myBaseFactory.getDigestFactory(); /* Create digest */ final GordianDigestSpec mySpec = GordianDigestSpecBuilder.blake2X(GordianLength.LEN_256); final GordianXof myXof = (GordianXof) myDigestFactory.createDigest(mySpec); /* Calculate digest */ final byte[] myMessage = ... myDigest.update(myMessage); final byte[] myOutput = new byte[200]; myDigest.output(myOutput, 0, 100); myDigest.output(myOutput, 100, 100);

Algorithms

The following algorithms are supported.

Algorithm StateLength/Variants OutputLengths JCA Xof Notes
SHA2 512 224,256,384,512 Y
256 224,256 Y
Tiger 192 Y
WHIRLPOOL 512 Y
Streebog 512 512 Y GOST3411-2012
256 256 Y
GOST 256 Y GOST3411-94
RipeMD 128 128,160 Y
256 256,320 Y
SHA3 224,256,384,512 Y
Skein 256 128,160,224,256 Y
512 128,160,224,256,384,512 Y
1024 384,512,1024 Y
SM3 256 Y
Blake2s 256 128,160,224,256 Y Y
Blake2b 512 160,256,384,512 Y Y
Blake3 512 256,512 Y Y
SHA1 160 Y
MD2 128 Y
MD4 128 Y
MD5 128 Y
SHAKE 128 128,160,224,256 Y
256 256,384,512 Y
Kupyna 256,384,512 Y DSTU7564
JH 224,256,384,512
Groestl 224,256,384,512
CubeHash 224,256,384,512
Kangaroo 128 128,160,224,256 Kangaroo12
256 256,384,512 Marsupilami14
Haraka 256, 512 256 Y Note that input must be same length as stateLength
Ascon 256 Y
ISAP 256
PhotonBeetle 256
Sparkle 256, 384
Xoodyak 256