149 lines
6.2 KiB
Java
149 lines
6.2 KiB
Java
|
package org.bouncycastle.jcajce.provider.asymmetric.util;
|
||
|
|
||
|
import java.security.AlgorithmParameters;
|
||
|
import java.security.InvalidKeyException;
|
||
|
import java.security.Key;
|
||
|
import java.security.KeyFactory;
|
||
|
import java.security.NoSuchAlgorithmException;
|
||
|
import java.security.NoSuchProviderException;
|
||
|
import java.security.PrivateKey;
|
||
|
import java.security.spec.InvalidKeySpecException;
|
||
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||
|
import java.security.spec.X509EncodedKeySpec;
|
||
|
import javax.crypto.BadPaddingException;
|
||
|
import javax.crypto.CipherSpi;
|
||
|
import javax.crypto.IllegalBlockSizeException;
|
||
|
import javax.crypto.NoSuchPaddingException;
|
||
|
import javax.crypto.spec.IvParameterSpec;
|
||
|
import javax.crypto.spec.PBEParameterSpec;
|
||
|
import javax.crypto.spec.RC2ParameterSpec;
|
||
|
import javax.crypto.spec.RC5ParameterSpec;
|
||
|
import javax.crypto.spec.SecretKeySpec;
|
||
|
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
|
||
|
import org.bouncycastle.crypto.InvalidCipherTextException;
|
||
|
import org.bouncycastle.crypto.Wrapper;
|
||
|
import org.bouncycastle.jcajce.util.BCJcaJceHelper;
|
||
|
import org.bouncycastle.jcajce.util.JcaJceHelper;
|
||
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
public abstract class BaseCipherSpi extends CipherSpi {
|
||
|
private byte[] iv;
|
||
|
private int ivSize;
|
||
|
private Class[] availableSpecs = {IvParameterSpec.class, PBEParameterSpec.class, RC2ParameterSpec.class, RC5ParameterSpec.class};
|
||
|
private final JcaJceHelper helper = new BCJcaJceHelper();
|
||
|
protected AlgorithmParameters engineParams = null;
|
||
|
protected Wrapper wrapEngine = null;
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected int engineGetBlockSize() {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected byte[] engineGetIV() {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected int engineGetOutputSize(int i) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected AlgorithmParameters engineGetParameters() {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException {
|
||
|
byte[] encoded = key.getEncoded();
|
||
|
if (encoded == null) {
|
||
|
throw new InvalidKeyException("Cannot wrap key, null encoding.");
|
||
|
}
|
||
|
try {
|
||
|
Wrapper wrapper = this.wrapEngine;
|
||
|
return wrapper == null ? engineDoFinal(encoded, 0, encoded.length) : wrapper.wrap(encoded, 0, encoded.length);
|
||
|
} catch (BadPaddingException e) {
|
||
|
throw new IllegalBlockSizeException(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected Key engineUnwrap(byte[] bArr, String str, int i) throws InvalidKeyException {
|
||
|
try {
|
||
|
Wrapper wrapper = this.wrapEngine;
|
||
|
byte[] engineDoFinal = wrapper == null ? engineDoFinal(bArr, 0, bArr.length) : wrapper.unwrap(bArr, 0, bArr.length);
|
||
|
if (i == 3) {
|
||
|
return new SecretKeySpec(engineDoFinal, str);
|
||
|
}
|
||
|
if (str.equals("") && i == 2) {
|
||
|
try {
|
||
|
PrivateKeyInfo privateKeyInfo = PrivateKeyInfo.getInstance(engineDoFinal);
|
||
|
PrivateKey privateKey = BouncyCastleProvider.getPrivateKey(privateKeyInfo);
|
||
|
if (privateKey != null) {
|
||
|
return privateKey;
|
||
|
}
|
||
|
StringBuilder sb = new StringBuilder("algorithm ");
|
||
|
sb.append(privateKeyInfo.getPrivateKeyAlgorithm().getAlgorithm());
|
||
|
sb.append(" not supported");
|
||
|
throw new InvalidKeyException(sb.toString());
|
||
|
} catch (Exception unused) {
|
||
|
throw new InvalidKeyException("Invalid key encoding.");
|
||
|
}
|
||
|
}
|
||
|
try {
|
||
|
KeyFactory createKeyFactory = this.helper.createKeyFactory(str);
|
||
|
if (i == 1) {
|
||
|
return createKeyFactory.generatePublic(new X509EncodedKeySpec(engineDoFinal));
|
||
|
}
|
||
|
if (i == 2) {
|
||
|
return createKeyFactory.generatePrivate(new PKCS8EncodedKeySpec(engineDoFinal));
|
||
|
}
|
||
|
throw new InvalidKeyException("Unknown key type ".concat(String.valueOf(i)));
|
||
|
} catch (NoSuchAlgorithmException e) {
|
||
|
StringBuilder sb2 = new StringBuilder("Unknown key type ");
|
||
|
sb2.append(e.getMessage());
|
||
|
throw new InvalidKeyException(sb2.toString());
|
||
|
} catch (NoSuchProviderException e2) {
|
||
|
StringBuilder sb3 = new StringBuilder("Unknown key type ");
|
||
|
sb3.append(e2.getMessage());
|
||
|
throw new InvalidKeyException(sb3.toString());
|
||
|
} catch (InvalidKeySpecException e3) {
|
||
|
StringBuilder sb4 = new StringBuilder("Unknown key type ");
|
||
|
sb4.append(e3.getMessage());
|
||
|
throw new InvalidKeyException(sb4.toString());
|
||
|
}
|
||
|
} catch (BadPaddingException e4) {
|
||
|
throw new InvalidKeyException(e4.getMessage());
|
||
|
} catch (IllegalBlockSizeException e5) {
|
||
|
throw new InvalidKeyException(e5.getMessage());
|
||
|
} catch (InvalidCipherTextException e6) {
|
||
|
throw new InvalidKeyException(e6.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected void engineSetPadding(String str) throws NoSuchPaddingException {
|
||
|
StringBuilder sb = new StringBuilder("Padding ");
|
||
|
sb.append(str);
|
||
|
sb.append(" unknown.");
|
||
|
throw new NoSuchPaddingException(sb.toString());
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected void engineSetMode(String str) throws NoSuchAlgorithmException {
|
||
|
throw new NoSuchAlgorithmException("can't support mode ".concat(String.valueOf(str)));
|
||
|
}
|
||
|
|
||
|
@Override // javax.crypto.CipherSpi
|
||
|
protected int engineGetKeySize(Key key) {
|
||
|
return key.getEncoded().length;
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: protected */
|
||
|
public final AlgorithmParameters createParametersInstance(String str) throws NoSuchAlgorithmException, NoSuchProviderException {
|
||
|
return this.helper.createAlgorithmParameters(str);
|
||
|
}
|
||
|
}
|