NoekeonEngine.smali

.class public Lorg/spongycastle/crypto/engines/NoekeonEngine;
.super Ljava/lang/Object;
.source "NoekeonEngine.java"

# interfaces
.implements Lorg/spongycastle/crypto/BlockCipher;


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

.field private static final nullVector:[I

.field private static final roundConstants:[I


# instance fields
.field private _forEncryption:Z

.field private _initialised:Z

.field private decryptKeys:[I

.field private state:[I

.field private subKeys:[I


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

    .prologue
    .line 18
    const/4 v0, 0x4

    new-array v0, v0, [I

    fill-array-data v0, :array_12

    sput-object v0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->nullVector:[I

    .line 23
    const/16 v0, 0x11

    new-array v0, v0, [I

    fill-array-data v0, :array_1e

    sput-object v0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->roundConstants:[I

    return-void

    .line 18
    :array_12
    .array-data 4
        0x0
        0x0
        0x0
        0x0
    .end array-data

    .line 23
    :array_1e
    .array-data 4
        0x80
        0x1b
        0x36
        0x6c
        0xd8
        0xab
        0x4d
        0x9a
        0x2f
        0x5e
        0xbc
        0x63
        0xc6
        0x97
        0x35
        0x6a
        0xd4
    .end array-data
.end method

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

    .prologue
    const/4 v1, 0x4

    .line 44
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 32
    new-array v0, v1, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    new-array v0, v1, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    new-array v0, v1, [I

    iput-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->decryptKeys:[I

    .line 45
    const/4 v0, 0x0

    iput-boolean v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->_initialised:Z

    .line 46
    return-void
.end method

.method private bytesToIntBig([BI)I
    .registers 6

    .prologue
    .line 245
    add-int/lit8 v0, p2, 0x1

    aget-byte v1, p1, p2

    shl-int/lit8 v1, v1, 0x18

    add-int/lit8 v2, v0, 0x1

    aget-byte v0, p1, v0

    and-int/lit16 v0, v0, 0xff

    shl-int/lit8 v0, v0, 0x10

    or-int/2addr v0, v1

    add-int/lit8 v1, v2, 0x1

    aget-byte v2, p1, v2

    and-int/lit16 v2, v2, 0xff

    shl-int/lit8 v2, v2, 0x8

    or-int/2addr v0, v2

    aget-byte v1, p1, v1

    and-int/lit16 v1, v1, 0xff

    or-int/2addr v0, v1

    return v0
.end method

.method private decryptBlock([BI[BI)I
    .registers 14

    .prologue
    const/16 v1, 0x10

    const/4 v8, 0x3

    const/4 v7, 0x2

    const/4 v6, 0x1

    const/4 v5, 0x0

    .line 164
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, p1, p2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v5

    .line 165
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    add-int/lit8 v2, p2, 0x4

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v6

    .line 166
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    add-int/lit8 v2, p2, 0x8

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v7

    .line 167
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    add-int/lit8 v2, p2, 0xc

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v8

    .line 169
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->decryptKeys:[I

    iget-object v3, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    array-length v3, v3

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

    .line 170
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->decryptKeys:[I

    sget-object v2, Lorg/spongycastle/crypto/engines/NoekeonEngine;->nullVector:[I

    invoke-direct {p0, v0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->theta([I[I)V

    move v0, v1

    .line 173
    :goto_3e
    if-lez v0, :cond_64

    .line 175
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    iget-object v3, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->decryptKeys:[I

    invoke-direct {p0, v2, v3}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->theta([I[I)V

    .line 176
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v3, v2, v5

    sget-object v4, Lorg/spongycastle/crypto/engines/NoekeonEngine;->roundConstants:[I

    aget v4, v4, v0

    xor-int/2addr v3, v4

    aput v3, v2, v5

    .line 177
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->pi1([I)V

    .line 178
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->gamma([I)V

    .line 179
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->pi2([I)V

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

    goto :goto_3e

    .line 182
    :cond_64
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    iget-object v3, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->decryptKeys:[I

    invoke-direct {p0, v2, v3}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->theta([I[I)V

    .line 183
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v3, v2, v5

    sget-object v4, Lorg/spongycastle/crypto/engines/NoekeonEngine;->roundConstants:[I

    aget v0, v4, v0

    xor-int/2addr v0, v3

    aput v0, v2, v5

    .line 185
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v5

    invoke-direct {p0, v0, p3, p4}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 186
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v6

    add-int/lit8 v2, p4, 0x4

    invoke-direct {p0, v0, p3, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 187
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v7

    add-int/lit8 v2, p4, 0x8

    invoke-direct {p0, v0, p3, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 188
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v8

    add-int/lit8 v2, p4, 0xc

    invoke-direct {p0, v0, p3, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 190
    return v1
.end method

.method private encryptBlock([BI[BI)I
    .registers 14

    .prologue
    const/16 v8, 0x10

    const/4 v7, 0x3

    const/4 v6, 0x2

    const/4 v5, 0x1

    const/4 v1, 0x0

    .line 132
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, p1, p2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v1

    .line 133
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    add-int/lit8 v2, p2, 0x4

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v5

    .line 134
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    add-int/lit8 v2, p2, 0x8

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v6

    .line 135
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    add-int/lit8 v2, p2, 0xc

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v7

    move v0, v1

    .line 138
    :goto_2d
    if-ge v0, v8, :cond_53

    .line 140
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v3, v2, v1

    sget-object v4, Lorg/spongycastle/crypto/engines/NoekeonEngine;->roundConstants:[I

    aget v4, v4, v0

    xor-int/2addr v3, v4

    aput v3, v2, v1

    .line 141
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    iget-object v3, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    invoke-direct {p0, v2, v3}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->theta([I[I)V

    .line 142
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->pi1([I)V

    .line 143
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->gamma([I)V

    .line 144
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    invoke-direct {p0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->pi2([I)V

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

    goto :goto_2d

    .line 147
    :cond_53
    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v3, v2, v1

    sget-object v4, Lorg/spongycastle/crypto/engines/NoekeonEngine;->roundConstants:[I

    aget v0, v4, v0

    xor-int/2addr v0, v3

    aput v0, v2, v1

    .line 148
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    iget-object v2, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    invoke-direct {p0, v0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->theta([I[I)V

    .line 150
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v1

    invoke-direct {p0, v0, p3, p4}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 151
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v5

    add-int/lit8 v1, p4, 0x4

    invoke-direct {p0, v0, p3, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 152
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v6

    add-int/lit8 v1, p4, 0x8

    invoke-direct {p0, v0, p3, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 153
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->state:[I

    aget v0, v0, v7

    add-int/lit8 v1, p4, 0xc

    invoke-direct {p0, v0, p3, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->intToBytesBig(I[BI)V

    .line 155
    return v8
.end method

.method private gamma([I)V
    .registers 9

    .prologue
    const/4 v6, 0x3

    const/4 v5, 0x2

    const/4 v4, 0x1

    const/4 v3, 0x0

    .line 195
    aget v0, p1, v4

    aget v1, p1, v6

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

    aget v2, p1, v5

    xor-int/lit8 v2, v2, -0x1

    and-int/2addr v1, v2

    xor-int/2addr v0, v1

    aput v0, p1, v4

    .line 196
    aget v0, p1, v3

    aget v1, p1, v5

    aget v2, p1, v4

    and-int/2addr v1, v2

    xor-int/2addr v0, v1

    aput v0, p1, v3

    .line 198
    aget v0, p1, v6

    .line 199
    aget v1, p1, v3

    aput v1, p1, v6

    .line 200
    aput v0, p1, v3

    .line 201
    aget v0, p1, v5

    aget v1, p1, v3

    aget v2, p1, v4

    xor-int/2addr v1, v2

    aget v2, p1, v6

    xor-int/2addr v1, v2

    xor-int/2addr v0, v1

    aput v0, p1, v5

    .line 203
    aget v0, p1, v4

    aget v1, p1, v6

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

    aget v2, p1, v5

    xor-int/lit8 v2, v2, -0x1

    and-int/2addr v1, v2

    xor-int/2addr v0, v1

    aput v0, p1, v4

    .line 204
    aget v0, p1, v3

    aget v1, p1, v5

    aget v2, p1, v4

    and-int/2addr v1, v2

    xor-int/2addr v0, v1

    aput v0, p1, v3

    .line 205
    return-void
.end method

.method private intToBytesBig(I[BI)V
    .registers 7

    .prologue
    .line 253
    add-int/lit8 v0, p3, 0x1

    shr-int/lit8 v1, p1, 0x18

    aput-byte v1, p2, p3

    .line 254
    add-int/lit8 v1, v0, 0x1

    ushr-int/lit8 v2, p1, 0x10

    int-to-byte v2, v2

    aput-byte v2, p2, v0

    .line 255
    add-int/lit8 v0, v1, 0x1

    ushr-int/lit8 v2, p1, 0x8

    int-to-byte v2, v2

    aput-byte v2, p2, v1

    .line 256
    int-to-byte v1, p1

    aput-byte v1, p2, v0

    .line 257
    return-void
.end method

.method private pi1([I)V
    .registers 6

    .prologue
    const/4 v3, 0x3

    const/4 v2, 0x2

    const/4 v1, 0x1

    .line 229
    aget v0, p1, v1

    invoke-direct {p0, v0, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v0

    aput v0, p1, v1

    .line 230
    aget v0, p1, v2

    const/4 v1, 0x5

    invoke-direct {p0, v0, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v0

    aput v0, p1, v2

    .line 231
    aget v0, p1, v3

    invoke-direct {p0, v0, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v0

    aput v0, p1, v3

    .line 232
    return-void
.end method

.method private pi2([I)V
    .registers 7

    .prologue
    const/4 v4, 0x3

    const/4 v3, 0x2

    const/4 v2, 0x1

    .line 236
    aget v0, p1, v2

    const/16 v1, 0x1f

    invoke-direct {p0, v0, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v0

    aput v0, p1, v2

    .line 237
    aget v0, p1, v3

    const/16 v1, 0x1b

    invoke-direct {p0, v0, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v0

    aput v0, p1, v3

    .line 238
    aget v0, p1, v4

    const/16 v1, 0x1e

    invoke-direct {p0, v0, v1}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v0

    aput v0, p1, v4

    .line 239
    return-void
.end method

.method private rotl(II)I
    .registers 5

    .prologue
    .line 261
    shl-int v0, p1, p2

    rsub-int/lit8 v1, p2, 0x20

    ushr-int v1, p1, v1

    or-int/2addr v0, v1

    return v0
.end method

.method private setKey([B)V
    .registers 5

    .prologue
    const/4 v2, 0x0

    .line 120
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v1

    aput v1, v0, v2

    .line 121
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    const/4 v1, 0x1

    const/4 v2, 0x4

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v1

    .line 122
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    const/4 v1, 0x2

    const/16 v2, 0x8

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v1

    .line 123
    iget-object v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->subKeys:[I

    const/4 v1, 0x3

    const/16 v2, 0xc

    invoke-direct {p0, p1, v2}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->bytesToIntBig([BI)I

    move-result v2

    aput v2, v0, v1

    .line 124
    return-void
.end method

.method private theta([I[I)V
    .registers 11

    .prologue
    const/16 v7, 0x8

    const/4 v6, 0x3

    const/4 v5, 0x2

    const/4 v4, 0x1

    const/4 v1, 0x0

    .line 211
    aget v0, p1, v1

    aget v2, p1, v5

    xor-int/2addr v0, v2

    .line 212
    invoke-direct {p0, v0, v7}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v2

    const/16 v3, 0x18

    invoke-direct {p0, v0, v3}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v3

    xor-int/2addr v2, v3

    xor-int/2addr v0, v2

    .line 213
    aget v2, p1, v4

    xor-int/2addr v2, v0

    aput v2, p1, v4

    .line 214
    aget v2, p1, v6

    xor-int/2addr v0, v2

    aput v0, p1, v6

    move v0, v1

    .line 216
    :goto_22
    const/4 v2, 0x4

    if-ge v0, v2, :cond_2f

    .line 218
    aget v2, p1, v0

    aget v3, p2, v0

    xor-int/2addr v2, v3

    aput v2, p1, v0

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

    goto :goto_22

    .line 221
    :cond_2f
    aget v0, p1, v4

    aget v2, p1, v6

    xor-int/2addr v0, v2

    .line 222
    invoke-direct {p0, v0, v7}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v2

    const/16 v3, 0x18

    invoke-direct {p0, v0, v3}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->rotl(II)I

    move-result v3

    xor-int/2addr v2, v3

    xor-int/2addr v0, v2

    .line 223
    aget v2, p1, v1

    xor-int/2addr v2, v0

    aput v2, p1, v1

    .line 224
    aget v1, p1, v5

    xor-int/2addr v0, v1

    aput v0, p1, v5

    .line 225
    return-void
.end method


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

    .prologue
    .line 50
    const-string v0, "Noekeon"

    return-object v0
.end method

.method public getBlockSize()I
    .registers 2

    .prologue
    .line 55
    const/16 v0, 0x10

    return v0
.end method

.method public init(ZLorg/spongycastle/crypto/CipherParameters;)V
    .registers 6

    .prologue
    .line 70
    instance-of v0, p2, Lorg/spongycastle/crypto/params/KeyParameter;

    if-nez v0, :cond_21

    .line 72
    new-instance v0, Ljava/lang/IllegalArgumentException;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "invalid parameter passed to Noekeon init - "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v2

    invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;

    move-result-object 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

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 75
    :cond_21
    iput-boolean p1, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->_forEncryption:Z

    .line 76
    const/4 v0, 0x1

    iput-boolean v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->_initialised:Z

    .line 78
    check-cast p2, Lorg/spongycastle/crypto/params/KeyParameter;

    .line 80
    invoke-virtual {p2}, Lorg/spongycastle/crypto/params/KeyParameter;->getKey()[B

    move-result-object v0

    invoke-direct {p0, v0}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->setKey([B)V

    .line 81
    return-void
.end method

.method public processBlock([BI[BI)I
    .registers 8

    .prologue
    .line 89
    iget-boolean v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->_initialised:Z

    if-nez v0, :cond_21

    .line 91
    new-instance v0, Ljava/lang/IllegalStateException;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {p0}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->getAlgorithmName()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, " not initialised"

    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

    invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 94
    :cond_21
    add-int/lit8 v0, p2, 0x10

    array-length v1, p1

    if-le v0, v1, :cond_2e

    .line 96
    new-instance v0, Lorg/spongycastle/crypto/DataLengthException;

    const-string v1, "input buffer too short"

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/DataLengthException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 99
    :cond_2e
    add-int/lit8 v0, p4, 0x10

    array-length v1, p3

    if-le v0, v1, :cond_3b

    .line 101
    new-instance v0, Lorg/spongycastle/crypto/OutputLengthException;

    const-string v1, "output buffer too short"

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/OutputLengthException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 104
    :cond_3b
    iget-boolean v0, p0, Lorg/spongycastle/crypto/engines/NoekeonEngine;->_forEncryption:Z

    if-eqz v0, :cond_44

    invoke-direct {p0, p1, p2, p3, p4}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->encryptBlock([BI[BI)I

    move-result v0

    .line 105
    :goto_43
    return v0

    :cond_44
    invoke-direct {p0, p1, p2, p3, p4}, Lorg/spongycastle/crypto/engines/NoekeonEngine;->decryptBlock([BI[BI)I

    move-result v0

    goto :goto_43
.end method

.method public reset()V
    .registers 1

    .prologue
    .line 110
    return-void
.end method