Base64$Encoder.smali

.class public Lcom/sdk/orion/utils/Base64$Encoder;
.super Ljava/lang/Object;


# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Lcom/sdk/orion/utils/Base64;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x9
    name = "Encoder"
.end annotation


# static fields
.field private static final CRLF:[B

.field private static final MIMELINEMAX:I = 0x4c

.field static final RFC2045:Lcom/sdk/orion/utils/Base64$Encoder;

.field static final RFC4648:Lcom/sdk/orion/utils/Base64$Encoder;

.field static final RFC4648_URLSAFE:Lcom/sdk/orion/utils/Base64$Encoder;

.field private static final TO_BASE_SIXTY:[C

.field private static final TO_BASE_SIXTY_URL:[C


# instance fields
.field private final doPadding:Z

.field private final isURL:Z

.field private final linemax:I

.field private final newline:[B


# direct methods
.method static constructor <clinit>()V
    .registers 6

    const/4 v5, 0x0

    const/16 v2, 0x40

    const/4 v4, 0x0

    const/4 v1, -0x1

    const/4 v3, 0x1

    new-array v0, v2, [C

    fill-array-data v0, :array_36

    sput-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY:[C

    new-array v0, v2, [C

    fill-array-data v0, :array_7a

    sput-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY_URL:[C

    const/4 v0, 0x2

    new-array v0, v0, [B

    fill-array-data v0, :array_be

    sput-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->CRLF:[B

    new-instance v0, Lcom/sdk/orion/utils/Base64$Encoder;

    invoke-direct {v0, v4, v5, v1, v3}, Lcom/sdk/orion/utils/Base64$Encoder;-><init>(Z[BIZ)V

    sput-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->RFC4648:Lcom/sdk/orion/utils/Base64$Encoder;

    new-instance v0, Lcom/sdk/orion/utils/Base64$Encoder;

    invoke-direct {v0, v3, v5, v1, v3}, Lcom/sdk/orion/utils/Base64$Encoder;-><init>(Z[BIZ)V

    sput-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->RFC4648_URLSAFE:Lcom/sdk/orion/utils/Base64$Encoder;

    new-instance v0, Lcom/sdk/orion/utils/Base64$Encoder;

    sget-object v1, Lcom/sdk/orion/utils/Base64$Encoder;->CRLF:[B

    const/16 v2, 0x4c

    invoke-direct {v0, v4, v1, v2, v3}, Lcom/sdk/orion/utils/Base64$Encoder;-><init>(Z[BIZ)V

    sput-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->RFC2045:Lcom/sdk/orion/utils/Base64$Encoder;

    return-void

    :array_36
    .array-data 2
        0x41s
        0x42s
        0x43s
        0x44s
        0x45s
        0x46s
        0x47s
        0x48s
        0x49s
        0x4as
        0x4bs
        0x4cs
        0x4ds
        0x4es
        0x4fs
        0x50s
        0x51s
        0x52s
        0x53s
        0x54s
        0x55s
        0x56s
        0x57s
        0x58s
        0x59s
        0x5as
        0x61s
        0x62s
        0x63s
        0x64s
        0x65s
        0x66s
        0x67s
        0x68s
        0x69s
        0x6as
        0x6bs
        0x6cs
        0x6ds
        0x6es
        0x6fs
        0x70s
        0x71s
        0x72s
        0x73s
        0x74s
        0x75s
        0x76s
        0x77s
        0x78s
        0x79s
        0x7as
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x2bs
        0x2fs
    .end array-data

    :array_7a
    .array-data 2
        0x41s
        0x42s
        0x43s
        0x44s
        0x45s
        0x46s
        0x47s
        0x48s
        0x49s
        0x4as
        0x4bs
        0x4cs
        0x4ds
        0x4es
        0x4fs
        0x50s
        0x51s
        0x52s
        0x53s
        0x54s
        0x55s
        0x56s
        0x57s
        0x58s
        0x59s
        0x5as
        0x61s
        0x62s
        0x63s
        0x64s
        0x65s
        0x66s
        0x67s
        0x68s
        0x69s
        0x6as
        0x6bs
        0x6cs
        0x6ds
        0x6es
        0x6fs
        0x70s
        0x71s
        0x72s
        0x73s
        0x74s
        0x75s
        0x76s
        0x77s
        0x78s
        0x79s
        0x7as
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x2ds
        0x5fs
    .end array-data

    :array_be
    .array-data 1
        0xdt
        0xat
    .end array-data
.end method

.method private constructor <init>(Z[BIZ)V
    .registers 5

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    iput-boolean p1, p0, Lcom/sdk/orion/utils/Base64$Encoder;->isURL:Z

    iput-object p2, p0, Lcom/sdk/orion/utils/Base64$Encoder;->newline:[B

    iput p3, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    iput-boolean p4, p0, Lcom/sdk/orion/utils/Base64$Encoder;->doPadding:Z

    return-void
.end method

.method synthetic constructor <init>(Z[BIZLcom/sdk/orion/utils/Base64$1;)V
    .registers 6

    invoke-direct {p0, p1, p2, p3, p4}, Lcom/sdk/orion/utils/Base64$Encoder;-><init>(Z[BIZ)V

    return-void
.end method

.method static synthetic access$200()[C
    .registers 1

    sget-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY:[C

    return-object v0
.end method

.method static synthetic access$300()[C
    .registers 1

    sget-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY_URL:[C

    return-object v0
.end method

.method private encode0([BII[B)I
    .registers 15

    iget-boolean v0, p0, Lcom/sdk/orion/utils/Base64$Encoder;->isURL:Z

    if-eqz v0, :cond_71

    sget-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY_URL:[C

    :goto_6
    sub-int v1, p3, p2

    div-int/lit8 v1, v1, 0x3

    mul-int/lit8 v1, v1, 0x3

    add-int v6, p2, v1

    iget v2, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    if-lez v2, :cond_20

    iget v2, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    div-int/lit8 v2, v2, 0x4

    mul-int/lit8 v2, v2, 0x3

    if-le v1, v2, :cond_20

    iget v1, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    div-int/lit8 v1, v1, 0x4

    mul-int/lit8 v1, v1, 0x3

    :cond_20
    const/4 v2, 0x0

    move v5, p2

    :goto_22
    if-ge v5, v6, :cond_94

    add-int v3, v5, v1

    invoke-static {v3, v6}, Ljava/lang/Math;->min(II)I

    move-result p2

    move v3, v2

    move v4, v5

    :goto_2c
    if-ge v4, p2, :cond_74

    add-int/lit8 v7, v4, 0x1

    aget-byte v4, p1, v4

    and-int/lit16 v4, v4, 0xff

    shl-int/lit8 v4, v4, 0x10

    add-int/lit8 v8, v7, 0x1

    aget-byte v7, p1, v7

    and-int/lit16 v7, v7, 0xff

    shl-int/lit8 v7, v7, 0x8

    or-int/2addr v7, v4

    add-int/lit8 v4, v8, 0x1

    aget-byte v8, p1, v8

    and-int/lit16 v8, v8, 0xff

    or-int/2addr v7, v8

    add-int/lit8 v8, v3, 0x1

    ushr-int/lit8 v9, v7, 0x12

    and-int/lit8 v9, v9, 0x3f

    aget-char v9, v0, v9

    int-to-byte v9, v9

    aput-byte v9, p4, v3

    add-int/lit8 v3, v8, 0x1

    ushr-int/lit8 v9, v7, 0xc

    and-int/lit8 v9, v9, 0x3f

    aget-char v9, v0, v9

    int-to-byte v9, v9

    aput-byte v9, p4, v8

    add-int/lit8 v8, v3, 0x1

    ushr-int/lit8 v9, v7, 0x6

    and-int/lit8 v9, v9, 0x3f

    aget-char v9, v0, v9

    int-to-byte v9, v9

    aput-byte v9, p4, v3

    add-int/lit8 v3, v8, 0x1

    and-int/lit8 v7, v7, 0x3f

    aget-char v7, v0, v7

    int-to-byte v7, v7

    aput-byte v7, p4, v8

    goto :goto_2c

    :cond_71
    sget-object v0, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY:[C

    goto :goto_6

    :cond_74
    sub-int v3, p2, v5

    div-int/lit8 v3, v3, 0x3

    shl-int/lit8 v3, v3, 0x2

    add-int/2addr v2, v3

    iget v4, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    if-ne v3, v4, :cond_92

    if-ge p2, p3, :cond_92

    iget-object v5, p0, Lcom/sdk/orion/utils/Base64$Encoder;->newline:[B

    array-length v7, v5

    const/4 v3, 0x0

    :goto_85
    if-ge v3, v7, :cond_92

    aget-byte v8, v5, v3

    add-int/lit8 v4, v2, 0x1

    aput-byte v8, p4, v2

    add-int/lit8 v2, v3, 0x1

    move v3, v2

    move v2, v4

    goto :goto_85

    :cond_92
    move v5, p2

    goto :goto_22

    :cond_94
    if-ge v5, p3, :cond_ed

    add-int/lit8 v1, v5, 0x1

    aget-byte v3, p1, v5

    and-int/lit16 v3, v3, 0xff

    add-int/lit8 v4, v2, 0x1

    shr-int/lit8 v5, v3, 0x2

    aget-char v5, v0, v5

    int-to-byte v5, v5

    aput-byte v5, p4, v2

    if-ne v1, p3, :cond_c3

    add-int/lit8 v1, v4, 0x1

    shl-int/lit8 v2, v3, 0x4

    and-int/lit8 v2, v2, 0x3f

    aget-char v0, v0, v2

    int-to-byte v0, v0

    aput-byte v0, p4, v4

    iget-boolean v0, p0, Lcom/sdk/orion/utils/Base64$Encoder;->doPadding:Z

    if-eqz v0, :cond_eb

    add-int/lit8 v2, v1, 0x1

    const/16 v0, 0x3d

    aput-byte v0, p4, v1

    add-int/lit8 v0, v2, 0x1

    const/16 v1, 0x3d

    aput-byte v1, p4, v2

    :goto_c2
    return v0

    :cond_c3
    aget-byte v1, p1, v1

    and-int/lit16 v2, v1, 0xff

    add-int/lit8 v5, v4, 0x1

    shl-int/lit8 v1, v3, 0x4

    and-int/lit8 v1, v1, 0x3f

    shr-int/lit8 v3, v2, 0x4

    or-int/2addr v1, v3

    aget-char v1, v0, v1

    int-to-byte v1, v1

    aput-byte v1, p4, v4

    add-int/lit8 v1, v5, 0x1

    shl-int/lit8 v2, v2, 0x2

    and-int/lit8 v2, v2, 0x3f

    aget-char v0, v0, v2

    int-to-byte v0, v0

    aput-byte v0, p4, v5

    iget-boolean v0, p0, Lcom/sdk/orion/utils/Base64$Encoder;->doPadding:Z

    if-eqz v0, :cond_eb

    add-int/lit8 v0, v1, 0x1

    const/16 v2, 0x3d

    aput-byte v2, p4, v1

    goto :goto_c2

    :cond_eb
    move v0, v1

    goto :goto_c2

    :cond_ed
    move v0, v2

    goto :goto_c2
.end method

.method private final outLength(I)I
    .registers 5

    iget-boolean v0, p0, Lcom/sdk/orion/utils/Base64$Encoder;->doPadding:Z

    if-eqz v0, :cond_19

    add-int/lit8 v0, p1, 0x2

    div-int/lit8 v0, v0, 0x3

    mul-int/lit8 v0, v0, 0x4

    :goto_a
    iget v1, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    if-lez v1, :cond_18

    add-int/lit8 v1, v0, -0x1

    iget v2, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    div-int/2addr v1, v2

    iget-object v2, p0, Lcom/sdk/orion/utils/Base64$Encoder;->newline:[B

    array-length v2, v2

    mul-int/2addr v1, v2

    add-int/2addr v0, v1

    :cond_18
    return v0

    :cond_19
    rem-int/lit8 v0, p1, 0x3

    div-int/lit8 v1, p1, 0x3

    mul-int/lit8 v1, v1, 0x4

    if-nez v0, :cond_24

    const/4 v0, 0x0

    :goto_22
    add-int/2addr v0, v1

    goto :goto_a

    :cond_24
    add-int/lit8 v0, v0, 0x1

    goto :goto_22
.end method


# virtual methods
.method public encode([B[B)I
    .registers 5

    array-length v0, p1

    invoke-direct {p0, v0}, Lcom/sdk/orion/utils/Base64$Encoder;->outLength(I)I

    move-result v0

    array-length v1, p2

    if-ge v1, v0, :cond_11

    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string/jumbo v1, "Output byte array is too small for encoding all input bytes"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_11
    const/4 v0, 0x0

    array-length v1, p1

    invoke-direct {p0, p1, v0, v1, p2}, Lcom/sdk/orion/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v0

    return v0
.end method

.method public encode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
    .registers 8

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I

    move-result v0

    invoke-direct {p0, v0}, Lcom/sdk/orion/utils/Base64$Encoder;->outLength(I)I

    move-result v2

    new-array v0, v2, [B

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasArray()Z

    move-result v1

    if-eqz v1, :cond_3c

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->array()[B

    move-result-object v1

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->arrayOffset()I

    move-result v3

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I

    move-result v4

    add-int/2addr v3, v4

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->arrayOffset()I

    move-result v4

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I

    move-result v5

    add-int/2addr v4, v5

    invoke-direct {p0, v1, v3, v4, v0}, Lcom/sdk/orion/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v1

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I

    move-result v3

    invoke-virtual {p1, v3}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    :goto_31
    if-eq v1, v2, :cond_37

    invoke-static {v0, v1}, Ljava/util/Arrays;->copyOf([BI)[B

    move-result-object v0

    :cond_37
    invoke-static {v0}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;

    move-result-object v0

    return-object v0

    :cond_3c
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I

    move-result v1

    new-array v1, v1, [B

    invoke-virtual {p1, v1}, Ljava/nio/ByteBuffer;->get([B)Ljava/nio/ByteBuffer;

    const/4 v3, 0x0

    array-length v4, v1

    invoke-direct {p0, v1, v3, v4, v0}, Lcom/sdk/orion/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v1

    goto :goto_31
.end method

.method public encode([B)[B
    .registers 6

    array-length v0, p1

    invoke-direct {p0, v0}, Lcom/sdk/orion/utils/Base64$Encoder;->outLength(I)I

    move-result v1

    new-array v0, v1, [B

    const/4 v2, 0x0

    array-length v3, p1

    invoke-direct {p0, p1, v2, v3, v0}, Lcom/sdk/orion/utils/Base64$Encoder;->encode0([BII[B)I

    move-result v2

    if-eq v2, v1, :cond_13

    invoke-static {v0, v2}, Ljava/util/Arrays;->copyOf([BI)[B

    move-result-object v0

    :cond_13
    return-object v0
.end method

.method public encodeToString([B)Ljava/lang/String;
    .registers 6

    const/4 v3, 0x0

    invoke-virtual {p0, p1}, Lcom/sdk/orion/utils/Base64$Encoder;->encode([B)[B

    move-result-object v0

    new-instance v1, Ljava/lang/String;

    array-length v2, v0

    invoke-direct {v1, v0, v3, v3, v2}, Ljava/lang/String;-><init>([BIII)V

    return-object v1
.end method

.method public withoutPadding()Lcom/sdk/orion/utils/Base64$Encoder;
    .registers 6

    iget-boolean v0, p0, Lcom/sdk/orion/utils/Base64$Encoder;->doPadding:Z

    if-nez v0, :cond_5

    :goto_4
    return-object p0

    :cond_5
    new-instance v0, Lcom/sdk/orion/utils/Base64$Encoder;

    iget-boolean v1, p0, Lcom/sdk/orion/utils/Base64$Encoder;->isURL:Z

    iget-object v2, p0, Lcom/sdk/orion/utils/Base64$Encoder;->newline:[B

    iget v3, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    const/4 v4, 0x0

    invoke-direct {v0, v1, v2, v3, v4}, Lcom/sdk/orion/utils/Base64$Encoder;-><init>(Z[BIZ)V

    move-object p0, v0

    goto :goto_4
.end method

.method public wrap(Ljava/io/OutputStream;)Ljava/io/OutputStream;
    .registers 8

    invoke-static {p1}, Ljava/util/Objects;->requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;

    new-instance v0, Lcom/sdk/orion/utils/Base64$EncOutputStream;

    iget-boolean v1, p0, Lcom/sdk/orion/utils/Base64$Encoder;->isURL:Z

    if-eqz v1, :cond_16

    sget-object v2, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY_URL:[C

    :goto_b
    iget-object v3, p0, Lcom/sdk/orion/utils/Base64$Encoder;->newline:[B

    iget v4, p0, Lcom/sdk/orion/utils/Base64$Encoder;->linemax:I

    iget-boolean v5, p0, Lcom/sdk/orion/utils/Base64$Encoder;->doPadding:Z

    move-object v1, p1

    invoke-direct/range {v0 .. v5}, Lcom/sdk/orion/utils/Base64$EncOutputStream;-><init>(Ljava/io/OutputStream;[C[BIZ)V

    return-object v0

    :cond_16
    sget-object v2, Lcom/sdk/orion/utils/Base64$Encoder;->TO_BASE_SIXTY:[C

    goto :goto_b
.end method