127 lines
5.0 KiB
Java
127 lines
5.0 KiB
Java
|
package org.bouncycastle.crypto.prng;
|
||
|
|
||
|
import java.security.SecureRandom;
|
||
|
import org.bouncycastle.crypto.BlockCipher;
|
||
|
import org.bouncycastle.crypto.Digest;
|
||
|
import org.bouncycastle.crypto.Mac;
|
||
|
import org.bouncycastle.crypto.prng.drbg.CTRSP800DRBG;
|
||
|
import org.bouncycastle.crypto.prng.drbg.HMacSP800DRBG;
|
||
|
import org.bouncycastle.crypto.prng.drbg.HashSP800DRBG;
|
||
|
import org.bouncycastle.crypto.prng.drbg.SP80090DRBG;
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
public class SP800SecureRandomBuilder {
|
||
|
private int entropyBitsRequired;
|
||
|
private final EntropySourceProvider entropySourceProvider;
|
||
|
private byte[] personalizationString;
|
||
|
private final SecureRandom random;
|
||
|
private int securityStrength;
|
||
|
|
||
|
public SP800SecureRandomBuilder setSecurityStrength(int i) {
|
||
|
this.securityStrength = i;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandomBuilder setPersonalizationString(byte[] bArr) {
|
||
|
this.personalizationString = bArr;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandomBuilder setEntropyBitsRequired(int i) {
|
||
|
this.entropyBitsRequired = i;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandom buildHash(Digest digest, byte[] bArr, boolean z) {
|
||
|
return new SP800SecureRandom(this.random, this.entropySourceProvider.get(this.entropyBitsRequired), new HashDRBGProvider(digest, bArr, this.personalizationString, this.securityStrength), z);
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandom buildHMAC(Mac mac, byte[] bArr, boolean z) {
|
||
|
return new SP800SecureRandom(this.random, this.entropySourceProvider.get(this.entropyBitsRequired), new HMacDRBGProvider(mac, bArr, this.personalizationString, this.securityStrength), z);
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandom buildCTR(BlockCipher blockCipher, int i, byte[] bArr, boolean z) {
|
||
|
return new SP800SecureRandom(this.random, this.entropySourceProvider.get(this.entropyBitsRequired), new CTRDRBGProvider(blockCipher, i, bArr, this.personalizationString, this.securityStrength), z);
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
static class CTRDRBGProvider implements DRBGProvider {
|
||
|
private final BlockCipher blockCipher;
|
||
|
private final int keySizeInBits;
|
||
|
private final byte[] nonce;
|
||
|
private final byte[] personalizationString;
|
||
|
private final int securityStrength;
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.prng.DRBGProvider
|
||
|
public SP80090DRBG get(EntropySource entropySource) {
|
||
|
return new CTRSP800DRBG(this.blockCipher, this.keySizeInBits, this.securityStrength, entropySource, this.personalizationString, this.nonce);
|
||
|
}
|
||
|
|
||
|
public CTRDRBGProvider(BlockCipher blockCipher, int i, byte[] bArr, byte[] bArr2, int i2) {
|
||
|
this.blockCipher = blockCipher;
|
||
|
this.keySizeInBits = i;
|
||
|
this.nonce = bArr;
|
||
|
this.personalizationString = bArr2;
|
||
|
this.securityStrength = i2;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
static class HMacDRBGProvider implements DRBGProvider {
|
||
|
private final Mac hMac;
|
||
|
private final byte[] nonce;
|
||
|
private final byte[] personalizationString;
|
||
|
private final int securityStrength;
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.prng.DRBGProvider
|
||
|
public SP80090DRBG get(EntropySource entropySource) {
|
||
|
return new HMacSP800DRBG(this.hMac, this.securityStrength, entropySource, this.personalizationString, this.nonce);
|
||
|
}
|
||
|
|
||
|
public HMacDRBGProvider(Mac mac, byte[] bArr, byte[] bArr2, int i) {
|
||
|
this.hMac = mac;
|
||
|
this.nonce = bArr;
|
||
|
this.personalizationString = bArr2;
|
||
|
this.securityStrength = i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
static class HashDRBGProvider implements DRBGProvider {
|
||
|
private final Digest digest;
|
||
|
private final byte[] nonce;
|
||
|
private final byte[] personalizationString;
|
||
|
private final int securityStrength;
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.prng.DRBGProvider
|
||
|
public SP80090DRBG get(EntropySource entropySource) {
|
||
|
return new HashSP800DRBG(this.digest, this.securityStrength, entropySource, this.personalizationString, this.nonce);
|
||
|
}
|
||
|
|
||
|
public HashDRBGProvider(Digest digest, byte[] bArr, byte[] bArr2, int i) {
|
||
|
this.digest = digest;
|
||
|
this.nonce = bArr;
|
||
|
this.personalizationString = bArr2;
|
||
|
this.securityStrength = i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandomBuilder(EntropySourceProvider entropySourceProvider) {
|
||
|
this.securityStrength = 256;
|
||
|
this.entropyBitsRequired = 256;
|
||
|
this.random = null;
|
||
|
this.entropySourceProvider = entropySourceProvider;
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandomBuilder(SecureRandom secureRandom, boolean z) {
|
||
|
this.securityStrength = 256;
|
||
|
this.entropyBitsRequired = 256;
|
||
|
this.random = secureRandom;
|
||
|
this.entropySourceProvider = new BasicEntropySourceProvider(secureRandom, z);
|
||
|
}
|
||
|
|
||
|
public SP800SecureRandomBuilder() {
|
||
|
this(new SecureRandom(), false);
|
||
|
}
|
||
|
}
|