a.smali
.class public final Lcom/imo/android/imoim/j/a;
.super Ljava/lang/Object;
.source "SourceFile"
# static fields
.field public static final a:Ljavax/crypto/SecretKey;
.field public static final b:Ljavax/crypto/SecretKey;
.field private static final c:Ljava/security/SecureRandom;
# direct methods
.method static constructor <clinit>()V
.registers 5
.line 26
invoke-static {}, Lcom/imo/android/imoim/j/a;->b()Ljavax/crypto/SecretKey;
move-result-object v0
sput-object v0, Lcom/imo/android/imoim/j/a;->a:Ljavax/crypto/SecretKey;
const/4 v0, 0x0
const-string v1, "GkN6SXh8Pg9UZSlcEON4nw=="
.line 4060
invoke-static {v1, v0}, Landroid/util/Base64;->decode(Ljava/lang/String;I)[B
move-result-object v1
.line 4061
new-instance v2, Ljavax/crypto/spec/SecretKeySpec;
array-length v3, v1
const-string v4, "AES"
invoke-direct {v2, v1, v0, v3, v4}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BIILjava/lang/String;)V
.line 29
sput-object v2, Lcom/imo/android/imoim/j/a;->b:Ljavax/crypto/SecretKey;
.line 32
new-instance v0, Ljava/security/SecureRandom;
invoke-direct {v0}, Ljava/security/SecureRandom;-><init>()V
sput-object v0, Lcom/imo/android/imoim/j/a;->c:Ljava/security/SecureRandom;
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 22
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static a([BLjavax/crypto/SecretKey;[B)I
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 101
invoke-static {p0, p1}, Lcom/imo/android/imoim/j/a;->f([BLjavax/crypto/SecretKey;)[B
move-result-object p0
const/4 p1, 0x0
const/4 v0, 0x4
const/16 v1, 0xc
.line 102
invoke-static {p0, v0, p2, p1, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 103
aget-byte p1, p0, p1
shl-int/lit8 p1, p1, 0x18
const/4 p2, 0x1
aget-byte p2, p0, p2
and-int/lit16 p2, p2, 0xff
shl-int/lit8 p2, p2, 0x10
or-int/2addr p1, p2
const/4 p2, 0x2
aget-byte p2, p0, p2
and-int/lit16 p2, p2, 0xff
shl-int/lit8 p2, p2, 0x8
or-int/2addr p1, p2
const/4 p2, 0x3
aget-byte p0, p0, p2
and-int/lit16 p0, p0, 0xff
or-int/2addr p0, p1
return p0
.end method
.method public static a()Ljava/lang/String;
.registers 5
:try_start_0
const-string v0, "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYAoB3djV8hefWBBQIEuq54qDke4wWek/WulorSc1FOk6Gt9tu50swlxN1kXpCQDfZPGlNASY0UxXKZ0qKqaO2+ZW3CpDp+UYsiARBbEJ3y47HJ1zPVsEq2mMGUnz++35DXzdexmIQbOR4aMbSzXwBAbf+ZaggECe5V21U65tyzQIDAQAB"
const/4 v1, 0x0
.line 1035
invoke-static {v0, v1}, Landroid/util/Base64;->decode(Ljava/lang/String;I)[B
move-result-object v0
.line 1036
new-instance v2, Ljava/security/spec/X509EncodedKeySpec;
invoke-direct {v2, v0}, Ljava/security/spec/X509EncodedKeySpec;-><init>([B)V
const-string v0, "RSA"
.line 1037
invoke-static {v0}, Ljava/security/KeyFactory;->getInstance(Ljava/lang/String;)Ljava/security/KeyFactory;
move-result-object v0
.line 1038
invoke-virtual {v0, v2}, Ljava/security/KeyFactory;->generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
move-result-object v0
.line 38
sget-object v2, Lcom/imo/android/imoim/j/a;->a:Ljavax/crypto/SecretKey;
invoke-interface {v2}, Ljavax/crypto/SecretKey;->getEncoded()[B
move-result-object v2
const/16 v3, 0x10
.line 39
array-length v4, v2
invoke-static {v3, v4}, Ljunit/framework/Assert;->assertEquals(II)V
const-string v3, "RSA/None/NoPadding"
.line 2029
invoke-static {v3}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v3
const/4 v4, 0x1
.line 2030
invoke-virtual {v3, v4, v0}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;)V
.line 2031
invoke-virtual {v3, v2}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object v0
invoke-static {v0, v1}, Landroid/util/Base64;->encode([BI)[B
move-result-object v0
.line 41
new-instance v1, Ljava/lang/String;
const-string v2, "UTF-8"
invoke-direct {v1, v0, v2}, Ljava/lang/String;-><init>([BLjava/lang/String;)V
:try_end_3b
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_3b} :catch_3c
return-object v1
:catch_3c
move-exception v0
.line 44
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public static a(Lcom/imo/android/imoim/network/ByteStream;Lcom/imo/android/imoim/network/ByteStream;Ljavax/crypto/SecretKey;)V
.registers 14
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0xc
.line 129
invoke-static {v0}, Lcom/imo/android/imoim/j/a;->a(I)[B
move-result-object v1
const/16 v2, 0x10
new-array v3, v2, [B
const/4 v4, 0x0
.line 131
invoke-static {v1, v4, v3, v4, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 134
new-instance v0, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {v0, v3}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const-string v3, "AES/CBC/PKCS5Padding"
.line 135
invoke-static {v3}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v5
const/4 v3, 0x1
.line 136
invoke-virtual {v5, v3, p2, v0}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 138
invoke-virtual {p0}, Lcom/imo/android/imoim/network/ByteStream;->size()I
move-result v0
invoke-virtual {v5, v0}, Ljavax/crypto/Cipher;->getOutputSize(I)I
move-result v0
add-int/2addr v0, v2
.line 139
invoke-virtual {p1, v0}, Lcom/imo/android/imoim/network/ByteStream;->expand(I)V
.line 140
invoke-virtual {p0}, Lcom/imo/android/imoim/network/ByteStream;->getRawBytes()[B
move-result-object v6
invoke-virtual {p0}, Lcom/imo/android/imoim/network/ByteStream;->size()I
move-result v8
.line 141
invoke-virtual {p1}, Lcom/imo/android/imoim/network/ByteStream;->getRawBytes()[B
move-result-object v9
const/4 v7, 0x0
const/16 v10, 0x10
.line 140
invoke-virtual/range {v5 .. v10}, Ljavax/crypto/Cipher;->doFinal([BII[BI)I
move-result p0
.line 142
invoke-static {p0, v1, p2}, Lcom/imo/android/imoim/j/a;->a(I[BLjavax/crypto/SecretKey;)[B
move-result-object p2
.line 143
array-length v0, p2
invoke-virtual {p1, p2, v4, v0, v4}, Lcom/imo/android/imoim/network/ByteStream;->write([BIII)V
.line 144
array-length p2, p2
add-int/2addr p0, p2
invoke-virtual {p1, p0}, Lcom/imo/android/imoim/network/ByteStream;->increaseCount(I)V
return-void
.end method
.method public static a(I)[B
.registers 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/security/NoSuchAlgorithmException;,
Ljava/security/NoSuchProviderException;
}
.end annotation
.line 80
new-array p0, p0, [B
.line 81
sget-object v0, Lcom/imo/android/imoim/j/a;->c:Ljava/security/SecureRandom;
invoke-virtual {v0, p0}, Ljava/security/SecureRandom;->nextBytes([B)V
return-object p0
.end method
.method public static a(I[BLjavax/crypto/SecretKey;)[B
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0x10
new-array v0, v0, [B
ushr-int/lit8 v1, p0, 0x18
int-to-byte v1, v1
const/4 v2, 0x0
aput-byte v1, v0, v2
ushr-int/lit8 v1, p0, 0x10
int-to-byte v1, v1
const/4 v3, 0x1
aput-byte v1, v0, v3
ushr-int/lit8 v1, p0, 0x8
int-to-byte v1, v1
const/4 v3, 0x2
aput-byte v1, v0, v3
int-to-byte p0, p0
const/4 v1, 0x3
aput-byte p0, v0, v1
const/4 p0, 0x4
const/16 v1, 0xc
.line 175
invoke-static {p1, v2, v0, p0, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 176
invoke-static {v0, p2}, Lcom/imo/android/imoim/j/a;->e([BLjavax/crypto/SecretKey;)[B
move-result-object p0
return-object p0
.end method
.method public static a([BLjavax/crypto/SecretKey;)[B
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0x10
.line 66
invoke-static {v0}, Lcom/imo/android/imoim/j/a;->a(I)[B
move-result-object v0
.line 67
new-instance v1, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {v1, v0}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const-string v2, "AES/CBC/PKCS5Padding"
.line 68
invoke-static {v2}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v2
const/4 v3, 0x1
.line 69
invoke-virtual {v2, v3, p1, v1}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 70
invoke-virtual {v2, p0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object p0
.line 73
array-length p1, v0
array-length v1, p0
add-int/2addr p1, v1
invoke-static {v0, p1}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object p1
.line 74
array-length v0, v0
array-length v1, p0
const/4 v2, 0x0
invoke-static {p0, v2, p1, v0, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-object p1
.end method
.method public static b([BLjavax/crypto/SecretKey;[B)I
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 228
invoke-static {p0, p1}, Lcom/imo/android/imoim/j/a;->f([BLjavax/crypto/SecretKey;)[B
move-result-object p0
const/4 p1, 0x0
const/4 v0, 0x4
const/16 v1, 0xc
.line 229
invoke-static {p0, v0, p2, p1, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 230
aget-byte p1, p0, p1
const/4 p2, 0x1
.line 231
aget-byte v0, p0, p2
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x10
const/4 v1, 0x2
aget-byte v1, p0, v1
and-int/lit16 v1, v1, 0xff
shl-int/lit8 v1, v1, 0x8
or-int/2addr v0, v1
const/4 v1, 0x3
aget-byte p0, p0, v1
and-int/lit16 p0, p0, 0xff
or-int/2addr p0, v0
if-eq p1, p2, :cond_3f
.line 236
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "Incorrect version: "
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string p1, " length: "
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
const-string v0, "Sym"
.line 3079
invoke-static {v0, p1, p2}, Lcom/imo/android/imoim/util/bt;->a(Ljava/lang/String;Ljava/lang/String;Z)V
:cond_3f
return p0
.end method
.method private static b()Ljavax/crypto/SecretKey;
.registers 2
:try_start_0
const-string v0, "AES"
.line 50
invoke-static {v0}, Ljavax/crypto/KeyGenerator;->getInstance(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;
move-result-object v0
const/16 v1, 0x80
.line 51
invoke-virtual {v0, v1}, Ljavax/crypto/KeyGenerator;->init(I)V
.line 52
invoke-virtual {v0}, Ljavax/crypto/KeyGenerator;->generateKey()Ljavax/crypto/SecretKey;
move-result-object v0
:try_end_f
.catch Ljava/security/NoSuchAlgorithmException; {:try_start_0 .. :try_end_f} :catch_10
return-object v0
:catch_10
move-exception v0
.line 54
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public static b([BLjavax/crypto/SecretKey;)[B
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0xc
.line 110
invoke-static {v0}, Lcom/imo/android/imoim/j/a;->a(I)[B
move-result-object v1
const/16 v2, 0x10
new-array v2, v2, [B
const/4 v3, 0x0
.line 112
invoke-static {v1, v3, v2, v3, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 114
new-instance v0, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {v0, v2}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const-string v2, "AES/CBC/PKCS5Padding"
.line 115
invoke-static {v2}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v2
const/4 v4, 0x1
.line 116
invoke-virtual {v2, v4, p1, v0}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 118
invoke-virtual {v2, p0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object p0
.line 119
array-length v0, p0
invoke-static {v0, v1, p1}, Lcom/imo/android/imoim/j/a;->a(I[BLjavax/crypto/SecretKey;)[B
move-result-object p1
.line 122
array-length v0, p1
array-length v1, p0
add-int/2addr v0, v1
invoke-static {p1, v0}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v0
.line 123
array-length p1, p1
array-length v1, p0
invoke-static {p0, v3, v0, p1, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-object v0
.end method
.method public static c([BLjavax/crypto/SecretKey;)Ljavax/crypto/Cipher;
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0x10
new-array v0, v0, [B
const/4 v1, 0x0
const/16 v2, 0xc
.line 151
invoke-static {p0, v1, v0, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 154
new-instance p0, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {p0, v0}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const-string v0, "AES/CBC/PKCS5Padding"
.line 155
invoke-static {v0}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v0
const/4 v1, 0x1
.line 156
invoke-virtual {v0, v1, p1, p0}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
return-object v0
.end method
.method public static c([BLjavax/crypto/SecretKey;[B)[B
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0x10
new-array v0, v0, [B
const/4 v1, 0x0
const/16 v2, 0xc
.line 247
invoke-static {p2, v1, v0, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
const-string p2, "AES/CBC/PKCS5Padding"
.line 248
invoke-static {p2}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object p2
.line 249
new-instance v1, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {v1, v0}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const/4 v0, 0x2
.line 250
invoke-virtual {p2, v0, p1, v1}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 251
invoke-virtual {p2, p0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object p0
return-object p0
.end method
.method public static d([BLjavax/crypto/SecretKey;)[B
.registers 9
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0xc
.line 212
invoke-static {v0}, Lcom/imo/android/imoim/j/a;->a(I)[B
move-result-object v1
const/16 v2, 0x10
new-array v3, v2, [B
const/4 v4, 0x0
.line 214
invoke-static {v1, v4, v3, v4, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 215
new-instance v5, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {v5, v3}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const-string v3, "AES/CBC/PKCS5Padding"
.line 216
invoke-static {v3}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v3
const/4 v6, 0x1
.line 217
invoke-virtual {v3, v6, p1, v5}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 218
invoke-virtual {v3, p0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object p0
.line 220
array-length v3, p0
new-array v2, v2, [B
aput-byte v6, v2, v4
ushr-int/lit8 v5, v3, 0x10
int-to-byte v5, v5
aput-byte v5, v2, v6
ushr-int/lit8 v5, v3, 0x8
int-to-byte v5, v5
const/4 v6, 0x2
aput-byte v5, v2, v6
int-to-byte v3, v3
const/4 v5, 0x3
aput-byte v3, v2, v5
const/4 v3, 0x4
.line 2186
invoke-static {v1, v4, v2, v3, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 2187
invoke-static {v2, p1}, Lcom/imo/android/imoim/j/a;->e([BLjavax/crypto/SecretKey;)[B
move-result-object p1
.line 221
array-length v0, p1
array-length v1, p0
add-int/2addr v0, v1
invoke-static {p1, v0}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v0
.line 222
array-length p1, p1
array-length v1, p0
invoke-static {p0, v4, v0, p1, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-object v0
.end method
.method private static e([BLjavax/crypto/SecretKey;)[B
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0x10
new-array v0, v0, [B
.line 194
new-instance v1, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {v1, v0}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const-string v0, "AES/CBC/NoPadding"
.line 195
invoke-static {v0}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v0
const/4 v2, 0x1
.line 196
invoke-virtual {v0, v2, p1, v1}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 198
invoke-virtual {v0, p0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object p0
return-object p0
.end method
.method private static f([BLjavax/crypto/SecretKey;)[B
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
const/16 v0, 0x10
new-array v0, v0, [B
.line 204
new-instance v1, Ljavax/crypto/spec/IvParameterSpec;
invoke-direct {v1, v0}, Ljavax/crypto/spec/IvParameterSpec;-><init>([B)V
const-string v0, "AES/CBC/NoPadding"
.line 205
invoke-static {v0}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v0
const/4 v2, 0x2
.line 206
invoke-virtual {v0, v2, p1, v1}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 207
invoke-virtual {v0, p0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object p0
return-object p0
.end method