GMSSPrivateKeyParameters.smali
.class public Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;
.super Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyParameters;
.source "GMSSPrivateKeyParameters.java"
# instance fields
.field private K:[I
.field private currentAuthPaths:[[[B
.field private currentRetain:[[Ljava/util/Vector;
.field private currentRootSig:[[B
.field private currentSeeds:[[B
.field private currentStack:[Ljava/util/Vector;
.field private currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.field private digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.field private gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
.field private gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.field private heightOfTrees:[I
.field private index:[I
.field private keep:[[[B
.field private mdLength:I
.field private messDigestTrees:Lorg/spongycastle/crypto/Digest;
.field private minTreehash:[I
.field private nextAuthPaths:[[[B
.field private nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.field private nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
.field private nextNextSeeds:[[B
.field private nextRetain:[[Ljava/util/Vector;
.field private nextRoot:[[B
.field private nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
.field private nextStack:[Ljava/util/Vector;
.field private nextTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.field private numLayer:I
.field private numLeafs:[I
.field private otsIndex:[I
.field private upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.field private upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.field private used:Z
# direct methods
.method private constructor <init>(Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;)V
.registers 4
.prologue
.line 371
const/4 v0, 0x1
invoke-virtual {p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->getParameters()Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
move-result-object v1
invoke-direct {p0, v0, v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyParameters;-><init>(ZLorg/spongycastle/pqc/crypto/gmss/GMSSParameters;)V
.line 52
const/4 v0, 0x0
iput-boolean v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->used:Z
.line 373
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([I)[I
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
.line 374
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[B)[[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
.line 375
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[B)[[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
.line 376
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[[B)[[[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
.line 377
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextAuthPaths:[[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[[B)[[[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextAuthPaths:[[[B
.line 378
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.line 379
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.line 380
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentStack:[Ljava/util/Vector;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentStack:[Ljava/util/Vector;
.line 381
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextStack:[Ljava/util/Vector;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextStack:[Ljava/util/Vector;
.line 382
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
.line 383
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRetain:[[Ljava/util/Vector;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRetain:[[Ljava/util/Vector;
.line 384
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->keep:[[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[[B)[[[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->keep:[[[B
.line 385
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 386
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 387
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 388
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
.line 389
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
.line 390
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRoot:[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[B)[[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRoot:[[B
.line 391
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
.line 392
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRootSig:[[B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRootSig:[[B
.line 393
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
.line 394
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.line 395
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
.line 396
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
.line 397
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
.line 398
iget v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
.line 399
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
.line 400
iget v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
.line 401
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.line 402
iget-object v0, p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
.line 403
return-void
.end method
.method public constructor <init>([I[[B[[B[[[B[[[B[[[B[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;[Ljava/util/Vector;[Ljava/util/Vector;[[Ljava/util/Vector;[[Ljava/util/Vector;[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;[I[[B[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;[[B[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
.registers 34
.prologue
.line 168
const/4 v2, 0x1
move-object/from16 v0, p21
invoke-direct {p0, v2, v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyParameters;-><init>(ZLorg/spongycastle/pqc/crypto/gmss/GMSSParameters;)V
.line 52
const/4 v2, 0x0
iput-boolean v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->used:Z
.line 172
invoke-interface/range {p22 .. p22}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v2
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
.line 173
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
iput v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
.line 177
move-object/from16 v0, p21
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
.line 178
invoke-virtual/range {p21 .. p21}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getWinternitzParameter()[I
move-result-object v2
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
.line 179
invoke-virtual/range {p21 .. p21}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getK()[I
move-result-object v2
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
.line 180
invoke-virtual/range {p21 .. p21}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getHeightOfTrees()[I
move-result-object v2
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
.line 182
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getNumOfLayers()I
move-result v2
iput v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
.line 185
if-nez p1, :cond_4a
.line 187
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
new-array v2, v2, [I
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
.line 188
const/4 v2, 0x0
:goto_3e
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
if-ge v2, v3, :cond_4c
.line 190
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
const/4 v4, 0x0
aput v4, v3, v2
.line 188
add-int/lit8 v2, v2, 0x1
goto :goto_3e
.line 195
:cond_4a
iput-object p1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
.line 198
:cond_4c
iput-object p2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
.line 199
iput-object p3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
.line 201
iput-object p4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
.line 202
move-object/from16 v0, p5
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextAuthPaths:[[[B
.line 205
if-nez p6, :cond_86
.line 207
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
new-array v2, v2, [[[B
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->keep:[[[B
.line 208
const/4 v2, 0x0
move v3, v2
:goto_60
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
if-ge v3, v2, :cond_8a
.line 210
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->keep:[[[B
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
aget v2, v2, v3
div-int/lit8 v2, v2, 0x2
int-to-double v6, v2
invoke-static {v6, v7}, Ljava/lang/Math;->floor(D)D
move-result-wide v6
double-to-int v2, v6
iget v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
filled-new-array {v2, v5}, [I
move-result-object v2
sget-object v5, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
invoke-static {v5, v2}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v2
check-cast v2, [[B
aput-object v2, v4, v3
.line 208
add-int/lit8 v2, v3, 0x1
move v3, v2
goto :goto_60
.line 215
:cond_86
move-object/from16 v0, p6
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->keep:[[[B
.line 219
:cond_8a
if-nez p9, :cond_a3
.line 221
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
new-array v2, v2, [Ljava/util/Vector;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentStack:[Ljava/util/Vector;
.line 222
const/4 v2, 0x0
:goto_93
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
if-ge v2, v3, :cond_a7
.line 224
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentStack:[Ljava/util/Vector;
new-instance v4, Ljava/util/Vector;
invoke-direct {v4}, Ljava/util/Vector;-><init>()V
aput-object v4, v3, v2
.line 222
add-int/lit8 v2, v2, 0x1
goto :goto_93
.line 229
:cond_a3
move-object/from16 v0, p9
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentStack:[Ljava/util/Vector;
.line 233
:cond_a7
if-nez p10, :cond_c4
.line 235
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v2, v2, -0x1
new-array v2, v2, [Ljava/util/Vector;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextStack:[Ljava/util/Vector;
.line 236
const/4 v2, 0x0
:goto_b2
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v3, v3, -0x1
if-ge v2, v3, :cond_c8
.line 238
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextStack:[Ljava/util/Vector;
new-instance v4, Ljava/util/Vector;
invoke-direct {v4}, Ljava/util/Vector;-><init>()V
aput-object v4, v3, v2
.line 236
add-int/lit8 v2, v2, 0x1
goto :goto_b2
.line 243
:cond_c4
move-object/from16 v0, p10
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextStack:[Ljava/util/Vector;
.line 246
:cond_c8
move-object/from16 v0, p7
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.line 247
move-object/from16 v0, p8
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.line 249
move-object/from16 v0, p11
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
.line 250
move-object/from16 v0, p12
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRetain:[[Ljava/util/Vector;
.line 252
move-object/from16 v0, p17
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRoot:[[B
.line 254
move-object/from16 v0, p22
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.line 256
if-nez p18, :cond_10b
.line 258
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v2, v2, -0x1
new-array v2, v2, [Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
.line 259
const/4 v2, 0x0
:goto_eb
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v3, v3, -0x1
if-ge v2, v3, :cond_10f
.line 261
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
add-int/lit8 v6, v2, 0x1
aget v5, v5, v6
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
add-int/lit8 v7, v2, 0x1
aget v6, v6, v7
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
invoke-direct {v4, v5, v6, v7}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;-><init>(IILorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
aput-object v4, v3, v2
.line 259
add-int/lit8 v2, v2, 0x1
goto :goto_eb
.line 267
:cond_10b
move-object/from16 v0, p18
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
.line 269
:cond_10f
move-object/from16 v0, p19
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRootSig:[[B
.line 272
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
new-array v2, v2, [I
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
.line 273
const/4 v2, 0x0
:goto_11a
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
if-ge v2, v3, :cond_12b
.line 275
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
const/4 v4, 0x1
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
aget v5, v5, v2
shl-int/2addr v4, v5
aput v4, v3, v2
.line 273
add-int/lit8 v2, v2, 0x1
goto :goto_11a
.line 278
:cond_12b
new-instance v2, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
invoke-direct {v2, v3}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;-><init>(Lorg/spongycastle/crypto/Digest;)V
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.line 280
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
const/4 v3, 0x1
if-le v2, v3, :cond_19d
.line 284
if-nez p13, :cond_16a
.line 286
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v2, v2, -0x2
new-array v2, v2, [Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 287
const/4 v2, 0x0
:goto_144
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v3, v3, -0x2
if-ge v2, v3, :cond_16e
.line 289
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
invoke-interface/range {p22 .. p22}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v5
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
add-int/lit8 v7, v2, 0x1
aget v6, v6, v7
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
add-int/lit8 v8, v2, 0x2
aget v7, v7, v8
iget-object v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
aget-object v8, v8, v2
invoke-direct {v4, v5, v6, v7, v8}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;-><init>(Lorg/spongycastle/crypto/Digest;II[B)V
aput-object v4, v3, v2
.line 287
add-int/lit8 v2, v2, 0x1
goto :goto_144
.line 294
:cond_16a
move-object/from16 v0, p13
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 304
:cond_16e
:goto_16e
if-nez p14, :cond_1a3
.line 306
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v2, v2, -0x1
new-array v2, v2, [Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 307
const/4 v2, 0x0
:goto_179
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v3, v3, -0x1
if-ge v2, v3, :cond_1a7
.line 309
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
invoke-interface/range {p22 .. p22}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v5
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
aget v6, v6, v2
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
add-int/lit8 v8, v2, 0x1
aget v7, v7, v8
iget-object v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
aget-object v8, v8, v2
invoke-direct {v4, v5, v6, v7, v8}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;-><init>(Lorg/spongycastle/crypto/Digest;II[B)V
aput-object v4, v3, v2
.line 307
add-int/lit8 v2, v2, 0x1
goto :goto_179
.line 299
:cond_19d
const/4 v2, 0x0
new-array v2, v2, [Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
goto :goto_16e
.line 315
:cond_1a3
move-object/from16 v0, p14
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 320
:cond_1a7
if-nez p15, :cond_1d2
.line 322
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v2, v2, -0x1
new-array v2, v2, [Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 323
const/4 v2, 0x0
:goto_1b2
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v3, v3, -0x1
if-ge v2, v3, :cond_1d6
.line 325
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
invoke-interface/range {p22 .. p22}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v5
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
aget v6, v6, v2
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
add-int/lit8 v8, v2, 0x1
aget v7, v7, v8
invoke-direct {v4, v5, v6, v7}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;-><init>(Lorg/spongycastle/crypto/Digest;II)V
aput-object v4, v3, v2
.line 323
add-int/lit8 v2, v2, 0x1
goto :goto_1b2
.line 330
:cond_1d2
move-object/from16 v0, p15
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
.line 333
:cond_1d6
if-nez p16, :cond_1ef
.line 335
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v2, v2, -0x1
new-array v2, v2, [I
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
.line 336
const/4 v2, 0x0
:goto_1e1
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v3, v3, -0x1
if-ge v2, v3, :cond_1f3
.line 338
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
const/4 v4, -0x1
aput v4, v3, v2
.line 336
add-int/lit8 v2, v2, 0x1
goto :goto_1e1
.line 343
:cond_1ef
move-object/from16 v0, p16
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
.line 347
:cond_1f3
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
new-array v3, v2, [B
.line 349
if-nez p20, :cond_23f
.line 351
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v2, v2, -0x1
new-array v2, v2, [Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
iput-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
.line 352
const/4 v2, 0x0
:goto_202
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v4, v4, -0x1
if-ge v2, v4, :cond_243
.line 354
aget-object v4, p2, v2
const/4 v5, 0x0
const/4 v6, 0x0
iget v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v4, v5, v3, v6, v7}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 355
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v4, v3}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
.line 356
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v4, v3}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v4
.line 357
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
new-instance v6, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
invoke-interface/range {p22 .. p22}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v7
iget-object v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
aget v8, v8, v2
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
add-int/lit8 v10, v2, 0x1
aget v9, v9, v10
invoke-direct {v6, v7, v8, v9}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;-><init>(Lorg/spongycastle/crypto/Digest;II)V
aput-object v6, v5, v2
.line 359
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
aget-object v5, v5, v2
aget-object v6, p17, v2
invoke-virtual {v5, v4, v6}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->initSign([B[B)V
.line 352
add-int/lit8 v2, v2, 0x1
goto :goto_202
.line 364
:cond_23f
move-object/from16 v0, p20
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
.line 366
:cond_243
return-void
.end method
.method public constructor <init>([[B[[B[[[B[[[B[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;[Ljava/util/Vector;[Ljava/util/Vector;[[Ljava/util/Vector;[[Ljava/util/Vector;[[B[[BLorg/spongycastle/pqc/crypto/gmss/GMSSParameters;Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
.registers 38
.prologue
.line 125
const/4 v1, 0x0
const/4 v6, 0x0
const/4 v13, 0x0
const/4 v14, 0x0
const/4 v15, 0x0
const/16 v16, 0x0
const/16 v18, 0x0
const/16 v20, 0x0
move-object/from16 v0, p0
move-object/from16 v2, p1
move-object/from16 v3, p2
move-object/from16 v4, p3
move-object/from16 v5, p4
move-object/from16 v7, p5
move-object/from16 v8, p6
move-object/from16 v9, p7
move-object/from16 v10, p8
move-object/from16 v11, p9
move-object/from16 v12, p10
move-object/from16 v17, p11
move-object/from16 v19, p12
move-object/from16 v21, p13
move-object/from16 v22, p14
invoke-direct/range {v0 .. v22}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;-><init>([I[[B[[B[[[B[[[B[[[B[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;[Ljava/util/Vector;[Ljava/util/Vector;[[Ljava/util/Vector;[[Ljava/util/Vector;[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;[I[[B[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;[[B[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
.line 129
return-void
.end method
.method private computeAuthPaths(I)V
.registers 14
.prologue
const/4 v1, 0x1
const/4 v2, 0x0
.line 753
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v3, v0, p1
.line 754
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
aget v4, v0, p1
.line 755
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
aget v5, v0, p1
move v0, v2
.line 758
:goto_f
sub-int v6, v4, v5
if-ge v0, v6, :cond_21
.line 760
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v6, v6, p1
aget-object v6, v6, v0
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v6, v7}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->updateNextSeed(Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;)V
.line 758
add-int/lit8 v0, v0, 0x1
goto :goto_f
.line 764
:cond_21
invoke-direct {p0, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfPhi(I)I
move-result v6
.line 767
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
aget-object v7, v7, p1
invoke-virtual {v0, v7}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v0
.line 775
add-int/lit8 v7, v6, 0x1
ushr-int v7, v3, v7
and-int/lit8 v7, v7, 0x1
.line 777
iget v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
new-array v8, v8, [B
.line 781
add-int/lit8 v9, v4, -0x1
if-ge v6, v9, :cond_4a
if-nez v7, :cond_4a
.line 783
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v9, v9, p1
aget-object v9, v9, v6
iget v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v9, v2, v8, v2, v10}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 792
:cond_4a
if-nez v6, :cond_fb
.line 795
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v3, v3, -0x1
if-ne p1, v3, :cond_d8
.line 799
new-instance v3, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.line 800
invoke-interface {v9}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v9
iget-object v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
aget v10, v10, p1
invoke-direct {v3, v0, v9, v10}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;-><init>([BLorg/spongycastle/crypto/Digest;I)V
.line 801
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;->getPublicKey()[B
move-result-object v0
.line 820
:goto_65
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v3, v3, p1
aget-object v3, v3, v2
iget v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v0, v2, v3, v2, v9}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 897
:cond_70
add-int/lit8 v0, v4, -0x1
if-ge v6, v0, :cond_89
if-nez v7, :cond_89
.line 899
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->keep:[[[B
aget-object v0, v0, p1
div-int/lit8 v3, v6, 0x2
int-to-double v6, v3
.line 900
invoke-static {v6, v7}, Ljava/lang/Math;->floor(D)D
move-result-wide v6
double-to-int v3, v6
aget-object v0, v0, v3
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
.line 899
invoke-static {v8, v2, v0, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 910
:cond_89
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v0, v0, -0x1
if-ne p1, v0, :cond_20d
move v0, v1
.line 912
:goto_90
sub-int v1, v4, v5
div-int/lit8 v1, v1, 0x2
if-gt v0, v1, :cond_215
.line 915
invoke-direct {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->getMinTreehashIndex(I)I
move-result v1
.line 918
if-ltz v1, :cond_d5
.line 922
:try_start_9c
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
new-array v2, v2, [B
.line 923
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v3, v3, p1
aget-object v3, v3, v1
.line 925
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->getSeedActive()[B
move-result-object v3
const/4 v6, 0x0
const/4 v7, 0x0
iget v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
.line 923
invoke-static {v3, v6, v2, v7, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 926
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v3, v2}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v2
.line 927
new-instance v3, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.line 928
invoke-interface {v6}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v6
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
aget v7, v7, p1
invoke-direct {v3, v2, v6, v7}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;-><init>([BLorg/spongycastle/crypto/Digest;I)V
.line 929
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;->getPublicKey()[B
move-result-object v2
.line 930
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v3, v3, p1
aget-object v1, v3, v1
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v1, v3, v2}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->update(Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;[B)V
:try_end_d5
.catch Ljava/lang/Exception; {:try_start_9c .. :try_end_d5} :catch_205
.line 912
:cond_d5
:goto_d5
add-int/lit8 v0, v0, 0x1
goto :goto_90
.line 806
:cond_d8
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
new-array v3, v0, [B
.line 807
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
aget-object v0, v0, p1
iget v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v0, v2, v3, v2, v9}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 808
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v0, v3}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
.line 809
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
aget-object v0, v0, p1
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->getLeaf()[B
move-result-object v0
.line 810
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
aget-object v9, v9, p1
invoke-virtual {v9, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->initLeafCalc([B)V
goto/16 :goto_65
.line 826
:cond_fb
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
shl-int/lit8 v0, v0, 0x1
new-array v0, v0, [B
.line 827
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v9, v9, p1
add-int/lit8 v10, v6, -0x1
aget-object v9, v9, v10
iget v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v9, v2, v0, v2, v10}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 830
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->keep:[[[B
aget-object v9, v9, p1
add-int/lit8 v10, v6, -0x1
div-int/lit8 v10, v10, 0x2
int-to-double v10, v10
invoke-static {v10, v11}, Ljava/lang/Math;->floor(D)D
move-result-wide v10
double-to-int v10, v10
aget-object v9, v9, v10
iget v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
iget v11, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v9, v2, v0, v10, v11}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 832
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
array-length v10, v0
invoke-interface {v9, v0, v2, v10}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 833
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v0, v0, p1
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
invoke-interface {v9}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v9
new-array v9, v9, [B
aput-object v9, v0, v6
.line 834
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->messDigestTrees:Lorg/spongycastle/crypto/Digest;
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v9, v9, p1
aget-object v9, v9, v6
invoke-interface {v0, v9, v2}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
move v0, v2
.line 838
:goto_145
if-ge v0, v6, :cond_70
.line 843
sub-int v9, v4, v5
if-ge v0, v9, :cond_175
.line 845
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v9, v9, p1
aget-object v9, v9, v0
invoke-virtual {v9}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->wasFinished()Z
move-result v9
if-eqz v9, :cond_1df
.line 847
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v9, v9, p1
aget-object v9, v9, v0
.line 848
invoke-virtual {v9}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->getFirstNode()[B
move-result-object v9
iget-object v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v10, v10, p1
aget-object v10, v10, v0
iget v11, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
.line 847
invoke-static {v9, v2, v10, v2, v11}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 850
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v9, v9, p1
aget-object v9, v9, v0
invoke-virtual {v9}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->destroy()V
.line 864
:cond_175
:goto_175
add-int/lit8 v9, v4, -0x1
if-ge v0, v9, :cond_1c3
sub-int v9, v4, v5
if-lt v0, v9, :cond_1c3
.line 866
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
aget-object v9, v9, p1
sub-int v10, v4, v5
sub-int v10, v0, v10
aget-object v9, v9, v10
invoke-virtual {v9}, Ljava/util/Vector;->size()I
move-result v9
if-lez v9, :cond_1c3
.line 869
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
aget-object v9, v9, p1
sub-int v10, v4, v5
sub-int v10, v0, v10
aget-object v9, v9, v10
.line 870
invoke-virtual {v9}, Ljava/util/Vector;->lastElement()Ljava/lang/Object;
move-result-object v9
iget-object v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v10, v10, p1
aget-object v10, v10, v0
iget v11, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
.line 869
invoke-static {v9, v2, v10, v2, v11}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 872
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
aget-object v9, v9, p1
sub-int v10, v4, v5
sub-int v10, v0, v10
aget-object v9, v9, v10
iget-object v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
aget-object v10, v10, p1
sub-int v11, v4, v5
sub-int v11, v0, v11
aget-object v10, v10, v11
.line 874
invoke-virtual {v10}, Ljava/util/Vector;->size()I
move-result v10
add-int/lit8 v10, v10, -0x1
.line 873
invoke-virtual {v9, v10}, Ljava/util/Vector;->removeElementAt(I)V
.line 880
:cond_1c3
sub-int v9, v4, v5
if-ge v0, v9, :cond_1db
.line 883
shl-int v9, v1, v0
mul-int/lit8 v9, v9, 0x3
add-int/2addr v9, v3
.line 884
iget-object v10, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
aget v10, v10, p1
if-ge v9, v10, :cond_1db
.line 890
iget-object v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v9, v9, p1
aget-object v9, v9, v0
invoke-virtual {v9}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->initialize()V
.line 838
:cond_1db
add-int/lit8 v0, v0, 0x1
goto/16 :goto_145
.line 854
:cond_1df
sget-object v9, Ljava/lang/System;->err:Ljava/io/PrintStream;
new-instance v10, Ljava/lang/StringBuilder;
const-string v11, "Treehash ("
invoke-direct {v10, v11}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v10, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v10
const-string v11, ","
invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v10
invoke-virtual {v10, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v10
const-string v11, ") not finished when needed in AuthPathComputation"
invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v10
invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v10
.line 855
invoke-virtual {v9, v10}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
goto/16 :goto_175
.line 933
:catch_205
move-exception v1
.line 935
sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;
invoke-virtual {v2, v1}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
goto/16 :goto_d5
.line 942
:cond_20d
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
invoke-direct {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->getMinTreehashIndex(I)I
move-result v1
aput v1, v0, p1
.line 944
:cond_215
return-void
.end method
.method private getMinTreehashIndex(I)I
.registers 7
.prologue
const/4 v2, -0x1
.line 724
.line 725
const/4 v0, 0x0
move v1, v2
:goto_3
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
aget v3, v3, p1
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
aget v4, v4, p1
sub-int/2addr v3, v4
if-ge v0, v3, :cond_44
.line 727
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v3, v3, p1
aget-object v3, v3, v0
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->wasInitialized()Z
move-result v3
if-eqz v3, :cond_29
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v3, v3, p1
aget-object v3, v3, v0
.line 728
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->wasFinished()Z
move-result v3
if-nez v3, :cond_29
.line 730
if-ne v1, v2, :cond_2c
move v1, v0
.line 725
:cond_29
:goto_29
add-int/lit8 v0, v0, 0x1
goto :goto_3
.line 734
:cond_2c
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v3, v3, p1
aget-object v3, v3, v0
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->getLowestNodeHeight()I
move-result v3
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v4, v4, p1
aget-object v4, v4, v1
.line 735
invoke-virtual {v4}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->getLowestNodeHeight()I
move-result v4
if-ge v3, v4, :cond_29
move v1, v0
.line 737
goto :goto_29
.line 741
:cond_44
return v1
.end method
.method private heightOfPhi(I)I
.registers 5
.prologue
.line 955
if-nez p1, :cond_4
.line 957
const/4 v0, -0x1
.line 966
:goto_3
return v0
.line 959
:cond_4
const/4 v1, 0x0
.line 960
const/4 v0, 0x1
.line 961
:goto_6
rem-int v2, p1, v0
if-nez v2, :cond_f
.line 963
shl-int/lit8 v0, v0, 0x1
.line 964
add-int/lit8 v1, v1, 0x1
goto :goto_6
.line 966
:cond_f
add-int/lit8 v0, v1, -0x1
goto :goto_3
.end method
.method private nextKey(I)V
.registers 4
.prologue
.line 433
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v0, v0, -0x1
if-ne p1, v0, :cond_e
.line 435
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v1, v0, p1
add-int/lit8 v1, v1, 0x1
aput v1, v0, p1
.line 440
:cond_e
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v0, v0, p1
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
aget v1, v1, p1
if-ne v0, v1, :cond_26
.line 442
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
const/4 v1, 0x1
if-eq v0, v1, :cond_25
.line 444
invoke-direct {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextTree(I)V
.line 445
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
const/4 v1, 0x0
aput v1, v0, p1
.line 452
:cond_25
:goto_25
return-void
.line 450
:cond_26
invoke-direct {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->updateKey(I)V
goto :goto_25
.end method
.method private nextTree(I)V
.registers 8
.prologue
const/4 v2, 0x1
const/4 v3, 0x0
.line 463
if-lez p1, :cond_1ad
.line 466
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
add-int/lit8 v1, p1, -0x1
aget v4, v0, v1
add-int/lit8 v4, v4, 0x1
aput v4, v0, v1
move v0, p1
move v1, v2
.line 473
:cond_10
add-int/lit8 v0, v0, -0x1
.line 474
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v4, v4, v0
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
aget v5, v5, v0
if-ge v4, v5, :cond_1d
move v1, v3
.line 479
:cond_1d
if-eqz v1, :cond_21
if-gtz v0, :cond_10
.line 482
:cond_21
if-nez v1, :cond_1ad
.line 484
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
aget-object v1, v1, p1
invoke-virtual {v0, v1}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
.line 487
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
add-int/lit8 v1, p1, -0x1
aget-object v0, v0, v1
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->updateSign()Z
.line 490
if-le p1, v2, :cond_4b
.line 492
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
add-int/lit8 v1, v1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v4, p1, -0x1
add-int/lit8 v4, v4, -0x1
aget-object v2, v2, v4
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->nextLeaf()Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
move-result-object v2
aput-object v2, v0, v1
.line 496
:cond_4b
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->nextLeaf()Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
move-result-object v2
aput-object v2, v0, v1
.line 500
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v1, p1, -0x1
aget v0, v0, v1
if-ltz v0, :cond_a1
.line 502
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->nextLeaf()Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
move-result-object v2
aput-object v2, v0, v1
.line 503
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
aget-object v0, v0, v1
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->getLeaf()[B
move-result-object v0
.line 508
:try_start_7d
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v4, p1, -0x1
aget v2, v2, v4
aget-object v1, v1, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.line 509
invoke-virtual {v1, v2, v0}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->update(Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;[B)V
.line 512
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
add-int/lit8 v1, p1, -0x1
aget-object v0, v0, v1
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v2, p1, -0x1
aget v1, v1, v2
aget-object v0, v0, v1
.line 513
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->wasFinished()Z
:try_end_a1
.catch Ljava/lang/Exception; {:try_start_7d .. :try_end_a1} :catch_e5
.line 526
:cond_a1
:goto_a1
invoke-direct {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->updateNextNextAuthRoot(I)V
.line 533
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRootSig:[[B
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
.line 534
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->getSig()[B
move-result-object v2
aput-object v2, v0, v1
move v0, v3
.line 540
:goto_b5
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
aget v1, v1, p1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
aget v2, v2, p1
sub-int/2addr v1, v2
if-ge v0, v1, :cond_ec
.line 542
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aget-object v1, v1, p1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
aget-object v2, v2, v0
aput-object v2, v1, v0
.line 543
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
.line 544
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getTreehash()[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
move-result-object v2
aget-object v2, v2, v0
aput-object v2, v1, v0
.line 540
add-int/lit8 v0, v0, 0x1
goto :goto_b5
.line 519
:catch_e5
move-exception v0
.line 521
sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
goto :goto_a1
:cond_ec
move v0, v3
.line 549
:goto_ed
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
aget v1, v1, p1
if-ge v0, v1, :cond_122
.line 551
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextAuthPaths:[[[B
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
aget-object v1, v1, v0
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
aget-object v2, v2, p1
aget-object v2, v2, v0
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v1, v3, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 553
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
invoke-virtual {v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getAuthPath()[[B
move-result-object v1
aget-object v1, v1, v0
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextAuthPaths:[[[B
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
aget-object v2, v2, v0
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
invoke-static {v1, v3, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 549
add-int/lit8 v0, v0, 0x1
goto :goto_ed
:cond_122
move v0, v3
.line 559
:goto_123
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
aget v1, v1, p1
add-int/lit8 v1, v1, -0x1
if-ge v0, v1, :cond_150
.line 561
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRetain:[[Ljava/util/Vector;
aget-object v1, v1, p1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRetain:[[Ljava/util/Vector;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
aget-object v2, v2, v0
aput-object v2, v1, v0
.line 562
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRetain:[[Ljava/util/Vector;
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
.line 563
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getRetain()[Ljava/util/Vector;
move-result-object v2
aget-object v2, v2, v0
aput-object v2, v1, v0
.line 559
add-int/lit8 v0, v0, 0x1
goto :goto_123
.line 567
:cond_150
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentStack:[Ljava/util/Vector;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextStack:[Ljava/util/Vector;
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
aput-object v1, v0, p1
.line 569
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextStack:[Ljava/util/Vector;
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
.line 570
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getStack()Ljava/util/Vector;
move-result-object v2
aput-object v2, v0, v1
.line 573
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRoot:[[B
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v4, p1, -0x1
aget-object v2, v2, v4
.line 574
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getRoot()[B
move-result-object v2
aput-object v2, v0, v1
.line 579
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
new-array v0, v0, [B
.line 581
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->mdLength:I
.line 582
invoke-static {v1, v3, v0, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 584
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v1, v0}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
.line 585
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v1, v0}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
.line 586
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v1, v0}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v0
.line 589
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRoot:[[B
add-int/lit8 v3, p1, -0x1
aget-object v2, v2, v3
invoke-virtual {v1, v0, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->initSign([B[B)V
.line 592
add-int/lit8 v0, p1, -0x1
invoke-direct {p0, v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextKey(I)V
.line 595
:cond_1ad
return-void
.end method
.method private updateKey(I)V
.registers 11
.prologue
const/4 v8, 0x1
.line 610
invoke-direct {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->computeAuthPaths(I)V
.line 614
if-lez p1, :cond_f7
.line 618
if-le p1, v8, :cond_1c
.line 620
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
add-int/lit8 v1, v1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v3, p1, -0x1
add-int/lit8 v3, v3, -0x1
aget-object v2, v2, v3
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->nextLeaf()Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
move-result-object v2
aput-object v2, v0, v1
.line 624
:cond_1c
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v3, p1, -0x1
aget-object v2, v2, v3
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->nextLeaf()Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
move-result-object v2
aput-object v2, v0, v1
.line 630
invoke-virtual {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->getNumLeafs(I)I
move-result v0
shl-int/lit8 v0, v0, 0x1
int-to-double v0, v0
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->heightOfTrees:[I
add-int/lit8 v3, p1, -0x1
aget v2, v2, v3
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->K:[I
add-int/lit8 v4, p1, -0x1
aget v3, v3, v4
sub-int/2addr v2, v3
int-to-double v2, v2
div-double/2addr v0, v2
invoke-static {v0, v1}, Ljava/lang/Math;->floor(D)D
move-result-wide v0
double-to-int v1, v0
.line 633
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v0, v0, p1
rem-int/2addr v0, v1
if-ne v0, v8, :cond_ff
.line 640
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v0, v0, p1
if-le v0, v8, :cond_8a
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v2, p1, -0x1
aget v0, v0, v2
if-ltz v0, :cond_8a
.line 642
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v2, p1, -0x1
aget-object v0, v0, v2
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->getLeaf()[B
move-result-object v0
.line 647
:try_start_66
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
add-int/lit8 v3, p1, -0x1
aget-object v2, v2, v3
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v4, p1, -0x1
aget v3, v3, v4
aget-object v2, v2, v3
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.line 648
invoke-virtual {v2, v3, v0}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->update(Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;[B)V
.line 651
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
add-int/lit8 v2, p1, -0x1
aget-object v0, v0, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v3, p1, -0x1
aget v2, v2, v3
aget-object v0, v0, v2
.line 652
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->wasFinished()Z
:try_end_8a
.catch Ljava/lang/Exception; {:try_start_66 .. :try_end_8a} :catch_f8
.line 669
:cond_8a
:goto_8a
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v2, p1, -0x1
add-int/lit8 v3, p1, -0x1
invoke-direct {p0, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->getMinTreehashIndex(I)I
move-result v3
aput v3, v0, v2
.line 671
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v2, p1, -0x1
aget v0, v0, v2
if-ltz v0, :cond_d7
.line 674
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentTreehash:[[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
add-int/lit8 v2, p1, -0x1
aget-object v0, v0, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v3, p1, -0x1
aget v2, v2, v3
aget-object v0, v0, v2
.line 675
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/Treehash;->getSeedActive()[B
move-result-object v0
.line 676
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v3, p1, -0x1
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.line 677
invoke-interface {v5}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v5
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
add-int/lit8 v7, p1, -0x1
aget v6, v6, v7
invoke-direct {v4, v5, v6, v1, v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;-><init>(Lorg/spongycastle/crypto/Digest;II[B)V
aput-object v4, v2, v3
.line 678
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v3, p1, -0x1
aget-object v2, v2, v3
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->nextLeaf()Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
move-result-object v2
aput-object v2, v0, v1
.line 698
:cond_d7
:goto_d7
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextRootSig:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
add-int/lit8 v1, p1, -0x1
aget-object v0, v0, v1
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->updateSign()Z
.line 701
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v0, v0, p1
if-ne v0, v8, :cond_f4
.line 705
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v1, p1, -0x1
aget-object v0, v0, v1
new-instance v1, Ljava/util/Vector;
invoke-direct {v1}, Ljava/util/Vector;-><init>()V
invoke-virtual {v0, v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->initialize(Ljava/util/Vector;)V
.line 710
:cond_f4
invoke-direct {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->updateNextNextAuthRoot(I)V
.line 713
:cond_f7
return-void
.line 658
:catch_f8
move-exception v0
.line 660
sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;
invoke-virtual {v2, v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
goto :goto_8a
.line 688
:cond_ff
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->minTreehash:[I
add-int/lit8 v1, p1, -0x1
aget v0, v0, v1
if-ltz v0, :cond_d7
.line 690
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->upperTreehashLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v3, p1, -0x1
aget-object v2, v2, v3
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->nextLeaf()Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
move-result-object v2
aput-object v2, v0, v1
goto :goto_d7
.end method
.method private updateNextNextAuthRoot(I)V
.registers 6
.prologue
.line 979
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
invoke-virtual {v0, v1}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v0
.line 982
iget v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLayer:I
add-int/lit8 v1, v1, -0x1
if-ne p1, v1, :cond_35
.line 985
new-instance v1, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.line 986
invoke-interface {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v2
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->otsIndex:[I
aget v3, v3, p1
invoke-direct {v1, v0, v2, v3}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;-><init>([BLorg/spongycastle/crypto/Digest;I)V
.line 987
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v2, p1, -0x1
aget-object v0, v0, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
add-int/lit8 v3, p1, -0x1
aget-object v2, v2, v3
.line 988
invoke-virtual {v1}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;->getPublicKey()[B
move-result-object v1
.line 987
invoke-virtual {v0, v2, v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->update([B[B)V
.line 995
:goto_34
return-void
.line 992
:cond_35
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextRoot:[Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
add-int/lit8 v1, p1, -0x1
aget-object v0, v0, v1
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v3, p1, -0x1
aget-object v2, v2, v3
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->getLeaf()[B
move-result-object v2
invoke-virtual {v0, v1, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->update([B[B)V
.line 993
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextLeaf:[Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;
add-int/lit8 v1, p1, -0x1
aget-object v0, v0, v1
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextNextSeeds:[[B
add-int/lit8 v2, p1, -0x1
aget-object v1, v1, v2
invoke-virtual {v0, v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSLeaf;->initLeafCalc([B)V
goto :goto_34
.end method
# virtual methods
.method public getCurrentAuthPaths()[[[B
.registers 2
.prologue
.line 1017
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentAuthPaths:[[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[[B)[[[B
move-result-object v0
return-object v0
.end method
.method public getCurrentSeeds()[[B
.registers 2
.prologue
.line 1012
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentSeeds:[[B
invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([[B)[[B
move-result-object v0
return-object v0
.end method
.method public getIndex(I)I
.registers 3
.prologue
.line 1007
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
aget v0, v0, p1
return v0
.end method
.method public getIndex()[I
.registers 2
.prologue
.line 999
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->index:[I
return-object v0
.end method
.method public getName()Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.registers 2
.prologue
.line 1031
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
return-object v0
.end method
.method public getNumLeafs(I)I
.registers 3
.prologue
.line 1039
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->numLeafs:[I
aget v0, v0, p1
return v0
.end method
.method public getSubtreeRootSig(I)[B
.registers 3
.prologue
.line 1025
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->currentRootSig:[[B
aget-object v0, v0, p1
return-object v0
.end method
.method public isUsed()Z
.registers 2
.prologue
.line 407
iget-boolean v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->used:Z
return v0
.end method
.method public markUsed()V
.registers 2
.prologue
.line 412
const/4 v0, 0x1
iput-boolean v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->used:Z
.line 413
return-void
.end method
.method public nextKey()Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;
.registers 3
.prologue
.line 417
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;
invoke-direct {v0, p0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;-><init>(Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;)V
.line 419
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-virtual {v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getNumOfLayers()I
move-result v1
add-int/lit8 v1, v1, -0x1
invoke-direct {v0, v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;->nextKey(I)V
.line 421
return-object v0
.end method