📄 basekdfbytesgenerator.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: BaseKDFBytesGenerator.java
package org.bouncycastle.crypto.generators;
import org.bouncycastle.crypto.*;
import org.bouncycastle.crypto.params.ISO18033KDFParameters;
import org.bouncycastle.crypto.params.KDFParameters;
public class BaseKDFBytesGenerator
implements DerivationFunction
{
private int counterStart;
private Digest digest;
private byte shared[];
private byte iv[];
protected BaseKDFBytesGenerator(int counterStart, Digest digest)
{
this.counterStart = counterStart;
this.digest = digest;
}
public void init(DerivationParameters param)
{
if (param instanceof KDFParameters)
{
KDFParameters p = (KDFParameters)param;
shared = p.getSharedSecret();
iv = p.getIV();
} else
if (param instanceof ISO18033KDFParameters)
{
ISO18033KDFParameters p = (ISO18033KDFParameters)param;
shared = p.getSeed();
iv = null;
} else
{
throw new IllegalArgumentException("KDF parameters required for KDF2Generator");
}
}
public Digest getDigest()
{
return digest;
}
public int generateBytes(byte out[], int outOff, int len)
throws DataLengthException, IllegalArgumentException
{
if (out.length - len < outOff)
throw new DataLengthException("output buffer too small");
long oBytes = len;
int outLen = digest.getDigestSize();
if (oBytes > 0x1ffffffffL)
throw new IllegalArgumentException("Output length too large");
int cThreshold = (int)(((oBytes + (long)outLen) - 1L) / (long)outLen);
byte dig[] = null;
dig = new byte[digest.getDigestSize()];
int counter = counterStart;
for (int i = 0; i < cThreshold; i++)
{
digest.update(shared, 0, shared.length);
digest.update((byte)(counter >> 24));
digest.update((byte)(counter >> 16));
digest.update((byte)(counter >> 8));
digest.update((byte)counter);
if (iv != null)
digest.update(iv, 0, iv.length);
digest.doFinal(dig, 0);
if (len > outLen)
{
System.arraycopy(dig, 0, out, outOff, outLen);
outOff += outLen;
len -= outLen;
} else
{
System.arraycopy(dig, 0, out, outOff, len);
}
counter++;
}
digest.reset();
return len;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -