⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basekdfbytesgenerator.java

📁 java 文件下载器。可自定义
💻 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 + -