CipherSpi.smali
.class public Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;
.super Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;
.source "CipherSpi.java"
# instance fields
.field private bOut:Ljava/io/ByteArrayOutputStream;
.field private cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.field private engineParams:Ljava/security/AlgorithmParameters;
.field private final helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.field private paramSpec:Ljava/security/spec/AlgorithmParameterSpec;
.field private privateKeyOnly:Z
.field private publicKeyOnly:Z
# direct methods
.method public constructor <init>(Ljavax/crypto/spec/OAEPParameterSpec;)V
.registers 4
.prologue
const/4 v1, 0x0
.line 60
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;-><init>()V
.line 43
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/rsa/CipherSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.line 48
iput-boolean v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->publicKeyOnly:Z
.line 49
iput-boolean v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->privateKeyOnly:Z
.line 50
new-instance v0, Ljava/io/ByteArrayOutputStream;
invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
.line 63
:try_start_16
invoke-direct {p0, p1}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
:try_end_19
.catch Ljavax/crypto/NoSuchPaddingException; {:try_start_16 .. :try_end_19} :catch_1a
.line 68
return-void
.line 65
:catch_1a
move-exception v0
.line 67
new-instance v1, Ljava/lang/IllegalArgumentException;
invoke-virtual {v0}, Ljavax/crypto/NoSuchPaddingException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;)V
.registers 4
.prologue
const/4 v1, 0x0
.line 54
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;-><init>()V
.line 43
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/rsa/CipherSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.line 48
iput-boolean v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->publicKeyOnly:Z
.line 49
iput-boolean v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->privateKeyOnly:Z
.line 50
new-instance v0, Ljava/io/ByteArrayOutputStream;
invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
.line 55
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 56
return-void
.end method
.method public constructor <init>(ZZLorg/spongycastle/crypto/AsymmetricBlockCipher;)V
.registers 6
.prologue
const/4 v1, 0x0
.line 75
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/asymmetric/util/BaseCipherSpi;-><init>()V
.line 43
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/rsa/CipherSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.line 48
iput-boolean v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->publicKeyOnly:Z
.line 49
iput-boolean v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->privateKeyOnly:Z
.line 50
new-instance v0, Ljava/io/ByteArrayOutputStream;
invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
.line 76
iput-boolean p1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->publicKeyOnly:Z
.line 77
iput-boolean p2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->privateKeyOnly:Z
.line 78
iput-object p3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 79
return-void
.end method
.method private initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
.registers 6
.prologue
.line 85
invoke-virtual {p1}, Ljavax/crypto/spec/OAEPParameterSpec;->getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;
move-result-object v0
check-cast v0, Ljava/security/spec/MGF1ParameterSpec;
.line 86
invoke-virtual {v0}, Ljava/security/spec/MGF1ParameterSpec;->getDigestAlgorithm()Ljava/lang/String;
move-result-object v1
invoke-static {v1}, Lorg/spongycastle/jcajce/provider/util/DigestFactory;->getDigest(Ljava/lang/String;)Lorg/spongycastle/crypto/Digest;
move-result-object v1
.line 88
if-nez v1, :cond_29
.line 90
new-instance v1, Ljavax/crypto/NoSuchPaddingException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "no match on OAEP constructor for digest algorithm: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/security/spec/MGF1ParameterSpec;->getDigestAlgorithm()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}, Ljavax/crypto/NoSuchPaddingException;-><init>(Ljava/lang/String;)V
throw v1
.line 93
:cond_29
new-instance v2, Lorg/spongycastle/crypto/encodings/OAEPEncoding;
new-instance v3, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
invoke-direct {v3}, Lorg/spongycastle/crypto/engines/RSABlindedEngine;-><init>()V
invoke-virtual {p1}, Ljavax/crypto/spec/OAEPParameterSpec;->getPSource()Ljavax/crypto/spec/PSource;
move-result-object v0
check-cast v0, Ljavax/crypto/spec/PSource$PSpecified;
invoke-virtual {v0}, Ljavax/crypto/spec/PSource$PSpecified;->getValue()[B
move-result-object v0
invoke-direct {v2, v3, v1, v0}, Lorg/spongycastle/crypto/encodings/OAEPEncoding;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;[B)V
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 94
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->paramSpec:Ljava/security/spec/AlgorithmParameterSpec;
.line 95
return-void
.end method
# virtual methods
.method protected engineDoFinal([BII[BI)I
.registers 11
.prologue
const/4 v0, 0x0
.line 487
if-eqz p1, :cond_8
.line 489
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1, p1, p2, p3}, Ljava/io/ByteArrayOutputStream;->write([BII)V
.line 492
:cond_8
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
instance-of v1, v1, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
if-eqz v1, :cond_26
.line 494
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v1
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v2}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v2
add-int/lit8 v2, v2, 0x1
if-le v1, v2, :cond_3c
.line 496
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 501
:cond_26
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v1
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v2}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v2
if-le v1, v2, :cond_3c
.line 503
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 511
:cond_3c
:try_start_3c
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v1
.line 513
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
const/4 v3, 0x0
array-length v4, v1
invoke-interface {v2, v1, v3, v4}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->processBlock([BII)[B
:try_end_49
.catch Lorg/spongycastle/crypto/InvalidCipherTextException; {:try_start_3c .. :try_end_49} :catch_5b
.catchall {:try_start_3c .. :try_end_49} :catchall_66
move-result-object v1
.line 521
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v2}, Ljava/io/ByteArrayOutputStream;->reset()V
.line 524
:goto_4f
array-length v2, v1
if-eq v0, v2, :cond_6d
.line 526
add-int v2, p5, v0
aget-byte v3, v1, v0
aput-byte v3, p4, v2
.line 524
add-int/lit8 v0, v0, 0x1
goto :goto_4f
.line 515
:catch_5b
move-exception v0
.line 517
:try_start_5c
new-instance v1, Ljavax/crypto/BadPaddingException;
invoke-virtual {v0}, Lorg/spongycastle/crypto/InvalidCipherTextException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljavax/crypto/BadPaddingException;-><init>(Ljava/lang/String;)V
throw v1
:try_end_66
.catchall {:try_start_5c .. :try_end_66} :catchall_66
.line 521
:catchall_66
move-exception v0
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->reset()V
throw v0
.line 529
:cond_6d
array-length v0, v1
return v0
.end method
.method protected engineDoFinal([BII)[B
.registers 8
.prologue
.line 445
if-eqz p1, :cond_7
.line 447
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0, p1, p2, p3}, Ljava/io/ByteArrayOutputStream;->write([BII)V
.line 450
:cond_7
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
instance-of v0, v0, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
if-eqz v0, :cond_25
.line 452
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v1
add-int/lit8 v1, v1, 0x1
if-le v0, v1, :cond_3b
.line 454
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 459
:cond_25
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v1
if-le v0, v1, :cond_3b
.line 461
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 467
:cond_3b
:try_start_3b
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v0
.line 469
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->reset()V
.line 471
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
const/4 v2, 0x0
array-length v3, v0
invoke-interface {v1, v0, v2, v3}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->processBlock([BII)[B
:try_end_4d
.catch Lorg/spongycastle/crypto/InvalidCipherTextException; {:try_start_3b .. :try_end_4d} :catch_4f
move-result-object v0
return-object v0
.line 473
:catch_4f
move-exception v0
.line 475
new-instance v1, Ljavax/crypto/BadPaddingException;
invoke-virtual {v0}, Lorg/spongycastle/crypto/InvalidCipherTextException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljavax/crypto/BadPaddingException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method protected engineGetBlockSize()I
.registers 3
.prologue
.line 101
:try_start_0
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
:try_end_5
.catch Ljava/lang/NullPointerException; {:try_start_0 .. :try_end_5} :catch_7
move-result v0
return v0
.line 105
:catch_7
move-exception v0
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "RSA Cipher not initialised"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineGetKeySize(Ljava/security/Key;)I
.registers 4
.prologue
.line 112
instance-of v0, p1, Ljava/security/interfaces/RSAPrivateKey;
if-eqz v0, :cond_f
.line 114
check-cast p1, Ljava/security/interfaces/RSAPrivateKey;
.line 116
invoke-interface {p1}, Ljava/security/interfaces/RSAPrivateKey;->getModulus()Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0}, Ljava/math/BigInteger;->bitLength()I
move-result v0
.line 122
:goto_e
return v0
.line 118
:cond_f
instance-of v0, p1, Ljava/security/interfaces/RSAPublicKey;
if-eqz v0, :cond_1e
.line 120
check-cast p1, Ljava/security/interfaces/RSAPublicKey;
.line 122
invoke-interface {p1}, Ljava/security/interfaces/RSAPublicKey;->getModulus()Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0}, Ljava/math/BigInteger;->bitLength()I
move-result v0
goto :goto_e
.line 125
:cond_1e
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "not an RSA key!"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineGetOutputSize(I)I
.registers 4
.prologue
.line 133
:try_start_0
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getOutputBlockSize()I
:try_end_5
.catch Ljava/lang/NullPointerException; {:try_start_0 .. :try_end_5} :catch_7
move-result v0
return v0
.line 137
:catch_7
move-exception v0
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "RSA Cipher not initialised"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineGetParameters()Ljava/security/AlgorithmParameters;
.registers 3
.prologue
.line 143
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineParams:Ljava/security/AlgorithmParameters;
if-nez v0, :cond_19
.line 145
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->paramSpec:Ljava/security/spec/AlgorithmParameterSpec;
if-eqz v0, :cond_19
.line 149
:try_start_8
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
const-string v1, "OAEP"
invoke-interface {v0, v1}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createAlgorithmParameters(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineParams:Ljava/security/AlgorithmParameters;
.line 150
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineParams:Ljava/security/AlgorithmParameters;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->paramSpec:Ljava/security/spec/AlgorithmParameterSpec;
invoke-virtual {v0, v1}, Ljava/security/AlgorithmParameters;->init(Ljava/security/spec/AlgorithmParameterSpec;)V
:try_end_19
.catch Ljava/lang/Exception; {:try_start_8 .. :try_end_19} :catch_1c
.line 159
:cond_19
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineParams:Ljava/security/AlgorithmParameters;
return-object v0
.line 152
:catch_1c
move-exception v0
.line 154
new-instance v1, Ljava/lang/RuntimeException;
invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method protected engineInit(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V
.registers 9
.prologue
.line 352
const/4 v0, 0x0
.line 354
if-eqz p3, :cond_9
.line 358
:try_start_3
const-class v0, Ljavax/crypto/spec/OAEPParameterSpec;
invoke-virtual {p3, v0}, Ljava/security/AlgorithmParameters;->getParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;
:try_end_8
.catch Ljava/security/spec/InvalidParameterSpecException; {:try_start_3 .. :try_end_8} :catch_f
move-result-object v0
.line 366
:cond_9
iput-object p3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineParams:Ljava/security/AlgorithmParameters;
.line 367
invoke-virtual {p0, p1, p2, v0, p4}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.line 368
return-void
.line 360
:catch_f
move-exception v0
.line 362
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "cannot recognise parameters: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/security/spec/InvalidParameterSpecException;->toString()Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2, v0}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.end method
.method protected engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
.registers 8
.prologue
.line 378
const/4 v0, 0x0
:try_start_1
invoke-virtual {p0, p1, p2, v0, p3}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
:try_end_4
.catch Ljava/security/InvalidAlgorithmParameterException; {:try_start_1 .. :try_end_4} :catch_5
.line 384
return-void
.line 380
:catch_5
move-exception v0
.line 383
new-instance v1, Ljava/security/InvalidKeyException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Eeeek! "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/security/InvalidAlgorithmParameterException;->toString()Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.end method
.method protected engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.registers 12
.prologue
const/4 v6, 0x1
.line 250
if-eqz p3, :cond_7
instance-of v0, p3, Ljavax/crypto/spec/OAEPParameterSpec;
if-eqz v0, :cond_10d
.line 252
:cond_7
instance-of v0, p2, Ljava/security/interfaces/RSAPublicKey;
if-eqz v0, :cond_4a
.line 254
iget-boolean v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->privateKeyOnly:Z
if-eqz v0, :cond_19
if-ne p1, v6, :cond_19
.line 256
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "mode 1 requires RSAPrivateKey"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.line 260
:cond_19
check-cast p2, Ljava/security/interfaces/RSAPublicKey;
invoke-static {p2}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/RSAUtil;->generatePublicKeyParameter(Ljava/security/interfaces/RSAPublicKey;)Lorg/spongycastle/crypto/params/RSAKeyParameters;
move-result-object v2
.line 277
:goto_1f
if-eqz p3, :cond_dd
move-object v0, p3
.line 279
check-cast v0, Ljavax/crypto/spec/OAEPParameterSpec;
.line 281
iput-object p3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->paramSpec:Ljava/security/spec/AlgorithmParameterSpec;
.line 283
invoke-virtual {v0}, Ljavax/crypto/spec/OAEPParameterSpec;->getMGFAlgorithm()Ljava/lang/String;
move-result-object v1
const-string v3, "MGF1"
invoke-virtual {v1, v3}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
move-result v1
if-nez v1, :cond_6b
invoke-virtual {v0}, Ljavax/crypto/spec/OAEPParameterSpec;->getMGFAlgorithm()Ljava/lang/String;
move-result-object v1
sget-object v3, Lorg/spongycastle/asn1/pkcs/PKCSObjectIdentifiers;->id_mgf1:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v3}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->getId()Ljava/lang/String;
move-result-object v3
invoke-virtual {v1, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_6b
.line 285
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
const-string v1, "unknown mask generation function specified"
invoke-direct {v0, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 262
:cond_4a
instance-of v0, p2, Ljava/security/interfaces/RSAPrivateKey;
if-eqz v0, :cond_63
.line 264
iget-boolean v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->publicKeyOnly:Z
if-eqz v0, :cond_5c
if-ne p1, v6, :cond_5c
.line 266
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "mode 2 requires RSAPublicKey"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.line 270
:cond_5c
check-cast p2, Ljava/security/interfaces/RSAPrivateKey;
invoke-static {p2}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/RSAUtil;->generatePrivateKeyParameter(Ljava/security/interfaces/RSAPrivateKey;)Lorg/spongycastle/crypto/params/RSAKeyParameters;
move-result-object v2
goto :goto_1f
.line 274
:cond_63
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "unknown key type passed to RSA"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.line 288
:cond_6b
invoke-virtual {v0}, Ljavax/crypto/spec/OAEPParameterSpec;->getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;
move-result-object v1
instance-of v1, v1, Ljava/security/spec/MGF1ParameterSpec;
if-nez v1, :cond_7b
.line 290
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
const-string v1, "unkown MGF parameters"
invoke-direct {v0, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 293
:cond_7b
invoke-virtual {v0}, Ljavax/crypto/spec/OAEPParameterSpec;->getDigestAlgorithm()Ljava/lang/String;
move-result-object v1
invoke-static {v1}, Lorg/spongycastle/jcajce/provider/util/DigestFactory;->getDigest(Ljava/lang/String;)Lorg/spongycastle/crypto/Digest;
move-result-object v3
.line 295
if-nez v3, :cond_9e
.line 297
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "no match on digest algorithm: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljavax/crypto/spec/OAEPParameterSpec;->getDigestAlgorithm()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/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 300
:cond_9e
invoke-virtual {v0}, Ljavax/crypto/spec/OAEPParameterSpec;->getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;
move-result-object v1
check-cast v1, Ljava/security/spec/MGF1ParameterSpec;
.line 301
invoke-virtual {v1}, Ljava/security/spec/MGF1ParameterSpec;->getDigestAlgorithm()Ljava/lang/String;
move-result-object v4
invoke-static {v4}, Lorg/spongycastle/jcajce/provider/util/DigestFactory;->getDigest(Ljava/lang/String;)Lorg/spongycastle/crypto/Digest;
move-result-object v4
.line 303
if-nez v4, :cond_c7
.line 305
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "no match on MGF digest algorithm: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Ljava/security/spec/MGF1ParameterSpec;->getDigestAlgorithm()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, 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/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 308
:cond_c7
new-instance v1, Lorg/spongycastle/crypto/encodings/OAEPEncoding;
new-instance v5, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
invoke-direct {v5}, Lorg/spongycastle/crypto/engines/RSABlindedEngine;-><init>()V
invoke-virtual {v0}, Ljavax/crypto/spec/OAEPParameterSpec;->getPSource()Ljavax/crypto/spec/PSource;
move-result-object v0
check-cast v0, Ljavax/crypto/spec/PSource$PSpecified;
invoke-virtual {v0}, Ljavax/crypto/spec/PSource$PSpecified;->getValue()[B
move-result-object v0
invoke-direct {v1, v5, v3, v4, v0}, Lorg/spongycastle/crypto/encodings/OAEPEncoding;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;[B)V
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 316
:cond_dd
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
instance-of v0, v0, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
if-nez v0, :cond_142
.line 318
if-eqz p4, :cond_12a
.line 320
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithRandom;
invoke-direct {v0, v2, p4}, Lorg/spongycastle/crypto/params/ParametersWithRandom;-><init>(Lorg/spongycastle/crypto/CipherParameters;Ljava/security/SecureRandom;)V
.line 328
:goto_ea
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->reset()V
.line 330
packed-switch p1, :pswitch_data_144
.line 341
new-instance v0, Ljava/security/InvalidParameterException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "unknown opmode "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " passed to RSA"
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/InvalidParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 313
:cond_10d
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "unknown parameter type: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {p3}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v2
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/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 324
:cond_12a
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithRandom;
new-instance v1, Ljava/security/SecureRandom;
invoke-direct {v1}, Ljava/security/SecureRandom;-><init>()V
invoke-direct {v0, v2, v1}, Lorg/spongycastle/crypto/params/ParametersWithRandom;-><init>(Lorg/spongycastle/crypto/CipherParameters;Ljava/security/SecureRandom;)V
goto :goto_ea
.line 334
:pswitch_135
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v1, v6, v0}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
.line 339
:goto_13a
return-void
.line 338
:pswitch_13b
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
const/4 v2, 0x0
invoke-interface {v1, v2, v0}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
goto :goto_13a
:cond_142
move-object v0, v2
goto :goto_ea
.line 330
:pswitch_data_144
.packed-switch 0x1
:pswitch_135
:pswitch_13b
:pswitch_135
:pswitch_13b
.end packed-switch
.end method
.method protected engineSetMode(Ljava/lang/String;)V
.registers 6
.prologue
const/4 v3, 0x1
const/4 v2, 0x0
.line 166
invoke-static {p1}, Lorg/spongycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 168
const-string v1, "NONE"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_16
const-string v1, "ECB"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_17
.line 183
:cond_16
:goto_16
return-void
.line 173
:cond_17
const-string v1, "1"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_24
.line 175
iput-boolean v3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->privateKeyOnly:Z
.line 176
iput-boolean v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->publicKeyOnly:Z
goto :goto_16
.line 179
:cond_24
const-string v1, "2"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_31
.line 181
iput-boolean v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->privateKeyOnly:Z
.line 182
iput-boolean v3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->publicKeyOnly:Z
goto :goto_16
.line 186
:cond_31
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 protected engineSetPadding(Ljava/lang/String;)V
.registers 7
.prologue
.line 193
invoke-static {p1}, Lorg/spongycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 195
const-string v1, "NOPADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_14
.line 197
new-instance v0, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
invoke-direct {v0}, Lorg/spongycastle/crypto/engines/RSABlindedEngine;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 233
:goto_13
return-void
.line 199
:cond_14
const-string v1, "PKCS1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_29
.line 201
new-instance v0, Lorg/spongycastle/crypto/encodings/PKCS1Encoding;
new-instance v1, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
invoke-direct {v1}, Lorg/spongycastle/crypto/engines/RSABlindedEngine;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/encodings/PKCS1Encoding;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
goto :goto_13
.line 203
:cond_29
const-string v1, "ISO9796-1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_3e
.line 205
new-instance v0, Lorg/spongycastle/crypto/encodings/ISO9796d1Encoding;
new-instance v1, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
invoke-direct {v1}, Lorg/spongycastle/crypto/engines/RSABlindedEngine;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/encodings/ISO9796d1Encoding;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
goto :goto_13
.line 207
:cond_3e
const-string v1, "OAEPWITHMD5ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_5c
.line 209
new-instance v0, Ljavax/crypto/spec/OAEPParameterSpec;
const-string v1, "MD5"
const-string v2, "MGF1"
new-instance v3, Ljava/security/spec/MGF1ParameterSpec;
const-string v4, "MD5"
invoke-direct {v3, v4}, Ljava/security/spec/MGF1ParameterSpec;-><init>(Ljava/lang/String;)V
sget-object v4, Ljavax/crypto/spec/PSource$PSpecified;->DEFAULT:Ljavax/crypto/spec/PSource$PSpecified;
invoke-direct {v0, v1, v2, v3, v4}, Ljavax/crypto/spec/OAEPParameterSpec;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V
invoke-direct {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
goto :goto_13
.line 211
:cond_5c
const-string v1, "OAEPPADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_6a
.line 213
sget-object v0, Ljavax/crypto/spec/OAEPParameterSpec;->DEFAULT:Ljavax/crypto/spec/OAEPParameterSpec;
invoke-direct {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
goto :goto_13
.line 215
:cond_6a
const-string v1, "OAEPWITHSHA1ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_7a
const-string v1, "OAEPWITHSHA-1ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_80
.line 217
:cond_7a
sget-object v0, Ljavax/crypto/spec/OAEPParameterSpec;->DEFAULT:Ljavax/crypto/spec/OAEPParameterSpec;
invoke-direct {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
goto :goto_13
.line 219
:cond_80
const-string v1, "OAEPWITHSHA224ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_90
const-string v1, "OAEPWITHSHA-224ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_a7
.line 221
:cond_90
new-instance v0, Ljavax/crypto/spec/OAEPParameterSpec;
const-string v1, "SHA-224"
const-string v2, "MGF1"
new-instance v3, Ljava/security/spec/MGF1ParameterSpec;
const-string v4, "SHA-224"
invoke-direct {v3, v4}, Ljava/security/spec/MGF1ParameterSpec;-><init>(Ljava/lang/String;)V
sget-object v4, Ljavax/crypto/spec/PSource$PSpecified;->DEFAULT:Ljavax/crypto/spec/PSource$PSpecified;
invoke-direct {v0, v1, v2, v3, v4}, Ljavax/crypto/spec/OAEPParameterSpec;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V
invoke-direct {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
goto/16 :goto_13
.line 223
:cond_a7
const-string v1, "OAEPWITHSHA256ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_b7
const-string v1, "OAEPWITHSHA-256ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_c9
.line 225
:cond_b7
new-instance v0, Ljavax/crypto/spec/OAEPParameterSpec;
const-string v1, "SHA-256"
const-string v2, "MGF1"
sget-object v3, Ljava/security/spec/MGF1ParameterSpec;->SHA256:Ljava/security/spec/MGF1ParameterSpec;
sget-object v4, Ljavax/crypto/spec/PSource$PSpecified;->DEFAULT:Ljavax/crypto/spec/PSource$PSpecified;
invoke-direct {v0, v1, v2, v3, v4}, Ljavax/crypto/spec/OAEPParameterSpec;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V
invoke-direct {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
goto/16 :goto_13
.line 227
:cond_c9
const-string v1, "OAEPWITHSHA384ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_d9
const-string v1, "OAEPWITHSHA-384ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_eb
.line 229
:cond_d9
new-instance v0, Ljavax/crypto/spec/OAEPParameterSpec;
const-string v1, "SHA-384"
const-string v2, "MGF1"
sget-object v3, Ljava/security/spec/MGF1ParameterSpec;->SHA384:Ljava/security/spec/MGF1ParameterSpec;
sget-object v4, Ljavax/crypto/spec/PSource$PSpecified;->DEFAULT:Ljavax/crypto/spec/PSource$PSpecified;
invoke-direct {v0, v1, v2, v3, v4}, Ljavax/crypto/spec/OAEPParameterSpec;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V
invoke-direct {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
goto/16 :goto_13
.line 231
:cond_eb
const-string v1, "OAEPWITHSHA512ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_fb
const-string v1, "OAEPWITHSHA-512ANDMGF1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_10d
.line 233
:cond_fb
new-instance v0, Ljavax/crypto/spec/OAEPParameterSpec;
const-string v1, "SHA-512"
const-string v2, "MGF1"
sget-object v3, Ljava/security/spec/MGF1ParameterSpec;->SHA512:Ljava/security/spec/MGF1ParameterSpec;
sget-object v4, Ljavax/crypto/spec/PSource$PSpecified;->DEFAULT:Ljavax/crypto/spec/PSource$PSpecified;
invoke-direct {v0, v1, v2, v3, v4}, Ljavax/crypto/spec/OAEPParameterSpec;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V
invoke-direct {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->initFromSpec(Ljavax/crypto/spec/OAEPParameterSpec;)V
goto/16 :goto_13
.line 237
:cond_10d
new-instance v0, Ljavax/crypto/NoSuchPaddingException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " unavailable with RSA."
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 engineUpdate([BII[BI)I
.registers 8
.prologue
.line 419
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0, p1, p2, p3}, Ljava/io/ByteArrayOutputStream;->write([BII)V
.line 421
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
instance-of v0, v0, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
if-eqz v0, :cond_23
.line 423
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v1
add-int/lit8 v1, v1, 0x1
if-le v0, v1, :cond_39
.line 425
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 430
:cond_23
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v1
if-le v0, v1, :cond_39
.line 432
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 436
:cond_39
const/4 v0, 0x0
return v0
.end method
.method protected engineUpdate([BII)[B
.registers 6
.prologue
.line 392
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0, p1, p2, p3}, Ljava/io/ByteArrayOutputStream;->write([BII)V
.line 394
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
instance-of v0, v0, Lorg/spongycastle/crypto/engines/RSABlindedEngine;
if-eqz v0, :cond_23
.line 396
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v1
add-int/lit8 v1, v1, 0x1
if-le v0, v1, :cond_39
.line 398
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 403
:cond_23
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->bOut:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->getInputBlockSize()I
move-result v1
if-le v0, v1, :cond_39
.line 405
new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
const-string v1, "too much data for RSA block"
invoke-direct {v0, v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
throw v0
.line 409
:cond_39
const/4 v0, 0x0
return-object v0
.end method