blob: 11910494ede028e35ac72c977666389e2f103c4c [file] [log] [blame]
package org.bouncycastle.jcajce.provider.digest;
import org.bouncycastle.crypto.CipherKeyGenerator;
import org.bouncycastle.crypto.digests.SkeinDigest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.macs.SkeinMac;
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
public class Skein
{
private Skein()
{
}
public static class DigestSkein256
extends BCMessageDigest
implements Cloneable
{
public DigestSkein256(int outputSize)
{
super(new SkeinDigest(SkeinDigest.SKEIN_256, outputSize));
}
public Object clone()
throws CloneNotSupportedException
{
BCMessageDigest d = (BCMessageDigest)super.clone();
d.digest = new SkeinDigest((SkeinDigest)digest);
return d;
}
}
public static class Digest_256_128
extends DigestSkein256
{
public Digest_256_128()
{
super(128);
}
}
public static class Digest_256_160
extends DigestSkein256
{
public Digest_256_160()
{
super(160);
}
}
public static class Digest_256_224
extends DigestSkein256
{
public Digest_256_224()
{
super(224);
}
}
public static class Digest_256_256
extends DigestSkein256
{
public Digest_256_256()
{
super(256);
}
}
public static class DigestSkein512
extends BCMessageDigest
implements Cloneable
{
public DigestSkein512(int outputSize)
{
super(new SkeinDigest(SkeinDigest.SKEIN_512, outputSize));
}
public Object clone()
throws CloneNotSupportedException
{
BCMessageDigest d = (BCMessageDigest)super.clone();
d.digest = new SkeinDigest((SkeinDigest)digest);
return d;
}
}
public static class Digest_512_128
extends DigestSkein512
{
public Digest_512_128()
{
super(128);
}
}
public static class Digest_512_160
extends DigestSkein512
{
public Digest_512_160()
{
super(160);
}
}
public static class Digest_512_224
extends DigestSkein512
{
public Digest_512_224()
{
super(224);
}
}
public static class Digest_512_256
extends DigestSkein512
{
public Digest_512_256()
{
super(256);
}
}
public static class Digest_512_384
extends DigestSkein512
{
public Digest_512_384()
{
super(384);
}
}
public static class Digest_512_512
extends DigestSkein512
{
public Digest_512_512()
{
super(512);
}
}
public static class DigestSkein1024
extends BCMessageDigest
implements Cloneable
{
public DigestSkein1024(int outputSize)
{
super(new SkeinDigest(SkeinDigest.SKEIN_1024, outputSize));
}
public Object clone()
throws CloneNotSupportedException
{
BCMessageDigest d = (BCMessageDigest)super.clone();
d.digest = new SkeinDigest((SkeinDigest)digest);
return d;
}
}
public static class Digest_1024_384
extends DigestSkein1024
{
public Digest_1024_384()
{
super(384);
}
}
public static class Digest_1024_512
extends DigestSkein1024
{
public Digest_1024_512()
{
super(512);
}
}
public static class Digest_1024_1024
extends DigestSkein1024
{
public Digest_1024_1024()
{
super(1024);
}
}
/**
* Skein HMac
*/
public static class HashMac_256_128
extends BaseMac
{
public HashMac_256_128()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_256, 128)));
}
}
public static class HashMac_256_160
extends BaseMac
{
public HashMac_256_160()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_256, 160)));
}
}
public static class HashMac_256_224
extends BaseMac
{
public HashMac_256_224()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_256, 224)));
}
}
public static class HashMac_256_256
extends BaseMac
{
public HashMac_256_256()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_256, 256)));
}
}
public static class HashMac_512_128
extends BaseMac
{
public HashMac_512_128()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_512, 128)));
}
}
public static class HashMac_512_160
extends BaseMac
{
public HashMac_512_160()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_512, 160)));
}
}
public static class HashMac_512_224
extends BaseMac
{
public HashMac_512_224()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_512, 224)));
}
}
public static class HashMac_512_256
extends BaseMac
{
public HashMac_512_256()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_512, 256)));
}
}
public static class HashMac_512_384
extends BaseMac
{
public HashMac_512_384()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_512, 384)));
}
}
public static class HashMac_512_512
extends BaseMac
{
public HashMac_512_512()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_512, 512)));
}
}
public static class HashMac_1024_384
extends BaseMac
{
public HashMac_1024_384()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_1024, 384)));
}
}
public static class HashMac_1024_512
extends BaseMac
{
public HashMac_1024_512()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_1024, 512)));
}
}
public static class HashMac_1024_1024
extends BaseMac
{
public HashMac_1024_1024()
{
super(new HMac(new SkeinDigest(SkeinDigest.SKEIN_1024, 1024)));
}
}
public static class HMacKeyGenerator_256_128
extends BaseKeyGenerator
{
public HMacKeyGenerator_256_128()
{
super("HMACSkein-256-128", 128, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_256_160
extends BaseKeyGenerator
{
public HMacKeyGenerator_256_160()
{
super("HMACSkein-256-160", 160, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_256_224
extends BaseKeyGenerator
{
public HMacKeyGenerator_256_224()
{
super("HMACSkein-256-224", 224, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_256_256
extends BaseKeyGenerator
{
public HMacKeyGenerator_256_256()
{
super("HMACSkein-256-256", 256, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_512_128
extends BaseKeyGenerator
{
public HMacKeyGenerator_512_128()
{
super("HMACSkein-512-128", 128, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_512_160
extends BaseKeyGenerator
{
public HMacKeyGenerator_512_160()
{
super("HMACSkein-512-160", 160, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_512_224
extends BaseKeyGenerator
{
public HMacKeyGenerator_512_224()
{
super("HMACSkein-512-224", 224, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_512_256
extends BaseKeyGenerator
{
public HMacKeyGenerator_512_256()
{
super("HMACSkein-512-256", 256, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_512_384
extends BaseKeyGenerator
{
public HMacKeyGenerator_512_384()
{
super("HMACSkein-512-384", 384, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_512_512
extends BaseKeyGenerator
{
public HMacKeyGenerator_512_512()
{
super("HMACSkein-512-512", 512, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_1024_384
extends BaseKeyGenerator
{
public HMacKeyGenerator_1024_384()
{
super("HMACSkein-1024-384", 384, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_1024_512
extends BaseKeyGenerator
{
public HMacKeyGenerator_1024_512()
{
super("HMACSkein-1024-512", 512, new CipherKeyGenerator());
}
}
public static class HMacKeyGenerator_1024_1024
extends BaseKeyGenerator
{
public HMacKeyGenerator_1024_1024()
{
super("HMACSkein-1024-1024", 1024, new CipherKeyGenerator());
}
}
/*
* Skein-MAC
*/
public static class SkeinMac_256_128
extends BaseMac
{
public SkeinMac_256_128()
{
super(new SkeinMac(SkeinMac.SKEIN_256, 128));
}
}
public static class SkeinMac_256_160
extends BaseMac
{
public SkeinMac_256_160()
{
super(new SkeinMac(SkeinMac.SKEIN_256, 160));
}
}
public static class SkeinMac_256_224
extends BaseMac
{
public SkeinMac_256_224()
{
super(new SkeinMac(SkeinMac.SKEIN_256, 224));
}
}
public static class SkeinMac_256_256
extends BaseMac
{
public SkeinMac_256_256()
{
super(new SkeinMac(SkeinMac.SKEIN_256, 256));
}
}
public static class SkeinMac_512_128
extends BaseMac
{
public SkeinMac_512_128()
{
super(new SkeinMac(SkeinMac.SKEIN_512, 128));
}
}
public static class SkeinMac_512_160
extends BaseMac
{
public SkeinMac_512_160()
{
super(new SkeinMac(SkeinMac.SKEIN_512, 160));
}
}
public static class SkeinMac_512_224
extends BaseMac
{
public SkeinMac_512_224()
{
super(new SkeinMac(SkeinMac.SKEIN_512, 224));
}
}
public static class SkeinMac_512_256
extends BaseMac
{
public SkeinMac_512_256()
{
super(new SkeinMac(SkeinMac.SKEIN_512, 256));
}
}
public static class SkeinMac_512_384
extends BaseMac
{
public SkeinMac_512_384()
{
super(new SkeinMac(SkeinMac.SKEIN_512, 384));
}
}
public static class SkeinMac_512_512
extends BaseMac
{
public SkeinMac_512_512()
{
super(new SkeinMac(SkeinMac.SKEIN_512, 512));
}
}
public static class SkeinMac_1024_384
extends BaseMac
{
public SkeinMac_1024_384()
{
super(new SkeinMac(SkeinMac.SKEIN_1024, 384));
}
}
public static class SkeinMac_1024_512
extends BaseMac
{
public SkeinMac_1024_512()
{
super(new SkeinMac(SkeinMac.SKEIN_1024, 512));
}
}
public static class SkeinMac_1024_1024
extends BaseMac
{
public SkeinMac_1024_1024()
{
super(new SkeinMac(SkeinMac.SKEIN_1024, 1024));
}
}
public static class SkeinMacKeyGenerator_256_128
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_256_128()
{
super("Skein-MAC-256-128", 128, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_256_160
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_256_160()
{
super("Skein-MAC-256-160", 160, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_256_224
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_256_224()
{
super("Skein-MAC-256-224", 224, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_256_256
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_256_256()
{
super("Skein-MAC-256-256", 256, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_512_128
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_512_128()
{
super("Skein-MAC-512-128", 128, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_512_160
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_512_160()
{
super("Skein-MAC-512-160", 160, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_512_224
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_512_224()
{
super("Skein-MAC-512-224", 224, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_512_256
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_512_256()
{
super("Skein-MAC-512-256", 256, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_512_384
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_512_384()
{
super("Skein-MAC-512-384", 384, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_512_512
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_512_512()
{
super("Skein-MAC-512-512", 512, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_1024_384
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_1024_384()
{
super("Skein-MAC-1024-384", 384, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_1024_512
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_1024_512()
{
super("Skein-MAC-1024-512", 512, new CipherKeyGenerator());
}
}
public static class SkeinMacKeyGenerator_1024_1024
extends BaseKeyGenerator
{
public SkeinMacKeyGenerator_1024_1024()
{
super("Skein-MAC-1024-1024", 1024, new CipherKeyGenerator());
}
}
public static class Mappings
extends DigestAlgorithmProvider
{
private static final String PREFIX = Skein.class.getName();
public Mappings()
{
}
public void configure(ConfigurableProvider provider)
{
// Skein sizes as used in "The Skein Hash Function Family 1.3"
provider.addAlgorithm("MessageDigest.Skein-256-128", PREFIX + "$Digest_256_128");
provider.addAlgorithm("MessageDigest.Skein-256-160", PREFIX + "$Digest_256_160");
provider.addAlgorithm("MessageDigest.Skein-256-224", PREFIX + "$Digest_256_224");
provider.addAlgorithm("MessageDigest.Skein-256-256", PREFIX + "$Digest_256_256");
provider.addAlgorithm("MessageDigest.Skein-512-128", PREFIX + "$Digest_512_128");
provider.addAlgorithm("MessageDigest.Skein-512-160", PREFIX + "$Digest_512_160");
provider.addAlgorithm("MessageDigest.Skein-512-224", PREFIX + "$Digest_512_224");
provider.addAlgorithm("MessageDigest.Skein-512-256", PREFIX + "$Digest_512_256");
provider.addAlgorithm("MessageDigest.Skein-512-384", PREFIX + "$Digest_512_384");
provider.addAlgorithm("MessageDigest.Skein-512-512", PREFIX + "$Digest_512_512");
provider.addAlgorithm("MessageDigest.Skein-1024-384", PREFIX + "$Digest_1024_384");
provider.addAlgorithm("MessageDigest.Skein-1024-512", PREFIX + "$Digest_1024_512");
provider.addAlgorithm("MessageDigest.Skein-1024-1024", PREFIX + "$Digest_1024_1024");
addHMACAlgorithm(provider, "Skein-256-128", PREFIX + "$HashMac_256_128", PREFIX + "$HMacKeyGenerator_256_128");
addHMACAlgorithm(provider, "Skein-256-160", PREFIX + "$HashMac_256_160", PREFIX + "$HMacKeyGenerator_256_160");
addHMACAlgorithm(provider, "Skein-256-224", PREFIX + "$HashMac_256_224", PREFIX + "$HMacKeyGenerator_256_224");
addHMACAlgorithm(provider, "Skein-256-256", PREFIX + "$HashMac_256_256", PREFIX + "$HMacKeyGenerator_256_256");
addHMACAlgorithm(provider, "Skein-512-128", PREFIX + "$HashMac_512_128", PREFIX + "$HMacKeyGenerator_512_128");
addHMACAlgorithm(provider, "Skein-512-160", PREFIX + "$HashMac_512_160", PREFIX + "$HMacKeyGenerator_512_160");
addHMACAlgorithm(provider, "Skein-512-224", PREFIX + "$HashMac_512_224", PREFIX + "$HMacKeyGenerator_512_224");
addHMACAlgorithm(provider, "Skein-512-256", PREFIX + "$HashMac_512_256", PREFIX + "$HMacKeyGenerator_512_256");
addHMACAlgorithm(provider, "Skein-512-384", PREFIX + "$HashMac_512_384", PREFIX + "$HMacKeyGenerator_512_384");
addHMACAlgorithm(provider, "Skein-512-512", PREFIX + "$HashMac_512_512", PREFIX + "$HMacKeyGenerator_512_512");
addHMACAlgorithm(provider, "Skein-1024-384", PREFIX + "$HashMac_1024_384", PREFIX + "$HMacKeyGenerator_1024_384");
addHMACAlgorithm(provider, "Skein-1024-512", PREFIX + "$HashMac_1024_512", PREFIX + "$HMacKeyGenerator_1024_512");
addHMACAlgorithm(provider, "Skein-1024-1024", PREFIX + "$HashMac_1024_1024", PREFIX + "$HMacKeyGenerator_1024_1024");
addSkeinMacAlgorithm(provider, 256, 128);
addSkeinMacAlgorithm(provider, 256, 160);
addSkeinMacAlgorithm(provider, 256, 224);
addSkeinMacAlgorithm(provider, 256, 256);
addSkeinMacAlgorithm(provider, 512, 128);
addSkeinMacAlgorithm(provider, 512, 160);
addSkeinMacAlgorithm(provider, 512, 224);
addSkeinMacAlgorithm(provider, 512, 256);
addSkeinMacAlgorithm(provider, 512, 384);
addSkeinMacAlgorithm(provider, 512, 512);
addSkeinMacAlgorithm(provider, 1024, 384);
addSkeinMacAlgorithm(provider, 1024, 512);
addSkeinMacAlgorithm(provider, 1024, 1024);
}
private void addSkeinMacAlgorithm(ConfigurableProvider provider, int blockSize, int outputSize)
{
String mainName = "Skein-MAC-" + blockSize + "-" + outputSize;
String algorithmClassName = PREFIX + "$SkeinMac_" + blockSize + "_" + outputSize;
String keyGeneratorClassName = PREFIX + "$SkeinMacKeyGenerator_" + blockSize + "_" + outputSize;
provider.addAlgorithm("Mac." + mainName, algorithmClassName);
provider.addAlgorithm("Alg.Alias.Mac.Skein-MAC" + blockSize + "/" + outputSize, mainName);
provider.addAlgorithm("KeyGenerator." + mainName, keyGeneratorClassName);
provider.addAlgorithm("Alg.Alias.KeyGenerator.Skein-MAC" + blockSize + "/" + outputSize, mainName);
}
}
}