DESedeEngine.smali
.class public Lorg/spongycastle/crypto/engines/DESedeEngine;
.super Lorg/spongycastle/crypto/engines/DESEngine;
.source "DESedeEngine.java"
# static fields
.field protected static final BLOCK_SIZE:I = 0x8
# instance fields
.field private forEncryption:Z
.field private workingKey1:[I
.field private workingKey2:[I
.field private workingKey3:[I
# direct methods
.method public constructor <init>()V
.registers 2
.prologue
const/4 v0, 0x0
.line 26
invoke-direct {p0}, Lorg/spongycastle/crypto/engines/DESEngine;-><init>()V
.line 16
iput-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey1:[I
.line 17
iput-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey2:[I
.line 18
iput-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey3:[I
.line 27
return-void
.end method
# virtual methods
.method public getAlgorithmName()Ljava/lang/String;
.registers 2
.prologue
.line 77
const-string v0, "DESede"
return-object v0
.end method
.method public getBlockSize()I
.registers 2
.prologue
.line 82
const/16 v0, 0x8
return v0
.end method
.method public init(ZLorg/spongycastle/crypto/CipherParameters;)V
.registers 10
.prologue
const/16 v6, 0x18
const/16 v5, 0x10
const/4 v1, 0x0
const/16 v4, 0x8
.line 41
instance-of v0, p2, Lorg/spongycastle/crypto/params/KeyParameter;
if-nez v0, :cond_28
.line 43
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "invalid parameter passed to DESede init - "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 46
:cond_28
check-cast p2, Lorg/spongycastle/crypto/params/KeyParameter;
invoke-virtual {p2}, Lorg/spongycastle/crypto/params/KeyParameter;->getKey()[B
move-result-object v2
.line 48
array-length v0, v2
if-eq v0, v6, :cond_3c
array-length v0, v2
if-eq v0, v5, :cond_3c
.line 50
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "key size must be 16 or 24 bytes."
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 53
:cond_3c
iput-boolean p1, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->forEncryption:Z
.line 55
new-array v0, v4, [B
.line 56
invoke-static {v2, v1, v0, v1, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 57
invoke-virtual {p0, p1, v0}, Lorg/spongycastle/crypto/engines/DESedeEngine;->generateWorkingKey(Z[B)[I
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey1:[I
.line 59
new-array v3, v4, [B
.line 60
invoke-static {v2, v4, v3, v1, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 61
if-nez p1, :cond_66
const/4 v0, 0x1
:goto_51
invoke-virtual {p0, v0, v3}, Lorg/spongycastle/crypto/engines/DESedeEngine;->generateWorkingKey(Z[B)[I
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey2:[I
.line 63
array-length v0, v2
if-ne v0, v6, :cond_68
.line 65
new-array v0, v4, [B
.line 66
invoke-static {v2, v5, v0, v1, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 67
invoke-virtual {p0, p1, v0}, Lorg/spongycastle/crypto/engines/DESedeEngine;->generateWorkingKey(Z[B)[I
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey3:[I
.line 73
:goto_65
return-void
:cond_66
move v0, v1
.line 61
goto :goto_51
.line 71
:cond_68
iget-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey1:[I
iput-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey3:[I
goto :goto_65
.end method
.method public processBlock([BI[BI)I
.registers 14
.prologue
const/16 v8, 0x8
const/4 v5, 0x0
.line 91
iget-object v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey1:[I
if-nez v0, :cond_f
.line 93
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "DESede engine not initialised"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 96
:cond_f
add-int/lit8 v0, p2, 0x8
array-length v1, p1
if-le v0, v1, :cond_1c
.line 98
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 101
:cond_1c
add-int/lit8 v0, p4, 0x8
array-length v1, p3
if-le v0, v1, :cond_29
.line 103
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 106
:cond_29
new-array v4, v8, [B
.line 108
iget-boolean v0, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->forEncryption:Z
if-eqz v0, :cond_48
.line 110
iget-object v1, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey1:[I
move-object v0, p0
move-object v2, p1
move v3, p2
invoke-virtual/range {v0 .. v5}, Lorg/spongycastle/crypto/engines/DESedeEngine;->desFunc([I[BI[BI)V
.line 111
iget-object v3, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey2:[I
move-object v2, p0
move-object v6, v4
move v7, v5
invoke-virtual/range {v2 .. v7}, Lorg/spongycastle/crypto/engines/DESedeEngine;->desFunc([I[BI[BI)V
.line 112
iget-object v3, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey3:[I
move-object v2, p0
move-object v6, p3
move v7, p4
invoke-virtual/range {v2 .. v7}, Lorg/spongycastle/crypto/engines/DESedeEngine;->desFunc([I[BI[BI)V
.line 121
:goto_47
return v8
.line 116
:cond_48
iget-object v1, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey3:[I
move-object v0, p0
move-object v2, p1
move v3, p2
invoke-virtual/range {v0 .. v5}, Lorg/spongycastle/crypto/engines/DESedeEngine;->desFunc([I[BI[BI)V
.line 117
iget-object v3, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey2:[I
move-object v2, p0
move-object v6, v4
move v7, v5
invoke-virtual/range {v2 .. v7}, Lorg/spongycastle/crypto/engines/DESedeEngine;->desFunc([I[BI[BI)V
.line 118
iget-object v3, p0, Lorg/spongycastle/crypto/engines/DESedeEngine;->workingKey1:[I
move-object v2, p0
move-object v6, p3
move v7, p4
invoke-virtual/range {v2 .. v7}, Lorg/spongycastle/crypto/engines/DESedeEngine;->desFunc([I[BI[BI)V
goto :goto_47
.end method
.method public reset()V
.registers 1
.prologue
.line 126
return-void
.end method