BrokenPBE$Util.smali
.class public Lorg/spongycastle/jce/provider/BrokenPBE$Util;
.super Ljava/lang/Object;
.source "BrokenPBE.java"
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 263
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static makePBEGenerator(II)Lorg/spongycastle/crypto/PBEParametersGenerator;
.registers 4
.prologue
.line 293
if-nez p0, :cond_23
.line 295
packed-switch p1, :pswitch_data_88
.line 304
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "PKCS5 scheme 1 only supports only MD5 and SHA1."
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 298
:pswitch_d
new-instance v0, Lorg/spongycastle/crypto/generators/PKCS5S1ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/MD5Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/MD5Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/generators/PKCS5S1ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
.line 346
:goto_17
return-object v0
.line 301
:pswitch_18
new-instance v0, Lorg/spongycastle/crypto/generators/PKCS5S1ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/SHA1Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/generators/PKCS5S1ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
goto :goto_17
.line 307
:cond_23
const/4 v0, 0x1
if-ne p0, v0, :cond_2c
.line 309
new-instance v0, Lorg/spongycastle/crypto/generators/PKCS5S2ParametersGenerator;
invoke-direct {v0}, Lorg/spongycastle/crypto/generators/PKCS5S2ParametersGenerator;-><init>()V
goto :goto_17
.line 311
:cond_2c
const/4 v0, 0x3
if-ne p0, v0, :cond_5b
.line 313
packed-switch p1, :pswitch_data_90
.line 325
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "unknown digest scheme for PBE encryption."
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 316
:pswitch_3a
new-instance v0, Lorg/spongycastle/jce/provider/OldPKCS12ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/MD5Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/MD5Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/jce/provider/OldPKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
goto :goto_17
.line 319
:pswitch_45
new-instance v0, Lorg/spongycastle/jce/provider/OldPKCS12ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/SHA1Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/jce/provider/OldPKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
goto :goto_17
.line 322
:pswitch_50
new-instance v0, Lorg/spongycastle/jce/provider/OldPKCS12ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/RIPEMD160Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/RIPEMD160Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/jce/provider/OldPKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
goto :goto_17
.line 330
:cond_5b
packed-switch p1, :pswitch_data_9a
.line 342
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "unknown digest scheme for PBE encryption."
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 333
:pswitch_66
new-instance v0, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/MD5Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/MD5Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
goto :goto_17
.line 336
:pswitch_71
new-instance v0, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/SHA1Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
goto :goto_17
.line 339
:pswitch_7c
new-instance v0, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;
new-instance v1, Lorg/spongycastle/crypto/digests/RIPEMD160Digest;
invoke-direct {v1}, Lorg/spongycastle/crypto/digests/RIPEMD160Digest;-><init>()V
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
goto :goto_17
.line 295
nop
:pswitch_data_88
.packed-switch 0x0
:pswitch_d
:pswitch_18
.end packed-switch
.line 313
:pswitch_data_90
.packed-switch 0x0
:pswitch_3a
:pswitch_45
:pswitch_50
.end packed-switch
.line 330
:pswitch_data_9a
.packed-switch 0x0
:pswitch_66
:pswitch_71
:pswitch_7c
.end packed-switch
.end method
.method static makePBEMacParameters(Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;Ljava/security/spec/AlgorithmParameterSpec;III)Lorg/spongycastle/crypto/CipherParameters;
.registers 10
.prologue
const/4 v1, 0x0
.line 419
if-eqz p1, :cond_7
instance-of v0, p1, Ljavax/crypto/spec/PBEParameterSpec;
if-nez v0, :cond_f
.line 421
:cond_7
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Need a PBEParameter spec with a PBE key."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 424
:cond_f
check-cast p1, Ljavax/crypto/spec/PBEParameterSpec;
.line 425
invoke-static {p2, p3}, Lorg/spongycastle/jce/provider/BrokenPBE$Util;->makePBEGenerator(II)Lorg/spongycastle/crypto/PBEParametersGenerator;
move-result-object v0
.line 426
invoke-virtual {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getEncoded()[B
move-result-object v2
.line 429
invoke-virtual {p1}, Ljavax/crypto/spec/PBEParameterSpec;->getSalt()[B
move-result-object v3
invoke-virtual {p1}, Ljavax/crypto/spec/PBEParameterSpec;->getIterationCount()I
move-result v4
invoke-virtual {v0, v2, v3, v4}, Lorg/spongycastle/crypto/PBEParametersGenerator;->init([B[BI)V
.line 431
invoke-virtual {v0, p4}, Lorg/spongycastle/crypto/PBEParametersGenerator;->generateDerivedMacParameters(I)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v3
move v0, v1
.line 433
:goto_29
array-length v4, v2
if-eq v0, v4, :cond_31
.line 435
aput-byte v1, v2, v0
.line 433
add-int/lit8 v0, v0, 0x1
goto :goto_29
.line 438
:cond_31
return-object v3
.end method
.method static makePBEParameters(Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;Ljava/security/spec/AlgorithmParameterSpec;IILjava/lang/String;II)Lorg/spongycastle/crypto/CipherParameters;
.registers 12
.prologue
const/4 v2, 0x0
.line 362
if-eqz p1, :cond_7
instance-of v0, p1, Ljavax/crypto/spec/PBEParameterSpec;
if-nez v0, :cond_f
.line 364
:cond_7
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Need a PBEParameter spec with a PBE key."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 367
:cond_f
check-cast p1, Ljavax/crypto/spec/PBEParameterSpec;
.line 368
invoke-static {p2, p3}, Lorg/spongycastle/jce/provider/BrokenPBE$Util;->makePBEGenerator(II)Lorg/spongycastle/crypto/PBEParametersGenerator;
move-result-object v0
.line 369
invoke-virtual {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getEncoded()[B
move-result-object v3
.line 372
invoke-virtual {p1}, Ljavax/crypto/spec/PBEParameterSpec;->getSalt()[B
move-result-object v1
invoke-virtual {p1}, Ljavax/crypto/spec/PBEParameterSpec;->getIterationCount()I
move-result v4
invoke-virtual {v0, v3, v1, v4}, Lorg/spongycastle/crypto/PBEParametersGenerator;->init([B[BI)V
.line 374
if-eqz p6, :cond_4f
.line 376
invoke-virtual {v0, p5, p6}, Lorg/spongycastle/crypto/PBEParametersGenerator;->generateDerivedParameters(II)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v1
.line 383
:goto_2a
const-string v0, "DES"
invoke-virtual {p4, v0}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_46
.line 385
instance-of v0, v1, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-eqz v0, :cond_54
move-object v0, v1
.line 387
check-cast v0, Lorg/spongycastle/crypto/params/ParametersWithIV;
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
check-cast v0, Lorg/spongycastle/crypto/params/KeyParameter;
.line 389
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/KeyParameter;->getKey()[B
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/jce/provider/BrokenPBE$Util;->setOddParity([B)V
:cond_46
:goto_46
move v0, v2
.line 399
:goto_47
array-length v4, v3
if-eq v0, v4, :cond_5f
.line 401
aput-byte v2, v3, v0
.line 399
add-int/lit8 v0, v0, 0x1
goto :goto_47
.line 380
:cond_4f
invoke-virtual {v0, p5}, Lorg/spongycastle/crypto/PBEParametersGenerator;->generateDerivedParameters(I)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v1
goto :goto_2a
:cond_54
move-object v0, v1
.line 393
check-cast v0, Lorg/spongycastle/crypto/params/KeyParameter;
.line 395
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/KeyParameter;->getKey()[B
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/jce/provider/BrokenPBE$Util;->setOddParity([B)V
goto :goto_46
.line 404
:cond_5f
return-object v1
.end method
.method private static setOddParity([B)V
.registers 6
.prologue
.line 273
const/4 v0, 0x0
:goto_1
array-length v1, p0
if-ge v0, v1, :cond_25
.line 275
aget-byte v1, p0, v0
.line 276
and-int/lit16 v2, v1, 0xfe
shr-int/lit8 v3, v1, 0x1
shr-int/lit8 v4, v1, 0x2
xor-int/2addr v3, v4
shr-int/lit8 v4, v1, 0x3
xor-int/2addr v3, v4
shr-int/lit8 v4, v1, 0x4
xor-int/2addr v3, v4
shr-int/lit8 v4, v1, 0x5
xor-int/2addr v3, v4
shr-int/lit8 v4, v1, 0x6
xor-int/2addr v3, v4
shr-int/lit8 v1, v1, 0x7
xor-int/2addr v1, v3
xor-int/lit8 v1, v1, 0x1
or-int/2addr v1, v2
int-to-byte v1, v1
aput-byte v1, p0, v0
.line 273
add-int/lit8 v0, v0, 0x1
goto :goto_1
.line 285
:cond_25
return-void
.end method