SCrypt.smali

.class public Lcom/lambdaworks/crypto/SCrypt;
.super Ljava/lang/Object;
.source "SCrypt.java"


# static fields
.field private static final Nk:Z


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

    .prologue
    .line 3022
    const-string v0, "com.lambdaworks.jni.loader"

    invoke-static {v0}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    .line 3024
    if-eqz v0, :cond_4f

    .line 3025
    const-string v1, "sys"

    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v1

    if-eqz v1, :cond_1e

    new-instance v0, Lcom/lambdaworks/jni/d;

    invoke-direct {v0}, Lcom/lambdaworks/jni/d;-><init>()V

    .line 28
    :goto_15
    const-string v1, "scrypt"

    invoke-interface {v0, v1}, Lcom/lambdaworks/jni/b;->fR(Ljava/lang/String;)Z

    move-result v0

    sput-boolean v0, Lcom/lambdaworks/crypto/SCrypt;->Nk:Z

    .line 29
    return-void

    .line 3026
    :cond_1e
    const-string v1, "nil"

    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v1

    if-eqz v1, :cond_2c

    new-instance v0, Lcom/lambdaworks/jni/c;

    invoke-direct {v0}, Lcom/lambdaworks/jni/c;-><init>()V

    goto :goto_15

    .line 3027
    :cond_2c
    const-string v1, "jar"

    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v1

    if-eqz v1, :cond_3a

    new-instance v0, Lcom/lambdaworks/jni/a;

    invoke-direct {v0}, Lcom/lambdaworks/jni/a;-><init>()V

    goto :goto_15

    .line 3028
    :cond_3a
    new-instance v1, Ljava/lang/IllegalStateException;

    new-instance v2, Ljava/lang/StringBuilder;

    const-string v3, "Illegal value for com.lambdaworks.jni.loader: "

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

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

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

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

    throw v1

    .line 3031
    :cond_4f
    const-string v0, "java.vm.specification.name"

    invoke-static {v0}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    .line 3032
    const-string v1, "Java"

    invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_63

    new-instance v0, Lcom/lambdaworks/jni/a;

    invoke-direct {v0}, Lcom/lambdaworks/jni/a;-><init>()V

    goto :goto_15

    :cond_63
    new-instance v0, Lcom/lambdaworks/jni/d;

    invoke-direct {v0}, Lcom/lambdaworks/jni/d;-><init>()V

    goto :goto_15
.end method

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

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

    return-void
.end method

