b.smali
.class public final Lcom/subgraph/orchid/encoders/b;
.super Ljava/lang/Object;
.source "Base64Encoder.java"
# interfaces
.implements Lcom/subgraph/orchid/encoders/c;
# instance fields
.field private decodingTable:[B
.field private encodingTable:[B
.field private padding:B
# direct methods
.method public constructor <init>()V
.registers 2
.prologue
.line 46
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 9
const/16 v0, 0x40
new-array v0, v0, [B
fill-array-data v0, :array_1a
iput-object v0, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
.line 25
const/16 v0, 0x3d
iput-byte v0, p0, Lcom/subgraph/orchid/encoders/b;->padding:B
.line 30
const/16 v0, 0x80
new-array v0, v0, [B
iput-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
.line 47
invoke-direct {p0}, Lcom/subgraph/orchid/encoders/b;->initialiseDecodingTable()V
.line 48
return-void
.line 9
:array_1a
.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 private decodeLastBlock(Ljava/io/OutputStream;CCCC)I
.registers 11
.prologue
.line 270
iget-byte v0, p0, Lcom/subgraph/orchid/encoders/b;->padding:B
if-ne p4, v0, :cond_22
.line 272
iget-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v0, v0, p2
.line 273
iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v1, v1, p3
.line 275
or-int v2, v0, v1
if-gez v2, :cond_18
.line 277
new-instance v0, Ljava/io/IOException;
const-string v1, "invalid characters encountered at end of base64 data"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 280
:cond_18
shl-int/lit8 v0, v0, 0x2
shr-int/lit8 v1, v1, 0x4
or-int/2addr v0, v1
invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V
.line 282
const/4 v0, 0x1
.line 316
:goto_21
return v0
.line 284
:cond_22
iget-byte v0, p0, Lcom/subgraph/orchid/encoders/b;->padding:B
if-ne p5, v0, :cond_51
.line 286
iget-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v0, v0, p2
.line 287
iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v1, v1, p3
.line 288
iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v2, v2, p4
.line 290
or-int v3, v0, v1
or-int/2addr v3, v2
if-gez v3, :cond_3f
.line 292
new-instance v0, Ljava/io/IOException;
const-string v1, "invalid characters encountered at end of base64 data"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 295
:cond_3f
shl-int/lit8 v0, v0, 0x2
shr-int/lit8 v3, v1, 0x4
or-int/2addr v0, v3
invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V
.line 296
shl-int/lit8 v0, v1, 0x4
shr-int/lit8 v1, v2, 0x2
or-int/2addr v0, v1
invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V
.line 298
const/4 v0, 0x2
goto :goto_21
.line 302
:cond_51
iget-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v0, v0, p2
.line 303
iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v1, v1, p3
.line 304
iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v2, v2, p4
.line 305
iget-object v3, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
aget-byte v3, v3, p5
.line 307
or-int v4, v0, v1
or-int/2addr v4, v2
or-int/2addr v4, v3
if-gez v4, :cond_6f
.line 309
new-instance v0, Ljava/io/IOException;
const-string v1, "invalid characters encountered at end of base64 data"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 312
:cond_6f
shl-int/lit8 v0, v0, 0x2
shr-int/lit8 v4, v1, 0x4
or-int/2addr v0, v4
invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V
.line 313
shl-int/lit8 v0, v1, 0x4
shr-int/lit8 v1, v2, 0x2
or-int/2addr v0, v1
invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V
.line 314
shl-int/lit8 v0, v2, 0x6
or-int/2addr v0, v3
invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V
.line 316
const/4 v0, 0x3
goto :goto_21
.end method
.method private static ignore(C)Z
.registers 2
.prologue
.line 119
const/16 v0, 0xa
if-eq p0, v0, :cond_10
const/16 v0, 0xd
if-eq p0, v0, :cond_10
const/16 v0, 0x9
if-eq p0, v0, :cond_10
const/16 v0, 0x20
if-ne p0, v0, :cond_12
:cond_10
const/4 v0, 0x1
:goto_11
return v0
:cond_12
const/4 v0, 0x0
goto :goto_11
.end method
.method private initialiseDecodingTable()V
.registers 5
.prologue
const/4 v0, 0x0
.line 34
move v1, v0
:goto_2
const/16 v2, 0x80
if-ge v1, v2, :cond_e
.line 36
iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
const/4 v3, -0x1
aput-byte v3, v2, v1
.line 34
add-int/lit8 v1, v1, 0x1
goto :goto_2
.line 39
:cond_e
:goto_e
const/16 v1, 0x40
if-ge v0, v1, :cond_1e
.line 41
iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
aget-byte v2, v2, v0
int-to-byte v3, v0
aput-byte v3, v1, v2
.line 39
add-int/lit8 v0, v0, 0x1
goto :goto_e
.line 43
:cond_1e
return-void
.end method
.method private static nextI(Ljava/lang/String;II)I
.registers 4
.prologue
.line 322
:goto_0
if-ge p1, p2, :cond_f
invoke-virtual {p0, p1}, Ljava/lang/String;->charAt(I)C
move-result v0
invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z
move-result v0
if-eqz v0, :cond_f
.line 324
add-int/lit8 p1, p1, 0x1
goto :goto_0
.line 326
:cond_f
return p1
.end method
.method private static nextI([BII)I
.registers 4
.prologue
.line 192
:goto_0
if-ge p1, p2, :cond_e
aget-byte v0, p0, p1
int-to-char v0, v0
invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z
move-result v0
if-eqz v0, :cond_e
.line 194
add-int/lit8 p1, p1, 0x1
goto :goto_0
.line 196
:cond_e
return p1
.end method
# virtual methods
.method public final a([BILjava/io/OutputStream;)I
.registers 13
.prologue
const/4 v0, 0x0
.line 62
rem-int/lit8 v2, p2, 0x3
.line 63
sub-int v3, p2, v2
move v1, v0
.line 66
:goto_6
if-ge v1, v3, :cond_4b
.line 68
aget-byte v4, p1, v1
and-int/lit16 v4, v4, 0xff
.line 69
add-int/lit8 v5, v1, 0x1
aget-byte v5, p1, v5
and-int/lit16 v5, v5, 0xff
.line 70
add-int/lit8 v6, v1, 0x2
aget-byte v6, p1, v6
and-int/lit16 v6, v6, 0xff
.line 72
iget-object v7, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
ushr-int/lit8 v8, v4, 0x2
and-int/lit8 v8, v8, 0x3f
aget-byte v7, v7, v8
invoke-virtual {p3, v7}, Ljava/io/OutputStream;->write(I)V
.line 73
iget-object v7, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
shl-int/lit8 v4, v4, 0x4
ushr-int/lit8 v8, v5, 0x4
or-int/2addr v4, v8
and-int/lit8 v4, v4, 0x3f
aget-byte v4, v7, v4
invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V
.line 74
iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
shl-int/lit8 v5, v5, 0x2
ushr-int/lit8 v7, v6, 0x6
or-int/2addr v5, v7
and-int/lit8 v5, v5, 0x3f
aget-byte v4, v4, v5
invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V
.line 75
iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
and-int/lit8 v5, v6, 0x3f
aget-byte v4, v4, v5
invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V
.line 66
add-int/lit8 v1, v1, 0x3
goto :goto_6
.line 84
:cond_4b
packed-switch v2, :pswitch_data_b2
.line 113
:goto_4e
:pswitch_4e
div-int/lit8 v1, v3, 0x3
shl-int/lit8 v1, v1, 0x2
if-nez v2, :cond_af
:goto_54
add-int/2addr v0, v1
return v0
.line 89
:pswitch_56
aget-byte v1, p1, v3
and-int/lit16 v1, v1, 0xff
.line 90
ushr-int/lit8 v4, v1, 0x2
and-int/lit8 v4, v4, 0x3f
.line 91
shl-int/lit8 v1, v1, 0x4
and-int/lit8 v1, v1, 0x3f
.line 93
iget-object v5, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
aget-byte v4, v5, v4
invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V
.line 94
iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
aget-byte v1, v4, v1
invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V
.line 95
iget-byte v1, p0, Lcom/subgraph/orchid/encoders/b;->padding:B
invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V
.line 96
iget-byte v1, p0, Lcom/subgraph/orchid/encoders/b;->padding:B
invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V
goto :goto_4e
.line 99
:pswitch_7b
aget-byte v1, p1, v3
and-int/lit16 v1, v1, 0xff
.line 100
add-int/lit8 v4, v3, 0x1
aget-byte v4, p1, v4
and-int/lit16 v4, v4, 0xff
.line 102
ushr-int/lit8 v5, v1, 0x2
and-int/lit8 v5, v5, 0x3f
.line 103
shl-int/lit8 v1, v1, 0x4
ushr-int/lit8 v6, v4, 0x4
or-int/2addr v1, v6
and-int/lit8 v1, v1, 0x3f
.line 104
shl-int/lit8 v4, v4, 0x2
and-int/lit8 v4, v4, 0x3f
.line 106
iget-object v6, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
aget-byte v5, v6, v5
invoke-virtual {p3, v5}, Ljava/io/OutputStream;->write(I)V
.line 107
iget-object v5, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
aget-byte v1, v5, v1
invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V
.line 108
iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B
aget-byte v1, v1, v4
invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V
.line 109
iget-byte v1, p0, Lcom/subgraph/orchid/encoders/b;->padding:B
invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V
goto :goto_4e
.line 113
:cond_af
const/4 v0, 0x4
goto :goto_54
.line 84
nop
:pswitch_data_b2
.packed-switch 0x0
:pswitch_4e
:pswitch_56
:pswitch_7b
.end packed-switch
.end method
.method public final b([BILjava/io/OutputStream;)I
.registers 12
.prologue
const/4 v1, 0x0
.line 136
.line 140
:goto_1
if-lez p2, :cond_11
.line 142
add-int/lit8 v0, p2, -0x1
aget-byte v0, p1, v0
int-to-char v0, v0
invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z
move-result v0
if-eqz v0, :cond_11
.line 147
add-int/lit8 p2, p2, -0x1
goto :goto_1
.line 151
:cond_11
add-int/lit8 v2, p2, -0x4
.line 153
invoke-static {p1, v1, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I
move-result v0
move v6, v1
.line 155
:goto_18
if-ge v0, v2, :cond_72
.line 157
iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v3, v0, 0x1
aget-byte v0, p1, v0
aget-byte v0, v1, v0
.line 159
invoke-static {p1, v3, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I
move-result v1
.line 161
iget-object v3, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v4, v1, 0x1
aget-byte v1, p1, v1
aget-byte v1, v3, v1
.line 163
invoke-static {p1, v4, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I
move-result v3
.line 165
iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v5, v3, 0x1
aget-byte v3, p1, v3
aget-byte v3, v4, v3
.line 167
invoke-static {p1, v5, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I
move-result v4
.line 169
iget-object v5, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v7, v4, 0x1
aget-byte v4, p1, v4
aget-byte v4, v5, v4
.line 171
or-int v5, v0, v1
or-int/2addr v5, v3
or-int/2addr v5, v4
if-gez v5, :cond_54
.line 173
new-instance v0, Ljava/io/IOException;
const-string v1, "invalid characters encountered in base64 data"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 176
:cond_54
shl-int/lit8 v0, v0, 0x2
shr-int/lit8 v5, v1, 0x4
or-int/2addr v0, v5
invoke-virtual {p3, v0}, Ljava/io/OutputStream;->write(I)V
.line 177
shl-int/lit8 v0, v1, 0x4
shr-int/lit8 v1, v3, 0x2
or-int/2addr v0, v1
invoke-virtual {p3, v0}, Ljava/io/OutputStream;->write(I)V
.line 178
shl-int/lit8 v0, v3, 0x6
or-int/2addr v0, v4
invoke-virtual {p3, v0}, Ljava/io/OutputStream;->write(I)V
.line 180
add-int/lit8 v1, v6, 0x3
.line 182
invoke-static {p1, v7, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I
move-result v0
move v6, v1
goto :goto_18
.line 185
:cond_72
add-int/lit8 v0, p2, -0x4
aget-byte v0, p1, v0
int-to-char v2, v0
add-int/lit8 v0, p2, -0x3
aget-byte v0, p1, v0
int-to-char v3, v0
add-int/lit8 v0, p2, -0x2
aget-byte v0, p1, v0
int-to-char v4, v0
add-int/lit8 v0, p2, -0x1
aget-byte v0, p1, v0
int-to-char v5, v0
move-object v0, p0
move-object v1, p3
invoke-direct/range {v0 .. v5}, Lcom/subgraph/orchid/encoders/b;->decodeLastBlock(Ljava/io/OutputStream;CCCC)I
move-result v0
add-int/2addr v0, v6
.line 187
return v0
.end method
.method public final decode(Ljava/lang/String;Ljava/io/OutputStream;)I
.registers 12
.prologue
const/4 v1, 0x0
.line 211
.line 213
invoke-virtual {p1}, Ljava/lang/String;->length()I
move-result v0
move v5, v0
.line 215
:goto_6
if-lez v5, :cond_18
.line 217
add-int/lit8 v0, v5, -0x1
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z
move-result v0
if-eqz v0, :cond_18
.line 222
add-int/lit8 v0, v5, -0x1
move v5, v0
goto :goto_6
.line 226
:cond_18
add-int/lit8 v2, v5, -0x4
.line 228
invoke-static {p1, v1, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I
move-result v0
move v6, v1
.line 230
:goto_1f
if-ge v0, v2, :cond_81
.line 232
iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v3, v0, 0x1
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
aget-byte v0, v1, v0
.line 234
invoke-static {p1, v3, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I
move-result v1
.line 236
iget-object v3, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v4, v1, 0x1
invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
aget-byte v1, v3, v1
.line 238
invoke-static {p1, v4, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I
move-result v3
.line 240
iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v7, v3, 0x1
invoke-virtual {p1, v3}, Ljava/lang/String;->charAt(I)C
move-result v3
aget-byte v3, v4, v3
.line 242
invoke-static {p1, v7, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I
move-result v4
.line 244
iget-object v7, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B
add-int/lit8 v8, v4, 0x1
invoke-virtual {p1, v4}, Ljava/lang/String;->charAt(I)C
move-result v4
aget-byte v4, v7, v4
.line 246
or-int v7, v0, v1
or-int/2addr v7, v3
or-int/2addr v7, v4
if-gez v7, :cond_63
.line 248
new-instance v0, Ljava/io/IOException;
const-string v1, "invalid characters encountered in base64 data"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 251
:cond_63
shl-int/lit8 v0, v0, 0x2
shr-int/lit8 v7, v1, 0x4
or-int/2addr v0, v7
invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V
.line 252
shl-int/lit8 v0, v1, 0x4
shr-int/lit8 v1, v3, 0x2
or-int/2addr v0, v1
invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V
.line 253
shl-int/lit8 v0, v3, 0x6
or-int/2addr v0, v4
invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V
.line 255
add-int/lit8 v1, v6, 0x3
.line 257
invoke-static {p1, v8, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I
move-result v0
move v6, v1
goto :goto_1f
.line 260
:cond_81
add-int/lit8 v0, v5, -0x4
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v2
add-int/lit8 v0, v5, -0x3
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v3
add-int/lit8 v0, v5, -0x2
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v4
add-int/lit8 v0, v5, -0x1
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v5
move-object v0, p0
move-object v1, p2
invoke-direct/range {v0 .. v5}, Lcom/subgraph/orchid/encoders/b;->decodeLastBlock(Ljava/io/OutputStream;CCCC)I
move-result v0
add-int/2addr v0, v6
.line 262
return v0
.end method