Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/macs/HMac.java')
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/macs/HMac.java231
1 files changed, 0 insertions, 231 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/macs/HMac.java b/core/src/main/java/org/bouncycastle/crypto/macs/HMac.java
deleted file mode 100644
index d4345d9b..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/macs/HMac.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package org.bouncycastle.crypto.macs;
-
-import java.util.Hashtable;
-
-import org.bouncycastle.crypto.CipherParameters;
-import org.bouncycastle.crypto.Digest;
-import org.bouncycastle.crypto.ExtendedDigest;
-import org.bouncycastle.crypto.Mac;
-import org.bouncycastle.crypto.params.KeyParameter;
-import org.bouncycastle.util.Integers;
-import org.bouncycastle.util.Memoable;
-
-/**
- * HMAC implementation based on RFC2104
- *
- * H(K XOR opad, H(K XOR ipad, text))
- */
-public class HMac
- implements Mac
-{
- private final static byte IPAD = (byte)0x36;
- private final static byte OPAD = (byte)0x5C;
-
- private Digest digest;
- private int digestSize;
- private int blockLength;
- private Memoable ipadState;
- private Memoable opadState;
-
- private byte[] inputPad;
- private byte[] outputBuf;
-
- private static Hashtable blockLengths;
-
- static
- {
- blockLengths = new Hashtable();
-
- blockLengths.put("GOST3411", Integers.valueOf(32));
-
- blockLengths.put("MD2", Integers.valueOf(16));
- blockLengths.put("MD4", Integers.valueOf(64));
- blockLengths.put("MD5", Integers.valueOf(64));
-
- blockLengths.put("RIPEMD128", Integers.valueOf(64));
- blockLengths.put("RIPEMD160", Integers.valueOf(64));
-
- blockLengths.put("SHA-1", Integers.valueOf(64));
- blockLengths.put("SHA-224", Integers.valueOf(64));
- blockLengths.put("SHA-256", Integers.valueOf(64));
- blockLengths.put("SHA-384", Integers.valueOf(128));
- blockLengths.put("SHA-512", Integers.valueOf(128));
-
- blockLengths.put("Tiger", Integers.valueOf(64));
- blockLengths.put("Whirlpool", Integers.valueOf(64));
- }
-
- private static int getByteLength(
- Digest digest)
- {
- if (digest instanceof ExtendedDigest)
- {
- return ((ExtendedDigest)digest).getByteLength();
- }
-
- Integer b = (Integer)blockLengths.get(digest.getAlgorithmName());
-
- if (b == null)
- {
- throw new IllegalArgumentException("unknown digest passed: " + digest.getAlgorithmName());
- }
-
- return b.intValue();
- }
-
- /**
- * Base constructor for one of the standard digest algorithms that the
- * byteLength of the algorithm is know for.
- *
- * @param digest the digest.
- */
- public HMac(
- Digest digest)
- {
- this(digest, getByteLength(digest));
- }
-
- private HMac(
- Digest digest,
- int byteLength)
- {
- this.digest = digest;
- this.digestSize = digest.getDigestSize();
- this.blockLength = byteLength;
- this.inputPad = new byte[blockLength];
- this.outputBuf = new byte[blockLength + digestSize];
- }
-
- public String getAlgorithmName()
- {
- return digest.getAlgorithmName() + "/HMAC";
- }
-
- public Digest getUnderlyingDigest()
- {
- return digest;
- }
-
- public void init(
- CipherParameters params)
- {
- digest.reset();
-
- byte[] key = ((KeyParameter)params).getKey();
- int keyLength = key.length;
-
- if (keyLength > blockLength)
- {
- digest.update(key, 0, keyLength);
- digest.doFinal(inputPad, 0);
-
- keyLength = digestSize;
- }
- else
- {
- System.arraycopy(key, 0, inputPad, 0, keyLength);
- }
-
- for (int i = keyLength; i < inputPad.length; i++)
- {
- inputPad[i] = 0;
- }
-
- System.arraycopy(inputPad, 0, outputBuf, 0, blockLength);
-
- xorPad(inputPad, blockLength, IPAD);
- xorPad(outputBuf, blockLength, OPAD);
-
- if (digest instanceof Memoable)
- {
- opadState = ((Memoable)digest).copy();
-
- ((Digest)opadState).update(outputBuf, 0, blockLength);
- }
-
- digest.update(inputPad, 0, inputPad.length);
-
- if (digest instanceof Memoable)
- {
- ipadState = ((Memoable)digest).copy();
- }
- }
-
- public int getMacSize()
- {
- return digestSize;
- }
-
- public void update(
- byte in)
- {
- digest.update(in);
- }
-
- public void update(
- byte[] in,
- int inOff,
- int len)
- {
- digest.update(in, inOff, len);
- }
-
- public int doFinal(
- byte[] out,
- int outOff)
- {
- digest.doFinal(outputBuf, blockLength);
-
- if (opadState != null)
- {
- ((Memoable)digest).reset(opadState);
- digest.update(outputBuf, blockLength, digest.getDigestSize());
- }
- else
- {
- digest.update(outputBuf, 0, outputBuf.length);
- }
-
- int len = digest.doFinal(out, outOff);
-
- for (int i = blockLength; i < outputBuf.length; i++)
- {
- outputBuf[i] = 0;
- }
-
- if (ipadState != null)
- {
- ((Memoable)digest).reset(ipadState);
- }
- else
- {
- digest.update(inputPad, 0, inputPad.length);
- }
-
- return len;
- }
-
- /**
- * Reset the mac generator.
- */
- public void reset()
- {
- /*
- * reset the underlying digest.
- */
- digest.reset();
-
- /*
- * reinitialize the digest.
- */
- digest.update(inputPad, 0, inputPad.length);
- }
-
- private static void xorPad(byte[] pad, int len, byte n)
- {
- for (int i = 0; i < len; ++i)
- {
- pad[i] ^= n;
- }
- }
-}