SecurityUtils.smali
.class Lcom/kwad/sdk/api/loader/SecurityUtils;
.super Ljava/lang/Object;
# static fields
.field private static final HEX_CHARS:[C
# direct methods
.method static constructor <clinit>()V
.registers 1
const/16 v0, 0x10
new-array v0, v0, [C
fill-array-data v0, :array_a
sput-object v0, Lcom/kwad/sdk/api/loader/SecurityUtils;->HEX_CHARS:[C
return-void
:array_a
.array-data 2
0x30s
0x31s
0x32s
0x33s
0x34s
0x35s
0x36s
0x37s
0x38s
0x39s
0x61s
0x62s
0x63s
0x64s
0x65s
0x66s
.end array-data
.end method
.method constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method static getFileMD5(Ljava/io/File;)Ljava/lang/String;
.registers 9
const-string v0, ""
:try_start_2
const-string v1, "MD5"
invoke-static {v1}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;
move-result-object v2
new-instance v1, Ljava/io/FileInputStream;
invoke-direct {v1, p0}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
new-instance v3, Ljava/security/DigestInputStream;
invoke-direct {v3, v1, v2}, Ljava/security/DigestInputStream;-><init>(Ljava/io/InputStream;Ljava/security/MessageDigest;)V
const/16 v1, 0x400
new-array v4, v1, [B
invoke-virtual {v3, v4}, Ljava/security/DigestInputStream;->read([B)I
move-result v1
:goto_1a
const/4 v5, -0x1
if-eq v1, v5, :cond_22
invoke-virtual {v3, v4}, Ljava/security/DigestInputStream;->read([B)I
move-result v1
goto :goto_1a
:cond_22
invoke-virtual {v2}, Ljava/security/MessageDigest;->digest()[B
move-result-object v2
new-instance v3, Ljava/lang/StringBuilder;
array-length v1, v2
mul-int/lit8 v1, v1, 0x2
invoke-direct {v3, v1}, Ljava/lang/StringBuilder;-><init>(I)V
array-length v4, v2
const/4 v1, 0x0
:goto_30
if-ge v1, v4, :cond_4b
aget-byte v5, v2, v1
and-int/lit16 v6, v5, 0xff
const/16 v7, 0x10
if-ge v6, v7, :cond_3f
const-string v6, "0"
invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
:cond_3f
and-int/lit16 v5, v5, 0xff
invoke-static {v5}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;
move-result-object v5
invoke-virtual {v3, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
add-int/lit8 v1, v1, 0x1
goto :goto_30
:cond_4b
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
:try_end_4e
.catch Ljava/lang/Exception; {:try_start_2 .. :try_end_4e} :catch_50
move-result-object v0
:goto_4f
return-object v0
:catch_50
move-exception v1
invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_4f
.end method
.method static md5Hex(Ljava/lang/String;)Ljava/lang/String;
.registers 5
const/4 v0, 0x0
if-eqz p0, :cond_9
:try_start_3
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v1
if-nez v1, :cond_c
:cond_9
const-string v0, ""
:cond_b
:goto_b
return-object v0
:cond_c
const-string v1, "MD5"
invoke-static {v1}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;
move-result-object v1
const-string v2, "UTF-8"
invoke-virtual {p0, v2}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
move-result-object v2
invoke-virtual {v1, v2}, Ljava/security/MessageDigest;->update([B)V
invoke-virtual {v1}, Ljava/security/MessageDigest;->digest()[B
move-result-object v1
array-length v2, v1
const/4 v3, 0x1
if-lt v2, v3, :cond_b
const/4 v2, 0x0
array-length v3, v1
invoke-static {v1, v2, v3}, Lcom/kwad/sdk/api/loader/SecurityUtils;->toHexString([BII)Ljava/lang/String;
:try_end_28
.catch Ljava/lang/Throwable; {:try_start_3 .. :try_end_28} :catch_2a
move-result-object v0
goto :goto_b
:catch_2a
move-exception v1
goto :goto_b
.end method
.method private static safetyCloseStream(Ljava/io/Closeable;)V
.registers 2
if-eqz p0, :cond_5
:try_start_2
invoke-interface {p0}, Ljava/io/Closeable;->close()V
:try_end_5
.catch Ljava/io/IOException; {:try_start_2 .. :try_end_5} :catch_6
:cond_5
:goto_5
return-void
:catch_6
move-exception v0
goto :goto_5
.end method
.method private static toHexString([BII)Ljava/lang/String;
.registers 11
const/4 v1, 0x0
if-nez p0, :cond_b
new-instance v0, Ljava/lang/NullPointerException;
const-string v1, "bytes is null"
invoke-direct {v0, v1}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
throw v0
:cond_b
if-ltz p1, :cond_12
add-int v0, p1, p2
array-length v2, p0
if-le v0, v2, :cond_18
:cond_12
new-instance v0, Ljava/lang/IndexOutOfBoundsException;
invoke-direct {v0}, Ljava/lang/IndexOutOfBoundsException;-><init>()V
throw v0
:cond_18
mul-int/lit8 v0, p2, 0x2
new-array v3, v0, [C
move v0, v1
move v2, v1
:goto_1e
if-ge v0, p2, :cond_3d
add-int v4, v0, p1
aget-byte v4, p0, v4
and-int/lit16 v4, v4, 0xff
add-int/lit8 v5, v2, 0x1
sget-object v6, Lcom/kwad/sdk/api/loader/SecurityUtils;->HEX_CHARS:[C
shr-int/lit8 v7, v4, 0x4
aget-char v6, v6, v7
aput-char v6, v3, v2
add-int/lit8 v2, v5, 0x1
sget-object v6, Lcom/kwad/sdk/api/loader/SecurityUtils;->HEX_CHARS:[C
and-int/lit8 v4, v4, 0xf
aget-char v4, v6, v4
aput-char v4, v3, v5
add-int/lit8 v0, v0, 0x1
goto :goto_1e
:cond_3d
new-instance v0, Ljava/lang/String;
mul-int/lit8 v2, p2, 0x2
invoke-direct {v0, v3, v1, v2}, Ljava/lang/String;-><init>([CII)V
return-object v0
.end method