Base64Encoder.smali
.class public Lorg/spongycastle/util/encoders/Base64Encoder;
.super Ljava/lang/Object;
.source "Base64Encoder.java"
# interfaces
.implements Lorg/spongycastle/util/encoders/Encoder;
# instance fields
.field protected final decodingTable:[B
.field protected final encodingTable:[B
.field protected padding:B
# direct methods
.method public constructor <init>()V
.registers 2
.prologue
.line 49
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 12
const/16 v0, 0x40
new-array v0, v0, [B
fill-array-data v0, :array_1a
iput-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
.line 28
const/16 v0, 0x3d
iput-byte v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->padding:B
.line 33
const/16 v0, 0x80
new-array v0, v0, [B
iput-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
.line 50
invoke-virtual {p0}, Lorg/spongycastle/util/encoders/Base64Encoder;->initialiseDecodingTable()V
.line 51
return-void
.line 12
: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 273
iget-byte v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->padding:B
if-ne p4, v0, :cond_22
.line 275
iget-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v0, v0, p2
.line 276
iget-object v1, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v1, v1, p3
.line 278
or-int v2, v0, v1
if-gez v2, :cond_18
.line 280
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 283
: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 285
const/4 v0, 0x1
.line 319
:goto_21
return v0
.line 287
:cond_22
iget-byte v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->padding:B
if-ne p5, v0, :cond_51
.line 289
iget-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v0, v0, p2
.line 290
iget-object v1, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v1, v1, p3
.line 291
iget-object v2, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v2, v2, p4
.line 293
or-int v3, v0, v1
or-int/2addr v3, v2
if-gez v3, :cond_3f
.line 295
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 298
: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 299
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 301
const/4 v0, 0x2
goto :goto_21
.line 305
:cond_51
iget-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v0, v0, p2
.line 306
iget-object v1, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v1, v1, p3
.line 307
iget-object v2, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v2, v2, p4
.line 308
iget-object v3, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
aget-byte v3, v3, p5
.line 310
or-int v4, v0, v1
or-int/2addr v4, v2
or-int/2addr v4, v3
if-gez v4, :cond_6f
.line 312
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 315
: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 316
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 317
shl-int/lit8 v0, v2, 0x6
or-int/2addr v0, v3
invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V
.line 319
const/4 v0, 0x3
goto :goto_21
.end method
.method private ignore(C)Z
.registers 3
.prologue
.line 122
const/16 v0, 0xa
if-eq p1, v0, :cond_10
const/16 v0, 0xd
if-eq p1, v0, :cond_10
const/16 v0, 0x9
if-eq p1, v0, :cond_10
const/16 v0, 0x20
if-ne p1, 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 nextI(Ljava/lang/String;II)I
.registers 5
.prologue
.line 325
:goto_0
if-ge p2, p3, :cond_f
invoke-virtual {p1, p2}, Ljava/lang/String;->charAt(I)C
move-result v0
invoke-direct {p0, v0}, Lorg/spongycastle/util/encoders/Base64Encoder;->ignore(C)Z
move-result v0
if-eqz v0, :cond_f
.line 327
add-int/lit8 p2, p2, 0x1
goto :goto_0
.line 329
:cond_f
return p2
.end method
.method private nextI([BII)I
.registers 5
.prologue
.line 195
:goto_0
if-ge p2, p3, :cond_e
aget-byte v0, p1, p2
int-to-char v0, v0
invoke-direct {p0, v0}, Lorg/spongycastle/util/encoders/Base64Encoder;->ignore(C)Z
move-result v0
if-eqz v0, :cond_e
.line 197
add-int/lit8 p2, p2, 0x1
goto :goto_0
.line 199
:cond_e
return p2
.end method
# virtual methods
.method public decode(Ljava/lang/String;Ljava/io/OutputStream;)I
.registers 12
.prologue
const/4 v1, 0x0
.line 214
.line 216
invoke-virtual {p1}, Ljava/lang/String;->length()I
move-result v0
move v5, v0
.line 218
:goto_6
if-lez v5, :cond_18
.line 220
add-int/lit8 v0, v5, -0x1
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
invoke-direct {p0, v0}, Lorg/spongycastle/util/encoders/Base64Encoder;->ignore(C)Z
move-result v0
if-eqz v0, :cond_18
.line 225
add-int/lit8 v0, v5, -0x1
move v5, v0
goto :goto_6
.line 229
:cond_18
add-int/lit8 v2, v5, -0x4
.line 231
invoke-direct {p0, p1, v1, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI(Ljava/lang/String;II)I
move-result v0
move v6, v1
.line 233
:goto_1f
if-ge v0, v2, :cond_81
.line 235
iget-object v1, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->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 237
invoke-direct {p0, p1, v3, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI(Ljava/lang/String;II)I
move-result v1
.line 239
iget-object v3, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->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 241
invoke-direct {p0, p1, v4, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI(Ljava/lang/String;II)I
move-result v3
.line 243
iget-object v4, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->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 245
invoke-direct {p0, p1, v7, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI(Ljava/lang/String;II)I
move-result v4
.line 247
iget-object v7, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->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 249
or-int v7, v0, v1
or-int/2addr v7, v3
or-int/2addr v7, v4
if-gez v7, :cond_63
.line 251
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 254
: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 255
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 256
shl-int/lit8 v0, v3, 0x6
or-int/2addr v0, v4
invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V
.line 258
add-int/lit8 v1, v6, 0x3
.line 260
invoke-direct {p0, p1, v8, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI(Ljava/lang/String;II)I
move-result v0
move v6, v1
goto :goto_1f
.line 263
: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}, Lorg/spongycastle/util/encoders/Base64Encoder;->decodeLastBlock(Ljava/io/OutputStream;CCCC)I
move-result v0
add-int/2addr v0, v6
.line 265
return v0
.end method
.method public decode([BIILjava/io/OutputStream;)I
.registers 14
.prologue
.line 139
const/4 v1, 0x0
.line 141
add-int v0, p2, p3
move v5, v0
.line 143
:goto_4
if-le v5, p2, :cond_15
.line 145
add-int/lit8 v0, v5, -0x1
aget-byte v0, p1, v0
int-to-char v0, v0
invoke-direct {p0, v0}, Lorg/spongycastle/util/encoders/Base64Encoder;->ignore(C)Z
move-result v0
if-eqz v0, :cond_15
.line 150
add-int/lit8 v0, v5, -0x1
move v5, v0
goto :goto_4
.line 154
:cond_15
add-int/lit8 v2, v5, -0x4
.line 156
invoke-direct {p0, p1, p2, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI([BII)I
move-result v0
move v6, v1
.line 158
:goto_1c
if-ge v0, v2, :cond_76
.line 160
iget-object v1, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
add-int/lit8 v3, v0, 0x1
aget-byte v0, p1, v0
aget-byte v0, v1, v0
.line 162
invoke-direct {p0, p1, v3, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI([BII)I
move-result v1
.line 164
iget-object v3, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
add-int/lit8 v4, v1, 0x1
aget-byte v1, p1, v1
aget-byte v1, v3, v1
.line 166
invoke-direct {p0, p1, v4, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI([BII)I
move-result v3
.line 168
iget-object v4, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
add-int/lit8 v7, v3, 0x1
aget-byte v3, p1, v3
aget-byte v3, v4, v3
.line 170
invoke-direct {p0, p1, v7, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI([BII)I
move-result v4
.line 172
iget-object v7, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
add-int/lit8 v8, v4, 0x1
aget-byte v4, p1, v4
aget-byte v4, v7, v4
.line 174
or-int v7, v0, v1
or-int/2addr v7, v3
or-int/2addr v7, v4
if-gez v7, :cond_58
.line 176
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 179
:cond_58
shl-int/lit8 v0, v0, 0x2
shr-int/lit8 v7, v1, 0x4
or-int/2addr v0, v7
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
.line 180
shl-int/lit8 v0, v1, 0x4
shr-int/lit8 v1, v3, 0x2
or-int/2addr v0, v1
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
.line 181
shl-int/lit8 v0, v3, 0x6
or-int/2addr v0, v4
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
.line 183
add-int/lit8 v1, v6, 0x3
.line 185
invoke-direct {p0, p1, v8, v2}, Lorg/spongycastle/util/encoders/Base64Encoder;->nextI([BII)I
move-result v0
move v6, v1
goto :goto_1c
.line 188
:cond_76
add-int/lit8 v0, v5, -0x4
aget-byte v0, p1, v0
int-to-char v2, v0
add-int/lit8 v0, v5, -0x3
aget-byte v0, p1, v0
int-to-char v3, v0
add-int/lit8 v0, v5, -0x2
aget-byte v0, p1, v0
int-to-char v4, v0
add-int/lit8 v0, v5, -0x1
aget-byte v0, p1, v0
int-to-char v5, v0
move-object v0, p0
move-object v1, p4
invoke-direct/range {v0 .. v5}, Lorg/spongycastle/util/encoders/Base64Encoder;->decodeLastBlock(Ljava/io/OutputStream;CCCC)I
move-result v0
add-int/2addr v0, v6
.line 190
return v0
.end method
.method public encode([BIILjava/io/OutputStream;)I
.registers 13
.prologue
.line 65
rem-int/lit8 v1, p3, 0x3
.line 66
sub-int v2, p3, v1
move v0, p2
.line 69
:goto_5
add-int v3, p2, v2
if-ge v0, v3, :cond_4c
.line 71
aget-byte v3, p1, v0
and-int/lit16 v3, v3, 0xff
.line 72
add-int/lit8 v4, v0, 0x1
aget-byte v4, p1, v4
and-int/lit16 v4, v4, 0xff
.line 73
add-int/lit8 v5, v0, 0x2
aget-byte v5, p1, v5
and-int/lit16 v5, v5, 0xff
.line 75
iget-object v6, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
ushr-int/lit8 v7, v3, 0x2
and-int/lit8 v7, v7, 0x3f
aget-byte v6, v6, v7
invoke-virtual {p4, v6}, Ljava/io/OutputStream;->write(I)V
.line 76
iget-object v6, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
shl-int/lit8 v3, v3, 0x4
ushr-int/lit8 v7, v4, 0x4
or-int/2addr v3, v7
and-int/lit8 v3, v3, 0x3f
aget-byte v3, v6, v3
invoke-virtual {p4, v3}, Ljava/io/OutputStream;->write(I)V
.line 77
iget-object v3, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
shl-int/lit8 v4, v4, 0x2
ushr-int/lit8 v6, v5, 0x6
or-int/2addr v4, v6
and-int/lit8 v4, v4, 0x3f
aget-byte v3, v3, v4
invoke-virtual {p4, v3}, Ljava/io/OutputStream;->write(I)V
.line 78
iget-object v3, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
and-int/lit8 v4, v5, 0x3f
aget-byte v3, v3, v4
invoke-virtual {p4, v3}, Ljava/io/OutputStream;->write(I)V
.line 69
add-int/lit8 v0, v0, 0x3
goto :goto_5
.line 87
:cond_4c
packed-switch v1, :pswitch_data_ba
.line 116
:goto_4f
:pswitch_4f
div-int/lit8 v0, v2, 0x3
shl-int/lit8 v2, v0, 0x2
if-nez v1, :cond_b7
const/4 v0, 0x0
:goto_56
add-int/2addr v0, v2
return v0
.line 92
:pswitch_58
add-int v0, p2, v2
aget-byte v0, p1, v0
and-int/lit16 v0, v0, 0xff
.line 93
ushr-int/lit8 v3, v0, 0x2
and-int/lit8 v3, v3, 0x3f
.line 94
shl-int/lit8 v0, v0, 0x4
and-int/lit8 v0, v0, 0x3f
.line 96
iget-object v4, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
aget-byte v3, v4, v3
invoke-virtual {p4, v3}, Ljava/io/OutputStream;->write(I)V
.line 97
iget-object v3, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
aget-byte v0, v3, v0
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
.line 98
iget-byte v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->padding:B
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
.line 99
iget-byte v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->padding:B
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
goto :goto_4f
.line 102
:pswitch_7f
add-int v0, p2, v2
aget-byte v0, p1, v0
and-int/lit16 v0, v0, 0xff
.line 103
add-int v3, p2, v2
add-int/lit8 v3, v3, 0x1
aget-byte v3, p1, v3
and-int/lit16 v3, v3, 0xff
.line 105
ushr-int/lit8 v4, v0, 0x2
and-int/lit8 v4, v4, 0x3f
.line 106
shl-int/lit8 v0, v0, 0x4
ushr-int/lit8 v5, v3, 0x4
or-int/2addr v0, v5
and-int/lit8 v0, v0, 0x3f
.line 107
shl-int/lit8 v3, v3, 0x2
and-int/lit8 v3, v3, 0x3f
.line 109
iget-object v5, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
aget-byte v4, v5, v4
invoke-virtual {p4, v4}, Ljava/io/OutputStream;->write(I)V
.line 110
iget-object v4, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
aget-byte v0, v4, v0
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
.line 111
iget-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
aget-byte v0, v0, v3
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
.line 112
iget-byte v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->padding:B
invoke-virtual {p4, v0}, Ljava/io/OutputStream;->write(I)V
goto :goto_4f
.line 116
:cond_b7
const/4 v0, 0x4
goto :goto_56
.line 87
nop
:pswitch_data_ba
.packed-switch 0x0
:pswitch_4f
:pswitch_58
:pswitch_7f
.end packed-switch
.end method
.method protected initialiseDecodingTable()V
.registers 5
.prologue
const/4 v1, 0x0
.line 37
move v0, v1
:goto_2
iget-object v2, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
array-length v2, v2
if-ge v0, v2, :cond_f
.line 39
iget-object v2, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
const/4 v3, -0x1
aput-byte v3, v2, v0
.line 37
add-int/lit8 v0, v0, 0x1
goto :goto_2
.line 42
:cond_f
:goto_f
iget-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
array-length v0, v0
if-ge v1, v0, :cond_20
.line 44
iget-object v0, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->decodingTable:[B
iget-object v2, p0, Lorg/spongycastle/util/encoders/Base64Encoder;->encodingTable:[B
aget-byte v2, v2, v1
int-to-byte v3, v1
aput-byte v3, v0, v2
.line 42
add-int/lit8 v1, v1, 0x1
goto :goto_f
.line 46
:cond_20
return-void
.end method