PBKDF2Engine.smali
.class public Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;
.super Ljava/lang/Object;
# instance fields
.field private parameters:Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
.field private prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
# direct methods
.method public constructor <init>(Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;)V
.registers 3
const/4 v0, 0x0
.line 1
invoke-direct {p0, p1, v0}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;-><init>(Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;Lnet/lingala/zip4j/crypto/PBKDF2/PRF;)V
return-void
.end method
.method public constructor <init>(Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;Lnet/lingala/zip4j/crypto/PBKDF2/PRF;)V
.registers 3
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
iput-object p1, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->parameters:Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
.line 4
iput-object p2, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
return-void
.end method
.method private PBKDF2(Lnet/lingala/zip4j/crypto/PBKDF2/PRF;[BII)[B
.registers 22
move/from16 v0, p4
const/4 v1, 0x0
if-nez p2, :cond_8
new-array v2, v1, [B
goto :goto_a
:cond_8
move-object/from16 v2, p2
.line 3
:goto_a
invoke-interface/range {p1 .. p1}, Lnet/lingala/zip4j/crypto/PBKDF2/PRF;->getHLen()I
move-result v10
move-object/from16 v11, p0
.line 4
invoke-direct {v11, v0, v10}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->ceil(II)I
move-result v12
add-int/lit8 v3, v12, -0x1
mul-int/2addr v3, v10
sub-int v13, v0, v3
mul-int v3, v12, v10
.line 6
new-array v14, v3, [B
const/4 v3, 0x1
move/from16 v16, v1
move v15, v3
:goto_21
if-gt v15, v12, :cond_36
move-object/from16 v3, p0
move-object v4, v14
move/from16 v5, v16
move-object/from16 v6, p1
move-object v7, v2
move/from16 v8, p3
move v9, v15
.line 9
invoke-direct/range {v3 .. v9}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->_F([BILnet/lingala/zip4j/crypto/PBKDF2/PRF;[BII)V
add-int v16, v16, v10
add-int/lit8 v15, v15, 0x1
goto :goto_21
:cond_36
if-ge v13, v10, :cond_3e
.line 14
new-array v2, v0, [B
.line 15
invoke-static {v14, v1, v2, v1, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-object v2
:cond_3e
return-object v14
.end method
.method private _F([BILnet/lingala/zip4j/crypto/PBKDF2/PRF;[BII)V
.registers 12
.line 1
invoke-interface {p3}, Lnet/lingala/zip4j/crypto/PBKDF2/PRF;->getHLen()I
move-result v0
.line 2
new-array v1, v0, [B
.line 5
array-length v2, p4
add-int/lit8 v2, v2, 0x4
new-array v2, v2, [B
.line 6
array-length v3, p4
const/4 v4, 0x0
invoke-static {p4, v4, v2, v4, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 7
array-length p4, p4
invoke-virtual {p0, v2, p4, p6}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->INT([BII)V
move p4, v4
:goto_15
if-ge p4, p5, :cond_21
.line 10
invoke-interface {p3, v2}, Lnet/lingala/zip4j/crypto/PBKDF2/PRF;->doFinal([B)[B
move-result-object v2
.line 11
invoke-direct {p0, v1, v2}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->xor([B[B)V
add-int/lit8 p4, p4, 0x1
goto :goto_15
.line 13
:cond_21
invoke-static {v1, v4, p1, p2, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-void
.end method
.method private assertPRF([B)V
.registers 4
.line 1
iget-object v0, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
if-nez v0, :cond_11
.line 2
new-instance v0, Lnet/lingala/zip4j/crypto/PBKDF2/MacBasedPRF;
iget-object v1, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->parameters:Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
invoke-virtual {v1}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;->getHashAlgorithm()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Lnet/lingala/zip4j/crypto/PBKDF2/MacBasedPRF;-><init>(Ljava/lang/String;)V
iput-object v0, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
.line 4
:cond_11
iget-object v0, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
invoke-interface {v0, p1}, Lnet/lingala/zip4j/crypto/PBKDF2/PRF;->init([B)V
return-void
.end method
.method private ceil(II)I
.registers 4
.line 1
rem-int v0, p1, p2
if-lez v0, :cond_6
const/4 v0, 0x1
goto :goto_7
:cond_6
const/4 v0, 0x0
.line 4
:goto_7
div-int/2addr p1, p2
add-int/2addr p1, v0
return p1
.end method
.method private xor([B[B)V
.registers 6
const/4 v0, 0x0
.line 1
:goto_1
array-length v1, p1
if-ge v0, v1, :cond_f
.line 2
aget-byte v1, p1, v0
aget-byte v2, p2, v0
xor-int/2addr v1, v2
int-to-byte v1, v1
aput-byte v1, p1, v0
add-int/lit8 v0, v0, 0x1
goto :goto_1
:cond_f
return-void
.end method
# virtual methods
.method protected INT([BII)V
.registers 6
const/high16 v0, 0x1000000
.line 1
div-int v0, p3, v0
int-to-byte v0, v0
aput-byte v0, p1, p2
add-int/lit8 v0, p2, 0x1
const/high16 v1, 0x10000
.line 2
div-int v1, p3, v1
int-to-byte v1, v1
aput-byte v1, p1, v0
add-int/lit8 v0, p2, 0x2
.line 3
div-int/lit16 v1, p3, 0x100
int-to-byte v1, v1
aput-byte v1, p1, v0
add-int/lit8 p2, p2, 0x3
int-to-byte p3, p3
.line 4
aput-byte p3, p1, p2
return-void
.end method
.method public deriveKey([CIZ)[B
.registers 5
.line 1
invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
.line 4
invoke-static {p1, p3}, Lnet/lingala/zip4j/util/Zip4jUtil;->convertCharArrayToByteArray([CZ)[B
move-result-object p1
.line 6
invoke-direct {p0, p1}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->assertPRF([B)V
if-nez p2, :cond_12
.line 8
iget-object p1, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
invoke-interface {p1}, Lnet/lingala/zip4j/crypto/PBKDF2/PRF;->getHLen()I
move-result p2
.line 10
:cond_12
iget-object p1, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
iget-object p3, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->parameters:Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
invoke-virtual {p3}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;->getSalt()[B
move-result-object p3
iget-object v0, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->parameters:Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
invoke-virtual {v0}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;->getIterationCount()I
move-result v0
invoke-direct {p0, p1, p3, v0, p2}, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->PBKDF2(Lnet/lingala/zip4j/crypto/PBKDF2/PRF;[BII)[B
move-result-object p1
return-object p1
.end method
.method public getParameters()Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
.registers 2
.line 1
iget-object v0, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->parameters:Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
return-object v0
.end method
.method public setParameters(Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;)V
.registers 2
.line 1
iput-object p1, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->parameters:Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters;
return-void
.end method
.method public setPseudoRandomFunction(Lnet/lingala/zip4j/crypto/PBKDF2/PRF;)V
.registers 2
.line 1
iput-object p1, p0, Lnet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine;->prf:Lnet/lingala/zip4j/crypto/PBKDF2/PRF;
return-void
.end method