WinternitzOTSVerify.smali
.class public Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;
.super Ljava/lang/Object;
.source "WinternitzOTSVerify.java"
# instance fields
.field private messDigestOTS:Lorg/spongycastle/crypto/Digest;
.field private w:I
# direct methods
.method public constructor <init>(Lorg/spongycastle/crypto/Digest;I)V
.registers 3
.prologue
.line 29
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 30
iput p2, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
.line 32
iput-object p1, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
.line 33
return-void
.end method
# virtual methods
.method public Verify([B[B)[B
.registers 27
.prologue
.line 60
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v12
.line 64
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v3, 0x0
move-object/from16 v0, p1
array-length v4, v0
move-object/from16 v0, p1
invoke-interface {v2, v0, v3, v4}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 65
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
new-array v13, v2, [B
.line 66
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v3, 0x0
invoke-interface {v2, v13, v3}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 68
shl-int/lit8 v2, v12, 0x3
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/lit8 v3, v3, -0x1
add-int/2addr v2, v3
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
div-int v14, v2, v3
.line 69
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int v2, v14, v2
add-int/lit8 v2, v2, 0x1
move-object/from16 v0, p0
invoke-virtual {v0, v2}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->getLog(I)I
move-result v15
.line 70
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/2addr v2, v15
add-int/lit8 v2, v2, -0x1
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
div-int/2addr v2, v3
add-int/2addr v2, v14
.line 72
mul-int v16, v12, v2
.line 74
move-object/from16 v0, p2
array-length v2, v0
move/from16 v0, v16
if-eq v0, v2, :cond_5c
.line 76
const/4 v2, 0x0
.line 320
:goto_5b
return-object v2
.line 79
:cond_5c
move/from16 v0, v16
new-array v0, v0, [B
move-object/from16 v17, v0
.line 81
const/4 v5, 0x0
.line 82
const/4 v4, 0x0
.line 85
const/16 v2, 0x8
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
rem-int/2addr v2, v3
if-nez v2, :cond_125
.line 87
const/16 v2, 0x8
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
div-int v9, v2, v3
.line 88
const/4 v2, 0x1
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int/2addr v2, v3
add-int/lit8 v10, v2, -0x1
.line 89
new-array v3, v12, [B
.line 92
const/4 v2, 0x0
:goto_80
array-length v6, v13
if-ge v2, v6, :cond_d6
.line 94
const/4 v6, 0x0
move v7, v6
:goto_85
if-ge v7, v9, :cond_d3
.line 96
aget-byte v6, v13, v2
and-int/2addr v6, v10
.line 97
add-int v8, v5, v6
.line 99
mul-int v5, v4, v12
const/4 v11, 0x0
move-object/from16 v0, p2
invoke-static {v0, v5, v3, v11, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move v5, v6
.line 101
:goto_95
if-ge v5, v10, :cond_b9
.line 103
move-object/from16 v0, p0
iget-object v6, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v11, 0x0
array-length v0, v3
move/from16 v18, v0
move/from16 v0, v18
invoke-interface {v6, v3, v11, v0}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 104
move-object/from16 v0, p0
iget-object v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v3
new-array v3, v3, [B
.line 105
move-object/from16 v0, p0
iget-object v6, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v11, 0x0
invoke-interface {v6, v3, v11}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 106
add-int/lit8 v5, v5, 0x1
goto :goto_95
.line 109
:cond_b9
const/4 v5, 0x0
mul-int v6, v4, v12
move-object/from16 v0, v17
invoke-static {v3, v5, v0, v6, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 110
aget-byte v5, v13, v2
move-object/from16 v0, p0
iget v6, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
ushr-int/2addr v5, v6
int-to-byte v5, v5
aput-byte v5, v13, v2
.line 111
add-int/lit8 v5, v4, 0x1
.line 94
add-int/lit8 v4, v7, 0x1
move v7, v4
move v4, v5
move v5, v8
goto :goto_85
.line 92
:cond_d3
add-int/lit8 v2, v2, 0x1
goto :goto_80
.line 115
:cond_d6
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int v2, v14, v2
sub-int v5, v2, v5
.line 116
const/4 v2, 0x0
move v6, v5
move v5, v4
move v4, v2
move-object v2, v3
:goto_e3
if-ge v4, v15, :cond_3d7
.line 118
and-int v3, v6, v10
.line 120
mul-int v7, v5, v12
const/4 v8, 0x0
move-object/from16 v0, p2
invoke-static {v0, v7, v2, v8, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 122
:goto_ef
if-ge v3, v10, :cond_10f
.line 124
move-object/from16 v0, p0
iget-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v8, 0x0
array-length v9, v2
invoke-interface {v7, v2, v8, v9}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 125
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
new-array v2, v2, [B
.line 126
move-object/from16 v0, p0
iget-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v8, 0x0
invoke-interface {v7, v2, v8}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 127
add-int/lit8 v3, v3, 0x1
goto :goto_ef
.line 129
:cond_10f
const/4 v3, 0x0
mul-int v7, v5, v12
move-object/from16 v0, v17
invoke-static {v2, v3, v0, v7, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 130
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
ushr-int/2addr v6, v3
.line 131
add-int/lit8 v5, v5, 0x1
.line 116
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/2addr v3, v4
move v4, v3
goto :goto_e3
.line 134
:cond_125
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
const/16 v3, 0x8
if-ge v2, v3, :cond_291
.line 136
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
div-int v18, v12, v2
.line 137
const/4 v2, 0x1
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int/2addr v2, v3
add-int/lit8 v19, v2, -0x1
.line 138
new-array v6, v12, [B
.line 140
const/4 v3, 0x0
.line 143
const/4 v2, 0x0
move v11, v2
move v7, v4
move v8, v5
move v2, v3
:goto_143
move/from16 v0, v18
if-ge v11, v0, :cond_1d0
.line 145
const-wide/16 v4, 0x0
.line 146
const/4 v3, 0x0
:goto_14a
move-object/from16 v0, p0
iget v9, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
if-ge v3, v9, :cond_161
.line 148
aget-byte v9, v13, v2
and-int/lit16 v9, v9, 0xff
shl-int/lit8 v10, v3, 0x3
shl-int/2addr v9, v10
int-to-long v0, v9
move-wide/from16 v20, v0
xor-long v4, v4, v20
.line 149
add-int/lit8 v2, v2, 0x1
.line 146
add-int/lit8 v3, v3, 0x1
goto :goto_14a
.line 151
:cond_161
const/4 v3, 0x0
move v9, v7
move/from16 v22, v3
move-object v3, v6
move-wide v6, v4
move v5, v8
move/from16 v8, v22
:goto_16a
const/16 v4, 0x8
if-ge v8, v4, :cond_1c8
.line 153
move/from16 v0, v19
int-to-long v0, v0
move-wide/from16 v20, v0
and-long v20, v20, v6
move-wide/from16 v0, v20
long-to-int v4, v0
.line 154
add-int v10, v5, v4
.line 156
mul-int v5, v9, v12
const/16 v20, 0x0
move-object/from16 v0, p2
move/from16 v1, v20
invoke-static {v0, v5, v3, v1, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 158
:goto_185
move/from16 v0, v19
if-ge v4, v0, :cond_1b1
.line 160
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/16 v20, 0x0
array-length v0, v3
move/from16 v21, v0
move/from16 v0, v20
move/from16 v1, v21
invoke-interface {v5, v3, v0, v1}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 161
move-object/from16 v0, p0
iget-object v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v3
new-array v3, v3, [B
.line 162
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/16 v20, 0x0
move/from16 v0, v20
invoke-interface {v5, v3, v0}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 163
add-int/lit8 v4, v4, 0x1
goto :goto_185
.line 166
:cond_1b1
const/4 v4, 0x0
mul-int v5, v9, v12
move-object/from16 v0, v17
invoke-static {v3, v4, v0, v5, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 167
move-object/from16 v0, p0
iget v4, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
ushr-long v4, v6, v4
.line 168
add-int/lit8 v7, v9, 0x1
.line 151
add-int/lit8 v6, v8, 0x1
move v8, v6
move v9, v7
move-wide v6, v4
move v5, v10
goto :goto_16a
.line 143
:cond_1c8
add-int/lit8 v4, v11, 0x1
move v11, v4
move-object v6, v3
move v7, v9
move v8, v5
goto/16 :goto_143
.line 172
:cond_1d0
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
rem-int v9, v12, v3
.line 173
const-wide/16 v4, 0x0
.line 174
const/4 v3, 0x0
move/from16 v22, v3
move v3, v2
move/from16 v2, v22
:goto_1de
if-ge v2, v9, :cond_1ee
.line 176
aget-byte v10, v13, 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 177
add-int/lit8 v3, v3, 0x1
.line 174
add-int/lit8 v2, v2, 0x1
goto :goto_1de
.line 179
:cond_1ee
shl-int/lit8 v9, v9, 0x3
.line 180
const/4 v2, 0x0
move-object v3, v6
move-wide/from16 v22, v4
move v5, v2
move v4, v7
move-wide/from16 v6, v22
:goto_1f8
if-ge v5, v9, :cond_240
.line 182
move/from16 v0, v19
int-to-long v10, v0
and-long/2addr v10, v6
long-to-int v2, v10
.line 183
add-int/2addr v8, v2
.line 185
mul-int v10, v4, v12
const/4 v11, 0x0
move-object/from16 v0, p2
invoke-static {v0, v10, v3, v11, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 187
:goto_208
move/from16 v0, v19
if-ge v2, v0, :cond_22a
.line 189
move-object/from16 v0, p0
iget-object v10, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v11, 0x0
array-length v13, v3
invoke-interface {v10, v3, v11, v13}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 190
move-object/from16 v0, p0
iget-object v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v3
new-array v3, v3, [B
.line 191
move-object/from16 v0, p0
iget-object v10, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v11, 0x0
invoke-interface {v10, v3, v11}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 192
add-int/lit8 v2, v2, 0x1
goto :goto_208
.line 195
:cond_22a
const/4 v2, 0x0
mul-int v10, v4, v12
move-object/from16 v0, v17
invoke-static {v3, v2, v0, v10, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 196
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
ushr-long/2addr v6, v2
.line 197
add-int/lit8 v4, v4, 0x1
.line 180
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/2addr v2, v5
move v5, v2
goto :goto_1f8
.line 201
:cond_240
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int v2, v14, v2
sub-int v5, v2, v8
.line 202
const/4 v2, 0x0
move v6, v5
move v5, v4
move v4, v2
move-object v2, v3
:goto_24d
if-ge v4, v15, :cond_3d7
.line 204
and-int v3, v6, v19
.line 206
mul-int v7, v5, v12
const/4 v8, 0x0
move-object/from16 v0, p2
invoke-static {v0, v7, v2, v8, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 208
:goto_259
move/from16 v0, v19
if-ge v3, v0, :cond_27b
.line 210
move-object/from16 v0, p0
iget-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v8, 0x0
array-length v9, v2
invoke-interface {v7, v2, v8, v9}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 211
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
new-array v2, v2, [B
.line 212
move-object/from16 v0, p0
iget-object v7, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v8, 0x0
invoke-interface {v7, v2, v8}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 213
add-int/lit8 v3, v3, 0x1
goto :goto_259
.line 216
:cond_27b
const/4 v3, 0x0
mul-int v7, v5, v12
move-object/from16 v0, v17
invoke-static {v2, v3, v0, v7, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 217
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
ushr-int/2addr v6, v3
.line 218
add-int/lit8 v5, v5, 0x1
.line 202
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/2addr v3, v4
move v4, v3
goto :goto_24d
.line 221
:cond_291
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
const/16 v3, 0x39
if-ge v2, v3, :cond_3d7
.line 223
shl-int/lit8 v2, v12, 0x3
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
sub-int v10, v2, v3
.line 224
const/4 v2, 0x1
move-object/from16 v0, p0
iget v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int/2addr v2, v3
add-int/lit8 v11, v2, -0x1
.line 225
new-array v3, v12, [B
.line 227
const/4 v2, 0x0
move/from16 v22, v2
move-object v2, v3
move v3, v4
move v4, v5
move/from16 v5, v22
.line 231
:goto_2b3
if-gt v5, v10, :cond_32a
.line 233
ushr-int/lit8 v8, v5, 0x3
.line 234
rem-int/lit8 v18, v5, 0x8
.line 235
move-object/from16 v0, p0
iget v6, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int v9, v5, v6
.line 236
add-int/lit8 v5, v9, 0x7
ushr-int/lit8 v19, v5, 0x3
.line 237
const-wide/16 v6, 0x0
.line 238
const/4 v5, 0x0
.line 239
:goto_2c6
move/from16 v0, v19
if-ge v8, v0, :cond_2e2
.line 241
aget-byte v20, v13, v8
move/from16 v0, v20
and-int/lit16 v0, v0, 0xff
move/from16 v20, v0
shl-int/lit8 v21, v5, 0x3
shl-int v20, v20, v21
move/from16 v0, v20
int-to-long v0, v0
move-wide/from16 v20, v0
xor-long v6, v6, v20
.line 242
add-int/lit8 v5, v5, 0x1
.line 239
add-int/lit8 v8, v8, 0x1
goto :goto_2c6
.line 245
:cond_2e2
ushr-long v6, v6, v18
.line 246
int-to-long v0, v11
move-wide/from16 v18, v0
and-long v6, v6, v18
.line 247
int-to-long v4, v4
add-long/2addr v4, v6
long-to-int v8, v4
.line 249
mul-int v4, v3, v12
const/4 v5, 0x0
move-object/from16 v0, p2
invoke-static {v0, v4, v2, v5, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move-wide v4, v6
.line 251
:goto_2f5
int-to-long v6, v11
cmp-long v6, v4, v6
if-gez v6, :cond_31d
.line 253
move-object/from16 v0, p0
iget-object v6, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v7, 0x0
array-length v0, v2
move/from16 v18, v0
move/from16 v0, v18
invoke-interface {v6, v2, v7, v0}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 254
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
new-array v2, v2, [B
.line 255
move-object/from16 v0, p0
iget-object v6, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v7, 0x0
invoke-interface {v6, v2, v7}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 256
const-wide/16 v6, 0x1
add-long/2addr v4, v6
goto :goto_2f5
.line 259
:cond_31d
const/4 v4, 0x0
mul-int v5, v3, v12
move-object/from16 v0, v17
invoke-static {v2, v4, v0, v5, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 260
add-int/lit8 v3, v3, 0x1
move v5, v9
move v4, v8
goto :goto_2b3
.line 264
:cond_32a
ushr-int/lit8 v8, v5, 0x3
.line 265
if-ge v8, v12, :cond_383
.line 267
rem-int/lit8 v9, v5, 0x8
.line 268
const-wide/16 v6, 0x0
.line 269
const/4 v5, 0x0
.line 270
:goto_333
if-ge v8, v12, :cond_347
.line 272
aget-byte v10, v13, v8
and-int/lit16 v10, v10, 0xff
shl-int/lit8 v18, v5, 0x3
shl-int v10, v10, v18
int-to-long v0, v10
move-wide/from16 v18, v0
xor-long v6, v6, v18
.line 273
add-int/lit8 v5, v5, 0x1
.line 270
add-int/lit8 v8, v8, 0x1
goto :goto_333
.line 276
:cond_347
ushr-long/2addr v6, v9
.line 277
int-to-long v8, v11
and-long/2addr v6, v8
.line 278
int-to-long v4, v4
add-long/2addr v4, v6
long-to-int v4, v4
.line 280
mul-int v5, v3, v12
const/4 v8, 0x0
move-object/from16 v0, p2
invoke-static {v0, v5, v2, v8, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 282
:goto_355
int-to-long v8, v11
cmp-long v5, v6, v8
if-gez v5, :cond_379
.line 284
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v8, 0x0
array-length v9, v2
invoke-interface {v5, v2, v8, v9}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 285
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
new-array v2, v2, [B
.line 286
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v8, 0x0
invoke-interface {v5, v2, v8}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 287
const-wide/16 v8, 0x1
add-long/2addr v6, v8
goto :goto_355
.line 290
:cond_379
const/4 v5, 0x0
mul-int v6, v3, v12
move-object/from16 v0, v17
invoke-static {v2, v5, v0, v6, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 291
add-int/lit8 v3, v3, 0x1
.line 294
:cond_383
move-object/from16 v0, p0
iget v5, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int v5, v14, v5
sub-int/2addr v5, v4
.line 295
const/4 v4, 0x0
move v6, v3
move v7, v5
move v5, v4
move-object v4, v2
:goto_38f
if-ge v5, v15, :cond_3d7
.line 297
and-int v2, v7, v11
int-to-long v2, v2
.line 299
mul-int v8, v6, v12
const/4 v9, 0x0
move-object/from16 v0, p2
invoke-static {v0, v8, v4, v9, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 301
:goto_39c
int-to-long v8, v11
cmp-long v8, v2, v8
if-gez v8, :cond_3c0
.line 303
move-object/from16 v0, p0
iget-object v8, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v9, 0x0
array-length v10, v4
invoke-interface {v8, v4, v9, v10}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 304
move-object/from16 v0, p0
iget-object v4, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v4}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v4
new-array v4, v4, [B
.line 305
move-object/from16 v0, p0
iget-object v8, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v9, 0x0
invoke-interface {v8, v4, v9}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 306
const-wide/16 v8, 0x1
add-long/2addr v2, v8
goto :goto_39c
.line 309
:cond_3c0
const/4 v2, 0x0
mul-int v3, v6, v12
move-object/from16 v0, v17
invoke-static {v4, v2, v0, v3, v12}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 310
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
ushr-int/2addr v7, v2
.line 311
add-int/lit8 v3, v6, 0x1
.line 295
move-object/from16 v0, p0
iget v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/2addr v2, v5
move v5, v2
move v6, v3
goto :goto_38f
.line 316
:cond_3d7
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v3, 0x0
move-object/from16 v0, v17
move/from16 v1, v16
invoke-interface {v2, v0, v3, v1}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 317
move-object/from16 v0, p0
iget-object v2, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
new-array v2, v2, [B
.line 318
move-object/from16 v0, p0
iget-object v3, v0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
const/4 v4, 0x0
invoke-interface {v3, v2, v4}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
goto/16 :goto_5b
.end method
.method public getLog(I)I
.registers 4
.prologue
.line 334
const/4 v1, 0x1
.line 335
const/4 v0, 0x2
.line 336
:goto_2
if-ge v0, p1, :cond_9
.line 338
shl-int/lit8 v0, v0, 0x1
.line 339
add-int/lit8 v1, v1, 0x1
goto :goto_2
.line 341
:cond_9
return v1
.end method
.method public getSignatureLength()I
.registers 5
.prologue
.line 40
iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->messDigestOTS:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
.line 41
shl-int/lit8 v1, v0, 0x3
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/lit8 v2, v2, -0x1
add-int/2addr v1, v2
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
div-int/2addr v1, v2
.line 42
iget v2, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
shl-int v2, v1, v2
add-int/lit8 v2, v2, 0x1
invoke-virtual {p0, v2}, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->getLog(I)I
move-result v2
.line 43
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
add-int/2addr v2, v3
add-int/lit8 v2, v2, -0x1
iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/util/WinternitzOTSVerify;->w:I
div-int/2addr v2, v3
add-int/2addr v1, v2
.line 45
mul-int/2addr v0, v1
return v0
.end method