OpenBSDBCrypt.smali
.class public Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;
.super Ljava/lang/Object;
.source "OpenBSDBCrypt.java"
# static fields
.field private static final decodingTable:[B
.field private static final encodingTable:[B
.field private static final version:Ljava/lang/String; = "2a"
# direct methods
.method static constructor <clinit>()V
.registers 4
.prologue
const/4 v1, 0x0
.line 17
const/16 v0, 0x40
new-array v0, v0, [B
fill-array-data v0, :array_30
sput-object v0, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodingTable:[B
.line 34
const/16 v0, 0x80
new-array v0, v0, [B
sput-object v0, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
move v0, v1
.line 39
:goto_11
sget-object v2, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
array-length v2, v2
if-ge v0, v2, :cond_1e
.line 41
sget-object v2, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
const/4 v3, -0x1
aput-byte v3, v2, v0
.line 39
add-int/lit8 v0, v0, 0x1
goto :goto_11
.line 44
:cond_1e
:goto_1e
sget-object v0, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodingTable:[B
array-length v0, v0
if-ge v1, v0, :cond_2f
.line 46
sget-object v0, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
sget-object v2, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodingTable:[B
aget-byte v2, v2, v1
int-to-byte v3, v1
aput-byte v3, v0, v2
.line 44
add-int/lit8 v1, v1, 0x1
goto :goto_1e
.line 48
:cond_2f
return-void
.line 17
:array_30
.array-data 1
0x2et
0x2ft
0x41t
0x42t
0x43t
0x44t
0x45t
0x46t
0x47t
0x48t
0x49t
0x4at
0x4bt
0x4ct
0x4dt
0x4et
0x4ft
0x50t
0x51t
0x52t
0x53t
0x54t
0x55t
0x56t
0x57t
0x58t
0x59t
0x5at
0x61t
0x62t
0x63t
0x64t
0x65t
0x66t
0x67t
0x68t
0x69t
0x6at
0x6bt
0x6ct
0x6dt
0x6et
0x6ft
0x70t
0x71t
0x72t
0x73t
0x74t
0x75t
0x76t
0x77t
0x78t
0x79t
0x7at
0x30t
0x31t
0x32t
0x33t
0x34t
0x35t
0x36t
0x37t
0x38t
0x39t
.end array-data
.end method
.method public constructor <init>()V
.registers 1
.prologue
.line 51
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 53
return-void
.end method
.method public static checkPassword(Ljava/lang/String;[C)Z
.registers 8
.prologue
const/4 v5, 0x3
const/4 v4, 0x6
const/4 v3, 0x4
const/16 v2, 0x24
.line 154
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v0
const/16 v1, 0x3c
if-eq v0, v1, :cond_2c
.line 156
new-instance v0, Lorg/spongycastle/crypto/DataLengthException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Bcrypt String length: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
.line 157
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ", 60 required."
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}, Lorg/spongycastle/crypto/DataLengthException;-><init>(Ljava/lang/String;)V
throw v0
.line 159
:cond_2c
const/4 v0, 0x0
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
if-ne v0, v2, :cond_3f
.line 160
invoke-virtual {p0, v5}, Ljava/lang/String;->charAt(I)C
move-result v0
if-ne v0, v2, :cond_3f
.line 161
invoke-virtual {p0, v4}, Ljava/lang/String;->charAt(I)C
move-result v0
if-eq v0, v2, :cond_47
.line 163
:cond_3f
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Invalid Bcrypt String format."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 165
:cond_47
const/4 v0, 0x1
invoke-virtual {p0, v0, v5}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v0
const-string v1, "2a"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_5c
.line 167
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Wrong Bcrypt version, 2a expected."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 172
:cond_5c
const/4 v0, 0x4
const/4 v1, 0x6
:try_start_5e
invoke-virtual {p0, v0, v1}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
:try_end_65
.catch Ljava/lang/NumberFormatException; {:try_start_5e .. :try_end_65} :catch_87
move-result v0
.line 179
if-lt v0, v3, :cond_6c
const/16 v1, 0x1f
if-le v0, v1, :cond_a1
.line 181
:cond_6c
new-instance v1, Ljava/lang/IllegalArgumentException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Invalid cost factor: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
const-string v2, ", 4 < cost < 31 expected."
invoke-virtual {v0, v2}, 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/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v1
.line 176
:catch_87
move-exception v0
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Invalid cost factor:"
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
.line 177
invoke-virtual {p0, v3, v4}, Ljava/lang/String;->substring(II)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 185
:cond_a1
if-nez p1, :cond_ab
.line 187
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Missing password."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 190
:cond_ab
invoke-virtual {p0, v2}, Ljava/lang/String;->lastIndexOf(I)I
move-result v1
add-int/lit8 v1, v1, 0x1
.line 191
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v2, v2, -0x1f
.line 190
invoke-virtual {p0, v1, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v1
.line 189
invoke-static {v1}, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodeSaltString(Ljava/lang/String;)[B
move-result-object v1
.line 193
invoke-static {p1, v1, v0}, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->generate([C[BI)Ljava/lang/String;
move-result-object v0
.line 195
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
return v0
.end method
.method private static createBcryptString([B[BI)Ljava/lang/String;
.registers 7
.prologue
const/16 v3, 0x24
.line 69
new-instance v1, Ljava/lang/StringBuffer;
const/16 v0, 0x3c
invoke-direct {v1, v0}, Ljava/lang/StringBuffer;-><init>(I)V
.line 70
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 71
const-string v0, "2a"
invoke-virtual {v1, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
.line 72
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 73
const/16 v0, 0xa
if-ge p2, v0, :cond_44
new-instance v0, Ljava/lang/StringBuilder;
const-string v2, "0"
invoke-direct {v0, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
:goto_27
invoke-virtual {v1, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
.line 74
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 75
invoke-static {p1}, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodeData([B)Ljava/lang/String;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
.line 77
invoke-static {p0, p1, p2}, Lorg/spongycastle/crypto/generators/BCrypt;->generate([B[BI)[B
move-result-object v0
.line 79
invoke-static {v0}, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodeData([B)Ljava/lang/String;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
.line 81
invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.line 73
:cond_44
invoke-static {p2}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
move-result-object v0
goto :goto_27
.end method
.method private static decodeSaltString(Ljava/lang/String;)[B
.registers 12
.prologue
const/16 v10, 0x18
const/16 v9, 0x10
const/4 v1, 0x0
.line 267
invoke-virtual {p0}, Ljava/lang/String;->toCharArray()[C
move-result-object v2
.line 269
new-instance v3, Ljava/io/ByteArrayOutputStream;
invoke-direct {v3, v9}, Ljava/io/ByteArrayOutputStream;-><init>(I)V
.line 272
array-length v0, v2
const/16 v4, 0x16
if-eq v0, v4, :cond_2f
.line 274
new-instance v0, Lorg/spongycastle/crypto/DataLengthException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v3, "Invalid base64 salt length: "
invoke-direct {v1, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
array-length v2, v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " , 22 required."
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}, Lorg/spongycastle/crypto/DataLengthException;-><init>(Ljava/lang/String;)V
throw v0
:cond_2f
move v0, v1
.line 278
:goto_30
array-length v4, v2
if-ge v0, v4, :cond_5d
.line 280
aget-char v4, v2, v0
.line 281
const/16 v5, 0x7a
if-gt v4, v5, :cond_45
const/16 v5, 0x2e
if-lt v4, v5, :cond_45
const/16 v5, 0x39
if-le v4, v5, :cond_5a
const/16 v5, 0x41
if-ge v4, v5, :cond_5a
.line 283
:cond_45
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Salt string contains invalid character: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(I)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 278
:cond_5a
add-int/lit8 v0, v0, 0x1
goto :goto_30
.line 288
:cond_5d
new-array v4, v10, [C
.line 289
array-length v0, v2
invoke-static {v2, v1, v4, v1, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move v0, v1
.line 294
:goto_64
if-ge v0, v10, :cond_9d
.line 296
sget-object v2, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
aget-char v5, v4, v0
aget-byte v2, v2, v5
.line 297
sget-object v5, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
add-int/lit8 v6, v0, 0x1
aget-char v6, v4, v6
aget-byte v5, v5, v6
.line 298
sget-object v6, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
add-int/lit8 v7, v0, 0x2
aget-char v7, v4, v7
aget-byte v6, v6, v7
.line 299
sget-object v7, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->decodingTable:[B
add-int/lit8 v8, v0, 0x3
aget-char v8, v4, v8
aget-byte v7, v7, v8
.line 301
shl-int/lit8 v2, v2, 0x2
shr-int/lit8 v8, v5, 0x4
or-int/2addr v2, v8
invoke-virtual {v3, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 302
shl-int/lit8 v2, v5, 0x4
shr-int/lit8 v5, v6, 0x2
or-int/2addr v2, v5
invoke-virtual {v3, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 303
shl-int/lit8 v2, v6, 0x6
or-int/2addr v2, v7
invoke-virtual {v3, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 294
add-int/lit8 v0, v0, 0x4
goto :goto_64
.line 306
:cond_9d
invoke-virtual {v3}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v0
.line 309
new-array v2, v9, [B
.line 310
invoke-static {v0, v1, v2, v1, v9}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 313
return-object v2
.end method
.method private static encodeData([B)Ljava/lang/String;
.registers 12
.prologue
const/16 v4, 0x10
const/4 v1, 0x1
const/4 v2, 0x0
.line 208
array-length v0, p0
const/16 v3, 0x18
if-eq v0, v3, :cond_28
array-length v0, p0
if-eq v0, v4, :cond_28
.line 210
new-instance v0, Lorg/spongycastle/crypto/DataLengthException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Invalid length: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
array-length v2, p0
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ", 24 for key or 16 for salt expected"
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}, Lorg/spongycastle/crypto/DataLengthException;-><init>(Ljava/lang/String;)V
throw v0
.line 213
:cond_28
array-length v0, p0
if-ne v0, v4, :cond_81
.line 216
const/16 v0, 0x12
new-array v0, v0, [B
.line 217
array-length v3, p0
invoke-static {p0, v2, v0, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move-object p0, v0
move v0, v1
.line 225
:goto_35
new-instance v4, Ljava/io/ByteArrayOutputStream;
invoke-direct {v4}, Ljava/io/ByteArrayOutputStream;-><init>()V
.line 226
array-length v5, p0
move v3, v2
.line 230
:goto_3c
if-ge v3, v5, :cond_88
.line 232
aget-byte v6, p0, v3
and-int/lit16 v6, v6, 0xff
.line 233
add-int/lit8 v7, v3, 0x1
aget-byte v7, p0, v7
and-int/lit16 v7, v7, 0xff
.line 234
add-int/lit8 v8, v3, 0x2
aget-byte v8, p0, v8
and-int/lit16 v8, v8, 0xff
.line 236
sget-object v9, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodingTable:[B
ushr-int/lit8 v10, v6, 0x2
and-int/lit8 v10, v10, 0x3f
aget-byte v9, v9, v10
invoke-virtual {v4, v9}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 237
sget-object v9, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodingTable:[B
shl-int/lit8 v6, v6, 0x4
ushr-int/lit8 v10, v7, 0x4
or-int/2addr v6, v10
and-int/lit8 v6, v6, 0x3f
aget-byte v6, v9, v6
invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 238
sget-object v6, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodingTable:[B
shl-int/lit8 v7, v7, 0x2
ushr-int/lit8 v9, v8, 0x6
or-int/2addr v7, v9
and-int/lit8 v7, v7, 0x3f
aget-byte v6, v6, v7
invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 239
sget-object v6, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->encodingTable:[B
and-int/lit8 v7, v8, 0x3f
aget-byte v6, v6, v7
invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V
.line 230
add-int/lit8 v3, v3, 0x3
goto :goto_3c
.line 222
:cond_81
array-length v0, p0
add-int/lit8 v0, v0, -0x1
aput-byte v2, p0, v0
move v0, v2
goto :goto_35
.line 242
:cond_88
invoke-virtual {v4}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v3
invoke-static {v3}, Lorg/spongycastle/util/Strings;->fromByteArray([B)Ljava/lang/String;
move-result-object v3
.line 243
if-ne v0, v1, :cond_99
.line 245
const/16 v0, 0x16
invoke-virtual {v3, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v0
.line 249
:goto_98
return-object v0
:cond_99
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
add-int/lit8 v0, v0, -0x1
invoke-virtual {v3, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v0
goto :goto_98
.end method
.method public static generate([C[BI)Ljava/lang/String;
.registers 8
.prologue
const/16 v0, 0x48
const/4 v4, 0x0
.line 98
if-nez p0, :cond_d
.line 100
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Password required."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 102
:cond_d
if-nez p1, :cond_17
.line 104
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Salt required."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 106
:cond_17
array-length v1, p1
const/16 v2, 0x10
if-eq v1, v2, :cond_32
.line 108
new-instance v0, Lorg/spongycastle/crypto/DataLengthException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "16 byte salt required: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
array-length v2, p1
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)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}, Lorg/spongycastle/crypto/DataLengthException;-><init>(Ljava/lang/String;)V
throw v0
.line 110
:cond_32
const/4 v1, 0x4
if-lt p2, v1, :cond_39
const/16 v1, 0x1f
if-le p2, v1, :cond_41
.line 112
:cond_39
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Invalid cost factor."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 115
:cond_41
invoke-static {p0}, Lorg/spongycastle/util/Strings;->toUTF8ByteArray([C)[B
move-result-object v1
.line 119
array-length v2, v1
if-lt v2, v0, :cond_5d
:goto_48
new-array v0, v0, [B
.line 121
array-length v2, v0
array-length v3, v1
if-le v2, v3, :cond_61
.line 123
array-length v2, v1
invoke-static {v1, v4, v0, v4, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 130
:goto_52
invoke-static {v1, v4}, Lorg/spongycastle/util/Arrays;->fill([BB)V
.line 132
invoke-static {v0, p1, p2}, Lorg/spongycastle/crypto/generators/OpenBSDBCrypt;->createBcryptString([B[BI)Ljava/lang/String;
move-result-object v1
.line 134
invoke-static {v0, v4}, Lorg/spongycastle/util/Arrays;->fill([BB)V
.line 136
return-object v1
.line 119
:cond_5d
array-length v0, v1
add-int/lit8 v0, v0, 0x1
goto :goto_48
.line 127
:cond_61
array-length v2, v0
invoke-static {v1, v4, v0, v4, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto :goto_52
.end method