Base64Util.smali
.class public Lcom/iwangding/basis/util/Base64Util;
.super Ljava/lang/Object;
.source "Base64Util.java"
# static fields
.field private static final legalChars:[C
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 8
const-string v0, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
invoke-virtual {v0}, Ljava/lang/String;->toCharArray()[C
move-result-object v0
sput-object v0, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
return-void
.end method
.method public constructor <init>()V
.registers 1
.prologue
.line 7
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static decode(C)I
.registers 4
.prologue
.line 55
const/16 v0, 0x41
if-lt p0, v0, :cond_b
const/16 v0, 0x5a
if-gt p0, v0, :cond_b
.line 56
add-int/lit8 v0, p0, -0x41
.line 68
:goto_a
return v0
.line 57
:cond_b
const/16 v0, 0x61
if-lt p0, v0, :cond_18
const/16 v0, 0x7a
if-gt p0, v0, :cond_18
.line 58
add-int/lit8 v0, p0, -0x61
add-int/lit8 v0, v0, 0x1a
goto :goto_a
.line 59
:cond_18
const/16 v0, 0x30
if-lt p0, v0, :cond_27
const/16 v0, 0x39
if-gt p0, v0, :cond_27
.line 60
add-int/lit8 v0, p0, -0x30
add-int/lit8 v0, v0, 0x1a
add-int/lit8 v0, v0, 0x1a
goto :goto_a
.line 62
:cond_27
sparse-switch p0, :sswitch_data_4c
.line 70
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "unexpected code: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(C)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/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 64
:sswitch_43
const/16 v0, 0x3e
goto :goto_a
.line 66
:sswitch_46
const/16 v0, 0x3f
goto :goto_a
.line 68
:sswitch_49
const/4 v0, 0x0
goto :goto_a
.line 62
nop
:sswitch_data_4c
.sparse-switch
0x2b -> :sswitch_43
0x2f -> :sswitch_46
0x3d -> :sswitch_49
.end sparse-switch
.end method
.method private static decode(Ljava/lang/String;Ljava/io/OutputStream;)V
.registers 7
.prologue
const/16 v4, 0x3d
.line 98
const/4 v0, 0x0
.line 100
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v1
.line 103
:goto_7
if-ge v0, v1, :cond_14
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result v2
const/16 v3, 0x20
if-gt v2, v3, :cond_14
.line 104
add-int/lit8 v0, v0, 0x1
goto :goto_7
.line 106
:cond_14
if-ne v0, v1, :cond_17
.line 122
:cond_16
return-void
.line 109
:cond_17
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result v2
invoke-static {v2}, Lcom/iwangding/basis/util/Base64Util;->decode(C)I
move-result v2
shl-int/lit8 v2, v2, 0x12
add-int/lit8 v3, v0, 0x1
invoke-virtual {p0, v3}, Ljava/lang/String;->charAt(I)C
move-result v3
invoke-static {v3}, Lcom/iwangding/basis/util/Base64Util;->decode(C)I
move-result v3
shl-int/lit8 v3, v3, 0xc
add-int/2addr v2, v3
add-int/lit8 v3, v0, 0x2
invoke-virtual {p0, v3}, Ljava/lang/String;->charAt(I)C
move-result v3
invoke-static {v3}, Lcom/iwangding/basis/util/Base64Util;->decode(C)I
move-result v3
shl-int/lit8 v3, v3, 0x6
add-int/2addr v2, v3
add-int/lit8 v3, v0, 0x3
.line 110
invoke-virtual {p0, v3}, Ljava/lang/String;->charAt(I)C
move-result v3
invoke-static {v3}, Lcom/iwangding/basis/util/Base64Util;->decode(C)I
move-result v3
add-int/2addr v2, v3
.line 112
shr-int/lit8 v3, v2, 0x10
and-int/lit16 v3, v3, 0xff
invoke-virtual {p1, v3}, Ljava/io/OutputStream;->write(I)V
.line 113
add-int/lit8 v3, v0, 0x2
invoke-virtual {p0, v3}, Ljava/lang/String;->charAt(I)C
move-result v3
if-eq v3, v4, :cond_16
.line 115
shr-int/lit8 v3, v2, 0x8
and-int/lit16 v3, v3, 0xff
invoke-virtual {p1, v3}, Ljava/io/OutputStream;->write(I)V
.line 116
add-int/lit8 v3, v0, 0x3
invoke-virtual {p0, v3}, Ljava/lang/String;->charAt(I)C
move-result v3
if-eq v3, v4, :cond_16
.line 118
and-int/lit16 v2, v2, 0xff
invoke-virtual {p1, v2}, Ljava/io/OutputStream;->write(I)V
.line 120
add-int/lit8 v0, v0, 0x4
.line 121
goto :goto_7
.end method
.method public static decode(Ljava/lang/String;)[B
.registers 6
.prologue
.line 81
new-instance v0, Ljava/io/ByteArrayOutputStream;
invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;-><init>()V
.line 83
:try_start_5
invoke-static {p0, v0}, Lcom/iwangding/basis/util/Base64Util;->decode(Ljava/lang/String;Ljava/io/OutputStream;)V
:try_end_8
.catch Ljava/io/IOException; {:try_start_5 .. :try_end_8} :catch_10
.line 87
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v1
.line 89
:try_start_c
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->close()V
:try_end_f
.catch Ljava/io/IOException; {:try_start_c .. :try_end_f} :catch_17
.line 94
:goto_f
return-object v1
.line 84
:catch_10
move-exception v0
.line 85
new-instance v0, Ljava/lang/RuntimeException;
invoke-direct {v0}, Ljava/lang/RuntimeException;-><init>()V
throw v0
.line 91
:catch_17
move-exception v0
.line 92
sget-object v2, Ljava/lang/System;->err:Ljava/io/PrintStream;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "Error while decoding BASE64: "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v0}, Ljava/io/IOException;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v3, 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-virtual {v2, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
goto :goto_f
.end method
.method public static encode([B)Ljava/lang/String;
.registers 10
.prologue
const/4 v1, 0x0
.line 11
.line 12
array-length v4, p0
.line 13
new-instance v5, Ljava/lang/StringBuffer;
array-length v0, p0
mul-int/lit8 v0, v0, 0x3
div-int/lit8 v0, v0, 0x2
invoke-direct {v5, v0}, Ljava/lang/StringBuffer;-><init>(I)V
.line 15
add-int/lit8 v6, v4, -0x3
move v2, v1
move v0, v1
.line 19
:goto_10
if-gt v0, v6, :cond_63
.line 20
aget-byte v3, p0, v0
and-int/lit16 v3, v3, 0xff
shl-int/lit8 v3, v3, 0x10
add-int/lit8 v7, v0, 0x1
aget-byte v7, p0, v7
and-int/lit16 v7, v7, 0xff
shl-int/lit8 v7, v7, 0x8
or-int/2addr v3, v7
add-int/lit8 v7, v0, 0x2
aget-byte v7, p0, v7
and-int/lit16 v7, v7, 0xff
or-int/2addr v3, v7
.line 23
sget-object v7, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v8, v3, 0x12
and-int/lit8 v8, v8, 0x3f
aget-char v7, v7, v8
invoke-virtual {v5, v7}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 24
sget-object v7, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v8, v3, 0xc
and-int/lit8 v8, v8, 0x3f
aget-char v7, v7, v8
invoke-virtual {v5, v7}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 25
sget-object v7, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v8, v3, 0x6
and-int/lit8 v8, v8, 0x3f
aget-char v7, v7, v8
invoke-virtual {v5, v7}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 26
sget-object v7, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
and-int/lit8 v3, v3, 0x3f
aget-char v3, v7, v3
invoke-virtual {v5, v3}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 28
add-int/lit8 v3, v0, 0x3
.line 30
add-int/lit8 v0, v2, 0x1
const/16 v7, 0xe
if-lt v2, v7, :cond_60
.line 32
const-string v0, " "
invoke-virtual {v5, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move v0, v1
:cond_60
move v2, v0
move v0, v3
.line 34
goto :goto_10
.line 36
:cond_63
add-int v2, v1, v4
add-int/lit8 v2, v2, -0x2
if-ne v0, v2, :cond_a3
.line 37
aget-byte v1, p0, v0
and-int/lit16 v1, v1, 0xff
shl-int/lit8 v1, v1, 0x10
add-int/lit8 v0, v0, 0x1
aget-byte v0, p0, v0
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x8
or-int/2addr v0, v1
.line 39
sget-object v1, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v2, v0, 0x12
and-int/lit8 v2, v2, 0x3f
aget-char v1, v1, v2
invoke-virtual {v5, v1}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 40
sget-object v1, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v2, v0, 0xc
and-int/lit8 v2, v2, 0x3f
aget-char v1, v1, v2
invoke-virtual {v5, v1}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 41
sget-object v1, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v0, v0, 0x6
and-int/lit8 v0, v0, 0x3f
aget-char v0, v1, v0
invoke-virtual {v5, v0}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 42
const-string v0, "="
invoke-virtual {v5, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
.line 51
:cond_9e
:goto_9e
invoke-virtual {v5}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.line 43
:cond_a3
add-int/2addr v1, v4
add-int/lit8 v1, v1, -0x1
if-ne v0, v1, :cond_9e
.line 44
aget-byte v0, p0, v0
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x10
.line 46
sget-object v1, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v2, v0, 0x12
and-int/lit8 v2, v2, 0x3f
aget-char v1, v1, v2
invoke-virtual {v5, v1}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 47
sget-object v1, Lcom/iwangding/basis/util/Base64Util;->legalChars:[C
shr-int/lit8 v0, v0, 0xc
and-int/lit8 v0, v0, 0x3f
aget-char v0, v1, v0
invoke-virtual {v5, v0}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 48
const-string v0, "=="
invoke-virtual {v5, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
goto :goto_9e
.end method