SignatureSpi.smali
.class public Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;
.super Ljava/security/SignatureSpi;
.source "SignatureSpi.java"
# interfaces
.implements Lorg/spongycastle/asn1/pkcs/PKCSObjectIdentifiers;
.implements Lorg/spongycastle/asn1/x509/X509ObjectIdentifiers;
# static fields
.field private static DEFAULT_SBOX:[B
# instance fields
.field private digest:Lorg/spongycastle/crypto/Digest;
.field private signer:Lorg/spongycastle/crypto/DSA;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 33
const/16 v0, 0x80
new-array v0, v0, [B
fill-array-data v0, :array_a
sput-object v0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->DEFAULT_SBOX:[B
return-void
:array_a
.array-data 1
0xat
0x9t
0xdt
0x6t
0xet
0xbt
0x4t
0x5t
0xft
0x1t
0x3t
0xct
0x7t
0x0t
0x8t
0x2t
0x8t
0x0t
0xct
0x4t
0x9t
0x6t
0x7t
0xbt
0x2t
0x3t
0x1t
0xft
0x5t
0xet
0xat
0xdt
0xft
0x6t
0x5t
0x8t
0xet
0xbt
0xat
0x4t
0xct
0x0t
0x3t
0x7t
0x2t
0x9t
0x1t
0xdt
0x3t
0x8t
0xdt
0x9t
0x6t
0xbt
0xft
0x0t
0x2t
0x5t
0xct
0xat
0x4t
0xet
0x1t
0x7t
0xft
0x8t
0xet
0x9t
0x7t
0x2t
0x0t
0xdt
0xct
0x6t
0x1t
0x5t
0xbt
0x4t
0x3t
0xat
0x2t
0x8t
0x9t
0x7t
0x5t
0xft
0x0t
0xbt
0xct
0x1t
0xdt
0xet
0xat
0x3t
0x6t
0x4t
0x3t
0x8t
0xbt
0x5t
0x6t
0x4t
0xet
0xat
0x2t
0xct
0x1t
0x7t
0x9t
0xft
0xdt
0x0t
0x1t
0x2t
0x3t
0xet
0x6t
0xdt
0xbt
0x8t
0xft
0xat
0xct
0x5t
0x7t
0x9t
0x0t
0x4t
.end array-data
.end method
.method public constructor <init>()V
.registers 2
.prologue
.line 45
invoke-direct {p0}, Ljava/security/SignatureSpi;-><init>()V
.line 48
new-instance v0, Lorg/spongycastle/crypto/signers/DSTU4145Signer;
invoke-direct {v0}, Lorg/spongycastle/crypto/signers/DSTU4145Signer;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->signer:Lorg/spongycastle/crypto/DSA;
.line 49
return-void
.end method
# virtual methods
.method protected engineGetParameter(Ljava/lang/String;)Ljava/lang/Object;
.registers 4
.prologue
.line 219
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string v1, "engineSetParameter unsupported"
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineInitSign(Ljava/security/PrivateKey;)V
.registers 7
.prologue
const/4 v4, 0x1
.line 104
const/4 v0, 0x0
.line 106
instance-of v1, p1, Lorg/spongycastle/jce/interfaces/ECKey;
if-eqz v1, :cond_a
.line 108
invoke-static {p1}, Lorg/spongycastle/jcajce/provider/asymmetric/util/ECUtil;->generatePrivateKeyParameter(Ljava/security/PrivateKey;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
move-result-object v0
.line 111
:cond_a
new-instance v1, Lorg/spongycastle/crypto/digests/GOST3411Digest;
sget-object v2, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->DEFAULT_SBOX:[B
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/digests/GOST3411Digest;-><init>([B)V
iput-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
.line 113
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->appRandom:Ljava/security/SecureRandom;
if-eqz v1, :cond_24
.line 115
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->signer:Lorg/spongycastle/crypto/DSA;
new-instance v2, Lorg/spongycastle/crypto/params/ParametersWithRandom;
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->appRandom:Ljava/security/SecureRandom;
invoke-direct {v2, v0, v3}, Lorg/spongycastle/crypto/params/ParametersWithRandom;-><init>(Lorg/spongycastle/crypto/CipherParameters;Ljava/security/SecureRandom;)V
invoke-interface {v1, v4, v2}, Lorg/spongycastle/crypto/DSA;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
.line 121
:goto_23
return-void
.line 119
:cond_24
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->signer:Lorg/spongycastle/crypto/DSA;
invoke-interface {v1, v4, v0}, Lorg/spongycastle/crypto/DSA;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
goto :goto_23
.end method
.method protected engineInitVerify(Ljava/security/PublicKey;)V
.registers 5
.prologue
.line 57
instance-of v0, p1, Lorg/spongycastle/jce/interfaces/ECPublicKey;
if-eqz v0, :cond_22
.line 59
invoke-static {p1}, Lorg/spongycastle/jcajce/provider/asymmetric/util/ECUtil;->generatePublicKeyParameter(Ljava/security/PublicKey;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
move-result-object v0
move-object v1, v0
move-object v0, p1
.line 84
:goto_a
new-instance v2, Lorg/spongycastle/crypto/digests/GOST3411Digest;
check-cast v0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/BCDSTU4145PublicKey;
invoke-virtual {v0}, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/BCDSTU4145PublicKey;->getSbox()[B
move-result-object v0
invoke-virtual {p0, v0}, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->expandSbox([B)[B
move-result-object v0
invoke-direct {v2, v0}, Lorg/spongycastle/crypto/digests/GOST3411Digest;-><init>([B)V
iput-object v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
.line 85
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->signer:Lorg/spongycastle/crypto/DSA;
const/4 v2, 0x0
invoke-interface {v0, v2, v1}, Lorg/spongycastle/crypto/DSA;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
.line 86
return-void
.line 65
:cond_22
:try_start_22
invoke-interface {p1}, Ljava/security/PublicKey;->getEncoded()[B
move-result-object v0
.line 67
invoke-static {v0}, Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;->getInstance(Ljava/lang/Object;)Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/jce/provider/BouncyCastleProvider;->getPublicKey(Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;)Ljava/security/PublicKey;
move-result-object p1
.line 69
instance-of v0, p1, Lorg/spongycastle/jce/interfaces/ECPublicKey;
if-eqz v0, :cond_39
.line 71
invoke-static {p1}, Lorg/spongycastle/jcajce/provider/asymmetric/util/ECUtil;->generatePublicKeyParameter(Ljava/security/PublicKey;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;
move-result-object v0
move-object v1, v0
move-object v0, p1
goto :goto_a
.line 75
:cond_39
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "can\'t recognise key type in DSA based signer"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_41
.catch Ljava/lang/Exception; {:try_start_22 .. :try_end_41} :catch_41
.line 80
:catch_41
move-exception v0
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "can\'t recognise key type in DSA based signer"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineSetParameter(Ljava/lang/String;Ljava/lang/Object;)V
.registers 5
.prologue
.line 210
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string v1, "engineSetParameter unsupported"
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineSetParameter(Ljava/security/spec/AlgorithmParameterSpec;)V
.registers 4
.prologue
.line 200
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string v1, "engineSetParameter unsupported"
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method protected engineSign()[B
.registers 7
.prologue
const/4 v2, 0x0
.line 142
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
new-array v0, v0, [B
.line 144
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v1, v0, v2}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 148
:try_start_e
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->signer:Lorg/spongycastle/crypto/DSA;
invoke-interface {v1, v0}, Lorg/spongycastle/crypto/DSA;->generateSignature([B)[Ljava/math/BigInteger;
move-result-object v0
.line 149
const/4 v1, 0x0
aget-object v1, v0, v1
invoke-virtual {v1}, Ljava/math/BigInteger;->toByteArray()[B
move-result-object v1
.line 150
const/4 v2, 0x1
aget-object v0, v0, v2
invoke-virtual {v0}, Ljava/math/BigInteger;->toByteArray()[B
move-result-object v2
.line 152
array-length v0, v1
array-length v3, v2
if-le v0, v3, :cond_47
array-length v0, v1
shl-int/lit8 v0, v0, 0x1
:goto_29
new-array v0, v0, [B
.line 153
const/4 v3, 0x0
array-length v4, v0
div-int/lit8 v4, v4, 0x2
array-length v5, v2
sub-int/2addr v4, v5
array-length v5, v2
invoke-static {v2, v3, v0, v4, v5}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 154
const/4 v2, 0x0
array-length v3, v0
array-length v4, v1
sub-int/2addr v3, v4
array-length v4, v1
invoke-static {v1, v2, v0, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 156
new-instance v1, Lorg/spongycastle/asn1/DEROctetString;
invoke-direct {v1, v0}, Lorg/spongycastle/asn1/DEROctetString;-><init>([B)V
invoke-virtual {v1}, Lorg/spongycastle/asn1/DEROctetString;->getEncoded()[B
move-result-object v0
return-object v0
.line 152
:cond_47
array-length v0, v2
:try_end_48
.catch Ljava/lang/Exception; {:try_start_e .. :try_end_48} :catch_4b
shl-int/lit8 v0, v0, 0x1
goto :goto_29
.line 158
:catch_4b
move-exception v0
.line 160
new-instance v1, Ljava/security/SignatureException;
invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/security/SignatureException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method protected engineUpdate(B)V
.registers 3
.prologue
.line 127
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, p1}, Lorg/spongycastle/crypto/Digest;->update(B)V
.line 128
return-void
.end method
.method protected engineUpdate([BII)V
.registers 5
.prologue
.line 136
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, p1, p2, p3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 137
return-void
.end method
.method protected engineVerify([B)Z
.registers 11
.prologue
const/4 v8, 0x1
const/4 v7, 0x0
.line 168
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
new-array v1, v0, [B
.line 170
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, v1, v7}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 176
:try_start_f
invoke-static {p1}, Lorg/spongycastle/asn1/ASN1OctetString;->fromByteArray([B)Lorg/spongycastle/asn1/ASN1Primitive;
move-result-object v0
check-cast v0, Lorg/spongycastle/asn1/ASN1OctetString;
invoke-virtual {v0}, Lorg/spongycastle/asn1/ASN1OctetString;->getOctets()[B
move-result-object v0
.line 178
array-length v2, v0
div-int/lit8 v2, v2, 0x2
new-array v2, v2, [B
.line 179
array-length v3, v0
div-int/lit8 v3, v3, 0x2
new-array v3, v3, [B
.line 181
const/4 v4, 0x0
const/4 v5, 0x0
array-length v6, v0
div-int/lit8 v6, v6, 0x2
invoke-static {v0, v4, v3, v5, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 183
array-length v4, v0
div-int/lit8 v4, v4, 0x2
const/4 v5, 0x0
array-length v6, v0
div-int/lit8 v6, v6, 0x2
invoke-static {v0, v4, v2, v5, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 185
const/4 v0, 0x2
new-array v0, v0, [Ljava/math/BigInteger;
.line 186
const/4 v4, 0x0
new-instance v5, Ljava/math/BigInteger;
const/4 v6, 0x1
invoke-direct {v5, v6, v2}, Ljava/math/BigInteger;-><init>(I[B)V
aput-object v5, v0, v4
.line 187
const/4 v2, 0x1
new-instance v4, Ljava/math/BigInteger;
const/4 v5, 0x1
invoke-direct {v4, v5, v3}, Ljava/math/BigInteger;-><init>(I[B)V
aput-object v4, v0, v2
:try_end_4a
.catch Ljava/lang/Exception; {:try_start_f .. :try_end_4a} :catch_55
.line 194
iget-object v2, p0, Lorg/spongycastle/jcajce/provider/asymmetric/dstu/SignatureSpi;->signer:Lorg/spongycastle/crypto/DSA;
aget-object v3, v0, v7
aget-object v0, v0, v8
invoke-interface {v2, v1, v3, v0}, Lorg/spongycastle/crypto/DSA;->verifySignature([BLjava/math/BigInteger;Ljava/math/BigInteger;)Z
move-result v0
return v0
.line 191
:catch_55
move-exception v0
new-instance v0, Ljava/security/SignatureException;
const-string v1, "error decoding signature bytes."
invoke-direct {v0, v1}, Ljava/security/SignatureException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method expandSbox([B)[B
.registers 6
.prologue
.line 90
const/16 v0, 0x80
new-array v1, v0, [B
.line 92
const/4 v0, 0x0
:goto_5
array-length v2, p1
if-ge v0, v2, :cond_21
.line 94
shl-int/lit8 v2, v0, 0x1
aget-byte v3, p1, v0
shr-int/lit8 v3, v3, 0x4
and-int/lit8 v3, v3, 0xf
int-to-byte v3, v3
aput-byte v3, v1, v2
.line 95
shl-int/lit8 v2, v0, 0x1
add-int/lit8 v2, v2, 0x1
aget-byte v3, p1, v0
and-int/lit8 v3, v3, 0xf
int-to-byte v3, v3
aput-byte v3, v1, v2
.line 92
add-int/lit8 v0, v0, 0x1
goto :goto_5
.line 97
:cond_21
return-object v1
.end method