VMPCEngine.smali
.class public Lorg/spongycastle/crypto/engines/VMPCEngine;
.super Ljava/lang/Object;
.source "VMPCEngine.java"
# interfaces
.implements Lorg/spongycastle/crypto/StreamCipher;
# instance fields
.field protected P:[B
.field protected n:B
.field protected s:B
.field protected workingIV:[B
.field protected workingKey:[B
# direct methods
.method public constructor <init>()V
.registers 3
.prologue
const/4 v1, 0x0
.line 10
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 16
iput-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
.line 17
const/4 v0, 0x0
iput-object v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
.line 18
iput-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
return-void
.end method
# virtual methods
.method public getAlgorithmName()Ljava/lang/String;
.registers 2
.prologue
.line 25
const-string v0, "VMPC"
return-object v0
.end method
.method public init(ZLorg/spongycastle/crypto/CipherParameters;)V
.registers 6
.prologue
.line 40
instance-of v0, p2, Lorg/spongycastle/crypto/params/ParametersWithIV;
if-nez v0, :cond_c
.line 42
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "VMPC init parameters must include an IV"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 46
:cond_c
check-cast p2, Lorg/spongycastle/crypto/params/ParametersWithIV;
.line 48
invoke-virtual {p2}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
instance-of v0, v0, Lorg/spongycastle/crypto/params/KeyParameter;
if-nez v0, :cond_1e
.line 50
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "VMPC init parameters must include a key"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 54
:cond_1e
invoke-virtual {p2}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
check-cast v0, Lorg/spongycastle/crypto/params/KeyParameter;
.line 56
invoke-virtual {p2}, Lorg/spongycastle/crypto/params/ParametersWithIV;->getIV()[B
move-result-object v1
iput-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingIV:[B
.line 58
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingIV:[B
if-eqz v1, :cond_3a
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingIV:[B
array-length v1, v1
if-lez v1, :cond_3a
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingIV:[B
array-length v1, v1
const/16 v2, 0x300
if-le v1, v2, :cond_42
.line 60
:cond_3a
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "VMPC requires 1 to 768 bytes of IV"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 63
:cond_42
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/KeyParameter;->getKey()[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingKey:[B
.line 65
iget-object v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingKey:[B
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingIV:[B
invoke-virtual {p0, v0, v1}, Lorg/spongycastle/crypto/engines/VMPCEngine;->initKey([B[B)V
.line 66
return-void
.end method
.method protected initKey([B[B)V
.registers 11
.prologue
const/16 v7, 0x300
const/16 v4, 0x100
const/4 v1, 0x0
.line 70
iput-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
.line 71
new-array v0, v4, [B
iput-object v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
move v0, v1
.line 72
:goto_c
if-ge v0, v4, :cond_16
.line 74
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
int-to-byte v3, v0
aput-byte v3, v2, v0
.line 72
add-int/lit8 v0, v0, 0x1
goto :goto_c
:cond_16
move v0, v1
.line 77
:goto_17
if-ge v0, v7, :cond_4f
.line 79
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
iget-object v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
and-int/lit16 v5, v0, 0xff
aget-byte v4, v4, v5
add-int/2addr v3, v4
array-length v4, p1
rem-int v4, v0, v4
aget-byte v4, p1, v4
add-int/2addr v3, v4
and-int/lit16 v3, v3, 0xff
aget-byte v2, v2, v3
iput-byte v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
.line 80
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
and-int/lit16 v3, v0, 0xff
aget-byte v2, v2, v3
.line 81
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
and-int/lit16 v4, v0, 0xff
iget-object v5, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v6, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v6, v6, 0xff
aget-byte v5, v5, v6
aput-byte v5, v3, v4
.line 82
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v4, v4, 0xff
aput-byte v2, v3, v4
.line 77
add-int/lit8 v0, v0, 0x1
goto :goto_17
:cond_4f
move v0, v1
.line 84
:goto_50
if-ge v0, v7, :cond_88
.line 86
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
iget-object v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
and-int/lit16 v5, v0, 0xff
aget-byte v4, v4, v5
add-int/2addr v3, v4
array-length v4, p2
rem-int v4, v0, v4
aget-byte v4, p2, v4
add-int/2addr v3, v4
and-int/lit16 v3, v3, 0xff
aget-byte v2, v2, v3
iput-byte v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
.line 87
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
and-int/lit16 v3, v0, 0xff
aget-byte v2, v2, v3
.line 88
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
and-int/lit16 v4, v0, 0xff
iget-object v5, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v6, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v6, v6, 0xff
aget-byte v5, v5, v6
aput-byte v5, v3, v4
.line 89
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v4, v4, 0xff
aput-byte v2, v3, v4
.line 84
add-int/lit8 v0, v0, 0x1
goto :goto_50
.line 91
:cond_88
iput-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
.line 92
return-void
.end method
.method public processBytes([BII[BI)I
.registers 13
.prologue
.line 97
add-int v0, p2, p3
array-length v1, p1
if-le v0, v1, :cond_d
.line 99
new-instance v0, Lorg/spongycastle/crypto/DataLengthException;
const-string v1, "input buffer too short"
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/DataLengthException;-><init>(Ljava/lang/String;)V
throw v0
.line 102
:cond_d
add-int v0, p5, p3
array-length v1, p4
if-le v0, v1, :cond_1a
.line 104
new-instance v0, Lorg/spongycastle/crypto/OutputLengthException;
const-string v1, "output buffer too short"
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/OutputLengthException;-><init>(Ljava/lang/String;)V
throw v0
.line 107
:cond_1a
const/4 v0, 0x0
:goto_1b
if-ge v0, p3, :cond_7a
.line 109
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
and-int/lit16 v4, v4, 0xff
aget-byte v3, v3, v4
add-int/2addr v2, v3
and-int/lit16 v2, v2, 0xff
aget-byte v1, v1, v2
iput-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
.line 110
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v4, v4, 0xff
aget-byte v3, v3, v4
and-int/lit16 v3, v3, 0xff
aget-byte v2, v2, v3
add-int/lit8 v2, v2, 0x1
and-int/lit16 v2, v2, 0xff
aget-byte v1, v1, v2
.line 112
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
and-int/lit16 v3, v3, 0xff
aget-byte v2, v2, v3
.line 113
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
and-int/lit16 v4, v4, 0xff
iget-object v5, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v6, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v6, v6, 0xff
aget-byte v5, v5, v6
aput-byte v5, v3, v4
.line 114
iget-object v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v4, v4, 0xff
aput-byte v2, v3, v4
.line 115
iget-byte v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
add-int/lit8 v2, v2, 0x1
int-to-byte v2, v2
iput-byte v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
.line 118
add-int v2, v0, p5
add-int v3, v0, p2
aget-byte v3, p1, v3
xor-int/2addr v1, v3
int-to-byte v1, v1
aput-byte v1, p4, v2
.line 107
add-int/lit8 v0, v0, 0x1
goto :goto_1b
.line 121
:cond_7a
return p3
.end method
.method public reset()V
.registers 3
.prologue
.line 126
iget-object v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingKey:[B
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->workingIV:[B
invoke-virtual {p0, v0, v1}, Lorg/spongycastle/crypto/engines/VMPCEngine;->initKey([B[B)V
.line 127
return-void
.end method
.method public returnByte(B)B
.registers 8
.prologue
.line 131
iget-object v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
and-int/lit16 v3, v3, 0xff
aget-byte v2, v2, v3
add-int/2addr v1, v2
and-int/lit16 v1, v1, 0xff
aget-byte v0, v0, v1
iput-byte v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
.line 132
iget-object v0, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v3, v3, 0xff
aget-byte v2, v2, v3
and-int/lit16 v2, v2, 0xff
aget-byte v1, v1, v2
add-int/lit8 v1, v1, 0x1
and-int/lit16 v1, v1, 0xff
aget-byte v0, v0, v1
.line 134
iget-object v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
and-int/lit16 v2, v2, 0xff
aget-byte v1, v1, v2
.line 135
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
and-int/lit16 v3, v3, 0xff
iget-object v4, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v5, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v5, v5, 0xff
aget-byte v4, v4, v5
aput-byte v4, v2, v3
.line 136
iget-object v2, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->P:[B
iget-byte v3, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->s:B
and-int/lit16 v3, v3, 0xff
aput-byte v1, v2, v3
.line 137
iget-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
add-int/lit8 v1, v1, 0x1
int-to-byte v1, v1
iput-byte v1, p0, Lorg/spongycastle/crypto/engines/VMPCEngine;->n:B
.line 140
xor-int/2addr v0, p1
int-to-byte v0, v0
return v0
.end method