what-the-bank/sources/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java

90 lines
3.3 KiB
Java

package org.bouncycastle.crypto.generators;
import org.bouncycastle.crypto.DataLengthException;
import org.bouncycastle.crypto.DerivationParameters;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.DigestDerivationFunction;
import org.bouncycastle.crypto.params.ISO18033KDFParameters;
import org.bouncycastle.crypto.params.KDFParameters;
import org.bouncycastle.util.Pack;
/* loaded from: classes6.dex */
public class BaseKDFBytesGenerator implements DigestDerivationFunction {
private int counterStart;
private Digest digest;
private byte[] iv;
private byte[] shared;
@Override // org.bouncycastle.crypto.DerivationFunction
public void init(DerivationParameters derivationParameters) {
if (derivationParameters instanceof KDFParameters) {
KDFParameters kDFParameters = (KDFParameters) derivationParameters;
this.shared = kDFParameters.getSharedSecret();
this.iv = kDFParameters.getIV();
} else {
if (!(derivationParameters instanceof ISO18033KDFParameters)) {
throw new IllegalArgumentException("KDF parameters required for generator");
}
this.shared = ((ISO18033KDFParameters) derivationParameters).getSeed();
this.iv = null;
}
}
@Override // org.bouncycastle.crypto.DigestDerivationFunction
public Digest getDigest() {
return this.digest;
}
@Override // org.bouncycastle.crypto.DerivationFunction
public int generateBytes(byte[] bArr, int i, int i2) throws DataLengthException, IllegalArgumentException {
int i3 = i2;
int i4 = i;
if (bArr.length - i3 < i4) {
throw new DataLengthException("output buffer too small");
}
long j = i3;
int digestSize = this.digest.getDigestSize();
if (j > 8589934591L) {
throw new IllegalArgumentException("Output length too large");
}
long j2 = digestSize;
int i5 = (int) (((j + j2) - 1) / j2);
byte[] bArr2 = new byte[this.digest.getDigestSize()];
byte[] bArr3 = new byte[4];
Pack.intToBigEndian(this.counterStart, bArr3, 0);
int i6 = this.counterStart & (-256);
for (int i7 = 0; i7 < i5; i7++) {
Digest digest = this.digest;
byte[] bArr4 = this.shared;
digest.update(bArr4, 0, bArr4.length);
this.digest.update(bArr3, 0, 4);
byte[] bArr5 = this.iv;
if (bArr5 != null) {
this.digest.update(bArr5, 0, bArr5.length);
}
this.digest.doFinal(bArr2, 0);
if (i3 > digestSize) {
System.arraycopy(bArr2, 0, bArr, i4, digestSize);
i4 += digestSize;
i3 -= digestSize;
} else {
System.arraycopy(bArr2, 0, bArr, i4, i3);
}
byte b = (byte) (bArr3[3] + 1);
bArr3[3] = b;
if (b == 0) {
i6 += 256;
Pack.intToBigEndian(i6, bArr3, 0);
}
}
this.digest.reset();
return (int) j;
}
/* JADX INFO: Access modifiers changed from: protected */
public BaseKDFBytesGenerator(int i, Digest digest) {
this.counterStart = i;
this.digest = digest;
}
}