RainbowKeyFactorySpi.smali
.class public Lorg/spongycastle/pqc/jcajce/provider/rainbow/RainbowKeyFactorySpi;
.super Ljava/security/KeyFactorySpi;
.source "RainbowKeyFactorySpi.java"
# interfaces
.implements Lorg/spongycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 32
invoke-direct {p0}, Ljava/security/KeyFactorySpi;-><init>()V
return-void
.end method
# virtual methods
.method public engineGeneratePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
.registers 5
.prologue
.line 70
instance-of v0, p1, Lorg/spongycastle/pqc/jcajce/spec/RainbowPrivateKeySpec;
if-eqz v0, :cond_c
.line 72
new-instance v0, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;
check-cast p1, Lorg/spongycastle/pqc/jcajce/spec/RainbowPrivateKeySpec;
invoke-direct {v0, p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;-><init>(Lorg/spongycastle/pqc/jcajce/spec/RainbowPrivateKeySpec;)V
.line 81
:goto_b
return-object v0
.line 74
:cond_c
instance-of v0, p1, Ljava/security/spec/PKCS8EncodedKeySpec;
if-eqz v0, :cond_2e
.line 77
check-cast p1, Ljava/security/spec/PKCS8EncodedKeySpec;
invoke-virtual {p1}, Ljava/security/spec/PKCS8EncodedKeySpec;->getEncoded()[B
move-result-object v0
.line 81
:try_start_16
invoke-static {v0}, 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-virtual {p0, v0}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/RainbowKeyFactorySpi;->generatePrivate(Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;)Ljava/security/PrivateKey;
:try_end_21
.catch Ljava/lang/Exception; {:try_start_16 .. :try_end_21} :catch_23
move-result-object v0
goto :goto_b
.line 83
:catch_23
move-exception v0
.line 85
new-instance v1, Ljava/security/spec/InvalidKeySpecException;
invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
throw v1
.line 89
:cond_2e
new-instance v0, Ljava/security/spec/InvalidKeySpecException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Unsupported key specification: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
.line 90
invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string 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/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
.registers 5
.prologue
.line 117
instance-of v0, p1, Lorg/spongycastle/pqc/jcajce/spec/RainbowPublicKeySpec;
if-eqz v0, :cond_c
.line 119
new-instance v0, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;
check-cast p1, Lorg/spongycastle/pqc/jcajce/spec/RainbowPublicKeySpec;
invoke-direct {v0, p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;-><init>(Lorg/spongycastle/pqc/jcajce/spec/RainbowPublicKeySpec;)V
.line 129
:goto_b
return-object v0
.line 121
:cond_c
instance-of v0, p1, Ljava/security/spec/X509EncodedKeySpec;
if-eqz v0, :cond_2a
.line 124
check-cast p1, Ljava/security/spec/X509EncodedKeySpec;
invoke-virtual {p1}, Ljava/security/spec/X509EncodedKeySpec;->getEncoded()[B
move-result-object v0
.line 129
:try_start_16
invoke-static {v0}, Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;
move-result-object v0
invoke-virtual {p0, v0}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/RainbowKeyFactorySpi;->generatePublic(Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;)Ljava/security/PublicKey;
:try_end_1d
.catch Ljava/lang/Exception; {:try_start_16 .. :try_end_1d} :catch_1f
move-result-object v0
goto :goto_b
.line 131
:catch_1f
move-exception v0
.line 133
new-instance v1, Ljava/security/spec/InvalidKeySpecException;
invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
throw v1
.line 137
:cond_2a
new-instance v0, Ljava/security/spec/InvalidKeySpecException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Unknown key specification: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string 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/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public final engineGetKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
.registers 10
.prologue
.line 156
instance-of v0, p1, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;
if-eqz v0, :cond_3e
.line 158
const-class v0, Ljava/security/spec/PKCS8EncodedKeySpec;
invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v0
if-eqz v0, :cond_16
.line 160
new-instance v0, Ljava/security/spec/PKCS8EncodedKeySpec;
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v1
invoke-direct {v0, v1}, Ljava/security/spec/PKCS8EncodedKeySpec;-><init>([B)V
.line 181
:goto_15
return-object v0
.line 162
:cond_16
const-class v0, Lorg/spongycastle/pqc/jcajce/spec/RainbowPrivateKeySpec;
invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v0
if-eqz v0, :cond_93
.line 164
check-cast p1, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;
.line 165
new-instance v0, Lorg/spongycastle/pqc/jcajce/spec/RainbowPrivateKeySpec;
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;->getInvA1()[[S
move-result-object v1
.line 166
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;->getB1()[S
move-result-object v2
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;->getInvA2()[[S
move-result-object v3
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;->getB2()[S
move-result-object v4
.line 167
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;->getVi()[I
move-result-object v5
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;->getLayers()[Lorg/spongycastle/pqc/crypto/rainbow/Layer;
move-result-object v6
invoke-direct/range {v0 .. v6}, Lorg/spongycastle/pqc/jcajce/spec/RainbowPrivateKeySpec;-><init>([[S[S[[S[S[I[Lorg/spongycastle/pqc/crypto/rainbow/Layer;)V
goto :goto_15
.line 170
:cond_3e
instance-of v0, p1, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;
if-eqz v0, :cond_74
.line 172
const-class v0, Ljava/security/spec/X509EncodedKeySpec;
invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v0
if-eqz v0, :cond_54
.line 174
new-instance v0, Ljava/security/spec/X509EncodedKeySpec;
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v1
invoke-direct {v0, v1}, Ljava/security/spec/X509EncodedKeySpec;-><init>([B)V
goto :goto_15
.line 176
:cond_54
const-class v0, Lorg/spongycastle/pqc/jcajce/spec/RainbowPublicKeySpec;
invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v0
if-eqz v0, :cond_93
.line 178
check-cast p1, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;
.line 179
new-instance v0, Lorg/spongycastle/pqc/jcajce/spec/RainbowPublicKeySpec;
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;->getDocLength()I
move-result v1
.line 180
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;->getCoeffQuadratic()[[S
move-result-object v2
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;->getCoeffSingular()[[S
move-result-object v3
.line 181
invoke-virtual {p1}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;->getCoeffScalar()[S
move-result-object v4
invoke-direct {v0, v1, v2, v3, v4}, Lorg/spongycastle/pqc/jcajce/spec/RainbowPublicKeySpec;-><init>(I[[S[[S[S)V
goto :goto_15
.line 186
:cond_74
new-instance v0, Ljava/security/spec/InvalidKeySpecException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Unsupported key type: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
.line 187
invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string 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/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
throw v0
.line 190
:cond_93
new-instance v0, Ljava/security/spec/InvalidKeySpecException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Unknown key specification: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string 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/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public final engineTranslateKey(Ljava/security/Key;)Ljava/security/Key;
.registers 4
.prologue
.line 205
instance-of v0, p1, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;
if-nez v0, :cond_8
instance-of v0, p1, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;
if-eqz v0, :cond_9
.line 207
:cond_8
return-object p1
.line 210
:cond_9
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "Unsupported key type"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public generatePrivate(Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;)Ljava/security/PrivateKey;
.registers 9
.prologue
.line 216
invoke-virtual {p1}, Lorg/spongycastle/asn1/pkcs/PrivateKeyInfo;->parsePrivateKey()Lorg/spongycastle/asn1/ASN1Encodable;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;
move-result-object v6
.line 218
new-instance v0, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;
invoke-virtual {v6}, Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;->getInvA1()[[S
move-result-object v1
invoke-virtual {v6}, Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;->getB1()[S
move-result-object v2
invoke-virtual {v6}, Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;->getInvA2()[[S
move-result-object v3
invoke-virtual {v6}, Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;->getB2()[S
move-result-object v4
invoke-virtual {v6}, Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;->getVi()[I
move-result-object v5
invoke-virtual {v6}, Lorg/spongycastle/pqc/asn1/RainbowPrivateKey;->getLayers()[Lorg/spongycastle/pqc/crypto/rainbow/Layer;
move-result-object v6
invoke-direct/range {v0 .. v6}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPrivateKey;-><init>([[S[S[[S[S[I[Lorg/spongycastle/pqc/crypto/rainbow/Layer;)V
return-object v0
.end method
.method public generatePublic(Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;)Ljava/security/PublicKey;
.registers 7
.prologue
.line 224
invoke-virtual {p1}, Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;->parsePublicKey()Lorg/spongycastle/asn1/ASN1Primitive;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/pqc/asn1/RainbowPublicKey;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/pqc/asn1/RainbowPublicKey;
move-result-object v0
.line 226
new-instance v1, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;
invoke-virtual {v0}, Lorg/spongycastle/pqc/asn1/RainbowPublicKey;->getDocLength()I
move-result v2
invoke-virtual {v0}, Lorg/spongycastle/pqc/asn1/RainbowPublicKey;->getCoeffQuadratic()[[S
move-result-object v3
invoke-virtual {v0}, Lorg/spongycastle/pqc/asn1/RainbowPublicKey;->getCoeffSingular()[[S
move-result-object v4
invoke-virtual {v0}, Lorg/spongycastle/pqc/asn1/RainbowPublicKey;->getCoeffScalar()[S
move-result-object v0
invoke-direct {v1, v2, v3, v4, v0}, Lorg/spongycastle/pqc/jcajce/provider/rainbow/BCRainbowPublicKey;-><init>(I[[S[[S[S)V
return-object v1
.end method