Base64.smali
.class public abstract Lcom/cmcm/support/base/Base64;
.super Ljava/lang/Object;
.source "Base64.java"
# static fields
.field public static final BASE64CODE:Ljava/lang/String; = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
.field private static final DECODING_TABLE:[B
.field private static final ENCODING_TABLE:[B
.field public static final SPLIT_LINES_AT:I = 0x4c
# direct methods
.method static constructor <clinit>()V
.registers 4
.prologue
const/16 v3, 0x80
.line 55
const/16 v0, 0x40
new-array v0, v0, [B
fill-array-data v0, :array_60
sput-object v0, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
.line 181
new-array v0, v3, [B
sput-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
.line 183
const/4 v0, 0x0
:goto_10
if-ge v0, v3, :cond_1a
.line 184
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
const/4 v2, -0x1
aput-byte v2, v1, v0
.line 183
add-int/lit8 v0, v0, 0x1
goto :goto_10
.line 187
:cond_1a
const/16 v0, 0x41
:goto_1c
const/16 v1, 0x5a
if-gt v0, v1, :cond_2a
.line 188
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v2, v0, -0x41
int-to-byte v2, v2
aput-byte v2, v1, v0
.line 187
add-int/lit8 v0, v0, 0x1
goto :goto_1c
.line 191
:cond_2a
const/16 v0, 0x61
:goto_2c
const/16 v1, 0x7a
if-gt v0, v1, :cond_3c
.line 192
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v2, v0, -0x61
add-int/lit8 v2, v2, 0x1a
int-to-byte v2, v2
aput-byte v2, v1, v0
.line 191
add-int/lit8 v0, v0, 0x1
goto :goto_2c
.line 195
:cond_3c
const/16 v0, 0x30
:goto_3e
const/16 v1, 0x39
if-gt v0, v1, :cond_4e
.line 196
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v2, v0, -0x30
add-int/lit8 v2, v2, 0x34
int-to-byte v2, v2
aput-byte v2, v1, v0
.line 195
add-int/lit8 v0, v0, 0x1
goto :goto_3e
.line 199
:cond_4e
sget-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
const/16 v1, 0x2b
const/16 v2, 0x3e
aput-byte v2, v0, v1
.line 200
sget-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
const/16 v1, 0x2f
const/16 v2, 0x3f
aput-byte v2, v0, v1
.line 201
return-void
.line 55
nop
:array_60
.array-data 1
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
0x2bt
0x2ft
.end array-data
.end method
.method public constructor <init>()V
.registers 1
.prologue
.line 44
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static decode(Ljava/lang/String;)[B
.registers 11
.prologue
const/4 v1, 0x0
const/16 v9, 0x3d
.line 286
if-nez p0, :cond_d
.line 287
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Data must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 296
:cond_d
invoke-static {p0}, Lcom/cmcm/support/base/Base64;->discardNonBase64Chars(Ljava/lang/String;)Ljava/lang/String;
move-result-object v3
.line 298
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
const/4 v2, 0x4
if-ge v0, v2, :cond_3b
.line 299
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Wrong base64 (length: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v3}, 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, ")"
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 302
:cond_3b
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
add-int/lit8 v0, v0, -0x2
invoke-virtual {v3, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
if-ne v0, v9, :cond_a3
.line 303
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x1
new-array v0, v0, [B
:goto_55
move v2, v1
.line 312
:goto_56
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x4
if-ge v2, v4, :cond_c9
.line 313
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v5
aget-byte v4, v4, v5
.line 314
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v6, v2, 0x1
invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C
move-result v6
aget-byte v5, v5, v6
.line 315
sget-object v6, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v7, v2, 0x2
invoke-virtual {v3, v7}, Ljava/lang/String;->charAt(I)C
move-result v7
aget-byte v6, v6, v7
.line 316
sget-object v7, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v8, v2, 0x3
invoke-virtual {v3, v8}, Ljava/lang/String;->charAt(I)C
move-result v8
aget-byte v7, v7, v8
.line 318
shl-int/lit8 v4, v4, 0x2
shr-int/lit8 v8, v5, 0x4
or-int/2addr v4, v8
int-to-byte v4, v4
aput-byte v4, v0, v1
.line 319
add-int/lit8 v4, v1, 0x1
shl-int/lit8 v5, v5, 0x4
shr-int/lit8 v8, v6, 0x2
or-int/2addr v5, v8
int-to-byte v5, v5
aput-byte v5, v0, v4
.line 320
add-int/lit8 v4, v1, 0x2
shl-int/lit8 v5, v6, 0x6
or-int/2addr v5, v7
int-to-byte v5, v5
aput-byte v5, v0, v4
.line 321
add-int/lit8 v1, v1, 0x3
.line 312
add-int/lit8 v2, v2, 0x4
goto :goto_56
.line 304
:cond_a3
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
add-int/lit8 v0, v0, -0x1
invoke-virtual {v3, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
if-ne v0, v9, :cond_be
.line 305
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x2
new-array v0, v0, [B
goto :goto_55
.line 307
:cond_be
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
div-int/lit8 v0, v0, 0x4
mul-int/lit8 v0, v0, 0x3
new-array v0, v0, [B
goto :goto_55
.line 324
:cond_c9
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v1
add-int/lit8 v1, v1, -0x2
invoke-virtual {v3, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
if-ne v1, v9, :cond_fd
.line 325
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v2, v2, -0x4
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v2
aget-byte v1, v1, v2
.line 326
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x3
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v3
aget-byte v2, v2, v3
.line 328
array-length v3, v0
add-int/lit8 v3, v3, -0x1
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v2, v2, 0x4
or-int/2addr v1, v2
int-to-byte v1, v1
aput-byte v1, v0, v3
.line 347
:goto_fc
return-object v0
.line 329
:cond_fd
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v1
add-int/lit8 v1, v1, -0x1
invoke-virtual {v3, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
if-ne v1, v9, :cond_14a
.line 330
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v2, v2, -0x4
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v2
aget-byte v1, v1, v2
.line 331
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x3
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v4
aget-byte v2, v2, v4
.line 332
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v5
add-int/lit8 v5, v5, -0x2
invoke-virtual {v3, v5}, Ljava/lang/String;->charAt(I)C
move-result v3
aget-byte v3, v4, v3
.line 334
array-length v4, v0
add-int/lit8 v4, v4, -0x2
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v5, v2, 0x4
or-int/2addr v1, v5
int-to-byte v1, v1
aput-byte v1, v0, v4
.line 335
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v3, v3, 0x2
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
goto :goto_fc
.line 337
:cond_14a
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v2, v2, -0x4
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v2
aget-byte v1, v1, v2
.line 338
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x3
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v4
aget-byte v2, v2, v4
.line 339
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v5
add-int/lit8 v5, v5, -0x2
invoke-virtual {v3, v5}, Ljava/lang/String;->charAt(I)C
move-result v5
aget-byte v4, v4, v5
.line 340
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v6
add-int/lit8 v6, v6, -0x1
invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C
move-result v3
aget-byte v3, v5, v3
.line 342
array-length v5, v0
add-int/lit8 v5, v5, -0x3
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v6, v2, 0x4
or-int/2addr v1, v6
int-to-byte v1, v1
aput-byte v1, v0, v5
.line 343
array-length v1, v0
add-int/lit8 v1, v1, -0x2
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v5, v4, 0x2
or-int/2addr v2, v5
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 344
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v4, 0x6
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
goto/16 :goto_fc
.end method
.method public static decode([B)[B
.registers 11
.prologue
const/4 v1, 0x0
const/16 v9, 0x3d
.line 211
if-nez p0, :cond_13
.line 212
:try_start_5
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Data must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_d
.catch Ljava/lang/Exception; {:try_start_5 .. :try_end_d} :catch_d
.line 271
:catch_d
move-exception v0
.line 272
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
.line 273
const/4 v0, 0x0
:goto_12
return-object v0
.line 220
:cond_13
:try_start_13
invoke-static {p0}, Lcom/cmcm/support/base/Base64;->discardNonBase64Bytes([B)[B
move-result-object v3
.line 222
array-length v0, v3
const/4 v2, 0x4
if-ge v0, v2, :cond_3b
.line 223
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Wrong base64 (length: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
array-length v2, v3
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string 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 226
:cond_3b
array-length v0, v3
add-int/lit8 v0, v0, -0x2
aget-byte v0, v3, v0
if-ne v0, v9, :cond_90
.line 227
array-length v0, v3
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x1
new-array v0, v0, [B
:goto_4d
move v2, v1
.line 236
:goto_4e
array-length v4, v3
add-int/lit8 v4, v4, -0x4
if-ge v2, v4, :cond_ab
.line 237
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
aget-byte v5, v3, v2
aget-byte v4, v4, v5
.line 238
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v6, v2, 0x1
aget-byte v6, v3, v6
aget-byte v5, v5, v6
.line 239
sget-object v6, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v7, v2, 0x2
aget-byte v7, v3, v7
aget-byte v6, v6, v7
.line 240
sget-object v7, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v8, v2, 0x3
aget-byte v8, v3, v8
aget-byte v7, v7, v8
.line 242
shl-int/lit8 v4, v4, 0x2
shr-int/lit8 v8, v5, 0x4
or-int/2addr v4, v8
int-to-byte v4, v4
aput-byte v4, v0, v1
.line 243
add-int/lit8 v4, v1, 0x1
shl-int/lit8 v5, v5, 0x4
shr-int/lit8 v8, v6, 0x2
or-int/2addr v5, v8
int-to-byte v5, v5
aput-byte v5, v0, v4
.line 244
add-int/lit8 v4, v1, 0x2
shl-int/lit8 v5, v6, 0x6
or-int/2addr v5, v7
int-to-byte v5, v5
aput-byte v5, v0, v4
.line 245
add-int/lit8 v1, v1, 0x3
.line 236
add-int/lit8 v2, v2, 0x4
goto :goto_4e
.line 228
:cond_90
array-length v0, v3
add-int/lit8 v0, v0, -0x1
aget-byte v0, v3, v0
if-ne v0, v9, :cond_a3
.line 229
array-length v0, v3
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x2
new-array v0, v0, [B
goto :goto_4d
.line 231
:cond_a3
array-length v0, v3
div-int/lit8 v0, v0, 0x4
mul-int/lit8 v0, v0, 0x3
new-array v0, v0, [B
goto :goto_4d
.line 248
:cond_ab
array-length v1, v3
add-int/lit8 v1, v1, -0x2
aget-byte v1, v3, v1
if-ne v1, v9, :cond_d1
.line 249
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v2, v3
add-int/lit8 v2, v2, -0x4
aget-byte v2, v3, v2
aget-byte v1, v1, v2
.line 250
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v4, v3
add-int/lit8 v4, v4, -0x3
aget-byte v3, v3, v4
aget-byte v2, v2, v3
.line 252
array-length v3, v0
add-int/lit8 v3, v3, -0x1
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v2, v2, 0x4
or-int/2addr v1, v2
int-to-byte v1, v1
aput-byte v1, v0, v3
goto/16 :goto_12
.line 253
:cond_d1
array-length v1, v3
add-int/lit8 v1, v1, -0x1
aget-byte v1, v3, v1
if-ne v1, v9, :cond_10b
.line 254
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v2, v3
add-int/lit8 v2, v2, -0x4
aget-byte v2, v3, v2
aget-byte v1, v1, v2
.line 255
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v4, v3
add-int/lit8 v4, v4, -0x3
aget-byte v4, v3, v4
aget-byte v2, v2, v4
.line 256
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v5, v3
add-int/lit8 v5, v5, -0x2
aget-byte v3, v3, v5
aget-byte v3, v4, v3
.line 258
array-length v4, v0
add-int/lit8 v4, v4, -0x2
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v5, v2, 0x4
or-int/2addr v1, v5
int-to-byte v1, v1
aput-byte v1, v0, v4
.line 259
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v3, v3, 0x2
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
goto/16 :goto_12
.line 261
:cond_10b
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v2, v3
add-int/lit8 v2, v2, -0x4
aget-byte v2, v3, v2
aget-byte v1, v1, v2
.line 262
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v4, v3
add-int/lit8 v4, v4, -0x3
aget-byte v4, v3, v4
aget-byte v2, v2, v4
.line 263
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v5, v3
add-int/lit8 v5, v5, -0x2
aget-byte v5, v3, v5
aget-byte v4, v4, v5
.line 264
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v6, v3
add-int/lit8 v6, v6, -0x1
aget-byte v3, v3, v6
aget-byte v3, v5, v3
.line 266
array-length v5, v0
add-int/lit8 v5, v5, -0x3
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v6, v2, 0x4
or-int/2addr v1, v6
int-to-byte v1, v1
aput-byte v1, v0, v5
.line 267
array-length v1, v0
add-int/lit8 v1, v1, -0x2
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v5, v4, 0x2
or-int/2addr v2, v5
int-to-byte v2, v2
aput-byte v2, v0, v1
.line 268
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v4, 0x6
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
:try_end_14e
.catch Ljava/lang/Exception; {:try_start_13 .. :try_end_14e} :catch_d
goto/16 :goto_12
.end method
.method private static discardNonBase64Bytes([B)[B
.registers 7
.prologue
const/4 v1, 0x0
.line 365
array-length v0, p0
new-array v4, v0, [B
move v0, v1
move v2, v1
.line 368
:goto_6
array-length v3, p0
if-ge v0, v3, :cond_1b
.line 369
aget-byte v3, p0, v0
invoke-static {v3}, Lcom/cmcm/support/base/Base64;->isValidBase64Byte(B)Z
move-result v3
if-eqz v3, :cond_18
.line 370
add-int/lit8 v3, v2, 0x1
aget-byte v5, p0, v0
aput-byte v5, v4, v2
move v2, v3
.line 368
:cond_18
add-int/lit8 v0, v0, 0x1
goto :goto_6
.line 374
:cond_1b
new-array v0, v2, [B
.line 376
invoke-static {v4, v1, v0, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 378
return-object v0
.end method
.method private static discardNonBase64Chars(Ljava/lang/String;)Ljava/lang/String;
.registers 5
.prologue
.line 390
new-instance v1, Ljava/lang/StringBuffer;
invoke-direct {v1}, Ljava/lang/StringBuffer;-><init>()V
.line 392
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
.line 394
const/4 v0, 0x0
:goto_a
if-ge v0, v2, :cond_21
.line 395
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result v3
int-to-byte v3, v3
invoke-static {v3}, Lcom/cmcm/support/base/Base64;->isValidBase64Byte(B)Z
move-result v3
if-eqz v3, :cond_1e
.line 396
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result v3
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
.line 394
:cond_1e
add-int/lit8 v0, v0, 0x1
goto :goto_a
.line 400
:cond_21
invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public static encode(Ljava/lang/String;)Ljava/lang/String;
.registers 9
.prologue
const/4 v1, 0x0
.line 422
const-string v2, ""
.line 425
:try_start_3
const-string v0, "UTF-8"
invoke-virtual {p0, v0}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
:try_end_8
.catch Ljava/lang/Exception; {:try_start_3 .. :try_end_8} :catch_70
move-result-object v0
.line 430
:goto_9
array-length v3, v0
rem-int/lit8 v3, v3, 0x3
rsub-int/lit8 v3, v3, 0x3
rem-int/lit8 v3, v3, 0x3
.line 432
array-length v4, v0
add-int/2addr v4, v3
invoke-static {v4, v0}, Lcom/cmcm/support/base/Base64;->zeroPad(I[B)[B
move-result-object v4
move v0, v1
.line 435
:goto_17
array-length v5, v4
if-ge v0, v5, :cond_76
.line 436
aget-byte v5, v4, v0
shl-int/lit8 v5, v5, 0x10
add-int/lit8 v6, v0, 0x1
aget-byte v6, v4, v6
shl-int/lit8 v6, v6, 0x8
add-int/2addr v5, v6
add-int/lit8 v6, v0, 0x2
aget-byte v6, v4, v6
add-int/2addr v5, v6
.line 437
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v6, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
shr-int/lit8 v7, v5, 0x12
and-int/lit8 v7, v7, 0x3f
.line 438
invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C
move-result v6
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
shr-int/lit8 v7, v5, 0xc
and-int/lit8 v7, v7, 0x3f
invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C
move-result v6
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
shr-int/lit8 v7, v5, 0x6
and-int/lit8 v7, v7, 0x3f
invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C
move-result v6
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
and-int/lit8 v5, v5, 0x3f
.line 439
invoke-virtual {v6, v5}, Ljava/lang/String;->charAt(I)C
move-result v5
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
.line 435
add-int/lit8 v0, v0, 0x3
goto :goto_17
.line 426
:catch_70
move-exception v0
.line 427
invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B
move-result-object v0
goto :goto_9
.line 442
:cond_76
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2}, Ljava/lang/String;->length()I
move-result v4
sub-int/2addr v4, v3
invoke-virtual {v2, v1, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v2
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const-string v2, "=="
invoke-virtual {v2, v1, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, 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-static {v0}, Lcom/cmcm/support/base/Base64;->splitLines(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 443
invoke-virtual {v0}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public static encode(Ljava/io/InputStream;Ljava/io/OutputStream;)V
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.prologue
const/4 v4, 0x3
const/4 v3, 0x0
.line 156
if-nez p0, :cond_c
.line 157
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "InputStream must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 159
:cond_c
if-nez p1, :cond_16
.line 160
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "OutputStream must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 165
:cond_16
new-array v0, v4, [B
.line 167
:goto_18
invoke-virtual {p0, v0}, Ljava/io/InputStream;->read([B)I
move-result v2
const/4 v1, -0x1
if-eq v2, v1, :cond_32
.line 168
if-eq v2, v4, :cond_27
.line 170
new-array v1, v2, [B
.line 171
invoke-static {v0, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move-object v0, v1
.line 174
:cond_27
invoke-static {v0}, Lcom/cmcm/support/base/Base64;->encode([B)[B
move-result-object v1
.line 175
invoke-virtual {p1, v1}, Ljava/io/OutputStream;->write([B)V
.line 176
invoke-virtual {p1}, Ljava/io/OutputStream;->flush()V
goto :goto_18
.line 178
:cond_32
return-void
.end method
.method public static encode([B)[B
.registers 13
.prologue
const/4 v1, 0x0
const/16 v11, 0x3d
.line 76
if-nez p0, :cond_d
.line 77
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Data must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 82
:cond_d
array-length v0, p0
rem-int/lit8 v3, v0, 0x3
.line 83
if-nez v3, :cond_66
.line 84
array-length v0, p0
mul-int/lit8 v0, v0, 0x4
div-int/lit8 v0, v0, 0x3
new-array v0, v0, [B
.line 89
:goto_19
array-length v2, p0
sub-int v4, v2, v3
move v2, v1
.line 95
:goto_1d
if-ge v2, v4, :cond_70
.line 96
aget-byte v5, p0, v2
and-int/lit16 v5, v5, 0xff
.line 97
add-int/lit8 v6, v2, 0x1
aget-byte v6, p0, v6
and-int/lit16 v6, v6, 0xff
.line 98
add-int/lit8 v7, v2, 0x2
aget-byte v7, p0, v7
and-int/lit16 v7, v7, 0xff
.line 100
sget-object v8, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
ushr-int/lit8 v9, v5, 0x2
and-int/lit8 v9, v9, 0x3f
aget-byte v8, v8, v9
aput-byte v8, v0, v1
.line 101
add-int/lit8 v8, v1, 0x1
sget-object v9, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
shl-int/lit8 v5, v5, 0x4
ushr-int/lit8 v10, v6, 0x4
or-int/2addr v5, v10
and-int/lit8 v5, v5, 0x3f
aget-byte v5, v9, v5
aput-byte v5, v0, v8
.line 102
add-int/lit8 v5, v1, 0x2
sget-object v8, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
shl-int/lit8 v6, v6, 0x2
ushr-int/lit8 v9, v7, 0x6
or-int/2addr v6, v9
and-int/lit8 v6, v6, 0x3f
aget-byte v6, v8, v6
aput-byte v6, v0, v5
.line 103
add-int/lit8 v5, v1, 0x3
sget-object v6, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
and-int/lit8 v7, v7, 0x3f
aget-byte v6, v6, v7
aput-byte v6, v0, v5
.line 104
add-int/lit8 v1, v1, 0x4
.line 95
add-int/lit8 v2, v2, 0x3
goto :goto_1d
.line 86
:cond_66
array-length v0, p0
div-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x1
mul-int/lit8 v0, v0, 0x4
new-array v0, v0, [B
goto :goto_19
.line 116
:cond_70
packed-switch v3, :pswitch_data_de
.line 144
:goto_73
:pswitch_73
return-object v0
.line 120
:pswitch_74
array-length v1, p0
add-int/lit8 v1, v1, -0x1
aget-byte v1, p0, v1
and-int/lit16 v1, v1, 0xff
.line 121
ushr-int/lit8 v2, v1, 0x2
and-int/lit8 v2, v2, 0x3f
.line 122
shl-int/lit8 v1, v1, 0x4
and-int/lit8 v1, v1, 0x3f
.line 124
array-length v3, v0
add-int/lit8 v3, v3, -0x4
sget-object v4, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v2, v4, v2
aput-byte v2, v0, v3
.line 125
array-length v2, v0
add-int/lit8 v2, v2, -0x3
sget-object v3, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v1, v3, v1
aput-byte v1, v0, v2
.line 126
array-length v1, v0
add-int/lit8 v1, v1, -0x2
aput-byte v11, v0, v1
.line 127
array-length v1, v0
add-int/lit8 v1, v1, -0x1
aput-byte v11, v0, v1
goto :goto_73
.line 130
:pswitch_a0
array-length v1, p0
add-int/lit8 v1, v1, -0x2
aget-byte v1, p0, v1
and-int/lit16 v1, v1, 0xff
.line 131
array-length v2, p0
add-int/lit8 v2, v2, -0x1
aget-byte v2, p0, v2
and-int/lit16 v2, v2, 0xff
.line 133
ushr-int/lit8 v3, v1, 0x2
and-int/lit8 v3, v3, 0x3f
.line 134
shl-int/lit8 v1, v1, 0x4
ushr-int/lit8 v4, v2, 0x4
or-int/2addr v1, v4
and-int/lit8 v1, v1, 0x3f
.line 135
shl-int/lit8 v2, v2, 0x2
and-int/lit8 v2, v2, 0x3f
.line 137
array-length v4, v0
add-int/lit8 v4, v4, -0x4
sget-object v5, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v3, v5, v3
aput-byte v3, v0, v4
.line 138
array-length v3, v0
add-int/lit8 v3, v3, -0x3
sget-object v4, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v1, v4, v1
aput-byte v1, v0, v3
.line 139
array-length v1, v0
add-int/lit8 v1, v1, -0x2
sget-object v3, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v2, v3, v2
aput-byte v2, v0, v1
.line 140
array-length v1, v0
add-int/lit8 v1, v1, -0x1
aput-byte v11, v0, v1
goto :goto_73
.line 116
:pswitch_data_de
.packed-switch 0x0
:pswitch_73
:pswitch_74
:pswitch_a0
.end packed-switch
.end method
.method private static isValidBase64Byte(B)Z
.registers 5
.prologue
const/4 v0, 0x1
const/4 v1, 0x0
.line 410
const/16 v2, 0x3d
if-ne p0, v2, :cond_7
.line 417
:cond_6
:goto_6
return v0
.line 412
:cond_7
if-ltz p0, :cond_d
const/16 v2, 0x80
if-lt p0, v2, :cond_f
:cond_d
move v0, v1
.line 413
goto :goto_6
.line 414
:cond_f
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
aget-byte v2, v2, p0
const/4 v3, -0x1
if-ne v2, v3, :cond_6
move v0, v1
.line 415
goto :goto_6
.end method
.method public static splitLines(Ljava/lang/String;)Ljava/lang/String;
.registers 5
.prologue
.line 449
const-string v1, ""
.line 450
const/4 v0, 0x0
:goto_3
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
if-ge v0, v2, :cond_3e
.line 452
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v3, v0, 0x4c
invoke-static {v2, v3}, Ljava/lang/Math;->min(II)I
move-result v2
invoke-virtual {p0, v0, v2}, 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
.line 453
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, "\r\n"
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
.line 450
add-int/lit8 v0, v0, 0x4c
goto :goto_3
.line 456
:cond_3e
return-object v1
.end method
.method public static zeroPad(I[B)[B
.registers 5
.prologue
const/4 v2, 0x0
.line 46
new-array v0, p0, [B
.line 47
array-length v1, p1
invoke-static {p1, v2, v0, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 48
return-object v0
.end method