BaseBlockCipher.smali
.class public Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;
.super Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;
.source "BaseBlockCipher.java"
# interfaces
.implements Lorg/spongycastle/jcajce/provider/symmetric/util/PBE;
# static fields
.field private static final gcmSpecClass:Ljava/lang/Class;
# instance fields
.field private aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
.field private availableSpecs:[Ljava/lang/Class;
.field private baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.field private cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.field private digest:I
.field private engineProvider:Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;
.field private fixedIv:Z
.field private ivLength:I
.field private ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
.field private keySizeInBits:I
.field private modeName:Ljava/lang/String;
.field private padded:Z
.field private pbeAlgorithm:Ljava/lang/String;
.field private pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.field private scheme:I
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 74
const-string v0, "javax.crypto.spec.GCMParameterSpec"
invoke-static {v0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->lookup(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
sput-object v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/crypto/BlockCipher;)V
.registers 8
.prologue
const/4 v5, 0x1
const/4 v4, 0x0
const/4 v3, 0x0
.line 124
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
.line 79
const/4 v0, 0x6
new-array v0, v0, [Ljava/lang/Class;
const-class v1, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v1, v0, v4
const-class v1, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v1, v0, v5
const/4 v1, 0x2
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x4
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x5
const-class v2, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
.line 96
const/4 v0, -0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 99
iput v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 102
iput-boolean v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 103
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 104
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 106
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 125
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 127
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
invoke-direct {v0, p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 128
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/crypto/BlockCipher;I)V
.registers 9
.prologue
const/4 v5, 0x1
const/4 v4, 0x0
const/4 v3, 0x0
.line 178
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
.line 79
const/4 v0, 0x6
new-array v0, v0, [Ljava/lang/Class;
const-class v1, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v1, v0, v4
const-class v1, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v1, v0, v5
const/4 v1, 0x2
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x4
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x5
const-class v2, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
.line 96
const/4 v0, -0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 99
iput v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 102
iput-boolean v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 103
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 104
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 106
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 179
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 181
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
invoke-direct {v0, p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 182
div-int/lit8 v0, p2, 0x8
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 183
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/crypto/BlockCipher;IIII)V
.registers 12
.prologue
const/4 v5, 0x1
const/4 v4, 0x0
const/4 v3, 0x0
.line 136
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
.line 79
const/4 v0, 0x6
new-array v0, v0, [Ljava/lang/Class;
const-class v1, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v1, v0, v4
const-class v1, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v1, v0, v5
const/4 v1, 0x2
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x4
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x5
const-class v2, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
.line 96
const/4 v0, -0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 99
iput v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 102
iput-boolean v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 103
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 104
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 106
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 137
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 139
iput p2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 140
iput p3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->digest:I
.line 141
iput p4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->keySizeInBits:I
.line 142
iput p5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 144
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
invoke-direct {v0, p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 145
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/crypto/BufferedBlockCipher;I)V
.registers 9
.prologue
const/4 v5, 0x1
const/4 v4, 0x0
const/4 v3, 0x0
.line 188
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
.line 79
const/4 v0, 0x6
new-array v0, v0, [Ljava/lang/Class;
const-class v1, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v1, v0, v4
const-class v1, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v1, v0, v5
const/4 v1, 0x2
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x4
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x5
const-class v2, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
.line 96
const/4 v0, -0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 99
iput v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 102
iput-boolean v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 103
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 104
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 106
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 189
invoke-virtual {p1}, Lorg/spongycastle/crypto/BufferedBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 191
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
invoke-direct {v0, p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 192
div-int/lit8 v0, p2, 0x8
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 193
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;)V
.registers 8
.prologue
const/4 v5, 0x1
const/4 v4, 0x0
const/4 v3, 0x0
.line 158
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
.line 79
const/4 v0, 0x6
new-array v0, v0, [Ljava/lang/Class;
const-class v1, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v1, v0, v4
const-class v1, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v1, v0, v5
const/4 v1, 0x2
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x4
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x5
const-class v2, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
.line 96
const/4 v0, -0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 99
iput v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 102
iput-boolean v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 103
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 104
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 106
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 159
invoke-interface {p1}, Lorg/spongycastle/crypto/modes/AEADBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 160
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 161
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
invoke-direct {v0, p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 162
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;ZI)V
.registers 10
.prologue
const/4 v5, 0x1
const/4 v4, 0x0
const/4 v3, 0x0
.line 168
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
.line 79
const/4 v0, 0x6
new-array v0, v0, [Ljava/lang/Class;
const-class v1, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v1, v0, v4
const-class v1, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v1, v0, v5
const/4 v1, 0x2
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x4
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x5
const-class v2, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
.line 96
const/4 v0, -0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 99
iput v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 102
iput-boolean v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 103
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 104
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 106
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 169
invoke-interface {p1}, Lorg/spongycastle/crypto/modes/AEADBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 170
iput-boolean p2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 171
iput p3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 172
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
invoke-direct {v0, p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 173
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;)V
.registers 8
.prologue
const/4 v5, 0x1
const/4 v4, 0x0
const/4 v3, 0x0
.line 149
invoke-direct {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseWrapCipher;-><init>()V
.line 79
const/4 v0, 0x6
new-array v0, v0, [Ljava/lang/Class;
const-class v1, Ljavax/crypto/spec/RC2ParameterSpec;
aput-object v1, v0, v4
const-class v1, Ljavax/crypto/spec/RC5ParameterSpec;
aput-object v1, v0, v5
const/4 v1, 0x2
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
aput-object v2, v0, v1
const/4 v1, 0x3
const-class v2, Ljavax/crypto/spec/IvParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x4
const-class v2, Ljavax/crypto/spec/PBEParameterSpec;
aput-object v2, v0, v1
const/4 v1, 0x5
const-class v2, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
aput-object v2, v0, v1
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
.line 96
const/4 v0, -0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
.line 99
iput v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 102
iput-boolean v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 103
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 104
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 106
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 150
invoke-interface {p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;->get()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 151
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineProvider:Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;
.line 153
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
invoke-interface {p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;->get()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v1
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 154
return-void
.end method
.method static synthetic access$000(Ljava/lang/String;)Ljava/lang/Class;
.registers 2
.prologue
.line 70
invoke-static {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->lookup(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
return-object v0
.end method
.method private adjustParameters(Ljava/security/spec/AlgorithmParameterSpec;Lorg/spongycastle/crypto/CipherParameters;)Lorg/spongycastle/crypto/CipherParameters;
.registers 6
.prologue
.line 822
instance-of v0, p2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v0, :cond_47
move-object v0, p2
.line 824
check-cast v0, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v1
.line 825
instance-of v0, p1, Ljavax/crypto/spec/IvParameterSpec;
if-eqz v0, :cond_1f
.line 827
check-cast p1, Ljavax/crypto/spec/IvParameterSpec;
.line 829
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {p1}, Ljavax/crypto/spec/IvParameterSpec;->getIV()[B
move-result-object v2
invoke-direct {v0, v1, v2}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
.line 830
iget-object p2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
.line 868
:cond_1e
:goto_1e
return-object p2
.line 832
:cond_1f
instance-of v0, p1, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
if-eqz v0, :cond_1e
.line 835
check-cast p1, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
.line 837
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithSBox;
invoke-virtual {p1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getSbox()[B
move-result-object v2
invoke-direct {v0, p2, v2}, Lorg/spongycastle/crypto/params/ParametersWithSBox;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
.line 839
invoke-virtual {p1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getIV()[B
move-result-object v2
if-eqz v2, :cond_45
iget v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eqz v2, :cond_45
.line 841
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {p1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getIV()[B
move-result-object v2
invoke-direct {v0, v1, v2}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
.line 842
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_45
move-object p2, v0
.line 844
goto :goto_1e
.line 848
:cond_47
instance-of v0, p1, Ljavax/crypto/spec/IvParameterSpec;
if-eqz v0, :cond_5b
.line 850
check-cast p1, Ljavax/crypto/spec/IvParameterSpec;
.line 852
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {p1}, Ljavax/crypto/spec/IvParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {v0, p2, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
.line 853
iget-object p2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
goto :goto_1e
.line 855
:cond_5b
instance-of v0, p1, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
if-eqz v0, :cond_1e
.line 858
check-cast p1, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
.line 860
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithSBox;
invoke-virtual {p1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getSbox()[B
move-result-object v1
invoke-direct {v0, p2, v1}, Lorg/spongycastle/crypto/params/ParametersWithSBox;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
.line 862
invoke-virtual {p1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getIV()[B
move-result-object v1
if-eqz v1, :cond_7e
iget v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eqz v1, :cond_7e
.line 864
new-instance p2, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {p1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {p2, v0, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
goto :goto_1e
:cond_7e
move-object p2, v0
goto :goto_1e
.end method
.method private isAEADModeName(Ljava/lang/String;)Z
.registers 3
.prologue
.line 1069
const-string v0, "CCM"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_20
const-string v0, "EAX"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_20
const-string v0, "GCM"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_20
const-string v0, "OCB"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_22
:cond_20
const/4 v0, 0x1
:goto_21
return v0
:cond_22
const/4 v0, 0x0
goto :goto_21
.end method
.method private static lookup(Ljava/lang/String;)Ljava/lang/Class;
.registers 2
.prologue
.line 112
:try_start_0
const-class v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;
invoke-virtual {v0}, Ljava/lang/Class;->getClassLoader()Ljava/lang/ClassLoader;
move-result-object v0
invoke-virtual {v0, p0}, Ljava/lang/ClassLoader;->loadClass(Ljava/lang/String;)Ljava/lang/Class;
:try_end_9
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_9} :catch_b
move-result-object v0
.line 118
:goto_a
return-object v0
:catch_b
move-exception v0
const/4 v0, 0x0
goto :goto_a
.end method
# virtual methods
.method protected engineDoFinal([BII[BI)I
.registers 12
.prologue
.line 1040
const/4 v0, 0x0
.line 1042
invoke-virtual {p0, p3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineGetOutputSize(I)I
move-result v1
add-int/2addr v1, p5
array-length v2, p4
if-le v1, v2, :cond_11
.line 1044
new-instance v0, Ljavax/crypto/ShortBufferException;
const-string v1, "output buffer too short for input."
invoke-direct {v0, v1}, Ljavax/crypto/ShortBufferException;-><init>(Ljava/lang/String;)V
throw v0
.line 1049
:cond_11
if-eqz p3, :cond_1e
.line 1051
:try_start_13
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
move-object v1, p1
move v2, p2
move v3, p3
move-object v4, p4
move v5, p5
invoke-interface/range {v0 .. v5}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->processBytes([BII[BI)I
move-result v0
.line 1054
:cond_1e
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
add-int v2, p5, v0
invoke-interface {v1, p4, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->doFinal([BI)I
:try_end_25
.catch Lorg/spongycastle/crypto/OutputLengthException; {:try_start_13 .. :try_end_25} :catch_28
.catch Lorg/spongycastle/crypto/DataLengthException; {:try_start_13 .. :try_end_25} :catch_33
move-result v1
add-int/2addr v0, v1
return v0
.line 1056
:catch_28
move-exception v0
.line 1058
new-instance v1, Ljavax/crypto/IllegalBlockSizeException;
invoke-virtual {v0}, Lorg/spongycastle/crypto/OutputLengthException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljavax/crypto/IllegalBlockSizeException;-><init>(Ljava/lang/String;)V
throw v1
.line 1060
:catch_33
move-exception v0
.line 1062
new-instance v1, Ljavax/crypto/IllegalBlockSizeException;
invoke-virtual {v0}, Lorg/spongycastle/crypto/DataLengthException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljavax/crypto/IllegalBlockSizeException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method protected engineDoFinal([BII)[B
.registers 10
.prologue
const/4 v5, 0x0
.line 1003
.line 1004
invoke-virtual {p0, p3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineGetOutputSize(I)I
move-result v0
new-array v4, v0, [B
.line 1006
if-eqz p3, :cond_2f
.line 1008
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
move-object v1, p1
move v2, p2
move v3, p3
invoke-interface/range {v0 .. v5}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->processBytes([BII[BI)I
move-result v0
.line 1013
:goto_12
:try_start_12
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v1, v4, v0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->doFinal([BI)I
:try_end_17
.catch Lorg/spongycastle/crypto/DataLengthException; {:try_start_12 .. :try_end_17} :catch_1d
move-result v1
add-int/2addr v1, v0
.line 1020
array-length v0, v4
if-ne v1, v0, :cond_28
.line 1029
:goto_1c
return-object v4
.line 1015
:catch_1d
move-exception v0
.line 1017
new-instance v1, Ljavax/crypto/IllegalBlockSizeException;
invoke-virtual {v0}, Lorg/spongycastle/crypto/DataLengthException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljavax/crypto/IllegalBlockSizeException;-><init>(Ljava/lang/String;)V
throw v1
.line 1025
:cond_28
new-array v0, v1, [B
.line 1027
invoke-static {v4, v5, v0, v5, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move-object v4, v0
.line 1029
goto :goto_1c
:cond_2f
move v0, v5
goto :goto_12
.end method
.method protected engineGetBlockSize()I
.registers 2
.prologue
.line 197
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
return v0
.end method
.method protected engineGetIV()[B
.registers 2
.prologue
.line 202
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
if-eqz v0, :cond_b
.line 204
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/AEADParameters;->getNonce()[B
move-result-object v0
.line 207
:goto_a
return-object v0
:cond_b
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v0, :cond_16
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getIV()[B
move-result-object v0
goto :goto_a
:cond_16
const/4 v0, 0x0
goto :goto_a
.end method
.method protected engineGetKeySize(Ljava/security/Key;)I
.registers 3
.prologue
.line 213
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v0
array-length v0, v0
shl-int/lit8 v0, v0, 0x3
return v0
.end method
.method protected engineGetOutputSize(I)I
.registers 3
.prologue
.line 219
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v0, p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getOutputSize(I)I
move-result v0
return v0
.end method
.method protected engineGetParameters()Ljava/security/AlgorithmParameters;
.registers 5
.prologue
const/16 v2, 0x2f
.line 224
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
if-nez v0, :cond_19
.line 226
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
if-eqz v0, :cond_1f
.line 230
:try_start_a
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
invoke-virtual {p0, v0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->createParametersInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
.line 231
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
invoke-virtual {v0, v1}, Ljava/security/AlgorithmParameters;->init(Ljava/security/spec/AlgorithmParameterSpec;)V
:try_end_19
.catch Ljava/lang/Exception; {:try_start_a .. :try_end_19} :catch_1c
.line 271
:cond_19
:goto_19
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
:goto_1b
return-object v0
.line 235
:catch_1c
move-exception v0
const/4 v0, 0x0
goto :goto_1b
.line 238
:cond_1f
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v0, :cond_59
.line 240
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v0
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v0
.line 242
invoke-virtual {v0, v2}, Ljava/lang/String;->indexOf(I)I
move-result v1
if-ltz v1, :cond_3c
.line 244
const/4 v1, 0x0
invoke-virtual {v0, v2}, Ljava/lang/String;->indexOf(I)I
move-result v2
invoke-virtual {v0, v1, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v0
.line 249
:cond_3c
:try_start_3c
invoke-virtual {p0, v0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->createParametersInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
.line 250
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getIV()[B
move-result-object v1
invoke-virtual {v0, v1}, Ljava/security/AlgorithmParameters;->init([B)V
:try_end_4d
.catch Ljava/lang/Exception; {:try_start_3c .. :try_end_4d} :catch_4e
goto :goto_19
.line 252
:catch_4e
move-exception v0
.line 254
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
.line 257
:cond_59
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
if-eqz v0, :cond_19
.line 261
:try_start_5d
const-string v0, "GCM"
invoke-virtual {p0, v0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->createParametersInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
.line 262
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
new-instance v1, Lorg/spongycastle/asn1/cms/GCMParameters;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
invoke-virtual {v2}, Lorg/spongycastle/crypto/params/AEADParameters;->getNonce()[B
move-result-object v2
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
invoke-virtual {v3}, Lorg/spongycastle/crypto/params/AEADParameters;->getMacSize()I
move-result v3
div-int/lit8 v3, v3, 0x8
invoke-direct {v1, v2, v3}, Lorg/spongycastle/asn1/cms/GCMParameters;-><init>([BI)V
invoke-virtual {v1}, Lorg/spongycastle/asn1/cms/GCMParameters;->getEncoded()[B
move-result-object v1
invoke-virtual {v0, v1}, Ljava/security/AlgorithmParameters;->init([B)V
:try_end_81
.catch Ljava/lang/Exception; {:try_start_5d .. :try_end_81} :catch_82
goto :goto_19
.line 264
:catch_82
move-exception v0
.line 266
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 8
.prologue
.line 878
const/4 v1, 0x0
.line 880
if-eqz p3, :cond_36
.line 882
const/4 v0, 0x0
:goto_4
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
array-length v2, v2
if-eq v0, v2, :cond_3d
.line 884
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
aget-object v2, v2, v0
if-eqz v2, :cond_33
.line 891
:try_start_f
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->availableSpecs:[Ljava/lang/Class;
aget-object v2, v2, v0
invoke-virtual {p3, v2}, Ljava/security/AlgorithmParameters;->getParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;
:try_end_16
.catch Ljava/lang/Exception; {:try_start_f .. :try_end_16} :catch_32
move-result-object v0
.line 900
:goto_17
if-nez v0, :cond_37
.line 902
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "can\'t handle parameter "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {p3}, Ljava/security/AlgorithmParameters;->toString()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
:catch_32
move-exception v2
.line 882
:cond_33
add-int/lit8 v0, v0, 0x1
goto :goto_4
:cond_36
move-object v0, v1
.line 906
:cond_37
invoke-virtual {p0, p1, p2, v0, p4}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.line 908
iput-object p3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
.line 909
return-void
:cond_3d
move-object v0, v1
goto :goto_17
.end method
.method protected engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
.registers 6
.prologue
.line 919
const/4 v0, 0x0
:try_start_1
invoke-virtual {p0, p1, p2, v0, p3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->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 924
return-void
.line 921
:catch_5
move-exception v0
.line 923
new-instance v1, Ljava/security/InvalidKeyException;
invoke-virtual {v0}, Ljava/security/InvalidAlgorithmParameterException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method protected engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.registers 15
.prologue
const/4 v2, 0x2
const/4 v9, 0x1
const/4 v1, 0x0
const/4 v8, 0x0
.line 473
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 474
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 475
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineParams:Ljava/security/AlgorithmParameters;
.line 476
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
.line 481
instance-of v3, p2, Ljavax/crypto/SecretKey;
if-nez v3, :cond_2f
.line 483
new-instance v1, Ljava/security/InvalidKeyException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Key for algorithm "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-interface {p2}, Ljava/security/Key;->getAlgorithm()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
const-string v3, " not suitable for symmetric enryption."
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}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 489
:cond_2f
if-nez p3, :cond_47
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v3}, Lorg/spongycastle/crypto/BlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v3
const-string v4, "RC5-64"
invoke-virtual {v3, v4}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v3
if-eqz v3, :cond_47
.line 491
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "RC5 requires an RC5ParametersSpec to be passed in."
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 497
:cond_47
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
if-eq v3, v2, :cond_4f
instance-of v3, p2, Lorg/spongycastle/jcajce/PKCS12Key;
if-eqz v3, :cond_11c
.line 502
:cond_4f
:try_start_4f
move-object v0, p2
check-cast v0, Ljavax/crypto/SecretKey;
move-object v1, v0
:try_end_53
.catch Ljava/lang/Exception; {:try_start_4f .. :try_end_53} :catch_89
.line 509
instance-of v3, p3, Ljavax/crypto/spec/PBEParameterSpec;
if-eqz v3, :cond_5c
move-object v3, p3
.line 511
check-cast v3, Ljavax/crypto/spec/PBEParameterSpec;
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 514
:cond_5c
instance-of v3, v1, Ljavax/crypto/interfaces/PBEKey;
if-eqz v3, :cond_79
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
if-nez v3, :cond_79
.line 516
new-instance v4, Ljavax/crypto/spec/PBEParameterSpec;
move-object v3, v1
check-cast v3, Ljavax/crypto/interfaces/PBEKey;
invoke-interface {v3}, Ljavax/crypto/interfaces/PBEKey;->getSalt()[B
move-result-object v5
move-object v3, v1
check-cast v3, Ljavax/crypto/interfaces/PBEKey;
invoke-interface {v3}, Ljavax/crypto/interfaces/PBEKey;->getIterationCount()I
move-result v3
invoke-direct {v4, v5, v3}, Ljavax/crypto/spec/PBEParameterSpec;-><init>([BI)V
iput-object v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 519
:cond_79
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
if-nez v3, :cond_92
instance-of v3, v1, Ljavax/crypto/interfaces/PBEKey;
if-nez v3, :cond_92
.line 521
new-instance v1, Ljava/security/InvalidKeyException;
const-string v2, "Algorithm requires a PBE key"
invoke-direct {v1, v2}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 506
:catch_89
move-exception v1
new-instance v1, Ljava/security/InvalidKeyException;
const-string v2, "PKCS12 requires a SecretKey/PBEKey"
invoke-direct {v1, v2}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 523
:cond_92
instance-of v3, p2, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;
if-eqz v3, :cond_103
move-object v3, p2
.line 525
check-cast v3, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;
invoke-virtual {v3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getParam()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v3
if-eqz v3, :cond_ea
move-object v1, p2
.line 527
check-cast v1, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;
invoke-virtual {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getParam()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
.line 538
:goto_a6
instance-of v1, v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v1, :cond_af
move-object v1, v2
.line 540
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_af
move-object v1, v2
.line 622
:cond_b0
:goto_b0
instance-of v2, p3, Ljavax/crypto/spec/IvParameterSpec;
if-eqz v2, :cond_2cf
.line 624
iget v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eqz v2, :cond_2b9
.line 626
check-cast p3, Ljavax/crypto/spec/IvParameterSpec;
.line 628
invoke-virtual {p3}, Ljavax/crypto/spec/IvParameterSpec;->getIV()[B
move-result-object v2
array-length v2, v2
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eq v2, v3, :cond_239
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
instance-of v2, v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
if-nez v2, :cond_239
iget-boolean v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
if-eqz v2, :cond_239
.line 630
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "IV must be "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " bytes long."
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}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 531
:cond_ea
invoke-interface {v1}, Ljavax/crypto/SecretKey;->getEncoded()[B
move-result-object v1
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->digest:I
iget v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->keySizeInBits:I
iget v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
shl-int/lit8 v5, v5, 0x3
iget-object v6, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
iget-object v7, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v7}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v7
invoke-static/range {v1 .. v7}, Lorg/spongycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEParameters([BIIIILjava/security/spec/AlgorithmParameterSpec;Ljava/lang/String;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
goto :goto_a6
.line 536
:cond_103
invoke-interface {v1}, Ljavax/crypto/SecretKey;->getEncoded()[B
move-result-object v1
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->digest:I
iget v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->keySizeInBits:I
iget v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
shl-int/lit8 v5, v5, 0x3
iget-object v6, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
iget-object v7, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v7}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v7
invoke-static/range {v1 .. v7}, Lorg/spongycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEParameters([BIIIILjava/security/spec/AlgorithmParameterSpec;Ljava/lang/String;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
goto :goto_a6
.line 543
:cond_11c
instance-of v2, p2, Lorg/spongycastle/jcajce/PBKDF1Key;
if-eqz v2, :cond_16e
move-object v1, p2
.line 545
check-cast v1, Lorg/spongycastle/jcajce/PBKDF1Key;
.line 547
instance-of v2, p3, Ljavax/crypto/spec/PBEParameterSpec;
if-eqz v2, :cond_12c
move-object v2, p3
.line 549
check-cast v2, Ljavax/crypto/spec/PBEParameterSpec;
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 551
:cond_12c
instance-of v2, v1, Lorg/spongycastle/jcajce/PBKDF1KeyWithParameters;
if-eqz v2, :cond_149
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
if-nez v2, :cond_149
.line 553
new-instance v3, Ljavax/crypto/spec/PBEParameterSpec;
move-object v2, v1
check-cast v2, Lorg/spongycastle/jcajce/PBKDF1KeyWithParameters;
invoke-virtual {v2}, Lorg/spongycastle/jcajce/PBKDF1KeyWithParameters;->getSalt()[B
move-result-object v4
move-object v2, v1
check-cast v2, Lorg/spongycastle/jcajce/PBKDF1KeyWithParameters;
invoke-virtual {v2}, Lorg/spongycastle/jcajce/PBKDF1KeyWithParameters;->getIterationCount()I
move-result v2
invoke-direct {v3, v4, v2}, Ljavax/crypto/spec/PBEParameterSpec;-><init>([BI)V
iput-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 556
:cond_149
invoke-virtual {v1}, Lorg/spongycastle/jcajce/PBKDF1Key;->getEncoded()[B
move-result-object v1
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->digest:I
iget v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->keySizeInBits:I
iget v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
shl-int/lit8 v5, v2, 0x3
iget-object v6, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v7
move v2, v8
invoke-static/range {v1 .. v7}, Lorg/spongycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEParameters([BIIIILjava/security/spec/AlgorithmParameterSpec;Ljava/lang/String;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
.line 557
instance-of v1, v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v1, :cond_16b
move-object v1, v2
.line 559
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_16b
move-object v1, v2
.line 561
goto/16 :goto_b0
.line 562
:cond_16e
instance-of v2, p2, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;
if-eqz v2, :cond_1c6
move-object v1, p2
.line 564
check-cast v1, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;
.line 566
invoke-virtual {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getOID()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v2
if-eqz v2, :cond_19f
.line 568
invoke-virtual {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getOID()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v2
invoke-virtual {v2}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->getId()Ljava/lang/String;
move-result-object v2
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
.line 575
:goto_185
invoke-virtual {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getParam()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
if-eqz v2, :cond_1a6
.line 577
invoke-virtual {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getParam()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v1
invoke-direct {p0, p3, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->adjustParameters(Ljava/security/spec/AlgorithmParameterSpec;Lorg/spongycastle/crypto/CipherParameters;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
.line 589
:goto_193
instance-of v1, v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v1, :cond_19c
move-object v1, v2
.line 591
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_19c
move-object v1, v2
.line 593
goto/16 :goto_b0
.line 572
:cond_19f
invoke-virtual {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getAlgorithm()Ljava/lang/String;
move-result-object v2
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeAlgorithm:Ljava/lang/String;
goto :goto_185
.line 579
:cond_1a6
instance-of v2, p3, Ljavax/crypto/spec/PBEParameterSpec;
if-eqz v2, :cond_1be
move-object v2, p3
.line 581
check-cast v2, Ljavax/crypto/spec/PBEParameterSpec;
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 582
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v2
invoke-interface {v2}, Lorg/spongycastle/crypto/BlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v2
invoke-static {v1, p3, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEParameters(Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;Ljava/security/spec/AlgorithmParameterSpec;Ljava/lang/String;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
goto :goto_193
.line 586
:cond_1be
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "PBE requires PBE parameters to be set."
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 594
:cond_1c6
instance-of v2, p2, Ljavax/crypto/interfaces/PBEKey;
if-eqz v2, :cond_20f
move-object v1, p2
.line 596
check-cast v1, Ljavax/crypto/interfaces/PBEKey;
move-object v2, p3
.line 597
check-cast v2, Ljavax/crypto/spec/PBEParameterSpec;
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 598
instance-of v2, v1, Lorg/spongycastle/jcajce/PKCS12KeyWithParameters;
if-eqz v2, :cond_1e9
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
if-nez v2, :cond_1e9
.line 600
new-instance v2, Ljavax/crypto/spec/PBEParameterSpec;
invoke-interface {v1}, Ljavax/crypto/interfaces/PBEKey;->getSalt()[B
move-result-object v3
invoke-interface {v1}, Ljavax/crypto/interfaces/PBEKey;->getIterationCount()I
move-result v4
invoke-direct {v2, v3, v4}, Ljavax/crypto/spec/PBEParameterSpec;-><init>([BI)V
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
.line 603
:cond_1e9
invoke-interface {v1}, Ljavax/crypto/interfaces/PBEKey;->getEncoded()[B
move-result-object v1
iget v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->digest:I
iget v4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->keySizeInBits:I
iget v5, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
shl-int/lit8 v5, v5, 0x3
iget-object v6, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->pbeSpec:Ljavax/crypto/spec/PBEParameterSpec;
iget-object v7, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v7}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v7
invoke-static/range {v1 .. v7}, Lorg/spongycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEParameters([BIIIILjava/security/spec/AlgorithmParameterSpec;Ljava/lang/String;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
.line 604
instance-of v1, v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v1, :cond_20c
move-object v1, v2
.line 606
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_20c
move-object v1, v2
.line 608
goto/16 :goto_b0
.line 609
:cond_20f
instance-of v2, p2, Lorg/spongycastle/jcajce/spec/RepeatedSecretKeySpec;
if-nez v2, :cond_b0
.line 611
iget v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
if-eqz v1, :cond_225
iget v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
const/4 v2, 0x4
if-eq v1, v2, :cond_225
iget v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
if-eq v1, v9, :cond_225
iget v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->scheme:I
const/4 v2, 0x5
if-ne v1, v2, :cond_22d
.line 613
:cond_225
new-instance v1, Ljava/security/InvalidKeyException;
const-string v2, "Algorithm requires a PBE key"
invoke-direct {v1, v2}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v1
.line 615
:cond_22d
new-instance v2, Lorg/spongycastle/crypto/params/KeyParameter;
invoke-interface {p2}, Ljava/security/Key;->getEncoded()[B
move-result-object v1
invoke-direct {v2, v1}, Lorg/spongycastle/crypto/params/KeyParameter;-><init>([B)V
move-object v1, v2
goto/16 :goto_b0
.line 633
:cond_239
instance-of v2, v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v2, :cond_2af
.line 635
new-instance v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v1
invoke-virtual {p3}, Ljavax/crypto/spec/IvParameterSpec;->getIV()[B
move-result-object v3
invoke-direct {v2, v1, v3}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
:goto_24c
move-object v1, v2
.line 641
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
move-object v1, v2
.line 762
:cond_252
:goto_252
iget v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eqz v2, :cond_4d4
instance-of v2, v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-nez v2, :cond_4d4
instance-of v2, v1, Lorg/spongycastle/crypto/params/AEADParameters;
if-nez v2, :cond_4d4
.line 766
if-nez p4, :cond_4d7
.line 768
new-instance v2, Ljava/security/SecureRandom;
invoke-direct {v2}, Ljava/security/SecureRandom;-><init>()V
.line 771
:goto_265
if-eq p1, v9, :cond_26a
const/4 v3, 0x3
if-ne p1, v3, :cond_4a9
.line 773
:cond_26a
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
new-array v3, v3, [B
.line 775
invoke-virtual {v2, v3}, Ljava/security/SecureRandom;->nextBytes([B)V
.line 776
new-instance v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-direct {v2, v1, v3}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
move-object v1, v2
.line 777
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
.line 785
:goto_27b
if-eqz p4, :cond_4d1
iget-boolean v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->padded:Z
if-eqz v1, :cond_4d1
.line 787
new-instance v1, Lorg/spongycastle/crypto/params/ParametersWithRandom;
invoke-direct {v1, v2, p4}, Lorg/spongycastle/crypto/params/ParametersWithRandom;-><init>(Lorg/spongycastle/crypto/CipherParameters;Ljava/security/SecureRandom;)V
.line 792
:goto_286
packed-switch p1, :pswitch_data_4da
.line 803
:try_start_289
new-instance v1, Ljava/security/InvalidParameterException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "unknown opmode "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " passed"
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}, Ljava/security/InvalidParameterException;-><init>(Ljava/lang/String;)V
throw v1
:try_end_2a4
.catch Ljava/lang/Exception; {:try_start_289 .. :try_end_2a4} :catch_2a4
.line 806
:catch_2a4
move-exception v1
.line 808
new-instance v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$1;
invoke-virtual {v1}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;
move-result-object v3
invoke-direct {v2, p0, v3, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$1;-><init>(Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;Ljava/lang/String;Ljava/lang/Exception;)V
throw v2
.line 639
:cond_2af
new-instance v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {p3}, Ljavax/crypto/spec/IvParameterSpec;->getIV()[B
move-result-object v3
invoke-direct {v2, v1, v3}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
goto :goto_24c
.line 645
:cond_2b9
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
if-eqz v2, :cond_252
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v3, "ECB"
invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_252
.line 647
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "ECB mode does not use an IV"
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 651
:cond_2cf
instance-of v2, p3, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
if-eqz v2, :cond_31b
move-object v1, p3
.line 653
check-cast v1, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
.line 655
new-instance v2, Lorg/spongycastle/crypto/params/ParametersWithSBox;
new-instance v3, Lorg/spongycastle/crypto/params/KeyParameter;
.line 656
invoke-interface {p2}, Ljava/security/Key;->getEncoded()[B
move-result-object v4
invoke-direct {v3, v4}, Lorg/spongycastle/crypto/params/KeyParameter;-><init>([B)V
check-cast p3, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;
invoke-virtual {p3}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getSbox()[B
move-result-object v4
invoke-direct {v2, v3, v4}, Lorg/spongycastle/crypto/params/ParametersWithSBox;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
.line 658
invoke-virtual {v1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getIV()[B
move-result-object v3
if-eqz v3, :cond_30d
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eqz v3, :cond_30d
.line 660
instance-of v3, v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v3, :cond_310
.line 662
new-instance v3, Lorg/spongycastle/crypto/params/ParametersWithIV;
check-cast v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v2}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
invoke-virtual {v1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {v3, v2, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
move-object v2, v3
:goto_308
move-object v1, v2
.line 668
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_30d
move-object v1, v2
.line 670
goto/16 :goto_252
.line 666
:cond_310
new-instance v3, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v1}, Lorg/spongycastle/jcajce/spec/GOST28147ParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {v3, v2, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
move-object v2, v3
goto :goto_308
.line 671
:cond_31b
instance-of v2, p3, Ljavax/crypto/spec/RC2ParameterSpec;
if-eqz v2, :cond_362
move-object v1, p3
.line 673
check-cast v1, Ljavax/crypto/spec/RC2ParameterSpec;
.line 675
new-instance v2, Lorg/spongycastle/crypto/params/RC2Parameters;
invoke-interface {p2}, Ljava/security/Key;->getEncoded()[B
move-result-object v3
check-cast p3, Ljavax/crypto/spec/RC2ParameterSpec;
invoke-virtual {p3}, Ljavax/crypto/spec/RC2ParameterSpec;->getEffectiveKeyBits()I
move-result v4
invoke-direct {v2, v3, v4}, Lorg/spongycastle/crypto/params/RC2Parameters;-><init>([BI)V
.line 677
invoke-virtual {v1}, Ljavax/crypto/spec/RC2ParameterSpec;->getIV()[B
move-result-object v3
if-eqz v3, :cond_354
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eqz v3, :cond_354
.line 679
instance-of v3, v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v3, :cond_357
.line 681
new-instance v3, Lorg/spongycastle/crypto/params/ParametersWithIV;
check-cast v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v2}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
invoke-virtual {v1}, Ljavax/crypto/spec/RC2ParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {v3, v2, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
move-object v2, v3
:goto_34f
move-object v1, v2
.line 687
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_354
move-object v1, v2
.line 689
goto/16 :goto_252
.line 685
:cond_357
new-instance v3, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v1}, Ljavax/crypto/spec/RC2ParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {v3, v2, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
move-object v2, v3
goto :goto_34f
.line 690
:cond_362
instance-of v2, p3, Ljavax/crypto/spec/RC5ParameterSpec;
if-eqz v2, :cond_429
move-object v1, p3
.line 692
check-cast v1, Ljavax/crypto/spec/RC5ParameterSpec;
.line 694
new-instance v2, Lorg/spongycastle/crypto/params/RC5Parameters;
invoke-interface {p2}, Ljava/security/Key;->getEncoded()[B
move-result-object v3
check-cast p3, Ljavax/crypto/spec/RC5ParameterSpec;
invoke-virtual {p3}, Ljavax/crypto/spec/RC5ParameterSpec;->getRounds()I
move-result v4
invoke-direct {v2, v3, v4}, Lorg/spongycastle/crypto/params/RC5Parameters;-><init>([BI)V
.line 695
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v3}, Lorg/spongycastle/crypto/BlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v3
const-string v4, "RC5"
invoke-virtual {v3, v4}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v3
if-eqz v3, :cond_3f0
.line 697
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v3}, Lorg/spongycastle/crypto/BlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v3
const-string v4, "RC5-32"
invoke-virtual {v3, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
if-eqz v3, :cond_3bb
.line 699
invoke-virtual {v1}, Ljavax/crypto/spec/RC5ParameterSpec;->getWordSize()I
move-result v3
const/16 v4, 0x20
if-eq v3, v4, :cond_3f8
.line 701
new-instance v2, Ljava/security/InvalidAlgorithmParameterException;
new-instance v3, Ljava/lang/StringBuilder;
const-string v4, "RC5 already set up for a word size of 32 not "
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Ljavax/crypto/spec/RC5ParameterSpec;->getWordSize()I
move-result v1
invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v3, "."
invoke-virtual {v1, v3}, 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 {v2, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v2
.line 704
:cond_3bb
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v3}, Lorg/spongycastle/crypto/BlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v3
const-string v4, "RC5-64"
invoke-virtual {v3, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
if-eqz v3, :cond_3f8
.line 706
invoke-virtual {v1}, Ljavax/crypto/spec/RC5ParameterSpec;->getWordSize()I
move-result v3
const/16 v4, 0x40
if-eq v3, v4, :cond_3f8
.line 708
new-instance v2, Ljava/security/InvalidAlgorithmParameterException;
new-instance v3, Ljava/lang/StringBuilder;
const-string v4, "RC5 already set up for a word size of 64 not "
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Ljavax/crypto/spec/RC5ParameterSpec;->getWordSize()I
move-result v1
invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v3, "."
invoke-virtual {v1, v3}, 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 {v2, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v2
.line 714
:cond_3f0
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "RC5 parameters passed to a cipher that is not RC5."
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 716
:cond_3f8
invoke-virtual {v1}, Ljavax/crypto/spec/RC5ParameterSpec;->getIV()[B
move-result-object v3
if-eqz v3, :cond_41b
iget v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
if-eqz v3, :cond_41b
.line 718
instance-of v3, v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v3, :cond_41e
.line 720
new-instance v3, Lorg/spongycastle/crypto/params/ParametersWithIV;
check-cast v2, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v2}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v2
invoke-virtual {v1}, Ljavax/crypto/spec/RC5ParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {v3, v2, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
move-object v2, v3
:goto_416
move-object v1, v2
.line 726
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivParam:Lorg/spongycastle/crypto/params/ParametersWithIV;
:cond_41b
move-object v1, v2
.line 728
goto/16 :goto_252
.line 724
:cond_41e
new-instance v3, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v1}, Ljavax/crypto/spec/RC5ParameterSpec;->getIV()[B
move-result-object v1
invoke-direct {v3, v2, v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
move-object v2, v3
goto :goto_416
.line 729
:cond_429
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
if-eqz v2, :cond_49b
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
invoke-virtual {v2, p3}, Ljava/lang/Class;->isInstance(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_49b
.line 731
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
invoke-direct {p0, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->isAEADModeName(Ljava/lang/String;)Z
move-result v2
if-nez v2, :cond_44b
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
instance-of v2, v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
if-nez v2, :cond_44b
.line 733
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "GCMParameterSpec can only be used with AEAD modes."
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 738
:cond_44b
:try_start_44b
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
const-string v3, "getTLen"
const/4 v4, 0x0
new-array v4, v4, [Ljava/lang/Class;
invoke-virtual {v2, v3, v4}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v4
.line 739
sget-object v2, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->gcmSpecClass:Ljava/lang/Class;
const-string v3, "getIV"
const/4 v5, 0x0
new-array v5, v5, [Ljava/lang/Class;
invoke-virtual {v2, v3, v5}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v5
.line 742
instance-of v2, v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v2, :cond_48e
.line 744
check-cast v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v1}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v1
check-cast v1, Lorg/spongycastle/crypto/params/KeyParameter;
move-object v3, v1
.line 750
:goto_46e
new-instance v2, Lorg/spongycastle/crypto/params/AEADParameters;
const/4 v1, 0x0
new-array v1, v1, [Ljava/lang/Object;
invoke-virtual {v4, p3, v1}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/lang/Integer;
invoke-virtual {v1}, Ljava/lang/Integer;->intValue()I
move-result v4
const/4 v1, 0x0
new-array v1, v1, [Ljava/lang/Object;
invoke-virtual {v5, p3, v1}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
check-cast v1, [B
invoke-direct {v2, v3, v4, v1}, Lorg/spongycastle/crypto/params/AEADParameters;-><init>(Lorg/spongycastle/crypto/params/KeyParameter;I[B)V
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->aeadParams:Lorg/spongycastle/crypto/params/AEADParameters;
move-object v1, v2
.line 755
goto/16 :goto_252
.line 748
:cond_48e
check-cast v1, Lorg/spongycastle/crypto/params/KeyParameter;
:try_end_490
.catch Ljava/lang/Exception; {:try_start_44b .. :try_end_490} :catch_492
move-object v3, v1
goto :goto_46e
.line 754
:catch_492
move-exception v1
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "Cannot process GCMParameterSpec."
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 757
:cond_49b
if-eqz p3, :cond_252
instance-of v2, p3, Ljavax/crypto/spec/PBEParameterSpec;
if-nez v2, :cond_252
.line 759
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "unknown parameter type."
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 779
:cond_4a9
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v2
invoke-interface {v2}, Lorg/spongycastle/crypto/BlockCipher;->getAlgorithmName()Ljava/lang/String;
move-result-object v2
const-string v3, "PGPCFB"
invoke-virtual {v2, v3}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
move-result v2
if-gez v2, :cond_4d4
.line 781
new-instance v1, Ljava/security/InvalidAlgorithmParameterException;
const-string v2, "no IV set when one expected"
invoke-direct {v1, v2}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v1
.line 796
:pswitch_4c3
:try_start_4c3
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
const/4 v3, 0x1
invoke-interface {v2, v3, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
.line 801
:goto_4c9
return-void
.line 800
:pswitch_4ca
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
const/4 v3, 0x0
invoke-interface {v2, v3, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
:try_end_4d0
.catch Ljava/lang/Exception; {:try_start_4c3 .. :try_end_4d0} :catch_2a4
goto :goto_4c9
:cond_4d1
move-object v1, v2
goto/16 :goto_286
:cond_4d4
move-object v2, v1
goto/16 :goto_27b
:cond_4d7
move-object v2, p4
goto/16 :goto_265
.line 792
:pswitch_data_4da
.packed-switch 0x1
:pswitch_4c3
:pswitch_4ca
:pswitch_4c3
:pswitch_4ca
.end packed-switch
.end method
.method protected engineSetMode(Ljava/lang/String;)V
.registers 6
.prologue
const/4 v3, 0x3
const/4 v2, 0x0
.line 278
invoke-static {p1}, Lorg/spongycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
.line 280
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "ECB"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
.line 282
iput v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 283
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 400
:goto_1d
return-void
.line 285
:cond_1e
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "CBC"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_3f
.line 287
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 288
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/CBCBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/modes/CBCBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto :goto_1d
.line 291
:cond_3f
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "OFB"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_89
.line 293
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 294
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
invoke-virtual {v0}, Ljava/lang/String;->length()I
move-result v0
if-eq v0, v3, :cond_72
.line 296
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
invoke-virtual {v0, v3}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
move-result v0
.line 298
new-instance v1, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/OFBBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3, v0}, Lorg/spongycastle/crypto/modes/OFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;I)V
invoke-direct {v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto :goto_1d
.line 303
:cond_72
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/OFBBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 304
invoke-interface {v3}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v3
mul-int/lit8 v3, v3, 0x8
invoke-direct {v1, v2, v3}, Lorg/spongycastle/crypto/modes/OFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;I)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto :goto_1d
.line 307
:cond_89
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "CFB"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_d5
.line 309
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 310
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
invoke-virtual {v0}, Ljava/lang/String;->length()I
move-result v0
if-eq v0, v3, :cond_bd
.line 312
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
invoke-virtual {v0, v3}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
move-result v0
.line 314
new-instance v1, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/CFBBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3, v0}, Lorg/spongycastle/crypto/modes/CFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;I)V
invoke-direct {v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 319
:cond_bd
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/CFBBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
.line 320
invoke-interface {v3}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v3
mul-int/lit8 v3, v3, 0x8
invoke-direct {v1, v2, v3}, Lorg/spongycastle/crypto/modes/CFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;I)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 323
:cond_d5
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "PGP"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_ff
.line 325
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "PGPCFBwithIV"
invoke-virtual {v0, v1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
move-result v0
.line 327
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v1}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v1
iput v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 328
new-instance v1, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/PGPCFBBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3, v0}, Lorg/spongycastle/crypto/modes/PGPCFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;Z)V
invoke-direct {v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 331
:cond_ff
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "OpenPGPCFB"
invoke-virtual {v0, v1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_11b
.line 333
iput v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 334
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/OpenPGPCFBBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/modes/OpenPGPCFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 337
:cond_11b
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "SIC"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_152
.line 339
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 340
iget v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
const/16 v1, 0x10
if-ge v0, v1, :cond_13b
.line 342
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Warning: SIC-Mode can become a twotime-pad if the blocksize of the cipher is too small. Use a cipher with a block size of at least 128 bits (e.g. AES)"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 344
:cond_13b
iput-boolean v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 345
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/BufferedBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/SICBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3}, Lorg/spongycastle/crypto/modes/SICBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/BufferedBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 348
:cond_152
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "CTR"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_17b
.line 350
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 351
iput-boolean v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->fixedIv:Z
.line 352
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/BufferedBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/SICBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3}, Lorg/spongycastle/crypto/modes/SICBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/BufferedBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 355
:cond_17b
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "GOFB"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_1a2
.line 357
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 358
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/BufferedBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/GOFBBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3}, Lorg/spongycastle/crypto/modes/GOFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/BufferedBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 361
:cond_1a2
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "GCFB"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_1c9
.line 363
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 364
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/BufferedBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/GCFBBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3}, Lorg/spongycastle/crypto/modes/GCFBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/BufferedBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 367
:cond_1c9
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "CTS"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_1f0
.line 369
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 370
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/CTSBlockCipher;
new-instance v2, Lorg/spongycastle/crypto/modes/CBCBlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v2, v3}, Lorg/spongycastle/crypto/modes/CBCBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/modes/CTSBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 372
:cond_1f0
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "CCM"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_20e
.line 374
const/16 v0, 0xd
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 375
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/CCMBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/modes/CCMBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 377
:cond_20e
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "OCB"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_24b
.line 379
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineProvider:Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;
if-eqz v0, :cond_236
.line 384
const/16 v0, 0xf
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 385
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/OCBBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineProvider:Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;
invoke-interface {v3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BlockCipherProvider;->get()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v3
invoke-direct {v1, v2, v3}, Lorg/spongycastle/crypto/modes/OCBBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 389
:cond_236
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
.line 392
:cond_24b
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "EAX"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_26d
.line 394
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 395
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/EAXBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/modes/EAXBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 397
:cond_26d
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
const-string v1, "GCM"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_28f
.line 399
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-interface {v0}, Lorg/spongycastle/crypto/BlockCipher;->getBlockSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->ivLength:I
.line 400
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/GCMBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->baseEngine:Lorg/spongycastle/crypto/BlockCipher;
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/modes/GCMBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/modes/AEADBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_1d
.line 404
:cond_28f
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 5
.prologue
.line 412
invoke-static {p1}, Lorg/spongycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 414
const-string v1, "NOPADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_27
.line 416
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->wrapOnNoPadding()Z
move-result v0
if-eqz v0, :cond_26
.line 418
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/BufferedBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v2
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/BufferedBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
.line 462
:cond_26
:goto_26
return-void
.line 421
:cond_27
const-string v1, "WITHCTS"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_42
.line 423
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
new-instance v1, Lorg/spongycastle/crypto/modes/CTSBlockCipher;
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v2
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/modes/CTSBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BufferedBlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto :goto_26
.line 427
:cond_42
const/4 v1, 0x1
iput-boolean v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->padded:Z
.line 429
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->modeName:Ljava/lang/String;
invoke-direct {p0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->isAEADModeName(Ljava/lang/String;)Z
move-result v1
if-eqz v1, :cond_55
.line 431
new-instance v0, Ljavax/crypto/NoSuchPaddingException;
const-string v1, "Only NoPadding can be used with AEAD modes."
invoke-direct {v0, v1}, Ljavax/crypto/NoSuchPaddingException;-><init>(Ljava/lang/String;)V
throw v0
.line 433
:cond_55
const-string v1, "PKCS5PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_65
const-string v1, "PKCS7PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_73
.line 435
:cond_65
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v1
invoke-direct {v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto :goto_26
.line 437
:cond_73
const-string v1, "ZEROBYTEPADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_8e
.line 439
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v1
new-instance v2, Lorg/spongycastle/crypto/paddings/ZeroBytePadding;
invoke-direct {v2}, Lorg/spongycastle/crypto/paddings/ZeroBytePadding;-><init>()V
invoke-direct {v0, v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;Lorg/spongycastle/crypto/paddings/BlockCipherPadding;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto :goto_26
.line 441
:cond_8e
const-string v1, "ISO10126PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_9e
const-string v1, "ISO10126-2PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_b2
.line 443
:cond_9e
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v1
new-instance v2, Lorg/spongycastle/crypto/paddings/ISO10126d2Padding;
invoke-direct {v2}, Lorg/spongycastle/crypto/paddings/ISO10126d2Padding;-><init>()V
invoke-direct {v0, v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;Lorg/spongycastle/crypto/paddings/BlockCipherPadding;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_26
.line 445
:cond_b2
const-string v1, "X9.23PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_c2
const-string v1, "X923PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_d6
.line 447
:cond_c2
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v1
new-instance v2, Lorg/spongycastle/crypto/paddings/X923Padding;
invoke-direct {v2}, Lorg/spongycastle/crypto/paddings/X923Padding;-><init>()V
invoke-direct {v0, v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;Lorg/spongycastle/crypto/paddings/BlockCipherPadding;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_26
.line 449
:cond_d6
const-string v1, "ISO7816-4PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_e6
const-string v1, "ISO9797-1PADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_fa
.line 451
:cond_e6
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v1
new-instance v2, Lorg/spongycastle/crypto/paddings/ISO7816d4Padding;
invoke-direct {v2}, Lorg/spongycastle/crypto/paddings/ISO7816d4Padding;-><init>()V
invoke-direct {v0, v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;Lorg/spongycastle/crypto/paddings/BlockCipherPadding;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_26
.line 453
:cond_fa
const-string v1, "TBCPADDING"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_116
.line 455
new-instance v0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUnderlyingCipher()Lorg/spongycastle/crypto/BlockCipher;
move-result-object v1
new-instance v2, Lorg/spongycastle/crypto/paddings/TBCPadding;
invoke-direct {v2}, Lorg/spongycastle/crypto/paddings/TBCPadding;-><init>()V
invoke-direct {v0, v1, v2}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher;-><init>(Lorg/spongycastle/crypto/BlockCipher;Lorg/spongycastle/crypto/paddings/BlockCipherPadding;)V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
goto/16 :goto_26
.line 459
:cond_116
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 engineUpdate([BII[BI)I
.registers 12
.prologue
.line 981
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v0, p3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUpdateOutputSize(I)I
move-result v0
add-int/2addr v0, p5
array-length v1, p4
if-le v0, v1, :cond_12
.line 983
new-instance v0, Ljavax/crypto/ShortBufferException;
const-string v1, "output buffer too short for input."
invoke-direct {v0, v1}, Ljavax/crypto/ShortBufferException;-><init>(Ljava/lang/String;)V
throw v0
.line 988
:cond_12
:try_start_12
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
move-object v1, p1
move v2, p2
move v3, p3
move-object v4, p4
move v5, p5
invoke-interface/range {v0 .. v5}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->processBytes([BII[BI)I
:try_end_1c
.catch Lorg/spongycastle/crypto/DataLengthException; {:try_start_12 .. :try_end_1c} :catch_1e
move-result v0
return v0
.line 990
:catch_1e
move-exception v0
.line 993
new-instance v1, Ljava/lang/IllegalStateException;
invoke-virtual {v0}, Lorg/spongycastle/crypto/DataLengthException;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method protected engineUpdate([BII)[B
.registers 12
.prologue
const/4 v6, 0x0
const/4 v5, 0x0
.line 944
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v0, p3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->getUpdateOutputSize(I)I
move-result v7
.line 946
if-lez v7, :cond_22
.line 948
new-array v4, v7, [B
.line 950
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
move-object v1, p1
move v2, p2
move v3, p3
invoke-interface/range {v0 .. v5}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->processBytes([BII[BI)I
move-result v1
.line 952
if-nez v1, :cond_19
move-object v4, v6
.line 970
:cond_18
:goto_18
return-object v4
.line 956
:cond_19
if-eq v1, v7, :cond_18
.line 958
new-array v0, v1, [B
.line 960
invoke-static {v4, v5, v0, v5, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move-object v4, v0
.line 962
goto :goto_18
.line 968
:cond_22
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
move-object v1, p1
move v2, p2
move v3, p3
move-object v4, v6
invoke-interface/range {v0 .. v5}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->processBytes([BII[BI)I
move-object v4, v6
.line 970
goto :goto_18
.end method
.method protected engineUpdateAAD(Ljava/nio/ByteBuffer;)V
.registers 5
.prologue
.line 934
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->arrayOffset()I
move-result v0
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I
move-result v1
add-int/2addr v0, v1
.line 935
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I
move-result v1
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I
move-result v2
sub-int/2addr v1, v2
.line 936
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->array()[B
move-result-object v2
invoke-virtual {p0, v2, v0, v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->engineUpdateAAD([BII)V
.line 937
return-void
.end method
.method protected engineUpdateAAD([BII)V
.registers 5
.prologue
.line 929
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher;->cipher:Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;
invoke-interface {v0, p1, p2, p3}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher;->updateAAD([BII)V
.line 930
return-void
.end method