SM3Digest.smali

.class public Lorg/spongycastle/crypto/digests/SM3Digest;
.super Lorg/spongycastle/crypto/digests/GeneralDigest;
.source "SM3Digest.java"


# static fields
.field private static final BLOCK_SIZE:I = 0x10

.field private static final DIGEST_LENGTH:I = 0x20

.field private static final T:[I


# instance fields
.field private V:[I

.field private W:[I

.field private W1:[I

.field private inwords:[I

.field private xOff:I


# direct methods
.method static constructor <clinit>()V
    .registers 8

    .prologue
    const v7, 0x7a879d8a

    const v6, 0x79cc4519

    const/16 v5, 0x40

    const/16 v0, 0x10

    .line 33
    new-array v1, v5, [I

    sput-object v1, Lorg/spongycastle/crypto/digests/SM3Digest;->T:[I

    .line 37
    const/4 v1, 0x0

    :goto_f
    if-ge v1, v0, :cond_1f

    .line 40
    sget-object v2, Lorg/spongycastle/crypto/digests/SM3Digest;->T:[I

    shl-int v3, v6, v1

    rsub-int/lit8 v4, v1, 0x20

    ushr-int v4, v6, v4

    or-int/2addr v3, v4

    aput v3, v2, v1

    .line 37
    add-int/lit8 v1, v1, 0x1

    goto :goto_f

    .line 42
    :cond_1f
    :goto_1f
    if-ge v0, v5, :cond_31

    .line 44
    rem-int/lit8 v1, v0, 0x20

    .line 46
    sget-object v2, Lorg/spongycastle/crypto/digests/SM3Digest;->T:[I

    shl-int v3, v7, v1

    rsub-int/lit8 v1, v1, 0x20

    ushr-int v1, v7, v1

    or-int/2addr v1, v3

    aput v1, v2, v0

    .line 42
    add-int/lit8 v0, v0, 0x1

    goto :goto_1f

    .line 48
    :cond_31
    return-void
.end method

.method public constructor <init>()V
    .registers 2

    .prologue
    .line 55
    invoke-direct {p0}, Lorg/spongycastle/crypto/digests/GeneralDigest;-><init>()V

    .line 24
    const/16 v0, 0x8

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    .line 25
    const/16 v0, 0x10

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    .line 29
    const/16 v0, 0x44

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    .line 30
    const/16 v0, 0x40

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W1:[I

    .line 56
    invoke-virtual {p0}, Lorg/spongycastle/crypto/digests/SM3Digest;->reset()V

    .line 57
    return-void
.end method

.method public constructor <init>(Lorg/spongycastle/crypto/digests/SM3Digest;)V
    .registers 3

    .prologue
    .line 65
    invoke-direct {p0, p1}, Lorg/spongycastle/crypto/digests/GeneralDigest;-><init>(Lorg/spongycastle/crypto/digests/GeneralDigest;)V

    .line 24
    const/16 v0, 0x8

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    .line 25
    const/16 v0, 0x10

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    .line 29
    const/16 v0, 0x44

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    .line 30
    const/16 v0, 0x40

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W1:[I

    .line 67
    invoke-direct {p0, p1}, Lorg/spongycastle/crypto/digests/SM3Digest;->copyIn(Lorg/spongycastle/crypto/digests/SM3Digest;)V

    .line 68
    return-void
.end method

.method private FF0(III)I
    .registers 5

    .prologue
    .line 237
    xor-int v0, p1, p2

    xor-int/2addr v0, p3

    return v0
.end method

.method private FF1(III)I
    .registers 6

    .prologue
    .line 242
    and-int v0, p1, p2

    and-int v1, p1, p3

    or-int/2addr v0, v1

    and-int v1, p2, p3

    or-int/2addr v0, v1

    return v0
.end method

.method private GG0(III)I
    .registers 5

    .prologue
    .line 247
    xor-int v0, p1, p2

    xor-int/2addr v0, p3

    return v0
.end method

.method private GG1(III)I
    .registers 6

    .prologue
    .line 252
    and-int v0, p1, p2

    xor-int/lit8 v1, p1, -0x1

    and-int/2addr v1, p3

    or-int/2addr v0, v1

    return v0
.end method

.method private P0(I)I
    .registers 5

    .prologue
    .line 223
    shl-int/lit8 v0, p1, 0x9

    ushr-int/lit8 v1, p1, 0x17

    or-int/2addr v0, v1

    .line 224
    shl-int/lit8 v1, p1, 0x11

    ushr-int/lit8 v2, p1, 0xf

    or-int/2addr v1, v2

    .line 225
    xor-int/2addr v0, p1

    xor-int/2addr v0, v1

    return v0
.end method

.method private P1(I)I
    .registers 5

    .prologue
    .line 230
    shl-int/lit8 v0, p1, 0xf

    ushr-int/lit8 v1, p1, 0x11

    or-int/2addr v0, v1

    .line 231
    shl-int/lit8 v1, p1, 0x17

    ushr-int/lit8 v2, p1, 0x9

    or-int/2addr v1, v2

    .line 232
    xor-int/2addr v0, p1

    xor-int/2addr v0, v1

    return v0
.end method

.method private copyIn(Lorg/spongycastle/crypto/digests/SM3Digest;)V
    .registers 6

    .prologue
    const/4 v3, 0x0

    .line 72
    iget-object v0, p1, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    iget-object v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    iget-object v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    array-length v2, v2

    invoke-static {v0, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 73
    iget-object v0, p1, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    iget-object v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    iget-object v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    array-length v2, v2

    invoke-static {v0, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 74
    iget v0, p1, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    iput v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    .line 75
    return-void
.end method


# virtual methods
.method public copy()Lorg/spongycastle/util/Memoable;
    .registers 2

    .prologue
    .line 90
    new-instance v0, Lorg/spongycastle/crypto/digests/SM3Digest;

    invoke-direct {v0, p0}, Lorg/spongycastle/crypto/digests/SM3Digest;-><init>(Lorg/spongycastle/crypto/digests/SM3Digest;)V

    return-object v0
.end method

.method public doFinal([BI)I
    .registers 5

    .prologue
    .line 125
    invoke-virtual {p0}, Lorg/spongycastle/crypto/digests/SM3Digest;->finish()V

    .line 127
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x0

    aget v0, v0, v1

    invoke-static {v0, p1, p2}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 128
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x1

    aget v0, v0, v1

    add-int/lit8 v1, p2, 0x4

    invoke-static {v0, p1, v1}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 129
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x2

    aget v0, v0, v1

    add-int/lit8 v1, p2, 0x8

    invoke-static {v0, p1, v1}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 130
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x3

    aget v0, v0, v1

    add-int/lit8 v1, p2, 0xc

    invoke-static {v0, p1, v1}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 131
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x4

    aget v0, v0, v1

    add-int/lit8 v1, p2, 0x10

    invoke-static {v0, p1, v1}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 132
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x5

    aget v0, v0, v1

    add-int/lit8 v1, p2, 0x14

    invoke-static {v0, p1, v1}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 133
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x6

    aget v0, v0, v1

    add-int/lit8 v1, p2, 0x18

    invoke-static {v0, p1, v1}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 134
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x7

    aget v0, v0, v1

    add-int/lit8 v1, p2, 0x1c

    invoke-static {v0, p1, v1}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 136
    invoke-virtual {p0}, Lorg/spongycastle/crypto/digests/SM3Digest;->reset()V

    .line 138
    const/16 v0, 0x20

    return v0
.end method

.method public getAlgorithmName()Ljava/lang/String;
    .registers 2

    .prologue
    .line 79
    const-string v0, "SM3"

    return-object v0
.end method

.method public getDigestSize()I
    .registers 2

    .prologue
    .line 84
    const/16 v0, 0x20

    return v0
.end method

.method protected processBlock()V
    .registers 16

    .prologue
    .line 258
    const/4 v0, 0x0

    :goto_1
    const/16 v1, 0x10

    if-ge v0, v1, :cond_10

    .line 260
    iget-object v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    iget-object v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    aget v2, v2, v0

    aput v2, v1, v0

    .line 258
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    .line 262
    :cond_10
    const/16 v0, 0x10

    :goto_12
    const/16 v1, 0x44

    if-ge v0, v1, :cond_4d

    .line 264
    iget-object v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    add-int/lit8 v2, v0, -0x3

    aget v1, v1, v2

    .line 265
    shl-int/lit8 v2, v1, 0xf

    ushr-int/lit8 v1, v1, 0x11

    or-int/2addr v1, v2

    .line 266
    iget-object v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    add-int/lit8 v3, v0, -0xd

    aget v2, v2, v3

    .line 267
    shl-int/lit8 v3, v2, 0x7

    ushr-int/lit8 v2, v2, 0x19

    or-int/2addr v2, v3

    .line 268
    iget-object v3, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    iget-object v4, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    add-int/lit8 v5, v0, -0x10

    aget v4, v4, v5

    iget-object v5, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    add-int/lit8 v6, v0, -0x9

    aget v5, v5, v6

    xor-int/2addr v4, v5

    xor-int/2addr v1, v4

    invoke-direct {p0, v1}, Lorg/spongycastle/crypto/digests/SM3Digest;->P1(I)I

    move-result v1

    xor-int/2addr v1, v2

    iget-object v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    add-int/lit8 v4, v0, -0x6

    aget v2, v2, v4

    xor-int/2addr v1, v2

    aput v1, v3, v0

    .line 262
    add-int/lit8 v0, v0, 0x1

    goto :goto_12

    .line 270
    :cond_4d
    const/4 v0, 0x0

    :goto_4e
    const/16 v1, 0x40

    if-ge v0, v1, :cond_64

    .line 272
    iget-object v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W1:[I

    iget-object v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    aget v2, v2, v0

    iget-object v3, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    add-int/lit8 v4, v0, 0x4

    aget v3, v3, v4

    xor-int/2addr v2, v3

    aput v2, v1, v0

    .line 270
    add-int/lit8 v0, v0, 0x1

    goto :goto_4e

    .line 275
    :cond_64
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x0

    aget v8, v0, v1

    .line 276
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x1

    aget v7, v0, v1

    .line 277
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x2

    aget v6, v0, v1

    .line 278
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x3

    aget v5, v0, v1

    .line 279
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x4

    aget v4, v0, v1

    .line 280
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x5

    aget v3, v0, v1

    .line 281
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x6

    aget v2, v0, v1

    .line 282
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x7

    aget v1, v0, v1

    .line 285
    const/4 v0, 0x0

    :goto_8d
    const/16 v9, 0x10

    if-ge v0, v9, :cond_d6

    .line 287
    shl-int/lit8 v9, v8, 0xc

    ushr-int/lit8 v10, v8, 0x14

    or-int/2addr v9, v10

    .line 288
    add-int v10, v9, v4

    sget-object v11, Lorg/spongycastle/crypto/digests/SM3Digest;->T:[I

    aget v11, v11, v0

    add-int/2addr v10, v11

    .line 289
    shl-int/lit8 v11, v10, 0x7

    ushr-int/lit8 v10, v10, 0x19

    or-int/2addr v10, v11

    .line 290
    xor-int/2addr v9, v10

    .line 291
    invoke-direct {p0, v8, v7, v6}, Lorg/spongycastle/crypto/digests/SM3Digest;->FF0(III)I

    move-result v11

    add-int/2addr v5, v11

    add-int/2addr v5, v9

    iget-object v9, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W1:[I

    aget v9, v9, v0

    add-int/2addr v9, v5

    .line 292
    invoke-direct {p0, v4, v3, v2}, Lorg/spongycastle/crypto/digests/SM3Digest;->GG0(III)I

    move-result v5

    add-int/2addr v1, v5

    add-int/2addr v1, v10

    iget-object v5, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    aget v5, v5, v0

    add-int v10, v1, v5

    .line 294
    shl-int/lit8 v1, v7, 0x9

    ushr-int/lit8 v5, v7, 0x17

    or-int/2addr v5, v1

    .line 298
    shl-int/lit8 v1, v3, 0x13

    ushr-int/lit8 v3, v3, 0xd

    or-int/2addr v1, v3

    .line 300
    invoke-direct {p0, v10}, Lorg/spongycastle/crypto/digests/SM3Digest;->P0(I)I

    move-result v3

    .line 285
    add-int/lit8 v0, v0, 0x1

    move v7, v8

    move v8, v9

    move v12, v4

    move v4, v3

    move v3, v12

    move v13, v6

    move v6, v5

    move v5, v13

    move v14, v2

    move v2, v1

    move v1, v14

    goto :goto_8d

    .line 304
    :cond_d6
    const/16 v0, 0x10

    :goto_d8
    const/16 v9, 0x40

    if-ge v0, v9, :cond_121

    .line 306
    shl-int/lit8 v9, v8, 0xc

    ushr-int/lit8 v10, v8, 0x14

    or-int/2addr v9, v10

    .line 307
    add-int v10, v9, v4

    sget-object v11, Lorg/spongycastle/crypto/digests/SM3Digest;->T:[I

    aget v11, v11, v0

    add-int/2addr v10, v11

    .line 308
    shl-int/lit8 v11, v10, 0x7

    ushr-int/lit8 v10, v10, 0x19

    or-int/2addr v10, v11

    .line 309
    xor-int/2addr v9, v10

    .line 310
    invoke-direct {p0, v8, v7, v6}, Lorg/spongycastle/crypto/digests/SM3Digest;->FF1(III)I

    move-result v11

    add-int/2addr v5, v11

    add-int/2addr v5, v9

    iget-object v9, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W1:[I

    aget v9, v9, v0

    add-int/2addr v9, v5

    .line 311
    invoke-direct {p0, v4, v3, v2}, Lorg/spongycastle/crypto/digests/SM3Digest;->GG1(III)I

    move-result v5

    add-int/2addr v1, v5

    add-int/2addr v1, v10

    iget-object v5, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->W:[I

    aget v5, v5, v0

    add-int v10, v1, v5

    .line 313
    shl-int/lit8 v1, v7, 0x9

    ushr-int/lit8 v5, v7, 0x17

    or-int/2addr v5, v1

    .line 317
    shl-int/lit8 v1, v3, 0x13

    ushr-int/lit8 v3, v3, 0xd

    or-int/2addr v1, v3

    .line 319
    invoke-direct {p0, v10}, Lorg/spongycastle/crypto/digests/SM3Digest;->P0(I)I

    move-result v3

    .line 304
    add-int/lit8 v0, v0, 0x1

    move v7, v8

    move v8, v9

    move v12, v4

    move v4, v3

    move v3, v12

    move v13, v6

    move v6, v5

    move v5, v13

    move v14, v2

    move v2, v1

    move v1, v14

    goto :goto_d8

    .line 322
    :cond_121
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v9, 0x0

    aget v10, v0, v9

    xor-int/2addr v8, v10

    aput v8, v0, v9

    .line 323
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v8, 0x1

    aget v9, v0, v8

    xor-int/2addr v7, v9

    aput v7, v0, v8

    .line 324
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v7, 0x2

    aget v8, v0, v7

    xor-int/2addr v6, v8

    aput v6, v0, v7

    .line 325
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v6, 0x3

    aget v7, v0, v6

    xor-int/2addr v5, v7

    aput v5, v0, v6

    .line 326
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v5, 0x4

    aget v6, v0, v5

    xor-int/2addr v4, v6

    aput v4, v0, v5

    .line 327
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v4, 0x5

    aget v5, v0, v4

    xor-int/2addr v3, v5

    aput v3, v0, v4

    .line 328
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v3, 0x6

    aget v4, v0, v3

    xor-int/2addr v2, v4

    aput v2, v0, v3

    .line 329
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v2, 0x7

    aget v3, v0, v2

    xor-int/2addr v1, v3

    aput v1, v0, v2

    .line 331
    const/4 v0, 0x0

    iput v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    .line 332
    return-void
.end method

.method protected processLength(J)V
    .registers 8

    .prologue
    const/16 v3, 0xe

    const/4 v2, 0x0

    .line 163
    iget v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    if-le v0, v3, :cond_16

    .line 166
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    iget v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    aput v2, v0, v1

    .line 167
    iget v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    add-int/lit8 v0, v0, 0x1

    iput v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    .line 169
    invoke-virtual {p0}, Lorg/spongycastle/crypto/digests/SM3Digest;->processBlock()V

    .line 172
    :cond_16
    :goto_16
    iget v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    if-ge v0, v3, :cond_27

    .line 174
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    iget v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    aput v2, v0, v1

    .line 175
    iget v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    add-int/lit8 v0, v0, 0x1

    iput v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    goto :goto_16

    .line 179
    :cond_27
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    iget v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    add-int/lit8 v2, v1, 0x1

    iput v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    const/16 v2, 0x20

    ushr-long v2, p1, v2

    long-to-int v2, v2

    aput v2, v0, v1

    .line 180
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    iget v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    add-int/lit8 v2, v1, 0x1

    iput v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    long-to-int v2, p1

    aput v2, v0, v1

    .line 181
    return-void
.end method

.method protected processWord([BI)V
    .registers 6

    .prologue
    .line 147
    aget-byte v0, p1, p2

    and-int/lit16 v0, v0, 0xff

    shl-int/lit8 v0, v0, 0x18

    add-int/lit8 v1, p2, 0x1

    aget-byte v2, p1, v1

    and-int/lit16 v2, v2, 0xff

    shl-int/lit8 v2, v2, 0x10

    or-int/2addr v0, v2

    add-int/lit8 v1, v1, 0x1

    aget-byte v2, p1, v1

    and-int/lit16 v2, v2, 0xff

    shl-int/lit8 v2, v2, 0x8

    or-int/2addr v0, v2

    add-int/lit8 v1, v1, 0x1

    aget-byte v1, p1, v1

    and-int/lit16 v1, v1, 0xff

    or-int/2addr v0, v1

    .line 152
    iget-object v1, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->inwords:[I

    iget v2, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    aput v0, v1, v2

    .line 153
    iget v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    add-int/lit8 v0, v0, 0x1

    iput v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    .line 155
    iget v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    const/16 v1, 0x10

    if-lt v0, v1, :cond_34

    .line 157
    invoke-virtual {p0}, Lorg/spongycastle/crypto/digests/SM3Digest;->processBlock()V

    .line 159
    :cond_34
    return-void
.end method

.method public reset()V
    .registers 5

    .prologue
    const/4 v3, 0x0

    .line 107
    invoke-super {p0}, Lorg/spongycastle/crypto/digests/GeneralDigest;->reset()V

    .line 109
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const v1, 0x7380166f

    aput v1, v0, v3

    .line 110
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x1

    const v2, 0x4914b2b9

    aput v2, v0, v1

    .line 111
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x2

    const v2, 0x172442d7

    aput v2, v0, v1

    .line 112
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x3

    const v2, -0x2575fa00

    aput v2, v0, v1

    .line 113
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x4

    const v2, -0x5690cf44

    aput v2, v0, v1

    .line 114
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x5

    const v2, 0x163138aa

    aput v2, v0, v1

    .line 115
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x6

    const v2, -0x1c7211b3

    aput v2, v0, v1

    .line 116
    iget-object v0, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->V:[I

    const/4 v1, 0x7

    const v2, -0x4f04f1b2

    aput v2, v0, v1

    .line 118
    iput v3, p0, Lorg/spongycastle/crypto/digests/SM3Digest;->xOff:I

    .line 119
    return-void
.end method

.method public reset(Lorg/spongycastle/util/Memoable;)V
    .registers 2

    .prologue
    .line 95
    check-cast p1, Lorg/spongycastle/crypto/digests/SM3Digest;

    .line 97
    invoke-super {p0, p1}, Lorg/spongycastle/crypto/digests/GeneralDigest;->copyIn(Lorg/spongycastle/crypto/digests/GeneralDigest;)V

    .line 98
    invoke-direct {p0, p1}, Lorg/spongycastle/crypto/digests/SM3Digest;->copyIn(Lorg/spongycastle/crypto/digests/SM3Digest;)V

    .line 99
    return-void
.end method