ISO9796d2Signer.smali
.class public Lorg/spongycastle/crypto/signers/ISO9796d2Signer;
.super Ljava/lang/Object;
.source "ISO9796d2Signer.java"
# interfaces
.implements Lorg/spongycastle/crypto/SignerWithRecovery;
# static fields
.field public static final TRAILER_IMPLICIT:I = 0xbc
.field public static final TRAILER_RIPEMD128:I = 0x32cc
.field public static final TRAILER_RIPEMD160:I = 0x31cc
.field public static final TRAILER_SHA1:I = 0x33cc
.field public static final TRAILER_SHA256:I = 0x34cc
.field public static final TRAILER_SHA384:I = 0x36cc
.field public static final TRAILER_SHA512:I = 0x35cc
.field public static final TRAILER_WHIRLPOOL:I = 0x37cc
# instance fields
.field private block:[B
.field private cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.field private digest:Lorg/spongycastle/crypto/Digest;
.field private fullMessage:Z
.field private keyBits:I
.field private mBuf:[B
.field private messageLength:I
.field private preBlock:[B
.field private preSig:[B
.field private recoveredMessage:[B
.field private trailer:I
# direct methods
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;)V
.registers 4
.prologue
.line 93
const/4 v0, 0x0
invoke-direct {p0, p1, p2, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Z)V
.line 94
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Z)V
.registers 7
.prologue
.line 60
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 61
iput-object p1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 62
iput-object p2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
.line 64
if-eqz p3, :cond_e
.line 66
const/16 v0, 0xbc
iput v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->trailer:I
.line 74
:goto_d
return-void
.line 70
:cond_e
invoke-static {p2}, Lorg/spongycastle/crypto/signers/ISOTrailers;->getTrailer(Lorg/spongycastle/crypto/Digest;)Ljava/lang/Integer;
move-result-object v0
.line 72
if-eqz v0, :cond_1b
.line 74
invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I
move-result v0
iput v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->trailer:I
goto :goto_d
.line 78
:cond_1b
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "no valid trailer for digest: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-interface {p2}, Lorg/spongycastle/crypto/Digest;->getAlgorithmName()Ljava/lang/String;
move-result-object 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/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private clearBlock([B)V
.registers 5
.prologue
const/4 v1, 0x0
.line 169
move v0, v1
:goto_2
array-length v2, p1
if-eq v0, v2, :cond_a
.line 171
aput-byte v1, p1, v0
.line 169
add-int/lit8 v0, v0, 0x1
goto :goto_2
.line 173
:cond_a
return-void
.end method
.method private isSameAs([B[B)Z
.registers 8
.prologue
const/4 v1, 0x0
.line 127
const/4 v0, 0x1
.line 129
iget v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
array-length v3, v3
if-le v2, v3, :cond_21
.line 131
iget-object v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
array-length v2, v2
array-length v3, p2
if-le v2, v3, :cond_10
move v0, v1
:cond_10
move v2, v0
move v0, v1
.line 136
:goto_12
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
array-length v3, v3
if-eq v0, v3, :cond_36
.line 138
aget-byte v3, p1, v0
aget-byte v4, p2, v0
if-eq v3, v4, :cond_1e
move v2, v1
.line 136
:cond_1e
add-int/lit8 v0, v0, 0x1
goto :goto_12
.line 146
:cond_21
iget v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
array-length v3, p2
if-eq v2, v3, :cond_27
move v0, v1
:cond_27
move v2, v0
move v0, v1
.line 151
:goto_29
array-length v3, p2
if-eq v0, v3, :cond_36
.line 153
aget-byte v3, p1, v0
aget-byte v4, p2, v0
if-eq v3, v4, :cond_33
move v2, v1
.line 151
:cond_33
add-int/lit8 v0, v0, 0x1
goto :goto_29
.line 160
:cond_36
return v2
.end method
.method private returnFalse([B)Z
.registers 3
.prologue
.line 587
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 588
invoke-direct {p0, p1}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 590
const/4 v0, 0x0
return v0
.end method
# virtual methods
.method public generateSignature()[B
.registers 8
.prologue
const/4 v2, 0x0
.line 334
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v3
.line 339
iget v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->trailer:I
const/16 v1, 0xbc
if-ne v0, v1, :cond_5c
.line 341
const/16 v1, 0x8
.line 342
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v0, v0
sub-int/2addr v0, v3
add-int/lit8 v0, v0, -0x1
.line 343
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
iget-object v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
invoke-interface {v4, v5, v0}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 344
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
iget-object v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v5, v5
add-int/lit8 v5, v5, -0x1
const/16 v6, -0x44
aput-byte v6, v4, v5
.line 356
:goto_27
iget v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
add-int/2addr v3, v4
shl-int/lit8 v3, v3, 0x3
add-int/2addr v1, v3
add-int/lit8 v1, v1, 0x4
iget v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->keyBits:I
sub-int/2addr v1, v3
.line 358
if-lez v1, :cond_86
.line 360
iget v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
add-int/lit8 v1, v1, 0x7
div-int/lit8 v1, v1, 0x8
sub-int/2addr v3, v1
.line 361
const/16 v1, 0x60
.line 363
sub-int/2addr v0, v3
.line 365
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
iget-object v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
invoke-static {v4, v2, v5, v0, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 367
new-array v3, v3, [B
iput-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
move v3, v1
move v1, v0
.line 379
:goto_4b
add-int/lit8 v0, v1, -0x1
if-lez v0, :cond_dd
.line 381
add-int/lit8 v0, v1, -0x1
:goto_51
if-eqz v0, :cond_9d
.line 383
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
const/16 v5, -0x45
aput-byte v5, v4, v0
.line 381
add-int/lit8 v0, v0, -0x1
goto :goto_51
.line 348
:cond_5c
const/16 v1, 0x10
.line 349
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v0, v0
sub-int/2addr v0, v3
add-int/lit8 v0, v0, -0x2
.line 350
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
iget-object v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
invoke-interface {v4, v5, v0}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 351
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
iget-object v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v5, v5
add-int/lit8 v5, v5, -0x2
iget v6, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->trailer:I
ushr-int/lit8 v6, v6, 0x8
int-to-byte v6, v6
aput-byte v6, v4, v5
.line 352
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
iget-object v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v5, v5
add-int/lit8 v5, v5, -0x1
iget v6, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->trailer:I
int-to-byte v6, v6
aput-byte v6, v4, v5
goto :goto_27
.line 371
:cond_86
const/16 v1, 0x40
.line 372
iget v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
sub-int/2addr v0, v3
.line 374
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
iget v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
invoke-static {v3, v2, v4, v0, v5}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 376
iget v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
new-array v3, v3, [B
iput-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
move v3, v1
move v1, v0
goto :goto_4b
.line 385
:cond_9d
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
add-int/lit8 v1, v1, -0x1
aget-byte v4, v0, v1
xor-int/lit8 v4, v4, 0x1
int-to-byte v4, v4
aput-byte v4, v0, v1
.line 386
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
const/16 v1, 0xb
aput-byte v1, v0, v2
.line 387
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
aget-byte v1, v0, v2
or-int/2addr v1, v3
int-to-byte v1, v1
aput-byte v1, v0, v2
.line 395
:goto_b6
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v4, v4
invoke-interface {v0, v1, v2, v4}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->processBlock([BII)[B
move-result-object v1
.line 397
and-int/lit8 v0, v3, 0x20
if-nez v0, :cond_ec
const/4 v0, 0x1
:goto_c6
iput-boolean v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->fullMessage:Z
.line 398
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v4, v4
invoke-static {v0, v2, v3, v2, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 400
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 401
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 403
return-object v1
.line 391
:cond_dd
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
const/16 v1, 0xa
aput-byte v1, v0, v2
.line 392
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
aget-byte v1, v0, v2
or-int/2addr v1, v3
int-to-byte v1, v1
aput-byte v1, v0, v2
goto :goto_b6
:cond_ec
move v0, v2
.line 397
goto :goto_c6
.end method
.method public getRecoveredMessage()[B
.registers 2
.prologue
.line 613
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
return-object v0
.end method
.method public hasFullMessage()Z
.registers 2
.prologue
.line 601
iget-boolean v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->fullMessage:Z
return v0
.end method
.method public init(ZLorg/spongycastle/crypto/CipherParameters;)V
.registers 5
.prologue
.line 100
check-cast p2, Lorg/spongycastle/crypto/params/RSAKeyParameters;
.line 102
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v0, p1, p2}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
.line 104
invoke-virtual {p2}, Lorg/spongycastle/crypto/params/RSAKeyParameters;->getModulus()Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0}, Ljava/math/BigInteger;->bitLength()I
move-result v0
iput v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->keyBits:I
.line 106
iget v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->keyBits:I
add-int/lit8 v0, v0, 0x7
div-int/lit8 v0, v0, 0x8
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
.line 108
iget v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->trailer:I
const/16 v1, 0xbc
if-ne v0, v1, :cond_35
.line 110
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v0, v0
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v1}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v1
sub-int/2addr v0, v1
add-int/lit8 v0, v0, -0x2
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
.line 117
:goto_31
invoke-virtual {p0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->reset()V
.line 118
return-void
.line 114
:cond_35
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->block:[B
array-length v0, v0
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v1}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v1
sub-int/2addr v0, v1
add-int/lit8 v0, v0, -0x3
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
goto :goto_31
.end method
.method public reset()V
.registers 4
.prologue
const/4 v2, 0x0
const/4 v1, 0x0
.line 307
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->reset()V
.line 308
iput v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
.line 309
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 311
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
if-eqz v0, :cond_17
.line 313
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 316
:cond_17
iput-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
.line 317
iput-boolean v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->fullMessage:Z
.line 319
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preSig:[B
if-eqz v0, :cond_28
.line 321
iput-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preSig:[B
.line 322
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preBlock:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 323
iput-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preBlock:[B
.line 325
:cond_28
return-void
.end method
.method public update(B)V
.registers 4
.prologue
.line 273
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, p1}, Lorg/spongycastle/crypto/Digest;->update(B)V
.line 275
iget v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
array-length v1, v1
if-ge v0, v1, :cond_12
.line 277
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
iget v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
aput-byte p1, v0, v1
.line 280
:cond_12
iget v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
.line 281
return-void
.end method
.method public update([BII)V
.registers 6
.prologue
.line 291
:goto_0
if-lez p3, :cond_13
iget v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
array-length v1, v1
if-ge v0, v1, :cond_13
.line 293
aget-byte v0, p1, p2
invoke-virtual {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->update(B)V
.line 294
add-int/lit8 p2, p2, 0x1
.line 295
add-int/lit8 p3, p3, -0x1
goto :goto_0
.line 298
:cond_13
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, p1, p2, p3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 299
iget v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
add-int/2addr v0, p3
iput v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
.line 300
return-void
.end method
.method public updateWithRecoveredMessage([B)V
.registers 8
.prologue
const/4 v1, 0x1
const/4 v3, 0x0
.line 178
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
array-length v2, p1
invoke-interface {v0, p1, v3, v2}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->processBlock([BII)[B
move-result-object v4
.line 180
aget-byte v0, v4, v3
and-int/lit16 v0, v0, 0xc0
xor-int/lit8 v0, v0, 0x40
if-eqz v0, :cond_19
.line 182
new-instance v0, Lorg/spongycastle/crypto/InvalidCipherTextException;
const-string v1, "malformed signature"
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/InvalidCipherTextException;-><init>(Ljava/lang/String;)V
throw v0
.line 185
:cond_19
array-length v0, v4
add-int/lit8 v0, v0, -0x1
aget-byte v0, v4, v0
and-int/lit8 v0, v0, 0xf
xor-int/lit8 v0, v0, 0xc
if-eqz v0, :cond_2c
.line 187
new-instance v0, Lorg/spongycastle/crypto/InvalidCipherTextException;
const-string v1, "malformed signature"
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/InvalidCipherTextException;-><init>(Ljava/lang/String;)V
throw v0
.line 192
:cond_2c
array-length v0, v4
add-int/lit8 v0, v0, -0x1
aget-byte v0, v4, v0
and-int/lit16 v0, v0, 0xff
xor-int/lit16 v0, v0, 0xbc
if-nez v0, :cond_47
move v0, v1
:goto_38
move v2, v3
.line 221
:goto_39
array-length v5, v4
if-eq v2, v5, :cond_85
.line 223
aget-byte v5, v4, v2
and-int/lit8 v5, v5, 0xf
xor-int/lit8 v5, v5, 0xa
if-eqz v5, :cond_85
.line 221
add-int/lit8 v2, v2, 0x1
goto :goto_39
.line 198
:cond_47
array-length v0, v4
add-int/lit8 v0, v0, -0x2
aget-byte v0, v4, v0
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x8
array-length v2, v4
add-int/lit8 v2, v2, -0x1
aget-byte v2, v4, v2
and-int/lit16 v2, v2, 0xff
or-int/2addr v0, v2
.line 199
iget-object v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-static {v2}, Lorg/spongycastle/crypto/signers/ISOTrailers;->getTrailer(Lorg/spongycastle/crypto/Digest;)Ljava/lang/Integer;
move-result-object v2
.line 201
if-eqz v2, :cond_7b
.line 203
invoke-virtual {v2}, Ljava/lang/Integer;->intValue()I
move-result v2
if-eq v0, v2, :cond_83
.line 205
new-instance v1, Ljava/lang/IllegalStateException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "signer initialised with wrong digest for trailer "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)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/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v1
.line 210
:cond_7b
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "unrecognised hash in signature"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 213
:cond_83
const/4 v0, 0x2
goto :goto_38
.line 229
:cond_85
add-int/lit8 v2, v2, 0x1
.line 231
array-length v5, v4
sub-int v0, v5, v0
iget-object v5, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v5}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v5
sub-int/2addr v0, v5
.line 236
sub-int v5, v0, v2
if-gtz v5, :cond_9d
.line 238
new-instance v0, Lorg/spongycastle/crypto/InvalidCipherTextException;
const-string v1, "malformed block"
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/InvalidCipherTextException;-><init>(Ljava/lang/String;)V
throw v0
.line 244
:cond_9d
aget-byte v5, v4, v3
and-int/lit8 v5, v5, 0x20
if-nez v5, :cond_d0
.line 246
iput-boolean v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->fullMessage:Z
.line 248
sub-int/2addr v0, v2
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
.line 249
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v1, v1
invoke-static {v4, v2, v0, v3, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 259
:goto_b2
iput-object p1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preSig:[B
.line 260
iput-object v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preBlock:[B
.line 262
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v2, v2
invoke-interface {v0, v1, v3, v2}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 263
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v0, v0
iput v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
.line 264
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v2, v2
invoke-static {v0, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 265
return-void
.line 253
:cond_d0
iput-boolean v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->fullMessage:Z
.line 255
sub-int/2addr v0, v2
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
.line 256
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v1, v1
invoke-static {v4, v2, v0, v3, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto :goto_b2
.end method
.method public verifySignature([B)Z
.registers 13
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
const/4 v4, 0x0
.line 415
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preSig:[B
if-nez v0, :cond_1c
.line 419
:try_start_7
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
const/4 v1, 0x0
array-length v3, p1
invoke-interface {v0, p1, v1, v3}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->processBlock([BII)[B
:try_end_e
.catch Ljava/lang/Exception; {:try_start_7 .. :try_end_e} :catch_160
move-result-object v0
.line 439
:goto_f
aget-byte v1, v0, v4
and-int/lit16 v1, v1, 0xc0
xor-int/lit8 v1, v1, 0x40
if-eqz v1, :cond_33
.line 441
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->returnFalse([B)Z
move-result v4
.line 582
:goto_1b
return v4
.line 428
:cond_1c
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preSig:[B
invoke-static {v0, p1}, Lorg/spongycastle/util/Arrays;->areEqual([B[B)Z
move-result v0
if-nez v0, :cond_2c
.line 430
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "updateWithRecoveredMessage called on different signature"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 433
:cond_2c
iget-object v0, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preBlock:[B
.line 435
iput-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preSig:[B
.line 436
iput-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->preBlock:[B
goto :goto_f
.line 444
:cond_33
array-length v1, v0
add-int/lit8 v1, v1, -0x1
aget-byte v1, v0, v1
and-int/lit8 v1, v1, 0xf
xor-int/lit8 v1, v1, 0xc
if-eqz v1, :cond_43
.line 446
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->returnFalse([B)Z
move-result v4
goto :goto_1b
.line 451
:cond_43
array-length v1, v0
add-int/lit8 v1, v1, -0x1
aget-byte v1, v0, v1
and-int/lit16 v1, v1, 0xff
xor-int/lit16 v1, v1, 0xbc
if-nez v1, :cond_5e
move v1, v2
:goto_4f
move v3, v4
.line 480
:goto_50
array-length v5, v0
if-eq v3, v5, :cond_9c
.line 482
aget-byte v5, v0, v3
and-int/lit8 v5, v5, 0xf
xor-int/lit8 v5, v5, 0xa
if-eqz v5, :cond_9c
.line 480
add-int/lit8 v3, v3, 0x1
goto :goto_50
.line 457
:cond_5e
array-length v1, v0
add-int/lit8 v1, v1, -0x2
aget-byte v1, v0, v1
and-int/lit16 v1, v1, 0xff
shl-int/lit8 v1, v1, 0x8
array-length v3, v0
add-int/lit8 v3, v3, -0x1
aget-byte v3, v0, v3
and-int/lit16 v3, v3, 0xff
or-int/2addr v1, v3
.line 458
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-static {v3}, Lorg/spongycastle/crypto/signers/ISOTrailers;->getTrailer(Lorg/spongycastle/crypto/Digest;)Ljava/lang/Integer;
move-result-object v3
.line 460
if-eqz v3, :cond_92
.line 462
invoke-virtual {v3}, Ljava/lang/Integer;->intValue()I
move-result v3
if-eq v1, v3, :cond_9a
.line 464
new-instance v0, Ljava/lang/IllegalStateException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "signer initialised with wrong digest for trailer "
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
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 469
:cond_92
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "unrecognised hash in signature"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 472
:cond_9a
const/4 v1, 0x2
goto :goto_4f
.line 488
:cond_9c
add-int/lit8 v5, v3, 0x1
.line 493
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v3
new-array v6, v3, [B
.line 495
array-length v3, v0
sub-int v1, v3, v1
array-length v3, v6
sub-int v7, v1, v3
.line 500
sub-int v1, v7, v5
if-gtz v1, :cond_b6
.line 502
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->returnFalse([B)Z
move-result v4
goto/16 :goto_1b
.line 508
:cond_b6
aget-byte v1, v0, v4
and-int/lit8 v1, v1, 0x20
if-nez v1, :cond_11e
.line 510
iput-boolean v2, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->fullMessage:Z
.line 513
iget v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
sub-int v3, v7, v5
if-le v1, v3, :cond_ca
.line 515
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->returnFalse([B)Z
move-result v4
goto/16 :goto_1b
.line 518
:cond_ca
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v1}, Lorg/spongycastle/crypto/Digest;->reset()V
.line 519
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
sub-int v3, v7, v5
invoke-interface {v1, v0, v5, v3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 520
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v1, v6, v4}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
move v1, v4
move v3, v2
.line 524
:goto_dd
array-length v8, v6
if-eq v1, v8, :cond_f4
.line 526
add-int v8, v7, v1
aget-byte v9, v0, v8
aget-byte v10, v6, v1
xor-int/2addr v9, v10
int-to-byte v9, v9
aput-byte v9, v0, v8
.line 527
add-int v8, v7, v1
aget-byte v8, v0, v8
if-eqz v8, :cond_f1
move v3, v4
.line 524
:cond_f1
add-int/lit8 v1, v1, 0x1
goto :goto_dd
.line 533
:cond_f4
if-nez v3, :cond_fc
.line 535
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->returnFalse([B)Z
move-result v4
goto/16 :goto_1b
.line 538
:cond_fc
sub-int v1, v7, v5
new-array v1, v1, [B
iput-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
.line 539
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v3, v3
invoke-static {v0, v5, v1, v4, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 571
:goto_10a
iget v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->messageLength:I
if-eqz v1, :cond_155
.line 573
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
invoke-direct {p0, v1, v3}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->isSameAs([B[B)Z
move-result v1
if-nez v1, :cond_155
.line 575
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->returnFalse([B)Z
move-result v4
goto/16 :goto_1b
.line 543
:cond_11e
iput-boolean v4, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->fullMessage:Z
.line 545
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v1, v6, v4}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
move v1, v4
move v3, v2
.line 549
:goto_127
array-length v8, v6
if-eq v1, v8, :cond_13e
.line 551
add-int v8, v7, v1
aget-byte v9, v0, v8
aget-byte v10, v6, v1
xor-int/2addr v9, v10
int-to-byte v9, v9
aput-byte v9, v0, v8
.line 552
add-int v8, v7, v1
aget-byte v8, v0, v8
if-eqz v8, :cond_13b
move v3, v4
.line 549
:cond_13b
add-int/lit8 v1, v1, 0x1
goto :goto_127
.line 558
:cond_13e
if-nez v3, :cond_146
.line 560
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->returnFalse([B)Z
move-result v4
goto/16 :goto_1b
.line 563
:cond_146
sub-int v1, v7, v5
new-array v1, v1, [B
iput-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
.line 564
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->recoveredMessage:[B
array-length v3, v3
invoke-static {v0, v5, v1, v4, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto :goto_10a
.line 579
:cond_155
iget-object v1, p0, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->mBuf:[B
invoke-direct {p0, v1}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
.line 580
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/ISO9796d2Signer;->clearBlock([B)V
move v4, v2
.line 582
goto/16 :goto_1b
.line 423
:catch_160
move-exception v0
goto/16 :goto_1b
.end method