.method private static a([BIII[B[B)V
    .registers 12

    .prologue
    const/4 v1, 0x0

    .line 109
    shl-int/lit8 v2, p2, 0x7

    .line 112
    shl-int/lit8 v0, p2, 0x7

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

    move v0, v1

    .line 114
    :goto_9
    if-ge v0, p3, :cond_19

    .line 115
    shl-int/lit8 v3, p2, 0x7

    mul-int/2addr v3, v0

    shl-int/lit8 v4, p2, 0x7

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

    .line 116
    invoke-static {p5, v2, p2}, Lcom/lambdaworks/crypto/SCrypt;->l([BII)V

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

    goto :goto_9

    :cond_19
    move v0, v1

    .line 119
    :goto_1a
    if-ge v0, p3, :cond_54

    .line 1205
    mul-int/lit8 v3, p2, 0x2

    add-int/lit8 v3, v3, -0x1

    shl-int/lit8 v3, v3, 0x6

    add-int/lit8 v3, v3, 0x0

    .line 1207
    aget-byte v4, p5, v3

    and-int/lit16 v4, v4, 0xff

    .line 1208
    add-int/lit8 v5, v3, 0x1

    aget-byte v5, p5, v5

    and-int/lit16 v5, v5, 0xff

    shl-int/lit8 v5, v5, 0x8

    or-int/2addr v4, v5

    .line 1209
    add-int/lit8 v5, v3, 0x2

    aget-byte v5, p5, v5

    and-int/lit16 v5, v5, 0xff

    shl-int/lit8 v5, v5, 0x10

    or-int/2addr v4, v5

    .line 1210
    add-int/lit8 v3, v3, 0x3

    aget-byte v3, p5, v3

    and-int/lit16 v3, v3, 0xff

    shl-int/lit8 v3, v3, 0x18

    or-int/2addr v3, v4

    .line 120
    add-int/lit8 v4, p3, -0x1

    and-int/2addr v3, v4

    .line 121
    shl-int/lit8 v4, p2, 0x7

    mul-int/2addr v3, v4

    shl-int/lit8 v4, p2, 0x7

    invoke-static {p4, v3, p5, v4}, Lcom/lambdaworks/crypto/SCrypt;->a([BI[BI)V

    .line 122
    invoke-static {p5, v2, p2}, Lcom/lambdaworks/crypto/SCrypt;->l([BII)V

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

    goto :goto_1a

    .line 125
    :cond_54
    shl-int/lit8 v0, p2, 0x7

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

    .line 126
    return-void
.end method

.method private static a([BI[BI)V
    .registers 7

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

    :goto_1
    if-ge v0, p3, :cond_10

    .line 198
    aget-byte v1, p2, v0

    add-int v2, p1, v0

    aget-byte v2, p0, v2

    xor-int/2addr v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

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

    goto :goto_1

    .line 200
    :cond_10
    return-void
.end method

.method public static a([B[BIIII)[B
    .registers 15

    .prologue
    const v1, 0xffffff

    .line 48
    sget-boolean v0, Lcom/lambdaworks/crypto/SCrypt;->Nk:Z

    if-eqz v0, :cond_c

    invoke-static/range {p0 .. p5}, Lcom/lambdaworks/crypto/SCrypt;->scryptN([B[BIIII)[B

    move-result-object v0

    :goto_b
    return-object v0

    .line 1081
    :cond_c
    const/4 v0, 0x2

    if-lt p2, v0, :cond_14

    add-int/lit8 v0, p2, -0x1

    and-int/2addr v0, p2

    if-eqz v0, :cond_1c

    :cond_14
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "N must be a power of 2 greater than 1"

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

    throw v0

    .line 1083
    :cond_1c
    div-int v0, v1, p3

    if-le p2, v0, :cond_28

    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "Parameter N is too large"

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

    throw v0

    .line 1084
    :cond_28
    div-int v0, v1, p4

    if-le p3, v0, :cond_34

    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "Parameter r is too large"

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

    throw v0

    .line 1086
    :cond_34
    const-string v0, "HmacSHA256"

    invoke-static {v0}, Ljavax/crypto/Mac;->getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;

    move-result-object v8

    .line 1087
    new-instance v0, Ljavax/crypto/spec/SecretKeySpec;

    const-string v1, "HmacSHA256"

    invoke-direct {v0, p0, v1}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V

    invoke-virtual {v8, v0}, Ljavax/crypto/Mac;->init(Ljava/security/Key;)V

    .line 1089
    new-array v6, p5, [B

    .line 1091
    shl-int/lit8 v0, p3, 0x7

    mul-int/2addr v0, p4

    new-array v0, v0, [B

    .line 1092
    shl-int/lit8 v1, p3, 0x8

    new-array v5, v1, [B

    .line 1093
    shl-int/lit8 v1, p3, 0x7

    mul-int/2addr v1, p2

    new-array v4, v1, [B

    .line 1096
    shl-int/lit8 v1, p4, 0x7

    mul-int/2addr v1, p3

    invoke-static {v8, p1, v0, v1}, Lcom/lambdaworks/crypto/a;->a(Ljavax/crypto/Mac;[B[BI)V

    .line 1098
    const/4 v1, 0x0

    move v7, v1

    :goto_5c
    if-ge v7, p4, :cond_6a

    .line 1099
    shl-int/lit8 v1, v7, 0x7

    mul-int/2addr v1, p3

    move v2, p3

    move v3, p2

    invoke-static/range {v0 .. v5}, Lcom/lambdaworks/crypto/SCrypt;->a([BIII[B[B)V

    .line 1098
    add-int/lit8 v1, v7, 0x1

    move v7, v1

    goto :goto_5c

    .line 1102
    :cond_6a
    invoke-static {v8, v0, v6, p5}, Lcom/lambdaworks/crypto/a;->a(Ljavax/crypto/Mac;[B[BI)V

    move-object v0, v6

    .line 48
    goto :goto_b
.end method

.method private static aF(II)I
    .registers 4

    .prologue
    .line 150
    shl-int v0, p0, p1

    rsub-int/lit8 v1, p1, 0x20

    ushr-int v1, p0, v1

    or-int/2addr v0, v1

    return v0
.end method

.method private static l([BII)V
    .registers 12

    .prologue
    .line 129
    const/16 v0, 0x40

    new-array v2, v0, [B

    .line 132
    mul-int/lit8 v0, p2, 0x2

    add-int/lit8 v0, v0, -0x1

    shl-int/lit8 v0, v0, 0x6

    add-int/lit8 v0, v0, 0x0

    const/4 v1, 0x0

    const/16 v3, 0x40

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

    .line 134
    const/4 v0, 0x0

    move v1, v0

    :goto_14
    mul-int/lit8 v0, p2, 0x2

    if-ge v1, v0, :cond_347

    .line 135
    shl-int/lit8 v0, v1, 0x6

    const/16 v3, 0x40

    invoke-static {p0, v0, v2, v3}, Lcom/lambdaworks/crypto/SCrypt;->a([BI[BI)V

    .line 2154
    const/16 v0, 0x10

    new-array v3, v0, [I

    .line 2155
    const/16 v0, 0x10

    new-array v4, v0, [I

    .line 2158
    const/4 v0, 0x0

    :goto_28
    const/16 v5, 0x10

    if-ge v0, v5, :cond_64

    .line 2159
    shl-int/lit8 v5, v0, 0x2

    aget-byte v5, v2, v5

    and-int/lit16 v5, v5, 0xff

    aput v5, v3, v0

    .line 2160
    aget v5, v3, v0

    shl-int/lit8 v6, v0, 0x2

    add-int/lit8 v6, v6, 0x1

    aget-byte v6, v2, v6

    and-int/lit16 v6, v6, 0xff

    shl-int/lit8 v6, v6, 0x8

    or-int/2addr v5, v6

    aput v5, v3, v0

    .line 2161
    aget v5, v3, v0

    shl-int/lit8 v6, v0, 0x2

    add-int/lit8 v6, v6, 0x2

    aget-byte v6, v2, v6

    and-int/lit16 v6, v6, 0xff

    shl-int/lit8 v6, v6, 0x10

    or-int/2addr v5, v6

    aput v5, v3, v0

    .line 2162
    aget v5, v3, v0

    shl-int/lit8 v6, v0, 0x2

    add-int/lit8 v6, v6, 0x3

    aget-byte v6, v2, v6

    and-int/lit16 v6, v6, 0xff

    shl-int/lit8 v6, v6, 0x18

    or-int/2addr v5, v6

    aput v5, v3, v0

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

    goto :goto_28

    .line 2165
    :cond_64
    const/4 v0, 0x0

    const/4 v5, 0x0

    const/16 v6, 0x10

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

    .line 2167
    const/16 v0, 0x8

    :goto_6d
    if-lez v0, :cond_2fb

    .line 2168
    const/4 v5, 0x4

    aget v6, v4, v5

    const/4 v7, 0x0

    aget v7, v4, v7

    const/16 v8, 0xc

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0x8

    aget v6, v4, v5

    const/4 v7, 0x4

    aget v7, v4, v7

    const/4 v8, 0x0

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2169
    const/16 v5, 0xc

    aget v6, v4, v5

    const/16 v7, 0x8

    aget v7, v4, v7

    const/4 v8, 0x4

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x0

    aget v6, v4, v5

    const/16 v7, 0xc

    aget v7, v4, v7

    const/16 v8, 0x8

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2170
    const/16 v5, 0x9

    aget v6, v4, v5

    const/4 v7, 0x5

    aget v7, v4, v7

    const/4 v8, 0x1

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0xd

    aget v6, v4, v5

    const/16 v7, 0x9

    aget v7, v4, v7

    const/4 v8, 0x5

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2171
    const/4 v5, 0x1

    aget v6, v4, v5

    const/16 v7, 0xd

    aget v7, v4, v7

    const/16 v8, 0x9

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x5

    aget v6, v4, v5

    const/4 v7, 0x1

    aget v7, v4, v7

    const/16 v8, 0xd

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2172
    const/16 v5, 0xe

    aget v6, v4, v5

    const/16 v7, 0xa

    aget v7, v4, v7

    const/4 v8, 0x6

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x2

    aget v6, v4, v5

    const/16 v7, 0xe

    aget v7, v4, v7

    const/16 v8, 0xa

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2173
    const/4 v5, 0x6

    aget v6, v4, v5

    const/4 v7, 0x2

    aget v7, v4, v7

    const/16 v8, 0xe

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0xa

    aget v6, v4, v5

    const/4 v7, 0x6

    aget v7, v4, v7

    const/4 v8, 0x2

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2174
    const/4 v5, 0x3

    aget v6, v4, v5

    const/16 v7, 0xf

    aget v7, v4, v7

    const/16 v8, 0xb

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x7

    aget v6, v4, v5

    const/4 v7, 0x3

    aget v7, v4, v7

    const/16 v8, 0xf

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2175
    const/16 v5, 0xb

    aget v6, v4, v5

    const/4 v7, 0x7

    aget v7, v4, v7

    const/4 v8, 0x3

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0xf

    aget v6, v4, v5

    const/16 v7, 0xb

    aget v7, v4, v7

    const/4 v8, 0x7

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2176
    const/4 v5, 0x1

    aget v6, v4, v5

    const/4 v7, 0x0

    aget v7, v4, v7

    const/4 v8, 0x3

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x2

    aget v6, v4, v5

    const/4 v7, 0x1

    aget v7, v4, v7

    const/4 v8, 0x0

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2177
    const/4 v5, 0x3

    aget v6, v4, v5

    const/4 v7, 0x2

    aget v7, v4, v7

    const/4 v8, 0x1

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x0

    aget v6, v4, v5

    const/4 v7, 0x3

    aget v7, v4, v7

    const/4 v8, 0x2

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2178
    const/4 v5, 0x6

    aget v6, v4, v5

    const/4 v7, 0x5

    aget v7, v4, v7

    const/4 v8, 0x4

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x7

    aget v6, v4, v5

    const/4 v7, 0x6

    aget v7, v4, v7

    const/4 v8, 0x5

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2179
    const/4 v5, 0x4

    aget v6, v4, v5

    const/4 v7, 0x7

    aget v7, v4, v7

    const/4 v8, 0x6

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/4 v5, 0x5

    aget v6, v4, v5

    const/4 v7, 0x4

    aget v7, v4, v7

    const/4 v8, 0x7

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2180
    const/16 v5, 0xb

    aget v6, v4, v5

    const/16 v7, 0xa

    aget v7, v4, v7

    const/16 v8, 0x9

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0x8

    aget v6, v4, v5

    const/16 v7, 0xb

    aget v7, v4, v7

    const/16 v8, 0xa

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2181
    const/16 v5, 0x9

    aget v6, v4, v5

    const/16 v7, 0x8

    aget v7, v4, v7

    const/16 v8, 0xb

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0xa

    aget v6, v4, v5

    const/16 v7, 0x9

    aget v7, v4, v7

    const/16 v8, 0x8

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2182
    const/16 v5, 0xc

    aget v6, v4, v5

    const/16 v7, 0xf

    aget v7, v4, v7

    const/16 v8, 0xe

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/4 v8, 0x7

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0xd

    aget v6, v4, v5

    const/16 v7, 0xc

    aget v7, v4, v7

    const/16 v8, 0xf

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x9

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2183
    const/16 v5, 0xe

    aget v6, v4, v5

    const/16 v7, 0xd

    aget v7, v4, v7

    const/16 v8, 0xc

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0xd

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    const/16 v5, 0xf

    aget v6, v4, v5

    const/16 v7, 0xe

    aget v7, v4, v7

    const/16 v8, 0xd

    aget v8, v4, v8

    add-int/2addr v7, v8

    const/16 v8, 0x12

    invoke-static {v7, v8}, Lcom/lambdaworks/crypto/SCrypt;->aF(II)I

    move-result v7

    xor-int/2addr v6, v7

    aput v6, v4, v5

    .line 2167
    add-int/lit8 v0, v0, -0x2

    goto/16 :goto_6d

    .line 2186
    :cond_2fb
    const/4 v0, 0x0

    :goto_2fc
    const/16 v5, 0x10

    if-ge v0, v5, :cond_30a

    aget v5, v4, v0

    aget v6, v3, v0

    add-int/2addr v5, v6

    aput v5, v3, v0

    add-int/lit8 v0, v0, 0x1

    goto :goto_2fc

    .line 2188
    :cond_30a
    const/4 v0, 0x0

    :goto_30b
    const/16 v4, 0x10

    if-ge v0, v4, :cond_339

    .line 2189
    shl-int/lit8 v4, v0, 0x2

    aget v5, v3, v0

    int-to-byte v5, v5

    aput-byte v5, v2, v4

    .line 2190
    shl-int/lit8 v4, v0, 0x2

    add-int/lit8 v4, v4, 0x1

    aget v5, v3, v0

    shr-int/lit8 v5, v5, 0x8

    int-to-byte v5, v5

    aput-byte v5, v2, v4

    .line 2191
    shl-int/lit8 v4, v0, 0x2

    add-int/lit8 v4, v4, 0x2

    aget v5, v3, v0

    shr-int/lit8 v5, v5, 0x10

    int-to-byte v5, v5

    aput-byte v5, v2, v4

    .line 2192
    shl-int/lit8 v4, v0, 0x2

    add-int/lit8 v4, v4, 0x3

    aget v5, v3, v0

    shr-int/lit8 v5, v5, 0x18

    aput-byte v5, v2, v4

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

    goto :goto_30b

    .line 137
    :cond_339
    const/4 v0, 0x0

    shl-int/lit8 v3, v1, 0x6

    add-int/2addr v3, p1

    const/16 v4, 0x40

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

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

    move v1, v0

    goto/16 :goto_14

    .line 140
    :cond_347
    const/4 v0, 0x0

    :goto_348
    if-ge v0, p2, :cond_35b

    .line 141
    shl-int/lit8 v1, v0, 0x1

    shl-int/lit8 v1, v1, 0x6

    add-int/2addr v1, p1

    shl-int/lit8 v2, v0, 0x6

    add-int/lit8 v2, v2, 0x0

    const/16 v3, 0x40

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

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

    goto :goto_348

    .line 144
    :cond_35b
    const/4 v0, 0x0

    :goto_35c
    if-ge v0, p2, :cond_373

    .line 145
    shl-int/lit8 v1, v0, 0x1

    add-int/lit8 v1, v1, 0x1

    shl-int/lit8 v1, v1, 0x6

    add-int/2addr v1, p1

    add-int v2, v0, p2

    shl-int/lit8 v2, v2, 0x6

    add-int/lit8 v2, v2, 0x0

    const/16 v3, 0x40

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

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

    goto :goto_35c

    .line 147
    :cond_373
    return-void
.end method

.method public static native scryptN([B[BIIII)[B
.end method