GMSSRootSig.smali
.class public Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;
.super Ljava/lang/Object;
.source "GMSSRootSig.java"
# instance fields
.field private big8:J
.field private checksum:I
.field private counter:I
.field private gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.field private hash:[B
.field private height:I
.field private ii:I
.field private k:I
.field private keysize:I
.field private mdsize:I
.field private messDigestOTS:Lorg/spongycastle/crypto/Digest;
.field private messagesize:I
.field private privateKeyOTS:[B
.field private r:I
.field private seed:[B
.field private sign:[B
.field private steps:I
.field private test:I
.field private test8:J
.field private w:I
# direct methods
.method public constructor <init>(Lorg/spongycastle/crypto/Digest;II)V
.registers 8
.prologue
.line 160
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 161
iput-object p1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
.line 162
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS: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/GMSSRootSig;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.line 164
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
.line 165
iput p2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
.line 166
iput p3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->height:I
.line 168
const/4 v0, 0x1
shl-int/2addr v0, p2
add-int/lit8 v0, v0, -0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
.line 170
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
shl-int/lit8 v0, v0, 0x3
.line 171
int-to-double v0, v0
int-to-double v2, p2
div-double/2addr v0, v2
invoke-static {v0, v1}, Ljava/lang/Math;->ceil(D)D
move-result-wide v0
double-to-int v0, v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
.line 172
return-void
.end method
.method public constructor <init>(Lorg/spongycastle/crypto/Digest;[[B[I)V
.registers 13
.prologue
const/4 v8, 0x2
const/4 v7, 0x0
const/16 v6, 0x8
const/4 v4, 0x1
const/4 v5, 0x4
.line 104
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 105
iput-object p1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
.line 106
new-instance v0, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS: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/GMSSRootSig;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
.line 108
aget v0, p3, v7
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
.line 109
aget v0, p3, v4
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
.line 110
aget v0, p3, v8
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
.line 111
const/4 v0, 0x3
aget v0, p3, v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
.line 112
aget v0, p3, v5
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->steps:I
.line 113
const/4 v0, 0x5
aget v0, p3, v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->keysize:I
.line 114
const/4 v0, 0x6
aget v0, p3, v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->height:I
.line 115
const/4 v0, 0x7
aget v0, p3, v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
.line 116
aget v0, p3, v6
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
.line 118
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
.line 120
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
shl-int v0, v4, v0
add-int/lit8 v0, v0, -0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
.line 122
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
shl-int/lit8 v0, v0, 0x3
.line 123
int-to-double v0, v0
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
int-to-double v2, v2
div-double/2addr v0, v2
invoke-static {v0, v1}, Ljava/lang/Math;->ceil(D)D
move-result-wide v0
double-to-int v0, v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
.line 125
aget-object v0, p2, v7
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 126
aget-object v0, p2, v4
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->seed:[B
.line 127
aget-object v0, p2, v8
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
.line 129
const/4 v0, 0x3
aget-object v0, p2, v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->sign:[B
.line 131
aget-object v0, p2, v5
aget-byte v0, v0, v7
and-int/lit16 v0, v0, 0xff
int-to-long v0, v0
aget-object v2, p2, v5
aget-byte v2, v2, v4
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
shl-long/2addr v2, v6
or-long/2addr v0, v2
aget-object v2, p2, v5
aget-byte v2, v2, v8
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x10
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/4 v3, 0x3
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x18
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
aget-byte v2, v2, v5
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x20
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/4 v3, 0x5
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x28
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/4 v3, 0x6
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x30
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/4 v3, 0x7
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x38
shl-long/2addr v2, v4
or-long/2addr v0, v2
iput-wide v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
.line 140
aget-object v0, p2, v5
aget-byte v0, v0, v6
and-int/lit16 v0, v0, 0xff
int-to-long v0, v0
aget-object v2, p2, v5
const/16 v3, 0x9
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
shl-long/2addr v2, v6
or-long/2addr v0, v2
aget-object v2, p2, v5
const/16 v3, 0xa
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x10
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/16 v3, 0xb
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x18
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/16 v3, 0xc
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x20
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/16 v3, 0xd
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x28
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/16 v3, 0xe
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x30
shl-long/2addr v2, v4
or-long/2addr v0, v2
aget-object v2, p2, v5
const/16 v3, 0xf
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
int-to-long v2, v2
const/16 v4, 0x38
shl-long/2addr v2, v4
or-long/2addr v0, v2
iput-wide v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 148
return-void
.end method
.method private oneStep()V
.registers 11
.prologue
const/16 v5, 0x8
const-wide/16 v8, 0x0
const/4 v1, 0x0
.line 389
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
rem-int v0, v5, v0
if-nez v0, :cond_97
.line 391
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
if-nez v0, :cond_71
.line 394
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->seed:[B
invoke-virtual {v0, v2}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 397
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
if-ge v0, v2, :cond_62
.line 399
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
aget-byte v0, v0, v2
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
and-int/2addr v0, v2
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
.line 400
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
aget-byte v3, v3, v4
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-int/2addr v3, v4
int-to-byte v3, v3
aput-byte v3, v0, v2
.line 416
:cond_3a
:goto_3a
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
if-nez v0, :cond_61
.line 419
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->sign:[B
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
mul-int/2addr v3, v4
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
invoke-static {v0, v1, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 421
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
.line 423
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
div-int v1, v5, v1
rem-int/2addr v0, v1
if-nez v0, :cond_61
.line 426
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
.line 553
:cond_61
:goto_61
return-void
.line 404
:cond_62
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
and-int/2addr v0, v2
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
.line 405
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-int/2addr v0, v2
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
goto :goto_3a
.line 408
:cond_71
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
if-lez v0, :cond_3a
.line 411
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
array-length v3, v3
invoke-interface {v0, v2, v1, v3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 412
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 413
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
invoke-interface {v0, v2, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 414
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
add-int/lit8 v0, v0, -0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
goto :goto_3a
.line 432
:cond_97
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
if-ge v0, v5, :cond_15e
.line 435
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
if-nez v0, :cond_138
.line 437
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
rem-int/lit8 v0, v0, 0x8
if-nez v0, :cond_f9
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
if-ge v0, v2, :cond_f9
.line 440
iput-wide v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 441
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
div-int/2addr v2, v3
shl-int/lit8 v2, v2, 0x3
if-ge v0, v2, :cond_d7
move v0, v1
.line 445
:goto_b9
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
if-ge v0, v2, :cond_f9
.line 447
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
iget v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
aget-byte v4, v4, v5
and-int/lit16 v4, v4, 0xff
shl-int/lit8 v5, v0, 0x3
shl-int/2addr v4, v5
int-to-long v4, v4
xor-long/2addr v2, v4
iput-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 448
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
add-int/lit8 v2, v2, 0x1
iput v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
.line 445
add-int/lit8 v0, v0, 0x1
goto :goto_b9
:cond_d7
move v0, v1
.line 453
:goto_d8
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
rem-int/2addr v2, v3
if-ge v0, v2, :cond_f9
.line 455
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
iget-object v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
iget v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
aget-byte v4, v4, v5
and-int/lit16 v4, v4, 0xff
shl-int/lit8 v5, v0, 0x3
shl-int/2addr v4, v5
int-to-long v4, v4
xor-long/2addr v2, v4
iput-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 456
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
add-int/lit8 v2, v2, 0x1
iput v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
.line 453
add-int/lit8 v0, v0, 0x1
goto :goto_d8
.line 460
:cond_f9
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
if-ne v0, v2, :cond_104
.line 462
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
int-to-long v2, v0
iput-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 465
:cond_104
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
int-to-long v4, v0
and-long/2addr v2, v4
long-to-int v0, v2
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
.line 467
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->seed:[B
invoke-virtual {v0, v2}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 479
:cond_117
:goto_117
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
if-nez v0, :cond_61
.line 482
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->sign:[B
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
mul-int/2addr v3, v4
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
invoke-static {v0, v1, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 484
iget-wide v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-long/2addr v0, v2
iput-wide v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 485
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
goto/16 :goto_61
.line 471
:cond_138
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
if-lez v0, :cond_117
.line 474
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
array-length v3, v3
invoke-interface {v0, v2, v1, v3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 475
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 476
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
invoke-interface {v0, v2, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 477
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
add-int/lit8 v0, v0, -0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
goto :goto_117
.line 490
:cond_15e
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
const/16 v2, 0x39
if-ge v0, v2, :cond_61
.line 493
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
cmp-long v0, v2, v8
if-nez v0, :cond_1fc
.line 496
iput-wide v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 497
iput v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
.line 498
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
rem-int/lit8 v3, v0, 0x8
.line 499
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
ushr-int/lit8 v2, v0, 0x3
.line 501
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
if-ge v2, v0, :cond_1ec
.line 503
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
shl-int/lit8 v4, v4, 0x3
iget v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
sub-int/2addr v4, v5
if-gt v0, v4, :cond_1ae
.line 505
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
add-int/2addr v0, v4
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
.line 506
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
add-int/lit8 v0, v0, 0x7
ushr-int/lit8 v0, v0, 0x3
.line 515
:goto_192
if-ge v2, v0, :cond_1b8
.line 517
iget-wide v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
iget-object v6, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
aget-byte v6, v6, v2
and-int/lit16 v6, v6, 0xff
iget v7, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
shl-int/lit8 v7, v7, 0x3
shl-int/2addr v6, v7
int-to-long v6, v6
xor-long/2addr v4, v6
iput-wide v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 518
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
add-int/lit8 v4, v4, 0x1
iput v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
.line 515
add-int/lit8 v2, v2, 0x1
goto :goto_192
.line 510
:cond_1ae
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
.line 511
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
iget v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
add-int/2addr v4, v5
iput v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
goto :goto_192
.line 522
:cond_1b8
iget-wide v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
ushr-long v2, v4, v3
iput-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
.line 523
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
int-to-long v4, v0
and-long/2addr v2, v4
iput-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
.line 532
:goto_1c6
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->gmssRandom:Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->seed:[B
invoke-virtual {v0, v2}, Lorg/spongycastle/pqc/crypto/gmss/util/GMSSRandom;->nextSeed([B)[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 544
:cond_1d0
:goto_1d0
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
cmp-long v0, v2, v8
if-nez v0, :cond_61
.line 547
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->sign:[B
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
mul-int/2addr v3, v4
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
invoke-static {v0, v1, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 549
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
goto/16 :goto_61
.line 528
:cond_1ec
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
and-int/2addr v0, v2
int-to-long v2, v0
iput-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
.line 529
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-int/2addr v0, v2
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
goto :goto_1c6
.line 536
:cond_1fc
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
cmp-long v0, v2, v8
if-lez v0, :cond_1d0
.line 539
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
iget-object v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
array-length v3, v3
invoke-interface {v0, v2, v1, v3}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 540
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 541
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
invoke-interface {v0, v2, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 542
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
const-wide/16 v4, 0x1
sub-long/2addr v2, v4
iput-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
goto :goto_1d0
.end method
# virtual methods
.method public getLog(I)I
.registers 4
.prologue
.line 565
const/4 v1, 0x1
.line 566
const/4 v0, 0x2
.line 567
:goto_2
if-ge v0, p1, :cond_9
.line 569
shl-int/lit8 v0, v0, 0x1
.line 570
add-int/lit8 v1, v1, 0x1
goto :goto_2
.line 572
:cond_9
return v1
.end method
.method public getSig()[B
.registers 2
.prologue
.line 380
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->sign:[B
return-object v0
.end method
.method public getStatByte()[[B
.registers 4
.prologue
.line 583
const/4 v0, 0x5
iget v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize: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
.line 584
const/4 v1, 0x0
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
aput-object v2, v0, v1
.line 585
const/4 v1, 0x1
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->seed:[B
aput-object v2, v0, v1
.line 586
const/4 v1, 0x2
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
aput-object v2, v0, v1
.line 587
const/4 v1, 0x3
iget-object v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->sign:[B
aput-object v2, v0, v1
.line 588
const/4 v1, 0x4
invoke-virtual {p0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->getStatLong()[B
move-result-object v2
aput-object v2, v0, v1
.line 590
return-object v0
.end method
.method public getStatInt()[I
.registers 4
.prologue
.line 600
const/16 v0, 0x9
new-array v0, v0, [I
.line 601
const/4 v1, 0x0
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
aput v2, v0, v1
.line 602
const/4 v1, 0x1
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
aput v2, v0, v1
.line 603
const/4 v1, 0x2
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
aput v2, v0, v1
.line 604
const/4 v1, 0x3
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
aput v2, v0, v1
.line 605
const/4 v1, 0x4
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->steps:I
aput v2, v0, v1
.line 606
const/4 v1, 0x5
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->keysize:I
aput v2, v0, v1
.line 607
const/4 v1, 0x6
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->height:I
aput v2, v0, v1
.line 608
const/4 v1, 0x7
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
aput v2, v0, v1
.line 609
const/16 v1, 0x8
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
aput v2, v0, v1
.line 610
return-object v0
.end method
.method public getStatLong()[B
.registers 12
.prologue
const/16 v10, 0x20
const/16 v9, 0x18
const/16 v8, 0x10
const/16 v5, 0x8
const-wide/16 v6, 0xff
.line 619
new-array v0, v8, [B
.line 621
const/4 v1, 0x0
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 622
const/4 v1, 0x1
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
shr-long/2addr v2, v5
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 623
const/4 v1, 0x2
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
shr-long/2addr v2, v8
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 624
const/4 v1, 0x3
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
shr-long/2addr v2, v9
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 625
const/4 v1, 0x4
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
shr-long/2addr v2, v10
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 626
const/4 v1, 0x5
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
const/16 v4, 0x28
shr-long/2addr v2, v4
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 627
const/4 v1, 0x6
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
const/16 v4, 0x30
shr-long/2addr v2, v4
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 628
const/4 v1, 0x7
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
const/16 v4, 0x38
shr-long/2addr v2, v4
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 630
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
and-long/2addr v2, v6
long-to-int v1, v2
int-to-byte v1, v1
aput-byte v1, v0, v5
.line 631
const/16 v1, 0x9
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
shr-long/2addr v2, v5
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 632
const/16 v1, 0xa
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
shr-long/2addr v2, v8
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 633
const/16 v1, 0xb
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
shr-long/2addr v2, v9
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 634
const/16 v1, 0xc
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
shr-long/2addr v2, v10
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 635
const/16 v1, 0xd
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
const/16 v4, 0x28
shr-long/2addr v2, v4
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 636
const/16 v1, 0xe
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
const/16 v4, 0x30
shr-long/2addr v2, v4
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 637
const/16 v1, 0xf
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
const/16 v4, 0x38
shr-long/2addr v2, v4
and-long/2addr v2, v6
long-to-int v2, v2
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 639
return-object v0
.end method
.method public initSign([B[B)V
.registers 15
.prologue
.line 185
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
.line 186
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v1, 0x0
array-length v2, p2
invoke-interface {v0, p2, v1, v2}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 187
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
.line 188
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
const/4 v2, 0x0
invoke-interface {v0, v1, v2}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 191
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
new-array v6, v0, [B
.line 192
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->hash:[B
const/4 v1, 0x0
const/4 v2, 0x0
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
invoke-static {v0, v1, v6, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 194
const/4 v1, 0x0
.line 195
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
shl-int/2addr v0, v2
add-int/lit8 v0, v0, 0x1
invoke-virtual {p0, v0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->getLog(I)I
move-result v7
.line 198
const/16 v0, 0x8
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
rem-int/2addr v0, v2
if-nez v0, :cond_7b
.line 200
const/16 v0, 0x8
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
div-int v4, v0, v2
.line 202
const/4 v0, 0x0
:goto_46
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
if-ge v0, v2, :cond_63
.line 205
const/4 v2, 0x0
:goto_4b
if-ge v2, v4, :cond_60
.line 207
aget-byte v3, v6, v0
iget v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
and-int/2addr v3, v5
add-int/2addr v3, v1
.line 208
aget-byte v1, v6, v0
iget v5, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-int/2addr v1, v5
int-to-byte v1, v1
aput-byte v1, v6, v0
.line 205
add-int/lit8 v1, v2, 0x1
move v2, v1
move v1, v3
goto :goto_4b
.line 202
:cond_60
add-int/lit8 v0, v0, 0x1
goto :goto_46
.line 212
:cond_63
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
shl-int/2addr v0, v2
sub-int/2addr v0, v1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
.line 213
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
.line 215
const/4 v0, 0x0
:goto_6e
if-ge v0, v7, :cond_171
.line 217
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
and-int/2addr v3, v2
add-int/2addr v1, v3
.line 218
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-int/2addr v2, v3
.line 215
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
add-int/2addr v0, v3
goto :goto_6e
.line 221
:cond_7b
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
const/16 v2, 0x8
if-ge v0, v2, :cond_fc
.line 224
const/4 v2, 0x0
.line 225
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
div-int v8, v0, v3
.line 228
const/4 v0, 0x0
move v5, v0
move v4, v1
move v1, v2
:goto_8c
if-ge v5, v8, :cond_b8
.line 230
const-wide/16 v2, 0x0
.line 231
const/4 v0, 0x0
:goto_91
iget v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
if-ge v0, v9, :cond_a3
.line 233
aget-byte v9, v6, v1
and-int/lit16 v9, v9, 0xff
shl-int/lit8 v10, v0, 0x3
shl-int/2addr v9, v10
int-to-long v10, v9
xor-long/2addr v2, v10
.line 234
add-int/lit8 v1, v1, 0x1
.line 231
add-int/lit8 v0, v0, 0x1
goto :goto_91
.line 237
:cond_a3
const/4 v0, 0x0
:goto_a4
const/16 v9, 0x8
if-ge v0, v9, :cond_b4
.line 239
iget v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
int-to-long v10, v9
and-long/2addr v10, v2
long-to-int v9, v10
add-int/2addr v4, v9
.line 240
iget v9, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-long/2addr v2, v9
.line 237
add-int/lit8 v0, v0, 0x1
goto :goto_a4
.line 228
:cond_b4
add-int/lit8 v0, v5, 0x1
move v5, v0
goto :goto_8c
.line 244
:cond_b8
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
rem-int v5, v0, v2
.line 245
const-wide/16 v2, 0x0
.line 246
const/4 v0, 0x0
:goto_c1
if-ge v0, v5, :cond_d1
.line 248
aget-byte v8, v6, v1
and-int/lit16 v8, v8, 0xff
shl-int/lit8 v9, v0, 0x3
shl-int/2addr v8, v9
int-to-long v8, v8
xor-long/2addr v2, v8
.line 249
add-int/lit8 v1, v1, 0x1
.line 246
add-int/lit8 v0, v0, 0x1
goto :goto_c1
.line 251
:cond_d1
shl-int/lit8 v5, v5, 0x3
.line 253
const/4 v0, 0x0
move v1, v4
:goto_d5
if-ge v0, v5, :cond_e4
.line 255
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
int-to-long v8, v4
and-long/2addr v8, v2
long-to-int v4, v8
add-int/2addr v1, v4
.line 256
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-long/2addr v2, v4
.line 253
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
add-int/2addr v0, v4
goto :goto_d5
.line 259
:cond_e4
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
shl-int/2addr v0, v2
sub-int/2addr v0, v1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
.line 260
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
.line 262
const/4 v0, 0x0
:goto_ef
if-ge v0, v7, :cond_171
.line 264
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
and-int/2addr v3, v2
add-int/2addr v1, v3
.line 265
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-int/2addr v2, v3
.line 262
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
add-int/2addr v0, v3
goto :goto_ef
.line 268
:cond_fc
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
const/16 v2, 0x39
if-ge v0, v2, :cond_171
.line 271
const/4 v0, 0x0
.line 276
:goto_103
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
shl-int/lit8 v2, v2, 0x3
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
sub-int/2addr v2, v3
if-gt v0, v2, :cond_134
.line 278
ushr-int/lit8 v3, v0, 0x3
.line 279
rem-int/lit8 v8, v0, 0x8
.line 280
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
add-int/2addr v0, v2
.line 281
add-int/lit8 v2, v0, 0x7
ushr-int/lit8 v9, v2, 0x3
.line 282
const-wide/16 v4, 0x0
.line 283
const/4 v2, 0x0
.line 284
:goto_11a
if-ge v3, v9, :cond_12a
.line 286
aget-byte v10, v6, v3
and-int/lit16 v10, v10, 0xff
shl-int/lit8 v11, v2, 0x3
shl-int/2addr v10, v11
int-to-long v10, v10
xor-long/2addr v4, v10
.line 287
add-int/lit8 v2, v2, 0x1
.line 284
add-int/lit8 v3, v3, 0x1
goto :goto_11a
.line 289
:cond_12a
ushr-long v2, v4, v8
.line 291
int-to-long v4, v1
iget v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
int-to-long v8, v1
and-long/2addr v2, v8
add-long/2addr v2, v4
long-to-int v1, v2
goto :goto_103
.line 295
:cond_134
ushr-int/lit8 v4, v0, 0x3
.line 296
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
if-ge v4, v2, :cond_159
.line 298
rem-int/lit8 v5, v0, 0x8
.line 299
const-wide/16 v2, 0x0
.line 300
const/4 v0, 0x0
.line 301
:goto_13f
iget v8, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
if-ge v4, v8, :cond_151
.line 303
aget-byte v8, v6, v4
and-int/lit16 v8, v8, 0xff
shl-int/lit8 v9, v0, 0x3
shl-int/2addr v8, v9
int-to-long v8, v8
xor-long/2addr v2, v8
.line 304
add-int/lit8 v0, v0, 0x1
.line 301
add-int/lit8 v4, v4, 0x1
goto :goto_13f
.line 307
:cond_151
ushr-long/2addr v2, v5
.line 309
int-to-long v0, v1
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
int-to-long v4, v4
and-long/2addr v2, v4
add-long/2addr v0, v2
long-to-int v1, v0
.line 312
:cond_159
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
shl-int/2addr v0, v2
sub-int/2addr v0, v1
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
.line 313
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->checksum:I
.line 315
const/4 v0, 0x0
:goto_164
if-ge v0, v7, :cond_171
.line 317
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->k:I
and-int/2addr v3, v2
add-int/2addr v1, v3
.line 318
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
ushr-int/2addr v2, v3
.line 315
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
add-int/2addr v0, v3
goto :goto_164
.line 323
:cond_171
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->messagesize:I
int-to-double v2, v7
iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->w:I
int-to-double v4, v4
div-double/2addr v2, v4
.line 324
invoke-static {v2, v3}, Ljava/lang/Math;->ceil(D)D
move-result-wide v2
double-to-int v2, v2
add-int/2addr v0, v2
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->keysize:I
.line 328
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->keysize:I
add-int/2addr v0, v1
int-to-double v0, v0
const/4 v2, 0x1
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->height:I
shl-int/2addr v2, v3
int-to-double v2, v2
div-double/2addr v0, v2
invoke-static {v0, v1}, Ljava/lang/Math;->ceil(D)D
move-result-wide v0
double-to-int v0, v0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->steps:I
.line 333
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->keysize:I
iget v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
mul-int/2addr v0, v1
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->sign:[B
.line 334
const/4 v0, 0x0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
.line 335
const/4 v0, 0x0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test:I
.line 336
const/4 v0, 0x0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->ii:I
.line 337
const-wide/16 v0, 0x0
iput-wide v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->test8:J
.line 338
const/4 v0, 0x0
iput v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->r:I
.line 340
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->privateKeyOTS:[B
.line 342
iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->seed:[B
.line 343
const/4 v0, 0x0
iget-object v1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->seed:[B
const/4 v2, 0x0
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->mdsize:I
invoke-static {p1, v0, v1, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 345
return-void
.end method
.method public toString()Ljava/lang/String;
.registers 7
.prologue
const/4 v0, 0x0
.line 649
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
iget-wide v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->big8:J
invoke-virtual {v1, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
.line 651
invoke-virtual {p0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->getStatInt()[I
move-result-object v4
.line 653
invoke-virtual {p0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->getStatByte()[[B
move-result-object v5
move v2, v0
.line 654
:goto_1f
const/16 v3, 0x9
if-ge v2, v3, :cond_41
.line 656
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
aget v3, v4, v2
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v3, " "
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
.line 654
add-int/lit8 v1, v2, 0x1
move v2, v1
move-object v1, v3
goto :goto_1f
.line 658
:cond_41
:goto_41
const/4 v2, 0x5
if-ge v0, v2, :cond_69
.line 660
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
new-instance v2, Ljava/lang/String;
aget-object v3, v5, v0
invoke-static {v3}, Lorg/spongycastle/util/encoders/Hex;->encode([B)[B
move-result-object v3
invoke-direct {v2, v3}, Ljava/lang/String;-><init>([B)V
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
.line 658
add-int/lit8 v0, v0, 0x1
goto :goto_41
.line 663
:cond_69
return-object v1
.end method
.method public updateSign()Z
.registers 5
.prologue
const/4 v1, 0x0
.line 357
move v0, v1
:goto_2
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->steps:I
if-ge v0, v2, :cond_16
.line 360
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->keysize:I
if-ge v2, v3, :cond_f
.line 363
invoke-direct {p0}, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->oneStep()V
.line 365
:cond_f
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->counter:I
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSRootSig;->keysize:I
if-ne v2, v3, :cond_17
.line 367
const/4 v1, 0x1
.line 371
:cond_16
return v1
.line 357
:cond_17
add-int/lit8 v0, v0, 0x1
goto :goto_2
.end method