PrivateKeyFactory.smali
.class public Lorg/spongycastle/crypto/util/PrivateKeyFactory;
.super Ljava/lang/Object;
.source "PrivateKeyFactory.java"
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 41
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static createKey(Ljava/io/InputStream;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
.registers 2
.prologue
.line 65
new-instance v0, Lorg/spongycastle/asn1/ASN1InputStream;
invoke-direct {v0, p0}, Lorg/spongycastle/asn1/ASN1InputStream;-><init>(Ljava/io/InputStream;)V
invoke-virtual {v0}, Lorg/spongycastle/asn1/ASN1InputStream;->readObject()Lorg/spongycastle/asn1/ASN1Primitive;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/crypto/util/PrivateKeyFactory;->createKey(Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
move-result-object v0
return-object v0
.end method
.method public static createKey(Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
.registers 10
.prologue
const/4 v2, 0x0
.line 77
invoke-virtual {p0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->getPrivateKeyAlgorithm()Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;
move-result-object v1
.line 79
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v0
sget-object v3, Lorg/spongycastle/asn1/pkcs/PKCSObjectIdentifiers;->rsaEncryption:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v0, v3}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_3f
.line 81
invoke-virtual {p0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->parsePrivateKey()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;
move-result-object v8
.line 83
new-instance v0, Lorg/spongycastle/crypto/params/RSAPrivateCrtKeyParameters;
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getModulus()Ljava/math/BigInteger;
move-result-object v1
.line 84
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getPublicExponent()Ljava/math/BigInteger;
move-result-object v2
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getPrivateExponent()Ljava/math/BigInteger;
move-result-object v3
.line 85
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getPrime1()Ljava/math/BigInteger;
move-result-object v4
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getPrime2()Ljava/math/BigInteger;
move-result-object v5
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getExponent1()Ljava/math/BigInteger;
move-result-object v6
.line 86
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getExponent2()Ljava/math/BigInteger;
move-result-object v7
invoke-virtual {v8}, Lorg/spongycastle/asn1/pkcs/RSAPrivateKey;->getCoefficient()Ljava/math/BigInteger;
move-result-object v8
invoke-direct/range {v0 .. v8}, Lorg/spongycastle/crypto/params/RSAPrivateCrtKeyParameters;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
.line 152
:goto_3e
return-object v0
.line 90
:cond_3f
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v0
sget-object v3, Lorg/spongycastle/asn1/pkcs/PKCSObjectIdentifiers;->dhKeyAgreement:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v0, v3}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_7d
.line 92
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getParameters()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/asn1/pkcs/DHParameter;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/pkcs/DHParameter;
move-result-object v3
.line 93
invoke-virtual {p0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->parsePrivateKey()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
check-cast v0, Lorg/spongycastle/asn1/ASN1Integer;
.line 95
invoke-virtual {v3}, Lorg/spongycastle/asn1/pkcs/DHParameter;->getL()Ljava/math/BigInteger;
move-result-object v1
.line 96
if-nez v1, :cond_78
const/4 v1, 0x0
.line 97
:goto_60
new-instance v4, Lorg/spongycastle/crypto/params/DHParameters;
invoke-virtual {v3}, Lorg/spongycastle/asn1/pkcs/DHParameter;->getP()Ljava/math/BigInteger;
move-result-object v5
invoke-virtual {v3}, Lorg/spongycastle/asn1/pkcs/DHParameter;->getG()Ljava/math/BigInteger;
move-result-object v3
invoke-direct {v4, v5, v3, v2, v1}, Lorg/spongycastle/crypto/params/DHParameters;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;I)V
.line 99
new-instance v1, Lorg/spongycastle/crypto/params/DHPrivateKeyParameters;
invoke-virtual {v0}, Lorg/spongycastle/asn1/ASN1Integer;->getValue()Ljava/math/BigInteger;
move-result-object v0
invoke-direct {v1, v0, v4}, Lorg/spongycastle/crypto/params/DHPrivateKeyParameters;-><init>(Ljava/math/BigInteger;Lorg/spongycastle/crypto/params/DHParameters;)V
move-object v0, v1
goto :goto_3e
.line 96
:cond_78
invoke-virtual {v1}, Ljava/math/BigInteger;->intValue()I
move-result v1
goto :goto_60
.line 101
:cond_7d
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v0
sget-object v3, Lorg/spongycastle/asn1/oiw/OIWObjectIdentifiers;->elGamalAlgorithm:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v0, v3}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_af
.line 103
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getParameters()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/asn1/oiw/ElGamalParameter;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/oiw/ElGamalParameter;
move-result-object v2
.line 104
invoke-virtual {p0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->parsePrivateKey()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
check-cast v0, Lorg/spongycastle/asn1/ASN1Integer;
.line 106
new-instance v1, Lorg/spongycastle/crypto/params/ElGamalPrivateKeyParameters;
invoke-virtual {v0}, Lorg/spongycastle/asn1/ASN1Integer;->getValue()Ljava/math/BigInteger;
move-result-object v0
new-instance v3, Lorg/spongycastle/crypto/params/ElGamalParameters;
.line 107
invoke-virtual {v2}, Lorg/spongycastle/asn1/oiw/ElGamalParameter;->getP()Ljava/math/BigInteger;
move-result-object v4
invoke-virtual {v2}, Lorg/spongycastle/asn1/oiw/ElGamalParameter;->getG()Ljava/math/BigInteger;
move-result-object v2
invoke-direct {v3, v4, v2}, Lorg/spongycastle/crypto/params/ElGamalParameters;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V
invoke-direct {v1, v0, v3}, Lorg/spongycastle/crypto/params/ElGamalPrivateKeyParameters;-><init>(Ljava/math/BigInteger;Lorg/spongycastle/crypto/params/ElGamalParameters;)V
move-object v0, v1
goto :goto_3e
.line 109
:cond_af
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v0
sget-object v3, Lorg/spongycastle/asn1/x9/X9ObjectIdentifiers;->id_dsa:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v0, v3}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_ec
.line 111
invoke-virtual {p0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->parsePrivateKey()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
check-cast v0, Lorg/spongycastle/asn1/ASN1Integer;
.line 112
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getParameters()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v1
.line 115
if-eqz v1, :cond_173
.line 117
invoke-interface {v1}, Lorg/spongycastle/asn1/ASN1Encodable;->toASN1Primitive()Lorg/spongycastle/asn1/ASN1Primitive;
move-result-object v1
invoke-static {v1}, Lorg/spongycastle/asn1/x509/DSAParameter;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/x509/DSAParameter;
move-result-object v2
.line 118
new-instance v1, Lorg/spongycastle/crypto/params/DSAParameters;
invoke-virtual {v2}, Lorg/spongycastle/asn1/x509/DSAParameter;->getP()Ljava/math/BigInteger;
move-result-object v3
invoke-virtual {v2}, Lorg/spongycastle/asn1/x509/DSAParameter;->getQ()Ljava/math/BigInteger;
move-result-object v4
invoke-virtual {v2}, Lorg/spongycastle/asn1/x509/DSAParameter;->getG()Ljava/math/BigInteger;
move-result-object v2
invoke-direct {v1, v3, v4, v2}, Lorg/spongycastle/crypto/params/DSAParameters;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
.line 121
:goto_e0
new-instance v2, Lorg/spongycastle/crypto/params/DSAPrivateKeyParameters;
invoke-virtual {v0}, Lorg/spongycastle/asn1/ASN1Integer;->getValue()Ljava/math/BigInteger;
move-result-object v0
invoke-direct {v2, v0, v1}, Lorg/spongycastle/crypto/params/DSAPrivateKeyParameters;-><init>(Ljava/math/BigInteger;Lorg/spongycastle/crypto/params/DSAParameters;)V
move-object v0, v2
goto/16 :goto_3e
.line 123
:cond_ec
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v0
sget-object v2, Lorg/spongycastle/asn1/x9/X9ObjectIdentifiers;->id_ecPublicKey:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v0, v2}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_169
.line 125
new-instance v2, Lorg/spongycastle/asn1/x9/X962Parameters;
invoke-virtual {v1}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getParameters()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
check-cast v0, Lorg/spongycastle/asn1/ASN1Primitive;
invoke-direct {v2, v0}, Lorg/spongycastle/asn1/x9/X962Parameters;-><init>(Lorg/spongycastle/asn1/ASN1Primitive;)V
.line 130
invoke-virtual {v2}, Lorg/spongycastle/asn1/x9/X962Parameters;->isNamedCurve()Z
move-result v0
if-eqz v0, :cond_147
.line 132
invoke-virtual {v2}, Lorg/spongycastle/asn1/x9/X962Parameters;->getParameters()Lorg/spongycastle/asn1/ASN1Primitive;
move-result-object v1
check-cast v1, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
.line 134
invoke-static {v1}, Lorg/spongycastle/crypto/ec/CustomNamedCurves;->getByOID(Lorg/spongycastle/asn1/ASN1ObjectIdentifier;)Lorg/spongycastle/asn1/x9/X9ECParameters;
move-result-object v0
.line 135
if-nez v0, :cond_171
.line 137
invoke-static {v1}, Lorg/spongycastle/asn1/x9/ECNamedCurveTable;->getByOID(Lorg/spongycastle/asn1/ASN1ObjectIdentifier;)Lorg/spongycastle/asn1/x9/X9ECParameters;
move-result-object v0
move-object v6, v0
.line 139
:goto_11a
new-instance v0, Lorg/spongycastle/crypto/params/ECNamedDomainParameters;
.line 140
invoke-virtual {v6}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v2
invoke-virtual {v6}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getG()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v3
invoke-virtual {v6}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getN()Ljava/math/BigInteger;
move-result-object v4
invoke-virtual {v6}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getH()Ljava/math/BigInteger;
move-result-object v5
invoke-virtual {v6}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getSeed()[B
move-result-object v6
invoke-direct/range {v0 .. v6}, Lorg/spongycastle/crypto/params/ECNamedDomainParameters;-><init>(Lorg/spongycastle/asn1/ASN1ObjectIdentifier;Lorg/spongycastle/math/ec/ECCurve;Lorg/spongycastle/math/ec/ECPoint;Ljava/math/BigInteger;Ljava/math/BigInteger;[B)V
.line 149
:goto_133
invoke-virtual {p0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->parsePrivateKey()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v1
invoke-static {v1}, Lorg/spongycastle/asn1/sec/ECPrivateKey;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/sec/ECPrivateKey;
move-result-object v1
.line 150
invoke-virtual {v1}, Lorg/spongycastle/asn1/sec/ECPrivateKey;->getKey()Ljava/math/BigInteger;
move-result-object v2
.line 152
new-instance v1, Lorg/spongycastle/crypto/params/ECPrivateKeyParameters;
invoke-direct {v1, v2, v0}, Lorg/spongycastle/crypto/params/ECPrivateKeyParameters;-><init>(Ljava/math/BigInteger;Lorg/spongycastle/crypto/params/ECDomainParameters;)V
move-object v0, v1
goto/16 :goto_3e
.line 144
:cond_147
invoke-virtual {v2}, Lorg/spongycastle/asn1/x9/X962Parameters;->getParameters()Lorg/spongycastle/asn1/ASN1Primitive;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/x9/X9ECParameters;
move-result-object v5
.line 145
new-instance v0, Lorg/spongycastle/crypto/params/ECDomainParameters;
.line 146
invoke-virtual {v5}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v1
invoke-virtual {v5}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getG()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v2
invoke-virtual {v5}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getN()Ljava/math/BigInteger;
move-result-object v3
invoke-virtual {v5}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getH()Ljava/math/BigInteger;
move-result-object v4
invoke-virtual {v5}, Lorg/spongycastle/asn1/x9/X9ECParameters;->getSeed()[B
move-result-object v5
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/crypto/params/ECDomainParameters;-><init>(Lorg/spongycastle/math/ec/ECCurve;Lorg/spongycastle/math/ec/ECPoint;Ljava/math/BigInteger;Ljava/math/BigInteger;[B)V
goto :goto_133
.line 156
:cond_169
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "algorithm identifier in key not recognised"
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
:cond_171
move-object v6, v0
goto :goto_11a
:cond_173
move-object v1, v2
goto/16 :goto_e0
.end method
.method public static createKey([B)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
.registers 2
.prologue
.line 52
invoke-static {p0}, Lorg/spongycastle/asn1/ASN1Primitive;->fromByteArray([B)Lorg/spongycastle/asn1/ASN1Primitive;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/crypto/util/PrivateKeyFactory;->createKey(Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
move-result-object v0
return-object v0
.end method