BaseMac.smali
.class public Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;
.super Ljavax/crypto/MacSpi;
.source "BaseMac.java"
# interfaces
.implements Lorg/spongycastle/jcajce/provider/symmetric/util/PBE;
# instance fields
.field private keySize:I
.field private macEngine:Lorg/spongycastle/crypto/Mac;
.field private pbeHash:I
.field private scheme:I
# direct methods
.method protected constructor <init>(Lorg/spongycastle/crypto/Mac;)V
.registers 3
.prologue
.line 36
invoke-direct {p0}, Ljavax/crypto/MacSpi;-><init>()V
.line 30
const/4 v0, 0x2
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->scheme:I
.line 31
const/4 v0, 0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->pbeHash:I
.line 32
const/16 v0, 0xa0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->keySize:I
.line 37
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
.line 38
return-void
.end method
.method protected constructor <init>(Lorg/spongycastle/crypto/Mac;III)V
.registers 6
.prologue
.line 45
invoke-direct {p0}, Ljavax/crypto/MacSpi;-><init>()V
.line 30
const/4 v0, 0x2
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->scheme:I
.line 31
const/4 v0, 0x1
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->pbeHash:I
.line 32
const/16 v0, 0xa0
iput v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->keySize:I
.line 46
iput-object p1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
.line 47
iput p2, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->scheme:I
.line 48
iput p3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->pbeHash:I
.line 49
iput p4, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->keySize:I
.line 50
return-void
.end method
.method private static copyMap(Ljava/util/Map;)Ljava/util/Hashtable;
.registers 5
.prologue
.line 179
new-instance v0, Ljava/util/Hashtable;
invoke-direct {v0}, Ljava/util/Hashtable;-><init>()V
.line 181
invoke-interface {p0}, Ljava/util/Map;->keySet()Ljava/util/Set;
move-result-object v1
invoke-interface {v1}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v1
.line 182
:goto_d
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_1f
.line 184
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
.line 185
invoke-interface {p0, v2}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v3
invoke-virtual {v0, v2, v3}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_d
.line 188
:cond_1f
return-object v0
.end method
# virtual methods
.method protected engineDoFinal()[B
.registers 4
.prologue
.line 170
invoke-virtual {p0}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->engineGetMacLength()I
move-result v0
new-array v0, v0, [B
.line 172
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
const/4 v2, 0x0
invoke-interface {v1, v0, v2}, Lorg/spongycastle/crypto/Mac;->doFinal([BI)I
.line 174
return-object v0
.end method
.method protected engineGetMacLength()I
.registers 2
.prologue
.line 146
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
invoke-interface {v0}, Lorg/spongycastle/crypto/Mac;->getMacSize()I
move-result v0
return v0
.end method
.method protected engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.registers 9
.prologue
const/16 v1, 0x100
.line 59
if-nez p1, :cond_c
.line 61
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "key is null"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.line 64
:cond_c
instance-of v0, p1, Lorg/spongycastle/jcajce/PKCS12Key;
if-eqz v0, :cond_72
.line 71
:try_start_10
check-cast p1, Ljavax/crypto/SecretKey;
:try_end_12
.catch Ljava/lang/Exception; {:try_start_10 .. :try_end_12} :catch_4d
.line 80
:try_start_12
check-cast p2, Ljavax/crypto/spec/PBEParameterSpec;
:try_end_14
.catch Ljava/lang/Exception; {:try_start_12 .. :try_end_14} :catch_56
.line 87
instance-of v0, p1, Ljavax/crypto/interfaces/PBEKey;
if-eqz v0, :cond_2d
if-nez p2, :cond_2d
.line 89
new-instance p2, Ljavax/crypto/spec/PBEParameterSpec;
move-object v0, p1
check-cast v0, Ljavax/crypto/interfaces/PBEKey;
invoke-interface {v0}, Ljavax/crypto/interfaces/PBEKey;->getSalt()[B
move-result-object v2
move-object v0, p1
check-cast v0, Ljavax/crypto/interfaces/PBEKey;
invoke-interface {v0}, Ljavax/crypto/interfaces/PBEKey;->getIterationCount()I
move-result v0
invoke-direct {p2, v2, v0}, Ljavax/crypto/spec/PBEParameterSpec;-><init>([BI)V
.line 92
:cond_2d
const/4 v2, 0x1
.line 93
const/16 v0, 0xa0
.line 94
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
invoke-interface {v3}, Lorg/spongycastle/crypto/Mac;->getAlgorithmName()Ljava/lang/String;
move-result-object v3
const-string v4, "GOST"
invoke-virtual {v3, v4}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v3
if-eqz v3, :cond_5f
.line 96
const/4 v0, 0x6
move v5, v1
move v1, v0
move v0, v5
.line 105
:goto_42
const/4 v2, 0x2
invoke-static {p1, v2, v1, v0, p2}, Lorg/spongycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEMacParameters(Ljavax/crypto/SecretKey;IIILjavax/crypto/spec/PBEParameterSpec;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
.line 141
:goto_47
iget-object v1, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
invoke-interface {v1, v0}, Lorg/spongycastle/crypto/Mac;->init(Lorg/spongycastle/crypto/CipherParameters;)V
.line 142
return-void
.line 75
:catch_4d
move-exception v0
new-instance v0, Ljava/security/InvalidKeyException;
const-string v1, "PKCS12 requires a SecretKey/PBEKey"
invoke-direct {v0, v1}, Ljava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
throw v0
.line 84
:catch_56
move-exception v0
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
const-string v1, "PKCS12 requires a PBEParameterSpec"
invoke-direct {v0, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 99
:cond_5f
iget-object v3, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
invoke-interface {v3}, Lorg/spongycastle/crypto/Mac;->getAlgorithmName()Ljava/lang/String;
move-result-object v3
const-string v4, "SHA256"
invoke-virtual {v3, v4}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v3
if-eqz v3, :cond_e3
.line 101
const/4 v0, 0x4
move v5, v1
move v1, v0
move v0, v5
.line 102
goto :goto_42
.line 107
:cond_72
instance-of v0, p1, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;
if-eqz v0, :cond_94
.line 109
check-cast p1, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;
.line 111
invoke-virtual {p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getParam()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
if-eqz v0, :cond_83
.line 113
invoke-virtual {p1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;->getParam()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
goto :goto_47
.line 115
:cond_83
instance-of v0, p2, Ljavax/crypto/spec/PBEParameterSpec;
if-eqz v0, :cond_8c
.line 117
invoke-static {p1, p2}, Lorg/spongycastle/jcajce/provider/symmetric/util/PBE$Util;->makePBEMacParameters(Lorg/spongycastle/jcajce/provider/symmetric/util/BCPBEKey;Ljava/security/spec/AlgorithmParameterSpec;)Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
goto :goto_47
.line 121
:cond_8c
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
const-string v1, "PBE requires PBE parameters to be set."
invoke-direct {v0, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 124
:cond_94
instance-of v0, p2, Ljavax/crypto/spec/IvParameterSpec;
if-eqz v0, :cond_ad
.line 126
new-instance v0, Lorg/spongycastle/crypto/params/ParametersWithIV;
new-instance v1, Lorg/spongycastle/crypto/params/KeyParameter;
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v2
invoke-direct {v1, v2}, Lorg/spongycastle/crypto/params/KeyParameter;-><init>([B)V
check-cast p2, Ljavax/crypto/spec/IvParameterSpec;
invoke-virtual {p2}, Ljavax/crypto/spec/IvParameterSpec;->getIV()[B
move-result-object v2
invoke-direct {v0, v1, v2}, Lorg/spongycastle/crypto/params/ParametersWithIV;-><init>(Lorg/spongycastle/crypto/CipherParameters;[B)V
goto :goto_47
.line 128
:cond_ad
instance-of v0, p2, Lorg/spongycastle/jcajce/spec/SkeinParameterSpec;
if-eqz v0, :cond_ce
.line 130
new-instance v0, Lorg/spongycastle/crypto/params/SkeinParameters$Builder;
check-cast p2, Lorg/spongycastle/jcajce/spec/SkeinParameterSpec;
invoke-virtual {p2}, Lorg/spongycastle/jcajce/spec/SkeinParameterSpec;->getParameters()Ljava/util/Map;
move-result-object v1
invoke-static {v1}, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->copyMap(Ljava/util/Map;)Ljava/util/Hashtable;
move-result-object v1
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/params/SkeinParameters$Builder;-><init>(Ljava/util/Hashtable;)V
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v1
invoke-virtual {v0, v1}, Lorg/spongycastle/crypto/params/SkeinParameters$Builder;->setKey([B)Lorg/spongycastle/crypto/params/SkeinParameters$Builder;
move-result-object v0
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/SkeinParameters$Builder;->build()Lorg/spongycastle/crypto/params/SkeinParameters;
move-result-object v0
goto/16 :goto_47
.line 132
:cond_ce
if-nez p2, :cond_db
.line 134
new-instance v0, Lorg/spongycastle/crypto/params/KeyParameter;
invoke-interface {p1}, Ljava/security/Key;->getEncoded()[B
move-result-object v1
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/params/KeyParameter;-><init>([B)V
goto/16 :goto_47
.line 138
:cond_db
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
const-string v1, "unknown parameter type."
invoke-direct {v0, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
:cond_e3
move v1, v2
goto/16 :goto_42
.end method
.method protected engineReset()V
.registers 2
.prologue
.line 151
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
invoke-interface {v0}, Lorg/spongycastle/crypto/Mac;->reset()V
.line 152
return-void
.end method
.method protected engineUpdate(B)V
.registers 3
.prologue
.line 157
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
invoke-interface {v0, p1}, Lorg/spongycastle/crypto/Mac;->update(B)V
.line 158
return-void
.end method
.method protected engineUpdate([BII)V
.registers 5
.prologue
.line 165
iget-object v0, p0, Lorg/spongycastle/jcajce/provider/symmetric/util/BaseMac;->macEngine:Lorg/spongycastle/crypto/Mac;
invoke-interface {v0, p1, p2, p3}, Lorg/spongycastle/crypto/Mac;->update([BII)V
.line 166
return-void
.end method