package org.bouncycastle.crypto.agreement.kdf; import java.io.IOException; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.ASN1Encoding; import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.DEROctetString; import org.bouncycastle.asn1.DERSequence; import org.bouncycastle.asn1.DERTaggedObject; import org.bouncycastle.crypto.DataLengthException; import org.bouncycastle.crypto.DerivationFunction; import org.bouncycastle.crypto.DerivationParameters; import org.bouncycastle.crypto.Digest; import org.bouncycastle.util.Pack; /* loaded from: classes6.dex */ public class DHKEKGenerator implements DerivationFunction { private ASN1ObjectIdentifier algorithm; private final Digest digest; private int keySize; private byte[] partyAInfo; private byte[] z; @Override // org.bouncycastle.crypto.DerivationFunction public void init(DerivationParameters derivationParameters) { DHKDFParameters dHKDFParameters = (DHKDFParameters) derivationParameters; this.algorithm = dHKDFParameters.getAlgorithm(); this.keySize = dHKDFParameters.getKeySize(); this.z = dHKDFParameters.getZ(); this.partyAInfo = dHKDFParameters.getExtraInfo(); } public Digest getDigest() { return this.digest; } @Override // org.bouncycastle.crypto.DerivationFunction public int generateBytes(byte[] bArr, int i, int i2) throws DataLengthException, IllegalArgumentException { boolean z; 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()]; int i6 = 0; int i7 = 0; int i8 = 1; while (i7 < i5) { Digest digest = this.digest; byte[] bArr3 = this.z; digest.update(bArr3, i6, bArr3.length); ASN1EncodableVector aSN1EncodableVector = new ASN1EncodableVector(); ASN1EncodableVector aSN1EncodableVector2 = new ASN1EncodableVector(); aSN1EncodableVector2.add(this.algorithm); aSN1EncodableVector2.add(new DEROctetString(Pack.intToBigEndian(i8))); aSN1EncodableVector.add(new DERSequence(aSN1EncodableVector2)); if (this.partyAInfo != null) { z = true; aSN1EncodableVector.add(new DERTaggedObject(true, i6, new DEROctetString(this.partyAInfo))); } else { z = true; } aSN1EncodableVector.add(new DERTaggedObject(z, 2, new DEROctetString(Pack.intToBigEndian(this.keySize)))); try { byte[] encoded = new DERSequence(aSN1EncodableVector).getEncoded(ASN1Encoding.DER); this.digest.update(encoded, 0, encoded.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); } i8++; i7++; i6 = 0; } catch (IOException e) { StringBuilder sb = new StringBuilder("unable to encode parameter info: "); sb.append(e.getMessage()); throw new IllegalArgumentException(sb.toString()); } } this.digest.reset(); return (int) j; } public DHKEKGenerator(Digest digest) { this.digest = digest; } }