GMSSKeyPairGenerator.smali
.class public Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;
.super Ljava/lang/Object;
.source "GMSSKeyPairGenerator.java"
# interfaces
.implements Lorg/spongycastle/crypto/AsymmetricCipherKeyPairGenerator;
# static fields
.field public static final OID:Ljava/lang/String; = "1.3.6.1.4.1.8301.3.1.3.3"
# instance fields
.field private K:[I
.field private currentRootSigs:[[B
.field private currentSeeds:[[B
.field private digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.field private gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
.field private gmssParams:Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
.field private gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.field private heightOfTrees:[I
.field private initialized:Z
.field private mdLength:I
.field private messDigestTree:Lorg/spongycastle/crypto/Digest;
.field private nextNextSeeds:[[B
.field private numLayer:I
.field private otsIndex:[I
# direct methods
.method public constructor <init>(Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
.registers 4
.prologue
.line 105
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 69
const/4 v0, 0x0
iput-boolean v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->initialized:Z
.line 106
iput-object p1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
.line 107
invoke-interface {p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->messDigestTree:Lorg/spongycastle/crypto/Digest;
.line 110
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->messDigestTree:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
.line 112
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->messDigestTree:Lorg/spongycastle/crypto/Digest;
invoke-direct {v0, v1}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;-><init>(Lorg/spongycastle/crypto/Digest;)V
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.line 114
return-void
.end method
.method private genKeyPair()Lorg/spongycastle/crypto/AsymmetricCipherKeyPair;
.registers 25
.prologue
.line 124
move-object/from16 v0, p0
iget-boolean v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->initialized:Z
if-nez v5, :cond_9
.line 126
invoke-direct/range {p0 .. p0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->initializeDefault()V
.line 130
:cond_9
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
new-array v8, v5, [[[B
.line 131
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v5, v5, -0x1
new-array v9, v5, [[[B
.line 132
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
new-array v10, v5, [[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.line 133
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v5, v5, -0x1
new-array v11, v5, [[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
.line 135
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
new-array v12, v5, [Ljava/util/Vector;
.line 136
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v5, v5, -0x1
new-array v13, v5, [Ljava/util/Vector;
.line 138
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
new-array v14, v5, [[Ljava/util/Vector;
.line 139
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v5, v5, -0x1
new-array v15, v5, [[Ljava/util/Vector;
.line 141
const/4 v5, 0x0
move v6, v5
:goto_43
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
if-ge v6, v5, :cond_c0
.line 143
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v5, v5, v6
move-object/from16 v0, p0
iget v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
filled-new-array {v5, v7}, [I
move-result-object v5
sget-object v7, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
invoke-static {v7, v5}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v5
check-cast v5, [[B
aput-object v5, v8, v6
.line 144
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v5, v5, v6
move-object/from16 v0, p0
iget-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
aget v7, v7, v6
sub-int/2addr v5, v7
new-array v5, v5, [Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aput-object v5, v10, v6
.line 146
if-lez v6, :cond_aa
.line 148
add-int/lit8 v7, v6, -0x1
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v5, v5, v6
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v16, v0
move/from16 v0, v16
filled-new-array {v5, v0}, [I
move-result-object v5
sget-object v16, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
move-object/from16 v0, v16
invoke-static {v0, v5}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v5
check-cast v5, [[B
aput-object v5, v9, v7
.line 149
add-int/lit8 v5, v6, -0x1
move-object/from16 v0, p0
iget-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v7, v7, v6
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
move-object/from16 v16, v0
aget v16, v16, v6
sub-int v7, v7, v16
new-array v7, v7, [Lorg/spongycastle/pqc/crypto/gmss/Treehash;
aput-object v7, v11, v5
.line 152
:cond_aa
new-instance v5, Ljava/util/Vector;
invoke-direct {v5}, Ljava/util/Vector;-><init>()V
aput-object v5, v12, v6
.line 153
if-lez v6, :cond_bc
.line 155
add-int/lit8 v5, v6, -0x1
new-instance v7, Ljava/util/Vector;
invoke-direct {v7}, Ljava/util/Vector;-><init>()V
aput-object v7, v13, v5
.line 141
:cond_bc
add-int/lit8 v5, v6, 0x1
move v6, v5
goto :goto_43
.line 160
:cond_c0
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
move-object/from16 v0, p0
iget v6, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
filled-new-array {v5, v6}, [I
move-result-object v5
sget-object v6, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
invoke-static {v6, v5}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v5
check-cast v5, [[B
.line 161
move-object/from16 v0, p0
iget v6, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v6, v6, -0x1
move-object/from16 v0, p0
iget v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
filled-new-array {v6, v7}, [I
move-result-object v6
sget-object v7, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
invoke-static {v7, v6}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v16
check-cast v16, [[B
.line 163
move-object/from16 v0, p0
iget v6, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
move-object/from16 v0, p0
iget v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
filled-new-array {v6, v7}, [I
move-result-object v6
sget-object v7, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
invoke-static {v7, v6}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v6
check-cast v6, [[B
.line 166
const/4 v7, 0x0
:goto_ff
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
move/from16 v17, v0
move/from16 v0, v17
if-ge v7, v0, :cond_123
.line 168
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentSeeds:[[B
move-object/from16 v17, v0
aget-object v17, v17, v7
const/16 v18, 0x0
aget-object v19, v6, v7
const/16 v20, 0x0
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v21, v0
invoke-static/range {v17 .. v21}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 166
add-int/lit8 v7, v7, 0x1
goto :goto_ff
.line 172
:cond_123
move-object/from16 v0, p0
iget v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v7, v7, -0x1
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v17, v0
move/from16 v0, v17
filled-new-array {v7, v0}, [I
move-result-object v7
sget-object v17, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
move-object/from16 v0, v17
invoke-static {v0, v7}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v7
check-cast v7, [[B
move-object/from16 v0, p0
iput-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentRootSigs:[[B
.line 179
move-object/from16 v0, p0
iget v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v7, v7, -0x1
move/from16 v18, v7
:goto_14b
if-ltz v18, :cond_203
.line 181
new-instance v7, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
move-object/from16 v17, v0
aget v17, v17, v18
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
move-object/from16 v19, v0
aget v19, v19, v18
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
move-object/from16 v20, v0
move/from16 v0, v17
move/from16 v1, v19
move-object/from16 v2, v20
invoke-direct {v7, v0, v1, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;-><init>(IILorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
.line 186
:try_start_16e
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
move/from16 v17, v0
add-int/lit8 v17, v17, -0x1
move/from16 v0, v18
move/from16 v1, v17
if-ne v0, v1, :cond_1ba
.line 188
const/16 v17, 0x0
aget-object v19, v12, v18
aget-object v20, v6, v18
move-object/from16 v0, p0
move-object/from16 v1, v17
move-object/from16 v2, v19
move-object/from16 v3, v20
move/from16 v4, v18
invoke-direct {v0, v1, v2, v3, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->generateCurrentAuthpathAndRoot([BLjava/util/Vector;[BI)Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
:try_end_18f
.catch Ljava/lang/Exception; {:try_start_16e .. :try_end_18f} :catch_1d1
move-result-object v7
.line 204
:goto_190
const/16 v17, 0x0
:goto_192
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
move-object/from16 v19, v0
aget v19, v19, v18
move/from16 v0, v17
move/from16 v1, v19
if-ge v0, v1, :cond_1d6
.line 206
invoke-virtual {v7}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getAuthPath()[[B
move-result-object v19
aget-object v19, v19, v17
const/16 v20, 0x0
aget-object v21, v8, v18
aget-object v21, v21, v17
const/16 v22, 0x0
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v23, v0
invoke-static/range {v19 .. v23}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 204
add-int/lit8 v17, v17, 0x1
goto :goto_192
.line 194
:cond_1ba
add-int/lit8 v17, v18, 0x1
:try_start_1bc
aget-object v17, v5, v17
aget-object v19, v12, v18
aget-object v20, v6, v18
move-object/from16 v0, p0
move-object/from16 v1, v17
move-object/from16 v2, v19
move-object/from16 v3, v20
move/from16 v4, v18
invoke-direct {v0, v1, v2, v3, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->generateCurrentAuthpathAndRoot([BLjava/util/Vector;[BI)Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
:try_end_1cf
.catch Ljava/lang/Exception; {:try_start_1bc .. :try_end_1cf} :catch_1d1
move-result-object v7
goto :goto_190
.line 200
:catch_1d1
move-exception v17
invoke-virtual/range {v17 .. v17}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_190
.line 208
:cond_1d6
invoke-virtual {v7}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getRetain()[Ljava/util/Vector;
move-result-object v17
aput-object v17, v14, v18
.line 209
invoke-virtual {v7}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getTreehash()[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
move-result-object v17
aput-object v17, v10, v18
.line 210
invoke-virtual {v7}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getRoot()[B
move-result-object v7
const/16 v17, 0x0
aget-object v19, v5, v18
const/16 v20, 0x0
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v21, v0
move/from16 v0, v17
move-object/from16 v1, v19
move/from16 v2, v20
move/from16 v3, v21
invoke-static {v7, v0, v1, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 179
add-int/lit8 v7, v18, -0x1
move/from16 v18, v7
goto/16 :goto_14b
.line 215
:cond_203
move-object/from16 v0, p0
iget v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v7, v7, -0x2
move/from16 v17, v7
:goto_20b
if-ltz v17, :cond_296
.line 217
aget-object v7, v13, v17
add-int/lit8 v18, v17, 0x1
aget-object v18, v6, v18
add-int/lit8 v19, v17, 0x1
move-object/from16 v0, p0
move-object/from16 v1, v18
move/from16 v2, v19
invoke-direct {v0, v7, v1, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->generateNextAuthpathAndRoot(Ljava/util/Vector;[BI)Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
move-result-object v18
.line 220
const/4 v7, 0x0
:goto_220
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
move-object/from16 v19, v0
add-int/lit8 v20, v17, 0x1
aget v19, v19, v20
move/from16 v0, v19
if-ge v7, v0, :cond_248
.line 222
invoke-virtual/range {v18 .. v18}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getAuthPath()[[B
move-result-object v19
aget-object v19, v19, v7
const/16 v20, 0x0
aget-object v21, v9, v17
aget-object v21, v21, v7
const/16 v22, 0x0
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v23, v0
invoke-static/range {v19 .. v23}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 220
add-int/lit8 v7, v7, 0x1
goto :goto_220
.line 224
:cond_248
invoke-virtual/range {v18 .. v18}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getRetain()[Ljava/util/Vector;
move-result-object v7
aput-object v7, v15, v17
.line 225
invoke-virtual/range {v18 .. v18}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getTreehash()[Lorg/spongycastle/pqc/crypto/gmss/Treehash;
move-result-object v7
aput-object v7, v11, v17
.line 226
invoke-virtual/range {v18 .. v18}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->getRoot()[B
move-result-object v7
const/16 v18, 0x0
aget-object v19, v16, v17
const/16 v20, 0x0
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v21, v0
move/from16 v0, v18
move-object/from16 v1, v19
move/from16 v2, v20
move/from16 v3, v21
invoke-static {v7, v0, v1, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 230
add-int/lit8 v7, v17, 0x1
aget-object v7, v6, v7
const/16 v18, 0x0
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->nextNextSeeds:[[B
move-object/from16 v19, v0
aget-object v19, v19, v17
const/16 v20, 0x0
move-object/from16 v0, p0
iget v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
move/from16 v21, v0
move/from16 v0, v18
move-object/from16 v1, v19
move/from16 v2, v20
move/from16 v3, v21
invoke-static {v7, v0, v1, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 215
add-int/lit8 v7, v17, -0x1
move/from16 v17, v7
goto/16 :goto_20b
.line 235
:cond_296
new-instance v20, Lorg/spongycastle/pqc/crypto/gmss/GMSSPublicKeyParameters;
const/4 v6, 0x0
aget-object v5, v5, v6
move-object/from16 v0, p0
iget-object v6, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
move-object/from16 v0, v20
invoke-direct {v0, v5, v6}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPublicKeyParameters;-><init>([BLorg/spongycastle/pqc/crypto/gmss/GMSSParameters;)V
.line 238
new-instance v5, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;
move-object/from16 v0, p0
iget-object v6, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentSeeds:[[B
move-object/from16 v0, p0
iget-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->nextNextSeeds:[[B
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentRootSigs:[[B
move-object/from16 v17, v0
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
move-object/from16 v18, v0
move-object/from16 v0, p0
iget-object v0, v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
move-object/from16 v19, v0
invoke-direct/range {v5 .. v19}, Lorg/spongycastle/pqc/crypto/gmss/GMSSPrivateKeyParameters;-><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
.line 242
new-instance v6, Lorg/spongycastle/crypto/AsymmetricCipherKeyPair;
move-object/from16 v0, v20
invoke-direct {v6, v0, v5}, Lorg/spongycastle/crypto/AsymmetricCipherKeyPair;-><init>(Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;)V
return-object v6
.end method
.method private generateCurrentAuthpathAndRoot([BLjava/util/Vector;[BI)Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
.registers 14
.prologue
const/4 v1, 0x1
.line 259
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v0, p3}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v0
.line 265
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v2, v2, p4
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
aget v3, v3, p4
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
invoke-direct {v4, v2, v3, v5}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;-><init>(IILorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
.line 267
invoke-virtual {v4, p2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->initialize(Ljava/util/Vector;)V
.line 270
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v2, v2, -0x1
if-ne p4, v2, :cond_75
.line 272
new-instance v2, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
invoke-interface {v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v3
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->otsIndex:[I
aget v5, v5, p4
invoke-direct {v2, v0, v3, v5}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;-><init>([BLorg/spongycastle/crypto/Digest;I)V
.line 273
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;->getPublicKey()[B
move-result-object v0
.line 287
:goto_32
invoke-virtual {v4, v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->update([B)V
.line 289
const/4 v0, 0x3
.line 290
const/4 v2, 0x0
move v3, v2
move v2, v0
move v0, v1
.line 293
:goto_3a
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v5, v5, p4
shl-int v5, v1, v5
if-ge v0, v5, :cond_a4
.line 296
if-ne v0, v2, :cond_56
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v5, v5, p4
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
aget v6, v6, p4
sub-int/2addr v5, v6
if-ge v3, v5, :cond_56
.line 298
invoke-virtual {v4, p3, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->initializeTreehashSeed([BI)V
.line 299
shl-int/lit8 v2, v2, 0x1
.line 300
add-int/lit8 v3, v3, 0x1
.line 303
:cond_56
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v5, p3}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v5
.line 304
new-instance v6, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;
iget-object v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
invoke-interface {v7}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v7
iget-object v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->otsIndex:[I
aget v8, v8, p4
invoke-direct {v6, v5, v7, v8}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;-><init>([BLorg/spongycastle/crypto/Digest;I)V
.line 305
invoke-virtual {v6}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;->getPublicKey()[B
move-result-object v5
invoke-virtual {v4, v5}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->update([B)V
.line 293
add-int/lit8 v0, v0, 0x1
goto :goto_3a
.line 281
:cond_75
new-instance v2, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
invoke-interface {v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;->get()Lorg/spongycastle/crypto/Digest;
move-result-object v3
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->otsIndex:[I
aget v5, v5, p4
invoke-direct {v2, v0, v3, v5}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;-><init>([BLorg/spongycastle/crypto/Digest;I)V
.line 282
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentRootSigs:[[B
invoke-virtual {v2, p1}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;->getSignature([B)[B
move-result-object v2
aput-object v2, v0, p4
.line 283
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
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/GMSSKeyPairGenerator;->otsIndex:[I
aget v3, v3, p4
invoke-direct {v0, v2, v3}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;-><init>(Lorg/spongycastle/crypto/Digest;I)V
.line 284
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentRootSigs:[[B
aget-object v2, v2, p4
invoke-virtual {v0, p1, v2}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->Verify([B[B)[B
move-result-object v0
goto :goto_32
.line 308
:cond_a4
invoke-virtual {v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->wasFinished()Z
move-result v0
if-eqz v0, :cond_ac
move-object v0, v4
.line 313
:goto_ab
return-object v0
.line 312
:cond_ac
sget-object v0, Ljava/lang/System;->err:Ljava/io/PrintStream;
const-string v1, "Baum noch nicht fertig konstruiert!!!"
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 313
const/4 v0, 0x0
goto :goto_ab
.end method
.method private generateNextAuthpathAndRoot(Ljava/util/Vector;[BI)Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
.registers 12
.prologue
const/4 v0, 0x0
.line 331
new-instance v3, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v1, v1, p3
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
aget v2, v2, p3
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
invoke-direct {v3, v1, v2, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;-><init>(IILorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;)V
.line 332
invoke-virtual {v3, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->initialize(Ljava/util/Vector;)V
.line 334
const/4 v1, 0x3
move v2, v1
move v1, v0
.line 338
:goto_16
const/4 v4, 0x1
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v5, v5, p3
shl-int/2addr v4, v5
if-ge v0, v4, :cond_51
.line 341
if-ne v0, v2, :cond_32
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
aget v4, v4, p3
iget-object v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
aget v5, v5, p3
sub-int/2addr v4, v5
if-ge v1, v4, :cond_32
.line 343
invoke-virtual {v3, p2, v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->initializeTreehashSeed([BI)V
.line 344
shl-int/lit8 v2, v2, 0x1
.line 345
add-int/lit8 v1, v1, 0x1
.line 348
:cond_32
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
invoke-virtual {v4, p2}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v4
.line 349
new-instance v5, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->digestProvider:Lorg/spongycastle/pqc/crypto/gmss/GMSSDigestProvider;
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/GMSSKeyPairGenerator;->otsIndex:[I
aget v7, v7, p3
invoke-direct {v5, v4, v6, v7}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;-><init>([BLorg/spongycastle/crypto/Digest;I)V
.line 350
invoke-virtual {v5}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSignature;->getPublicKey()[B
move-result-object v4
invoke-virtual {v3, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->update([B)V
.line 338
add-int/lit8 v0, v0, 0x1
goto :goto_16
.line 353
:cond_51
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootCalc;->wasFinished()Z
move-result v0
if-eqz v0, :cond_59
move-object v0, v3
.line 358
:goto_58
return-object v0
.line 357
:cond_59
sget-object v0, Ljava/lang/System;->err:Ljava/io/PrintStream;
const-string v1, "N\ufffdchster Baum noch nicht fertig konstruiert!!!"
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 358
const/4 v0, 0x0
goto :goto_58
.end method
.method private initializeDefault()V
.registers 8
.prologue
const/4 v6, 0x4
.line 457
new-array v0, v6, [I
fill-array-data v0, :array_24
.line 458
new-array v1, v6, [I
fill-array-data v1, :array_30
.line 459
new-array v2, v6, [I
fill-array-data v2, :array_3c
.line 461
new-instance v3, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
new-instance v4, Ljava/security/SecureRandom;
invoke-direct {v4}, Ljava/security/SecureRandom;-><init>()V
new-instance v5, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-direct {v5, v6, v0, v1, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;-><init>(I[I[I[I)V
invoke-direct {v3, v4, v5}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;-><init>(Ljava/security/SecureRandom;Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;)V
.line 462
invoke-virtual {p0, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->initialize(Lorg/spongycastle/crypto/KeyGenerationParameters;)V
.line 464
return-void
.line 457
nop
:array_24
.array-data 4
0xa
0xa
0xa
0xa
.end array-data
.line 458
:array_30
.array-data 4
0x3
0x3
0x3
0x3
.end array-data
.line 459
:array_3c
.array-data 4
0x2
0x2
0x2
0x2
.end array-data
.end method
# virtual methods
.method public generateKeyPair()Lorg/spongycastle/crypto/AsymmetricCipherKeyPair;
.registers 2
.prologue
.line 474
invoke-direct {p0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->genKeyPair()Lorg/spongycastle/crypto/AsymmetricCipherKeyPair;
move-result-object v0
return-object v0
.end method
.method public init(Lorg/spongycastle/crypto/KeyGenerationParameters;)V
.registers 2
.prologue
.line 468
invoke-virtual {p0, p1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->initialize(Lorg/spongycastle/crypto/KeyGenerationParameters;)V
.line 470
return-void
.end method
.method public initialize(ILjava/security/SecureRandom;)V
.registers 11
.prologue
const/16 v0, 0xa
const/4 v4, 0x0
const/4 v7, 0x4
const/4 v6, 0x1
const/4 v5, 0x2
.line 388
if-gt p1, v0, :cond_23
.line 390
new-array v1, v6, [I
aput v0, v1, v4
.line 391
new-array v2, v6, [I
const/4 v0, 0x3
aput v0, v2, v4
.line 392
new-array v3, v6, [I
aput v5, v3, v4
.line 394
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-direct {v4, v6, v1, v2, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;-><init>(I[I[I[I)V
invoke-direct {v0, p2, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;-><init>(Ljava/security/SecureRandom;Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;)V
.line 412
:goto_1f
invoke-virtual {p0, v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->initialize(Lorg/spongycastle/crypto/KeyGenerationParameters;)V
.line 414
return-void
.line 396
:cond_23
const/16 v0, 0x14
if-gt p1, v0, :cond_41
.line 398
new-array v1, v5, [I
fill-array-data v1, :array_5c
.line 399
new-array v2, v5, [I
fill-array-data v2, :array_64
.line 400
new-array v3, v5, [I
fill-array-data v3, :array_6c
.line 401
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-direct {v4, v5, v1, v2, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;-><init>(I[I[I[I)V
invoke-direct {v0, p2, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;-><init>(Ljava/security/SecureRandom;Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;)V
goto :goto_1f
.line 405
:cond_41
new-array v1, v7, [I
fill-array-data v1, :array_74
.line 406
new-array v2, v7, [I
fill-array-data v2, :array_80
.line 407
new-array v3, v7, [I
fill-array-data v3, :array_8c
.line 408
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
new-instance v4, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-direct {v4, v7, v1, v2, v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;-><init>(I[I[I[I)V
invoke-direct {v0, p2, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;-><init>(Ljava/security/SecureRandom;Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;)V
goto :goto_1f
.line 398
nop
:array_5c
.array-data 4
0xa
0xa
.end array-data
.line 399
:array_64
.array-data 4
0x5
0x4
.end array-data
.line 400
:array_6c
.array-data 4
0x2
0x2
.end array-data
.line 405
:array_74
.array-data 4
0xa
0xa
0xa
0xa
.end array-data
.line 406
:array_80
.array-data 4
0x9
0x9
0x9
0x3
.end array-data
.line 407
:array_8c
.array-data 4
0x2
0x2
0x2
0x2
.end array-data
.end method
.method public initialize(Lorg/spongycastle/crypto/KeyGenerationParameters;)V
.registers 7
.prologue
.line 423
check-cast p1, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
iput-object p1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssParams:Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
.line 426
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssParams:Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
invoke-virtual {v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;->getParameters()Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
move-result-object v1
invoke-virtual {v1}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getNumOfLayers()I
move-result v1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssParams:Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;->getParameters()Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
move-result-object v2
invoke-virtual {v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getHeightOfTrees()[I
move-result-object v2
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssParams:Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
.line 427
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;->getParameters()Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
move-result-object v3
invoke-virtual {v3}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getWinternitzParameter()[I
move-result-object v3
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssParams:Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;
invoke-virtual {v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyGenerationParameters;->getParameters()Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
move-result-object v4
invoke-virtual {v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getK()[I
move-result-object v4
invoke-direct {v0, v1, v2, v3, v4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;-><init>(I[I[I[I)V
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
.line 429
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getNumOfLayers()I
move-result v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
.line 430
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getHeightOfTrees()[I
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->heightOfTrees:[I
.line 431
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getWinternitzParameter()[I
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->otsIndex:[I
.line 432
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssPS:Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
invoke-virtual {v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->getK()[I
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->K:[I
.line 435
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
iget v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
filled-new-array {v0, v1}, [I
move-result-object v0
sget-object v1, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
invoke-static {v1, v0}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v0
check-cast v0, [[B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentSeeds:[[B
.line 436
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
add-int/lit8 v0, v0, -0x1
iget v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->mdLength:I
filled-new-array {v0, v1}, [I
move-result-object v0
sget-object v1, Ljava/lang/Byte;->TYPE:Ljava/lang/Class;
invoke-static {v1, v0}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v0
check-cast v0, [[B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->nextNextSeeds:[[B
.line 439
new-instance v1, Ljava/security/SecureRandom;
invoke-direct {v1}, Ljava/security/SecureRandom;-><init>()V
.line 442
const/4 v0, 0x0
:goto_7f
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->numLayer:I
if-ge v0, v2, :cond_96
.line 444
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentSeeds:[[B
aget-object v2, v2, v0
invoke-virtual {v1, v2}, Ljava/security/SecureRandom;->nextBytes([B)V
.line 445
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->currentSeeds:[[B
aget-object v3, v3, v0
invoke-virtual {v2, v3}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
.line 442
add-int/lit8 v0, v0, 0x1
goto :goto_7f
.line 448
:cond_96
const/4 v0, 0x1
iput-boolean v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSKeyPairGenerator;->initialized:Z
.line 449
return-void
.end method