BcKeyStoreSpi.smali
.class public Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;
.super Ljava/security/KeyStoreSpi;
.source "BcKeyStoreSpi.java"
# interfaces
.implements Lorg/spongycastle/jce/interfaces/BCKeyStore;
# static fields
.field static final CERTIFICATE:I = 0x1
.field static final KEY:I = 0x2
.field private static final KEY_CIPHER:Ljava/lang/String; = "PBEWithSHAAnd3-KeyTripleDES-CBC"
.field static final KEY_PRIVATE:I = 0x0
.field static final KEY_PUBLIC:I = 0x1
.field private static final KEY_SALT_SIZE:I = 0x14
.field static final KEY_SECRET:I = 0x2
.field private static final MIN_ITERATIONS:I = 0x400
.field static final NULL:I = 0x0
.field static final SEALED:I = 0x4
.field static final SECRET:I = 0x3
.field private static final STORE_CIPHER:Ljava/lang/String; = "PBEWithSHAAndTwofish-CBC"
.field private static final STORE_SALT_SIZE:I = 0x14
.field private static final STORE_VERSION:I = 0x2
# instance fields
.field private final helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.field protected random:Ljava/security/SecureRandom;
.field protected table:Ljava/util/Hashtable;
.field protected version:I
# direct methods
.method public constructor <init>(I)V
.registers 3
.prologue
.line 98
invoke-direct {p0}, Ljava/security/KeyStoreSpi;-><init>()V
.line 89
new-instance v0, Ljava/util/Hashtable;
invoke-direct {v0}, Ljava/util/Hashtable;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
.line 91
new-instance v0, Ljava/security/SecureRandom;
invoke-direct {v0}, Ljava/security/SecureRandom;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->random:Ljava/security/SecureRandom;
.line 95
new-instance v0, Lorg/spongycastle/jcajce/util/BCJcaJceHelper;
invoke-direct {v0}, Lorg/spongycastle/jcajce/util/BCJcaJceHelper;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.line 99
iput p1, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->version:I
.line 100
return-void
.end method
.method static synthetic access$000(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/security/Key;Ljava/io/DataOutputStream;)V
.registers 3
.prologue
.line 59
invoke-direct {p0, p1, p2}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->encodeKey(Ljava/security/Key;Ljava/io/DataOutputStream;)V
return-void
.end method
.method static synthetic access$100(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/io/DataInputStream;)Ljava/security/Key;
.registers 3
.prologue
.line 59
invoke-direct {p0, p1}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->decodeKey(Ljava/io/DataInputStream;)Ljava/security/Key;
move-result-object v0
return-object v0
.end method
.method private decodeCertificate(Ljava/io/DataInputStream;)Ljava/security/cert/Certificate;
.registers 5
.prologue
.line 363
invoke-virtual {p1}, Ljava/io/DataInputStream;->readUTF()Ljava/lang/String;
move-result-object v0
.line 364
invoke-virtual {p1}, Ljava/io/DataInputStream;->readInt()I
move-result v1
new-array v1, v1, [B
.line 366
invoke-virtual {p1, v1}, Ljava/io/DataInputStream;->readFully([B)V
.line 370
:try_start_d
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v2, v0}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createCertificateFactory(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
move-result-object v0
.line 371
new-instance v2, Ljava/io/ByteArrayInputStream;
invoke-direct {v2, v1}, Ljava/io/ByteArrayInputStream;-><init>([B)V
.line 373
invoke-virtual {v0, v2}, Ljava/security/cert/CertificateFactory;->generateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
:try_end_1b
.catch Ljava/security/NoSuchProviderException; {:try_start_d .. :try_end_1b} :catch_1d
.catch Ljava/security/cert/CertificateException; {:try_start_d .. :try_end_1b} :catch_28
move-result-object v0
return-object v0
.line 375
:catch_1d
move-exception v0
.line 377
new-instance v1, Ljava/io/IOException;
invoke-virtual {v0}, Ljava/security/NoSuchProviderException;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.line 379
:catch_28
move-exception v0
.line 381
new-instance v1, Ljava/io/IOException;
invoke-virtual {v0}, Ljava/security/cert/CertificateException;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method private decodeKey(Ljava/io/DataInputStream;)Ljava/security/Key;
.registers 7
.prologue
.line 415
invoke-virtual {p1}, Ljava/io/DataInputStream;->read()I
move-result v1
.line 416
invoke-virtual {p1}, Ljava/io/DataInputStream;->readUTF()Ljava/lang/String;
move-result-object v0
.line 417
invoke-virtual {p1}, Ljava/io/DataInputStream;->readUTF()Ljava/lang/String;
move-result-object v2
.line 418
invoke-virtual {p1}, Ljava/io/DataInputStream;->readInt()I
move-result v3
new-array v3, v3, [B
.line 421
invoke-virtual {p1, v3}, Ljava/io/DataInputStream;->readFully([B)V
.line 423
const-string v4, "PKCS#8"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-nez v4, :cond_25
const-string v4, "PKCS8"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_62
.line 425
:cond_25
new-instance v0, Ljava/security/spec/PKCS8EncodedKeySpec;
invoke-direct {v0, v3}, Ljava/security/spec/PKCS8EncodedKeySpec;-><init>([B)V
.line 442
:goto_2a
packed-switch v1, :pswitch_data_c2
.line 451
:try_start_2d
new-instance v0, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Key type "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " not recognised!"
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/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_48
.catch Ljava/lang/Exception; {:try_start_2d .. :try_end_48} :catch_48
.line 454
:catch_48
move-exception v0
.line 456
new-instance v1, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Exception creating key: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.line 427
:cond_62
const-string v4, "X.509"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-nez v4, :cond_72
const-string v4, "X509"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_78
.line 429
:cond_72
new-instance v0, Ljava/security/spec/X509EncodedKeySpec;
invoke-direct {v0, v3}, Ljava/security/spec/X509EncodedKeySpec;-><init>([B)V
goto :goto_2a
.line 431
:cond_78
const-string v1, "RAW"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_86
.line 433
new-instance v0, Ljavax/crypto/spec/SecretKeySpec;
invoke-direct {v0, v3, v2}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V
.line 449
:goto_85
return-object v0
.line 437
:cond_86
new-instance v1, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Key format "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const-string v2, " not recognised!"
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.line 445
:pswitch_a1
:try_start_a1
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v1, v2}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createKeyFactory(Ljava/lang/String;)Ljava/security/KeyFactory;
move-result-object v1
invoke-virtual {v1, v0}, Ljava/security/KeyFactory;->generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
move-result-object v0
goto :goto_85
.line 447
:pswitch_ac
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v1, v2}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createKeyFactory(Ljava/lang/String;)Ljava/security/KeyFactory;
move-result-object v1
invoke-virtual {v1, v0}, Ljava/security/KeyFactory;->generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
move-result-object v0
goto :goto_85
.line 449
:pswitch_b7
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v1, v2}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createSecretKeyFactory(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;
move-result-object v1
invoke-virtual {v1, v0}, Ljavax/crypto/SecretKeyFactory;->generateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;
:try_end_c0
.catch Ljava/lang/Exception; {:try_start_a1 .. :try_end_c0} :catch_48
move-result-object v0
goto :goto_85
.line 442
:pswitch_data_c2
.packed-switch 0x0
:pswitch_a1
:pswitch_ac
:pswitch_b7
.end packed-switch
.end method
.method private encodeCertificate(Ljava/security/cert/Certificate;Ljava/io/DataOutputStream;)V
.registers 5
.prologue
.line 347
:try_start_0
invoke-virtual {p1}, Ljava/security/cert/Certificate;->getEncoded()[B
move-result-object v0
.line 349
invoke-virtual {p1}, Ljava/security/cert/Certificate;->getType()Ljava/lang/String;
move-result-object v1
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->writeUTF(Ljava/lang/String;)V
.line 350
array-length v1, v0
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->writeInt(I)V
.line 351
invoke-virtual {p2, v0}, Ljava/io/DataOutputStream;->write([B)V
:try_end_12
.catch Ljava/security/cert/CertificateEncodingException; {:try_start_0 .. :try_end_12} :catch_13
.line 356
return-void
.line 353
:catch_13
move-exception v0
.line 355
new-instance v1, Ljava/io/IOException;
invoke-virtual {v0}, Ljava/security/cert/CertificateEncodingException;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method private encodeKey(Ljava/security/Key;Ljava/io/DataOutputStream;)V
.registers 5
.prologue
.line 390
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v0
.line 392
instance-of v1, p1, Ljava/security/PrivateKey;
if-eqz v1, :cond_22
.line 394
const/4 v1, 0x0
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->write(I)V
.line 405
:goto_c
invoke-interface {p1}, Ljava/security/Key;->getFormat()Ljava/lang/String;
move-result-object v1
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->writeUTF(Ljava/lang/String;)V
.line 406
invoke-interface {p1}, Ljava/security/Key;->getAlgorithm()Ljava/lang/String;
move-result-object v1
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->writeUTF(Ljava/lang/String;)V
.line 407
array-length v1, v0
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->writeInt(I)V
.line 408
invoke-virtual {p2, v0}, Ljava/io/DataOutputStream;->write([B)V
.line 409
return-void
.line 396
:cond_22
instance-of v1, p1, Ljava/security/PublicKey;
if-eqz v1, :cond_2b
.line 398
const/4 v1, 0x1
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->write(I)V
goto :goto_c
.line 402
:cond_2b
const/4 v1, 0x2
invoke-virtual {p2, v1}, Ljava/io/DataOutputStream;->write(I)V
goto :goto_c
.end method
.method static getBouncyCastleProvider()Ljava/security/Provider;
.registers 1
.prologue
.line 1052
const-string v0, "SC"
invoke-static {v0}, Ljava/security/Security;->getProvider(Ljava/lang/String;)Ljava/security/Provider;
move-result-object v0
if-eqz v0, :cond_f
.line 1054
const-string v0, "SC"
invoke-static {v0}, Ljava/security/Security;->getProvider(Ljava/lang/String;)Ljava/security/Provider;
move-result-object v0
.line 1058
:goto_e
return-object v0
:cond_f
new-instance v0, Lorg/spongycastle/jce/provider/BouncyCastleProvider;
invoke-direct {v0}, Lorg/spongycastle/jce/provider/BouncyCastleProvider;-><init>()V
goto :goto_e
.end method
# virtual methods
.method public engineAliases()Ljava/util/Enumeration;
.registers 2
.prologue
.line 494
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0}, Ljava/util/Hashtable;->keys()Ljava/util/Enumeration;
move-result-object v0
return-object v0
.end method
.method public engineContainsAlias(Ljava/lang/String;)Z
.registers 3
.prologue
.line 500
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
if-eqz v0, :cond_a
const/4 v0, 0x1
:goto_9
return v0
:cond_a
const/4 v0, 0x0
goto :goto_9
.end method
.method public engineDeleteEntry(Ljava/lang/String;)V
.registers 3
.prologue
.line 507
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
.line 509
if-nez v0, :cond_9
.line 515
:goto_8
return-void
.line 514
:cond_9
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->remove(Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_8
.end method
.method public engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
.registers 5
.prologue
.line 520
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 522
if-eqz v0, :cond_22
.line 524
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
move-result v1
const/4 v2, 0x1
if-ne v1, v2, :cond_18
.line 526
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/security/cert/Certificate;
.line 539
:goto_17
return-object v0
.line 530
:cond_18
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getCertificateChain()[Ljava/security/cert/Certificate;
move-result-object v0
.line 532
if-eqz v0, :cond_22
.line 534
const/4 v1, 0x0
aget-object v0, v0, v1
goto :goto_17
.line 539
:cond_22
const/4 v0, 0x0
goto :goto_17
.end method
.method public engineGetCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;
.registers 6
.prologue
.line 545
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0}, Ljava/util/Hashtable;->elements()Ljava/util/Enumeration;
move-result-object v2
.line 546
:cond_6
invoke-interface {v2}, Ljava/util/Enumeration;->hasMoreElements()Z
move-result v0
if-eqz v0, :cond_3f
.line 548
invoke-interface {v2}, Ljava/util/Enumeration;->nextElement()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 550
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject()Ljava/lang/Object;
move-result-object v1
instance-of v1, v1, Ljava/security/cert/Certificate;
if-eqz v1, :cond_2b
.line 552
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/security/cert/Certificate;
.line 554
invoke-virtual {v1, p1}, Ljava/security/cert/Certificate;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_6
.line 556
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getAlias()Ljava/lang/String;
move-result-object v0
.line 570
:goto_2a
return-object v0
.line 561
:cond_2b
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getCertificateChain()[Ljava/security/cert/Certificate;
move-result-object v1
.line 563
if-eqz v1, :cond_6
const/4 v3, 0x0
aget-object v1, v1, v3
invoke-virtual {v1, p1}, Ljava/security/cert/Certificate;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_6
.line 565
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getAlias()Ljava/lang/String;
move-result-object v0
goto :goto_2a
.line 570
:cond_3f
const/4 v0, 0x0
goto :goto_2a
.end method
.method public engineGetCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;
.registers 3
.prologue
.line 576
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 578
if-eqz v0, :cond_f
.line 580
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getCertificateChain()[Ljava/security/cert/Certificate;
move-result-object v0
.line 583
:goto_e
return-object v0
:cond_f
const/4 v0, 0x0
goto :goto_e
.end method
.method public engineGetCreationDate(Ljava/lang/String;)Ljava/util/Date;
.registers 3
.prologue
.line 588
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 590
if-eqz v0, :cond_f
.line 592
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getDate()Ljava/util/Date;
move-result-object v0
.line 595
:goto_e
return-object v0
:cond_f
const/4 v0, 0x0
goto :goto_e
.end method
.method public engineGetKey(Ljava/lang/String;[C)Ljava/security/Key;
.registers 6
.prologue
.line 603
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 605
if-eqz v0, :cond_11
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
move-result v1
const/4 v2, 0x1
if-ne v1, v2, :cond_13
.line 607
:cond_11
const/4 v0, 0x0
.line 610
:goto_12
return-object v0
:cond_13
invoke-virtual {v0, p2}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject([C)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/security/Key;
goto :goto_12
.end method
.method public engineIsCertificateEntry(Ljava/lang/String;)Z
.registers 4
.prologue
const/4 v1, 0x1
.line 616
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 618
if-eqz v0, :cond_13
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
move-result v0
if-ne v0, v1, :cond_13
move v0, v1
.line 623
:goto_12
return v0
:cond_13
const/4 v0, 0x0
goto :goto_12
.end method
.method public engineIsKeyEntry(Ljava/lang/String;)Z
.registers 4
.prologue
const/4 v1, 0x1
.line 629
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 631
if-eqz v0, :cond_13
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
move-result v0
if-eq v0, v1, :cond_13
move v0, v1
.line 636
:goto_12
return v0
:cond_13
const/4 v0, 0x0
goto :goto_12
.end method
.method public engineLoad(Ljava/io/InputStream;[C)V
.registers 13
.prologue
const/4 v9, 0x2
const/4 v8, 0x0
.line 797
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0}, Ljava/util/Hashtable;->clear()V
.line 799
if-nez p1, :cond_a
.line 880
:cond_9
:goto_9
return-void
.line 804
:cond_a
new-instance v1, Ljava/io/DataInputStream;
invoke-direct {v1, p1}, Ljava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V
.line 805
invoke-virtual {v1}, Ljava/io/DataInputStream;->readInt()I
move-result v0
.line 807
if-eq v0, v9, :cond_22
.line 809
if-eqz v0, :cond_22
const/4 v2, 0x1
if-eq v0, v2, :cond_22
.line 811
new-instance v0, Ljava/io/IOException;
const-string v1, "Wrong version of key store."
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 815
:cond_22
invoke-virtual {v1}, Ljava/io/DataInputStream;->readInt()I
move-result v2
.line 816
if-gtz v2, :cond_30
.line 818
new-instance v0, Ljava/io/IOException;
const-string v1, "Invalid salt detected"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 821
:cond_30
new-array v2, v2, [B
.line 823
invoke-virtual {v1, v2}, Ljava/io/DataInputStream;->readFully([B)V
.line 825
invoke-virtual {v1}, Ljava/io/DataInputStream;->readInt()I
move-result v3
.line 830
new-instance v4, Lorg/spongycastle/crypto/macs/HMac;
new-instance v5, Lorg/spongycastle/crypto/digests/SHA1Digest;
invoke-direct {v5}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V
invoke-direct {v4, v5}, Lorg/spongycastle/crypto/macs/HMac;-><init>(Lorg/spongycastle/crypto/Digest;)V
.line 831
if-eqz p2, :cond_a1
array-length v5, p2
if-eqz v5, :cond_a1
.line 833
invoke-static {p2}, Lorg/spongycastle/crypto/PBEParametersGenerator;->PKCS12PasswordToBytes([C)[B
move-result-object v5
.line 835
new-instance v6, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;
new-instance v7, Lorg/spongycastle/crypto/digests/SHA1Digest;
invoke-direct {v7}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V
invoke-direct {v6, v7}, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
.line 836
invoke-virtual {v6, v5, v2, v3}, Lorg/spongycastle/crypto/PBEParametersGenerator;->init([B[BI)V
.line 840
if-eq v0, v9, :cond_96
.line 842
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v0
invoke-virtual {v6, v0}, Lorg/spongycastle/crypto/PBEParametersGenerator;->generateDerivedMacParameters(I)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
.line 849
:goto_63
invoke-static {v5, v8}, Lorg/spongycastle/util/Arrays;->fill([BB)V
.line 851
invoke-virtual {v4, v0}, Lorg/spongycastle/crypto/macs/HMac;->init(Lorg/spongycastle/crypto/CipherParameters;)V
.line 852
new-instance v0, Lorg/spongycastle/crypto/io/MacInputStream;
invoke-direct {v0, v1, v4}, Lorg/spongycastle/crypto/io/MacInputStream;-><init>(Ljava/io/InputStream;Lorg/spongycastle/crypto/Mac;)V
.line 854
invoke-virtual {p0, v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->loadStore(Ljava/io/InputStream;)V
.line 857
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v0
new-array v0, v0, [B
.line 858
invoke-virtual {v4, v0, v8}, Lorg/spongycastle/crypto/macs/HMac;->doFinal([BI)I
.line 862
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v2
new-array v2, v2, [B
.line 863
invoke-virtual {v1, v2}, Ljava/io/DataInputStream;->readFully([B)V
.line 865
invoke-static {v0, v2}, Lorg/spongycastle/util/Arrays;->constantTimeAreEqual([B[B)Z
move-result v0
if-nez v0, :cond_9
.line 867
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0}, Ljava/util/Hashtable;->clear()V
.line 868
new-instance v0, Ljava/io/IOException;
const-string v1, "KeyStore integrity check failed."
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 846
:cond_96
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v0
shl-int/lit8 v0, v0, 0x3
invoke-virtual {v6, v0}, Lorg/spongycastle/crypto/PBEParametersGenerator;->generateDerivedMacParameters(I)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
goto :goto_63
.line 873
:cond_a1
invoke-virtual {p0, v1}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->loadStore(Ljava/io/InputStream;)V
.line 877
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v0
new-array v0, v0, [B
.line 878
invoke-virtual {v1, v0}, Ljava/io/DataInputStream;->readFully([B)V
goto/16 :goto_9
.end method
.method public engineSetCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V
.registers 6
.prologue
.line 644
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 646
if-eqz v0, :cond_26
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
move-result v0
const/4 v1, 0x1
if-eq v0, v1, :cond_26
.line 648
new-instance v0, Ljava/security/KeyStoreException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "key store already has a key entry with alias "
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/KeyStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 651
:cond_26
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
new-instance v1, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
invoke-direct {v1, p0, p1, p2}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/security/cert/Certificate;)V
invoke-virtual {v0, p1, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 652
return-void
.end method
.method public engineSetKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V
.registers 12
.prologue
.line 670
instance-of v0, p2, Ljava/security/PrivateKey;
if-eqz v0, :cond_e
if-nez p4, :cond_e
.line 672
new-instance v0, Ljava/security/KeyStoreException;
const-string v1, "no certificate chain for private key"
invoke-direct {v0, v1}, Ljava/security/KeyStoreException;-><init>(Ljava/lang/String;)V
throw v0
.line 677
:cond_e
:try_start_e
iget-object v6, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
new-instance v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
move-object v1, p0
move-object v2, p1
move-object v3, p2
move-object v4, p3
move-object v5, p4
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V
invoke-virtual {v6, p1, v0}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
:try_end_1d
.catch Ljava/lang/Exception; {:try_start_e .. :try_end_1d} :catch_1e
.line 682
return-void
.line 679
:catch_1e
move-exception v0
.line 681
new-instance v1, Ljava/security/KeyStoreException;
invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/KeyStoreException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method public engineSetKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V
.registers 6
.prologue
.line 660
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
new-instance v1, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
invoke-direct {v1, p0, p1, p2, p3}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V
invoke-virtual {v0, p1, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 661
return-void
.end method
.method public engineSize()I
.registers 2
.prologue
.line 687
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0}, Ljava/util/Hashtable;->size()I
move-result v0
return v0
.end method
.method public engineStore(Ljava/io/OutputStream;[C)V
.registers 11
.prologue
const/16 v5, 0x14
const/4 v1, 0x0
.line 886
new-instance v2, Ljava/io/DataOutputStream;
invoke-direct {v2, p1}, Ljava/io/DataOutputStream;-><init>(Ljava/io/OutputStream;)V
.line 887
new-array v0, v5, [B
.line 888
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->random:Ljava/security/SecureRandom;
invoke-virtual {v3}, Ljava/security/SecureRandom;->nextInt()I
move-result v3
and-int/lit16 v3, v3, 0x3ff
add-int/lit16 v3, v3, 0x400
.line 890
iget-object v4, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->random:Ljava/security/SecureRandom;
invoke-virtual {v4, v0}, Ljava/security/SecureRandom;->nextBytes([B)V
.line 892
iget v4, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->version:I
invoke-virtual {v2, v4}, Ljava/io/DataOutputStream;->writeInt(I)V
.line 893
invoke-virtual {v2, v5}, Ljava/io/DataOutputStream;->writeInt(I)V
.line 894
invoke-virtual {v2, v0}, Ljava/io/DataOutputStream;->write([B)V
.line 895
invoke-virtual {v2, v3}, Ljava/io/DataOutputStream;->writeInt(I)V
.line 897
new-instance v4, Lorg/spongycastle/crypto/macs/HMac;
new-instance v5, Lorg/spongycastle/crypto/digests/SHA1Digest;
invoke-direct {v5}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V
invoke-direct {v4, v5}, Lorg/spongycastle/crypto/macs/HMac;-><init>(Lorg/spongycastle/crypto/Digest;)V
.line 898
new-instance v5, Lorg/spongycastle/crypto/io/MacOutputStream;
invoke-direct {v5, v4}, Lorg/spongycastle/crypto/io/MacOutputStream;-><init>(Lorg/spongycastle/crypto/Mac;)V
.line 899
new-instance v6, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;
new-instance v7, Lorg/spongycastle/crypto/digests/SHA1Digest;
invoke-direct {v7}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V
invoke-direct {v6, v7}, Lorg/spongycastle/crypto/generators/PKCS12ParametersGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
.line 900
invoke-static {p2}, Lorg/spongycastle/crypto/PBEParametersGenerator;->PKCS12PasswordToBytes([C)[B
move-result-object v7
.line 902
invoke-virtual {v6, v7, v0, v3}, Lorg/spongycastle/crypto/PBEParametersGenerator;->init([B[BI)V
.line 904
iget v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->version:I
const/4 v3, 0x2
if-ge v0, v3, :cond_60
.line 906
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v0
invoke-virtual {v6, v0}, Lorg/spongycastle/crypto/PBEParametersGenerator;->generateDerivedMacParameters(I)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
invoke-virtual {v4, v0}, Lorg/spongycastle/crypto/macs/HMac;->init(Lorg/spongycastle/crypto/CipherParameters;)V
:goto_57
move v0, v1
.line 913
:goto_58
array-length v3, v7
if-eq v0, v3, :cond_6e
.line 915
aput-byte v1, v7, v0
.line 913
add-int/lit8 v0, v0, 0x1
goto :goto_58
.line 910
:cond_60
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v0
shl-int/lit8 v0, v0, 0x3
invoke-virtual {v6, v0}, Lorg/spongycastle/crypto/PBEParametersGenerator;->generateDerivedMacParameters(I)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
invoke-virtual {v4, v0}, Lorg/spongycastle/crypto/macs/HMac;->init(Lorg/spongycastle/crypto/CipherParameters;)V
goto :goto_57
.line 918
:cond_6e
new-instance v0, Lorg/spongycastle/util/io/TeeOutputStream;
invoke-direct {v0, v2, v5}, Lorg/spongycastle/util/io/TeeOutputStream;-><init>(Ljava/io/OutputStream;Ljava/io/OutputStream;)V
invoke-virtual {p0, v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->saveStore(Ljava/io/OutputStream;)V
.line 920
invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I
move-result v0
new-array v0, v0, [B
.line 922
invoke-virtual {v4, v0, v1}, Lorg/spongycastle/crypto/macs/HMac;->doFinal([BI)I
.line 924
invoke-virtual {v2, v0}, Ljava/io/DataOutputStream;->write([B)V
.line 926
invoke-virtual {v2}, Ljava/io/DataOutputStream;->close()V
.line 927
return-void
.end method
.method protected loadStore(Ljava/io/InputStream;)V
.registers 11
.prologue
.line 694
new-instance v7, Ljava/io/DataInputStream;
invoke-direct {v7, p1}, Ljava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V
.line 695
invoke-virtual {v7}, Ljava/io/DataInputStream;->read()I
move-result v4
.line 697
:goto_9
if-lez v4, :cond_73
.line 699
invoke-virtual {v7}, Ljava/io/DataInputStream;->readUTF()Ljava/lang/String;
move-result-object v2
.line 700
new-instance v3, Ljava/util/Date;
invoke-virtual {v7}, Ljava/io/DataInputStream;->readLong()J
move-result-wide v0
invoke-direct {v3, v0, v1}, Ljava/util/Date;-><init>(J)V
.line 701
invoke-virtual {v7}, Ljava/io/DataInputStream;->readInt()I
move-result v1
.line 702
const/4 v6, 0x0
.line 704
if-eqz v1, :cond_2d
.line 706
new-array v6, v1, [Ljava/security/cert/Certificate;
.line 708
const/4 v0, 0x0
:goto_22
if-eq v0, v1, :cond_2d
.line 710
invoke-direct {p0, v7}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->decodeCertificate(Ljava/io/DataInputStream;)Ljava/security/cert/Certificate;
move-result-object v5
aput-object v5, v6, v0
.line 708
add-int/lit8 v0, v0, 0x1
goto :goto_22
.line 714
:cond_2d
packed-switch v4, :pswitch_data_74
.line 733
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "Unknown object type in store."
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 717
:pswitch_38
invoke-direct {p0, v7}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->decodeCertificate(Ljava/io/DataInputStream;)Ljava/security/cert/Certificate;
move-result-object v5
.line 719
iget-object v6, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
new-instance v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
const/4 v4, 0x1
move-object v1, p0
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/util/Date;ILjava/lang/Object;)V
invoke-virtual {v6, v2, v0}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 736
:goto_48
invoke-virtual {v7}, Ljava/io/DataInputStream;->read()I
move-result v4
goto :goto_9
.line 722
:pswitch_4d
invoke-direct {p0, v7}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->decodeKey(Ljava/io/DataInputStream;)Ljava/security/Key;
move-result-object v5
.line 723
iget-object v8, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
new-instance v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
const/4 v4, 0x2
move-object v1, p0
invoke-direct/range {v0 .. v6}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/util/Date;ILjava/lang/Object;[Ljava/security/cert/Certificate;)V
invoke-virtual {v8, v2, v0}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_48
.line 727
:pswitch_5e
invoke-virtual {v7}, Ljava/io/DataInputStream;->readInt()I
move-result v0
new-array v5, v0, [B
.line 729
invoke-virtual {v7, v5}, Ljava/io/DataInputStream;->readFully([B)V
.line 730
iget-object v8, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
new-instance v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
move-object v1, p0
invoke-direct/range {v0 .. v6}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;-><init>(Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;Ljava/lang/String;Ljava/util/Date;ILjava/lang/Object;[Ljava/security/cert/Certificate;)V
invoke-virtual {v8, v2, v0}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_48
.line 738
:cond_73
return-void
.line 714
:pswitch_data_74
.packed-switch 0x1
:pswitch_38
:pswitch_4d
:pswitch_5e
:pswitch_5e
.end packed-switch
.end method
.method protected makePBECipher(Ljava/lang/String;I[C[BI)Ljavax/crypto/Cipher;
.registers 10
.prologue
.line 470
:try_start_0
new-instance v0, Ljavax/crypto/spec/PBEKeySpec;
invoke-direct {v0, p3}, Ljavax/crypto/spec/PBEKeySpec;-><init>([C)V
.line 471
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v1, p1}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createSecretKeyFactory(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;
move-result-object v1
.line 472
new-instance v2, Ljavax/crypto/spec/PBEParameterSpec;
invoke-direct {v2, p4, p5}, Ljavax/crypto/spec/PBEParameterSpec;-><init>([BI)V
.line 474
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-interface {v3, p1}, Lorg/spongycastle/jcajce/util/JcaJceHelper;->createCipher(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v3
.line 476
invoke-virtual {v1, v0}, Ljavax/crypto/SecretKeyFactory;->generateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;
move-result-object v0
invoke-virtual {v3, p2, v0, v2}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
:try_end_1d
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_1d} :catch_1e
.line 478
return-object v3
.line 480
:catch_1e
move-exception v0
.line 482
new-instance v1, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Error initialising store of key store: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method protected saveStore(Ljava/io/OutputStream;)V
.registers 10
.prologue
const/4 v2, 0x0
.line 744
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->table:Ljava/util/Hashtable;
invoke-virtual {v0}, Ljava/util/Hashtable;->elements()Ljava/util/Enumeration;
move-result-object v3
.line 745
new-instance v4, Ljava/io/DataOutputStream;
invoke-direct {v4, p1}, Ljava/io/DataOutputStream;-><init>(Ljava/io/OutputStream;)V
.line 747
:goto_c
invoke-interface {v3}, Ljava/util/Enumeration;->hasMoreElements()Z
move-result v0
if-eqz v0, :cond_7b
.line 749
invoke-interface {v3}, Ljava/util/Enumeration;->nextElement()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;
.line 751
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
move-result v1
invoke-virtual {v4, v1}, Ljava/io/DataOutputStream;->write(I)V
.line 752
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getAlias()Ljava/lang/String;
move-result-object v1
invoke-virtual {v4, v1}, Ljava/io/DataOutputStream;->writeUTF(Ljava/lang/String;)V
.line 753
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getDate()Ljava/util/Date;
move-result-object v1
invoke-virtual {v1}, Ljava/util/Date;->getTime()J
move-result-wide v6
invoke-virtual {v4, v6, v7}, Ljava/io/DataOutputStream;->writeLong(J)V
.line 755
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getCertificateChain()[Ljava/security/cert/Certificate;
move-result-object v5
.line 756
if-nez v5, :cond_49
.line 758
invoke-virtual {v4, v2}, Ljava/io/DataOutputStream;->writeInt(I)V
.line 769
:cond_3a
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getType()I
move-result v1
packed-switch v1, :pswitch_data_80
.line 785
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "Unknown object type in store."
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 762
:cond_49
array-length v1, v5
invoke-virtual {v4, v1}, Ljava/io/DataOutputStream;->writeInt(I)V
move v1, v2
.line 763
:goto_4e
array-length v6, v5
if-eq v1, v6, :cond_3a
.line 765
aget-object v6, v5, v1
invoke-direct {p0, v6, v4}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->encodeCertificate(Ljava/security/cert/Certificate;Ljava/io/DataOutputStream;)V
.line 763
add-int/lit8 v1, v1, 0x1
goto :goto_4e
.line 772
:pswitch_59
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/security/cert/Certificate;
invoke-direct {p0, v0, v4}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->encodeCertificate(Ljava/security/cert/Certificate;Ljava/io/DataOutputStream;)V
goto :goto_c
.line 775
:pswitch_63
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/security/Key;
invoke-direct {p0, v0, v4}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->encodeKey(Ljava/security/Key;Ljava/io/DataOutputStream;)V
goto :goto_c
.line 779
:pswitch_6d
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getObject()Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
.line 781
array-length v1, v0
invoke-virtual {v4, v1}, Ljava/io/DataOutputStream;->writeInt(I)V
.line 782
invoke-virtual {v4, v0}, Ljava/io/DataOutputStream;->write([B)V
goto :goto_c
.line 789
:cond_7b
invoke-virtual {v4, v2}, Ljava/io/DataOutputStream;->write(I)V
.line 790
return-void
.line 769
nop
:pswitch_data_80
.packed-switch 0x1
:pswitch_59
:pswitch_63
:pswitch_6d
:pswitch_6d
.end packed-switch
.end method
.method public setRandom(Ljava/security/SecureRandom;)V
.registers 2
.prologue
.line 489
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->random:Ljava/security/SecureRandom;
.line 490
return-void
.end method