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