SymKeyUtility.smali

.class public Lcom/avast/crypto/SymKeyUtility;
.super Ljava/lang/Object;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/avast/crypto/SymKeyUtility$KeyLen;
    }
.end annotation


# direct methods
.method public static a([B[BJLjavax/crypto/Mac;)[B
    .registers 6
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Lcom/avast/crypto/KeyUtilityException;
        }
    .end annotation

    array-length v0, p0

    :try_start_1
    invoke-static {p1, p2, p3, p4}, Lcom/avast/crypto/SymKeyUtility;->b([BJLjavax/crypto/Mac;)[B

    move-result-object p1

    new-array p2, v0, [B

    array-length p3, p0

    invoke-static {p1, p0, p3, p2}, Lcom/avast/crypto/PayloadCipher;->b([B[BI[B)I

    move-result p0

    new-array p1, p0, [B

    const/4 p3, 0x0

    invoke-static {p2, p3, p1, p3, p0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
    :try_end_12
    .catch Lcom/avast/crypto/PayloadException; {:try_start_1 .. :try_end_12} :catch_13

    return-object p1

    :catch_13
    move-exception p0

    new-instance p1, Lcom/avast/crypto/KeyUtilityException;

    invoke-direct {p1, p0}, Lcom/avast/crypto/KeyUtilityException;-><init>(Ljava/lang/Exception;)V

    throw p1
.end method

.method public static b([BJLjavax/crypto/Mac;)[B
    .registers 5
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Lcom/avast/crypto/KeyUtilityException;
        }
    .end annotation

    new-instance v0, Lcom/avast/crypto/HKDF;

    invoke-direct {v0, p3}, Lcom/avast/crypto/HKDF;-><init>(Ljavax/crypto/Mac;)V

    :try_start_5
    invoke-static {p1, p2}, Lcom/avast/crypto/Utility;->a(J)[B

    move-result-object p1

    invoke-virtual {v0, p1, p0}, Lcom/avast/crypto/HKDF;->b([B[B)[B

    move-result-object p1

    const-string p2, ""

    invoke-virtual {p2}, Ljava/lang/String;->getBytes()[B

    move-result-object p2

    array-length p0, p0

    invoke-virtual {v0, p1, p2, p0}, Lcom/avast/crypto/HKDF;->a([B[BI)[B

    move-result-object p0
    :try_end_18
    .catch Ljava/io/IOException; {:try_start_5 .. :try_end_18} :catch_27
    .catch Ljava/security/InvalidKeyException; {:try_start_5 .. :try_end_18} :catch_20
    .catch Ljava/security/NoSuchAlgorithmException; {:try_start_5 .. :try_end_18} :catch_19

    return-object p0

    :catch_19
    move-exception p0

    new-instance p1, Lcom/avast/crypto/KeyUtilityException;

    invoke-direct {p1, p0}, Lcom/avast/crypto/KeyUtilityException;-><init>(Ljava/lang/Exception;)V

    throw p1

    :catch_20
    move-exception p0

    new-instance p1, Lcom/avast/crypto/KeyUtilityException;

    invoke-direct {p1, p0}, Lcom/avast/crypto/KeyUtilityException;-><init>(Ljava/lang/Exception;)V

    throw p1

    :catch_27
    move-exception p0

    new-instance p1, Lcom/avast/crypto/KeyUtilityException;

    invoke-direct {p1, p0}, Lcom/avast/crypto/KeyUtilityException;-><init>(Ljava/lang/Exception;)V

    throw p1
.end method

.method public static c([B[BJLjavax/crypto/Mac;)[B
    .registers 5
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Lcom/avast/crypto/KeyUtilityException;
        }
    .end annotation

    :try_start_0
    invoke-static {p1, p2, p3, p4}, Lcom/avast/crypto/SymKeyUtility;->b([BJLjavax/crypto/Mac;)[B

    move-result-object p1

    array-length p2, p0

    const/4 p3, 0x0

    invoke-static {p1, p0, p2, p3}, Lcom/avast/crypto/PayloadCipher;->d([B[BI[B)I

    move-result p2

    new-array p2, p2, [B

    array-length p3, p0

    invoke-static {p1, p0, p3, p2}, Lcom/avast/crypto/PayloadCipher;->d([B[BI[B)I
    :try_end_10
    .catch Lcom/avast/crypto/PayloadException; {:try_start_0 .. :try_end_10} :catch_11

    return-object p2

    :catch_11
    move-exception p0

    new-instance p1, Lcom/avast/crypto/KeyUtilityException;

    invoke-direct {p1, p0}, Lcom/avast/crypto/KeyUtilityException;-><init>(Ljava/lang/Exception;)V

    throw p1
.end method

.method public static d()[B
    .registers 2
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Lcom/avast/crypto/KeyUtilityException;
        }
    .end annotation

    :try_start_0
    sget-object v0, Lcom/avast/crypto/SymKeyUtility$KeyLen;->h:Lcom/avast/crypto/SymKeyUtility$KeyLen;

    invoke-static {v0}, Lcom/avast/crypto/SymKeyUtility;->e(Lcom/avast/crypto/SymKeyUtility$KeyLen;)[B

    move-result-object v0
    :try_end_6
    .catch Ljava/security/NoSuchAlgorithmException; {:try_start_0 .. :try_end_6} :catch_7

    return-object v0

    :catch_7
    move-exception v0

    new-instance v1, Lcom/avast/crypto/KeyUtilityException;

    invoke-direct {v1, v0}, Lcom/avast/crypto/KeyUtilityException;-><init>(Ljava/lang/Exception;)V

    throw v1
.end method

.method static e(Lcom/avast/crypto/SymKeyUtility$KeyLen;)[B
    .registers 3
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/security/NoSuchAlgorithmException;
        }
    .end annotation

    const-string v0, "AES"

    invoke-static {v0}, Ljavax/crypto/KeyGenerator;->getInstance(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;

    move-result-object v0

    const-string v1, "SHA1PRNG"

    invoke-static {v1}, Ljava/security/SecureRandom;->getInstance(Ljava/lang/String;)Ljava/security/SecureRandom;

    move-result-object v1

    invoke-virtual {p0}, Lcom/avast/crypto/SymKeyUtility$KeyLen;->f()I

    move-result p0

    invoke-virtual {v0, p0, v1}, Ljavax/crypto/KeyGenerator;->init(ILjava/security/SecureRandom;)V

    invoke-virtual {v0}, Ljavax/crypto/KeyGenerator;->generateKey()Ljavax/crypto/SecretKey;

    move-result-object p0

    invoke-interface {p0}, Ljavax/crypto/SecretKey;->getEncoded()[B

    move-result-object p0

    return-object p0
.end method