BaseCipherSpi.smali
.class public abstract Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;
.super Ljavax/crypto/CipherSpi;
.source "BaseCipherSpi.java"
# instance fields
.field private availableSpecs:[Ljava/lang/Class;
.field protected engineParams:Ljava/security/AlgorithmParameters;
.field private final helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.field private iv:[B
.field private ivSize:I
.field protected wrapEngine:Lorg/spongycastle/crypto/Wrapper;
# direct methods
.method protected constructor <init>()V
.registers 5
.prologue
const/4 v3, 0x0
.line 56
invoke-direct {p0}, Ljavax/crypto/CipherSpi;-><init>()V
.line 38
const/4 v0, 0x4
new-array v0, v0, [Ljava/lang/Class;
const/4 v1, 0x0
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x1
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x2
const-class v2, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->availableSpecs:[Ljava/lang/Class;
.line 46
new-instance v0, Lorg/spongycastle/jcajce/util/BCJcaJceHelper;
invoke-direct {v0}, Lorg/spongycastle/jcajce/util/BCJcaJceHelper;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.line 48
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->engineParams:Ljava/security/AlgorithmParameters;
.line 50
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->wrapEngine:Lorg/spongycastle/crypto/Wrapper;
.line 57
return-void
.end method
# virtual methods
.method protected final createParametersInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
.registers 3
.prologue
.line 89
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v0, p1}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createAlgorithmParameters(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
move-result-object v0
return-object v0
.end method
.method public engineGetBlockSize()I
.registers 2
.prologue
.line 61
const/4 v0, 0x0
return v0
.end method
.method protected engineGetIV()[B
.registers 2
.prologue
.line 66
const/4 v0, 0x0
return-object v0
.end method
.method public engineGetKeySize(Ljava/security/Key;)I
.registers 3
.prologue
.line 72
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v0
array-length v0, v0
return v0
.end method
.method public engineGetOutputSize(I)I
.registers 3
.prologue
.line 78
const/4 v0, -0x1
return v0
.end method
.method public engineGetParameters()Ljava/security/AlgorithmParameters;
.registers 2
.prologue
.line 83
const/4 v0, 0x0
return-object v0
.end method
.method public engineSetMode(Ljava/lang/String;)V
.registers 5
.prologue
.line 96
new-instance v0, Ljava/security/NoSuchAlgorithmException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "can\'t support mode "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/security/NoSuchAlgorithmException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public engineSetPadding(Ljava/lang/String;)V
.registers 5
.prologue
.line 103
new-instance v0, Ljavax/crypto/NoSuchPaddingException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Padding "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " unknown."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljavax/crypto/NoSuchPaddingException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;
.registers 8
.prologue
const/4 v3, 0x2
.line 142
:try_start_1
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->wrapEngine:Lorg/spongycastle/crypto/Wrapper;
if-nez v0, :cond_15
.line 144
const/4 v0, 0x0
array-length v1, p1
invoke-virtual {p0, p1, v0, v1}, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->engineDoFinal([BII)[B
:try_end_a
.catch Lorg/spongycastle/crypto/InvalidCipherTextException; {:try_start_1 .. :try_end_a} :catch_1f
.catch Ljavax/crypto/BadPaddingException; {:try_start_1 .. :try_end_a} :catch_2a
.catch Ljavax/crypto/IllegalBlockSizeException; {:try_start_1 .. :try_end_a} :catch_35
move-result-object v0
move-object v1, v0
.line 164
:goto_c
const/4 v0, 0x3
if-ne p3, v0, :cond_40
.line 166
new-instance v0, Ljavax/crypto/spec/SecretKeySpec;
invoke-direct {v0, v1, p2}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V
.line 206
:cond_14
:goto_14
return-object v0
.line 148
:cond_15
:try_start_15
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->wrapEngine:Lorg/spongycastle/crypto/Wrapper;
const/4 v1, 0x0
array-length v2, p1
invoke-interface {v0, p1, v1, v2}, Lorg/spongycastle/crypto/Wrapper;->unwrap([BII)[B
:try_end_1c
.catch Lorg/spongycastle/crypto/InvalidCipherTextException; {:try_start_15 .. :try_end_1c} :catch_1f
.catch Ljavax/crypto/BadPaddingException; {:try_start_15 .. :try_end_1c} :catch_2a
.catch Ljavax/crypto/IllegalBlockSizeException; {:try_start_15 .. :try_end_1c} :catch_35
move-result-object v0
move-object v1, v0
.line 162
goto :goto_c
.line 151
:catch_1f
move-exception v0
.line 153
new-instance v1, Ljava/security/InvalidKeyException;
invoke-virtual {v0}, Lorg/spongycastle/crypto/InvalidCipherTextException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 155
:catch_2a
move-exception v0
.line 157
new-instance v1, Ljava/security/InvalidKeyException;
invoke-virtual {v0}, Ljavax/crypto/BadPaddingException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 159
:catch_35
move-exception v0
.line 161
new-instance v1, Ljava/security/InvalidKeyException;
invoke-virtual {v0}, Ljavax/crypto/IllegalBlockSizeException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 168
:cond_40
const-string v0, ""
invoke-virtual {p2, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_80
if-ne p3, v3, :cond_80
.line 176
:try_start_4a
invoke-static {v1}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;
move-result-object v1
.line 178
invoke-static {v1}, Lorg/spongycastle/jce/provider/BouncyCastleProvider;->getPrivateKey(Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;)Ljava/security/PrivateKey;
move-result-object v0
.line 180
if-nez v0, :cond_14
.line 186
new-instance v0, Ljava/security/InvalidKeyException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "algorithm "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->getPrivateKeyAlgorithm()Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;
move-result-object v1
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v1
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " not supported"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_77
.catch Ljava/lang/Exception; {:try_start_4a .. :try_end_77} :catch_77
.line 191
:catch_77
move-exception v0
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "Invalid key encoding."
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.line 198
:cond_80
:try_start_80
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v0, p2}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createKeyFactory(Ljava/lang/String;)Ljava/security/KeyFactory;
move-result-object v0
.line 200
const/4 v2, 0x1
if-ne p3, v2, :cond_93
.line 202
new-instance v2, Ljava/security/spec/X509EncodedKeySpec;
invoke-direct {v2, v1}, Ljava/security/spec/X509EncodedKeySpec;-><init>([B)V
invoke-virtual {v0, v2}, Ljava/security/KeyFactory;->generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
move-result-object v0
goto :goto_14
.line 204
:cond_93
if-ne p3, v3, :cond_ee
.line 206
new-instance v2, Ljava/security/spec/PKCS8EncodedKeySpec;
invoke-direct {v2, v1}, Ljava/security/spec/PKCS8EncodedKeySpec;-><init>([B)V
invoke-virtual {v0, v2}, Ljava/security/KeyFactory;->generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
:try_end_9d
.catch Ljava/security/NoSuchAlgorithmException; {:try_start_80 .. :try_end_9d} :catch_a0
.catch Ljava/security/spec/InvalidKeySpecException; {:try_start_80 .. :try_end_9d} :catch_ba
.catch Ljava/security/NoSuchProviderException; {:try_start_80 .. :try_end_9d} :catch_d4
move-result-object v0
goto/16 :goto_14
.line 209
:catch_a0
move-exception v0
.line 211
new-instance v1, Ljava/security/InvalidKeyException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Unknown key type "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/security/NoSuchAlgorithmException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 213
:catch_ba
move-exception v0
.line 215
new-instance v1, Ljava/security/InvalidKeyException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Unknown key type "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/security/spec/InvalidKeySpecException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 217
:catch_d4
move-exception v0
.line 219
new-instance v1, Ljava/security/InvalidKeyException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Unknown key type "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/security/NoSuchProviderException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 222
:cond_ee
new-instance v0, Ljava/security/InvalidKeyException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Unknown key type "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineWrap(Ljava/security/Key;)[B
.registers 6
.prologue
.line 110
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v0
.line 111
if-nez v0, :cond_e
.line 113
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "Cannot wrap key, null encoding."
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.line 118
:cond_e
:try_start_e
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->wrapEngine:Lorg/spongycastle/crypto/Wrapper;
if-nez v1, :cond_19
.line 120
const/4 v1, 0x0
array-length v2, v0
invoke-virtual {p0, v0, v1, v2}, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->engineDoFinal([BII)[B
move-result-object v0
.line 124
:goto_18
return-object v0
:cond_19
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;->wrapEngine:Lorg/spongycastle/crypto/Wrapper;
const/4 v2, 0x0
array-length v3, v0
invoke-interface {v1, v0, v2, v3}, Lorg/spongycastle/crypto/Wrapper;->wrap([BII)[B
:try_end_20
.catch Ljavax/crypto/BadPaddingException; {:try_start_e .. :try_end_20} :catch_22
move-result-object v0
goto :goto_18
.line 127
:catch_22
move-exception v0
.line 129
new-instance v1, Ljavax/crypto/IllegalBlockSizeException;
invoke-virtual {v0}, Ljavax/crypto/BadPaddingException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljavax/crypto/IllegalBlockSizeException;-><init>(Ljava/lang/String;)V
throw v1
.end method