PSSSigner.smali
.class public Lorg/spongycastle/crypto/signers/PSSSigner;
.super Ljava/lang/Object;
.source "PSSSigner.java"
# interfaces
.implements Lorg/spongycastle/crypto/Signer;
# static fields
.field public static final TRAILER_IMPLICIT:B = -0x44t
# instance fields
.field private block:[B
.field private cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.field private contentDigest:Lorg/spongycastle/crypto/Digest;
.field private emBits:I
.field private hLen:I
.field private mDash:[B
.field private mgfDigest:Lorg/spongycastle/crypto/Digest;
.field private mgfhLen:I
.field private random:Ljava/security/SecureRandom;
.field private sLen:I
.field private sSet:Z
.field private salt:[B
.field private trailer:B
# direct methods
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;I)V
.registers 5
.prologue
.line 53
const/16 v0, -0x44
invoke-direct {p0, p1, p2, p3, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;IB)V
.line 54
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;IB)V
.registers 11
.prologue
.line 71
move-object v0, p0
move-object v1, p1
move-object v2, p2
move-object v3, p2
move v4, p3
move v5, p4
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/crypto/signers/PSSSigner;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;IB)V
.line 72
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;I)V
.registers 11
.prologue
.line 62
const/16 v5, -0x44
move-object v0, p0
move-object v1, p1
move-object v2, p2
move-object v3, p3
move v4, p4
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/crypto/signers/PSSSigner;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;IB)V
.line 63
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;IB)V
.registers 8
.prologue
.line 80
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 81
iput-object p1, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 82
iput-object p2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
.line 83
iput-object p3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
.line 84
invoke-interface {p2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
.line 85
invoke-interface {p3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
.line 86
const/4 v0, 0x0
iput-boolean v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sSet:Z
.line 87
iput p4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
.line 88
new-array v0, p4, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->salt:[B
.line 89
add-int/lit8 v0, p4, 0x8
iget v1, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
add-int/2addr v0, v1
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
.line 90
iput-byte p5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->trailer:B
.line 91
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;[B)V
.registers 11
.prologue
.line 107
const/16 v5, -0x44
move-object v0, p0
move-object v1, p1
move-object v2, p2
move-object v3, p3
move-object v4, p4
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/crypto/signers/PSSSigner;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;[BB)V
.line 108
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;[BB)V
.registers 8
.prologue
.line 116
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 117
iput-object p1, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
.line 118
iput-object p2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
.line 119
iput-object p3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
.line 120
invoke-interface {p2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
.line 121
invoke-interface {p3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
.line 122
const/4 v0, 0x1
iput-boolean v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sSet:Z
.line 123
array-length v0, p4
iput v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
.line 124
iput-object p4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->salt:[B
.line 125
iget v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
add-int/lit8 v0, v0, 0x8
iget v1, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
add-int/2addr v0, v1
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
.line 126
iput-byte p5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->trailer:B
.line 127
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;[B)V
.registers 10
.prologue
.line 98
const/16 v5, -0x44
move-object v0, p0
move-object v1, p1
move-object v2, p2
move-object v3, p2
move-object v4, p3
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/crypto/signers/PSSSigner;-><init>(Lorg/spongycastle/crypto/AsymmetricBlockCipher;Lorg/spongycastle/crypto/Digest;Lorg/spongycastle/crypto/Digest;[BB)V
.line 99
return-void
.end method
.method private ItoOSP(I[B)V
.registers 5
.prologue
.line 350
const/4 v0, 0x0
shr-int/lit8 v1, p1, 0x18
aput-byte v1, p2, v0
.line 351
const/4 v0, 0x1
ushr-int/lit8 v1, p1, 0x10
int-to-byte v1, v1
aput-byte v1, p2, v0
.line 352
const/4 v0, 0x2
ushr-int/lit8 v1, p1, 0x8
int-to-byte v1, v1
aput-byte v1, p2, v0
.line 353
const/4 v0, 0x3
int-to-byte v1, p1
aput-byte v1, p2, v0
.line 354
return-void
.end method
.method private clearBlock([B)V
.registers 5
.prologue
const/4 v1, 0x0
.line 184
move v0, v1
:goto_2
array-length v2, p1
if-eq v0, v2, :cond_a
.line 186
aput-byte v1, p1, v0
.line 184
add-int/lit8 v0, v0, 0x1
goto :goto_2
.line 188
:cond_a
return-void
.end method
.method private maskGeneratorFunction1([BIII)[B
.registers 13
.prologue
const/4 v7, 0x4
const/4 v1, 0x0
.line 365
new-array v2, p4, [B
.line 366
iget v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
new-array v3, v0, [B
.line 367
new-array v4, v7, [B
.line 370
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->reset()V
move v0, v1
.line 372
:goto_10
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
div-int v5, p4, v5
if-ge v0, v5, :cond_33
.line 374
invoke-direct {p0, v0, v4}, Lorg/spongycastle/crypto/signers/PSSSigner;->ItoOSP(I[B)V
.line 376
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v5, p1, p2, p3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 377
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v5, v4, v1, v7}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 378
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v5, v3, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 380
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
mul-int/2addr v5, v0
iget v6, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
invoke-static {v3, v1, v2, v5, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 382
add-int/lit8 v0, v0, 0x1
goto :goto_10
.line 385
:cond_33
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
mul-int/2addr v5, v0
if-ge v5, p4, :cond_55
.line 387
invoke-direct {p0, v0, v4}, Lorg/spongycastle/crypto/signers/PSSSigner;->ItoOSP(I[B)V
.line 389
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v5, p1, p2, p3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 390
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v5, v4, v1, v7}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 391
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v4, v3, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 393
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
mul-int/2addr v4, v0
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mgfhLen:I
mul-int/2addr v0, v5
sub-int v0, p4, v0
invoke-static {v3, v1, v2, v4, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 396
:cond_55
return-object v2
.end method
# virtual methods
.method public generateSignature()[B
.registers 8
.prologue
const/4 v1, 0x0
.line 225
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v3, v3
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v3, v4
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v3, v4
invoke-interface {v0, v2, v3}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 227
iget v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
if-eqz v0, :cond_2f
.line 229
iget-boolean v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sSet:Z
if-nez v0, :cond_20
.line 231
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->random:Ljava/security/SecureRandom;
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->salt:[B
invoke-virtual {v0, v2}, Ljava/security/SecureRandom;->nextBytes([B)V
.line 234
:cond_20
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->salt:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v3, v3
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v3, v4
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
invoke-static {v0, v1, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 237
:cond_2f
iget v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
new-array v2, v0, [B
.line 239
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v4, v4
invoke-interface {v0, v3, v1, v4}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 241
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, v2, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 243
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v3, v3
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v3, v4
add-int/lit8 v3, v3, -0x1
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v3, v4
add-int/lit8 v3, v3, -0x1
const/4 v4, 0x1
aput-byte v4, v0, v3
.line 244
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->salt:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v4, v4
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v4, v5
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v4, v5
add-int/lit8 v4, v4, -0x1
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
invoke-static {v0, v1, v3, v4, v5}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 246
array-length v0, v2
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v3, v3
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v3, v4
add-int/lit8 v3, v3, -0x1
invoke-direct {p0, v2, v1, v0, v3}, Lorg/spongycastle/crypto/signers/PSSSigner;->maskGeneratorFunction1([BIII)[B
move-result-object v3
move v0, v1
.line 247
:goto_76
array-length v4, v3
if-eq v0, v4, :cond_86
.line 249
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
aget-byte v5, v4, v0
aget-byte v6, v3, v0
xor-int/2addr v5, v6
int-to-byte v5, v5
aput-byte v5, v4, v0
.line 247
add-int/lit8 v0, v0, 0x1
goto :goto_76
.line 252
:cond_86
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
aget-byte v3, v0, v1
const/16 v4, 0xff
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v5, v5
shl-int/lit8 v5, v5, 0x3
iget v6, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->emBits:I
sub-int/2addr v5, v6
shr-int/2addr v4, v5
and-int/2addr v3, v4
int-to-byte v3, v3
aput-byte v3, v0, v1
.line 254
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v3, v3
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v3, v4
add-int/lit8 v3, v3, -0x1
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
invoke-static {v2, v1, v0, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 256
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v2, v2
add-int/lit8 v2, v2, -0x1
iget-byte v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->trailer:B
aput-byte v3, v0, v2
.line 258
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v3, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v3, v3
invoke-interface {v0, v2, v1, v3}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->processBlock([BII)[B
move-result-object v0
.line 260
iget-object v1, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
invoke-direct {p0, v1}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
.line 262
return-object v0
.end method
.method public init(ZLorg/spongycastle/crypto/CipherParameters;)V
.registers 6
.prologue
.line 135
instance-of v0, p2, Lorg/spongycastle/crypto/params/ParametersWithRandom;
if-eqz v0, :cond_44
move-object v0, p2
.line 137
check-cast v0, Lorg/spongycastle/crypto/params/ParametersWithRandom;
.line 139
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/ParametersWithRandom;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v1
.line 140
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/ParametersWithRandom;->getRandom()Ljava/security/SecureRandom;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->random:Ljava/security/SecureRandom;
move-object v0, v1
.line 153
:goto_12
instance-of v1, v0, Lorg/spongycastle/crypto/params/RSABlindingParameters;
if-eqz v1, :cond_4f
.line 155
check-cast v0, Lorg/spongycastle/crypto/params/RSABlindingParameters;
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/RSABlindingParameters;->getPublicKey()Lorg/spongycastle/crypto/params/RSAKeyParameters;
move-result-object v1
.line 157
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v0, p1, p2}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
.line 166
:goto_21
invoke-virtual {v1}, Lorg/spongycastle/crypto/params/RSAKeyParameters;->getModulus()Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0}, Ljava/math/BigInteger;->bitLength()I
move-result v0
add-int/lit8 v0, v0, -0x1
iput v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->emBits:I
.line 168
iget v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->emBits:I
iget v1, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
mul-int/lit8 v1, v1, 0x8
iget v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
mul-int/lit8 v2, v2, 0x8
add-int/2addr v1, v2
add-int/lit8 v1, v1, 0x9
if-ge v0, v1, :cond_58
.line 170
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "key too small for specified hash and salt lengths"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 145
:cond_44
if-eqz p1, :cond_4d
.line 147
new-instance v0, Ljava/security/SecureRandom;
invoke-direct {v0}, Ljava/security/SecureRandom;-><init>()V
iput-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->random:Ljava/security/SecureRandom;
:cond_4d
move-object v0, p2
goto :goto_12
:cond_4f
move-object v1, v0
.line 161
check-cast v1, Lorg/spongycastle/crypto/params/RSAKeyParameters;
.line 163
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
invoke-interface {v2, p1, v0}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
goto :goto_21
.line 173
:cond_58
iget v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->emBits: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/PSSSigner;->block:[B
.line 175
invoke-virtual {p0}, Lorg/spongycastle/crypto/signers/PSSSigner;->reset()V
.line 176
return-void
.end method
.method public reset()V
.registers 2
.prologue
.line 215
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->reset()V
.line 216
return-void
.end method
.method public update(B)V
.registers 3
.prologue
.line 196
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, p1}, Lorg/spongycastle/crypto/Digest;->update(B)V
.line 197
return-void
.end method
.method public update([BII)V
.registers 5
.prologue
.line 207
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0, p1, p2, p3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 208
return-void
.end method
.method public verifySignature([B)Z
.registers 9
.prologue
const/4 v3, 0x1
const/4 v1, 0x0
.line 272
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v4, v4
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v4, v5
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v4, v5
invoke-interface {v0, v2, v4}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 276
:try_start_12
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->cipher:Lorg/spongycastle/crypto/AsymmetricBlockCipher;
const/4 v2, 0x0
array-length v4, p1
invoke-interface {v0, p1, v2, v4}, Lorg/spongycastle/crypto/AsymmetricBlockCipher;->processBlock([BII)[B
move-result-object v0
.line 277
const/4 v2, 0x0
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v5, v5
array-length v6, v0
sub-int/2addr v5, v6
array-length v6, v0
invoke-static {v0, v2, v4, v5, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
:try_end_26
.catch Ljava/lang/Exception; {:try_start_12 .. :try_end_26} :catch_12a
.line 284
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v2, v2
add-int/lit8 v2, v2, -0x1
aget-byte v0, v0, v2
iget-byte v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->trailer:B
if-eq v0, v2, :cond_39
.line 286
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
.line 340
:goto_38
return v1
.line 290
:cond_39
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v2, v2
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v2, v4
add-int/lit8 v2, v2, -0x1
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v5, v5
iget v6, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v5, v6
add-int/lit8 v5, v5, -0x1
invoke-direct {p0, v0, v2, v4, v5}, Lorg/spongycastle/crypto/signers/PSSSigner;->maskGeneratorFunction1([BIII)[B
move-result-object v2
move v0, v1
.line 292
:goto_52
array-length v4, v2
if-eq v0, v4, :cond_62
.line 294
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
aget-byte v5, v4, v0
aget-byte v6, v2, v0
xor-int/2addr v5, v6
int-to-byte v5, v5
aput-byte v5, v4, v0
.line 292
add-int/lit8 v0, v0, 0x1
goto :goto_52
.line 297
:cond_62
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
aget-byte v2, v0, v1
const/16 v4, 0xff
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v5, v5
shl-int/lit8 v5, v5, 0x3
iget v6, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->emBits:I
sub-int/2addr v5, v6
shr-int/2addr v4, v5
and-int/2addr v2, v4
int-to-byte v2, v2
aput-byte v2, v0, v1
move v0, v1
.line 299
:goto_76
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v2, v2
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v2, v4
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v2, v4
add-int/lit8 v2, v2, -0x2
if-eq v0, v2, :cond_92
.line 301
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
aget-byte v2, v2, v0
if-eqz v2, :cond_8f
.line 303
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
goto :goto_38
.line 299
:cond_8f
add-int/lit8 v0, v0, 0x1
goto :goto_76
.line 308
:cond_92
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v2, v2
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v2, v4
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v2, v4
add-int/lit8 v2, v2, -0x2
aget-byte v0, v0, v2
if-eq v0, v3, :cond_a9
.line 310
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
goto :goto_38
.line 314
:cond_a9
iget-boolean v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sSet:Z
if-eqz v0, :cond_fd
.line 316
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->salt:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v4, v4
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v4, v5
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
invoke-static {v0, v1, v2, v4, v5}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 323
:goto_bc
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v4, v4
invoke-interface {v0, v2, v1, v4}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 324
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->contentDigest:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v4, v4
iget v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v4, v5
invoke-interface {v0, v2, v4}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 326
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v0, v0
iget v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v0, v2
add-int/lit8 v0, v0, -0x1
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v2, v2
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v2, v4
.line 327
:goto_e1
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v4, v4
if-eq v2, v4, :cond_11d
.line 329
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
aget-byte v4, v4, v0
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
aget-byte v5, v5, v2
xor-int/2addr v4, v5
if-eqz v4, :cond_118
.line 331
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
.line 332
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
goto/16 :goto_38
.line 320
:cond_fd
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
iget-object v2, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
array-length v2, v2
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v2, v4
iget v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->hLen:I
sub-int/2addr v2, v4
add-int/lit8 v2, v2, -0x1
iget-object v4, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
iget-object v5, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
array-length v5, v5
iget v6, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
sub-int/2addr v5, v6
iget v6, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->sLen:I
invoke-static {v0, v2, v4, v5, v6}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto :goto_bc
.line 327
:cond_118
add-int/lit8 v0, v0, 0x1
add-int/lit8 v2, v2, 0x1
goto :goto_e1
.line 337
:cond_11d
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->mDash:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
.line 338
iget-object v0, p0, Lorg/spongycastle/crypto/signers/PSSSigner;->block:[B
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/signers/PSSSigner;->clearBlock([B)V
move v1, v3
.line 340
goto/16 :goto_38
.line 281
:catch_12a
move-exception v0
goto/16 :goto_38
.end method