BrokenKDF2BytesGenerator.smali
.class public Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;
.super Ljava/lang/Object;
.source "BrokenKDF2BytesGenerator.java"
# interfaces
.implements Lorg/spongycastle/crypto/DerivationFunction;
# instance fields
.field private digest:Lorg/spongycastle/crypto/Digest;
.field private iv:[B
.field private shared:[B
# direct methods
.method public constructor <init>(Lorg/spongycastle/crypto/Digest;)V
.registers 2
.prologue
.line 36
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 37
iput-object p1, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
.line 38
return-void
.end method
# virtual methods
.method public generateBytes([BII)I
.registers 12
.prologue
const/4 v7, 0x0
.line 75
array-length v0, p1
sub-int/2addr v0, p3
if-ge v0, p2, :cond_d
.line 77
new-instance v0, Lorg/spongycastle/crypto/DataLengthException;
const-string v1, "output buffer too small"
invoke-direct {v0, v1}, Lorg/spongycastle/crypto/DataLengthException;-><init>(Ljava/lang/String;)V
throw v0
.line 80
:cond_d
shl-int/lit8 v0, p3, 0x3
int-to-long v0, v0
.line 88
iget-object v2, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
shl-int/lit8 v2, v2, 0x3
int-to-long v2, v2
const-wide/16 v4, 0x1d
mul-long/2addr v2, v4
cmp-long v2, v0, v2
if-lez v2, :cond_27
.line 90
new-instance v2, Ljava/lang/IllegalArgumentException;
const-string v3, "Output length to large"
invoke-direct {v2, v3}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
.line 93
:cond_27
iget-object v2, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v2}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v2
int-to-long v2, v2
div-long/2addr v0, v2
long-to-int v2, v0
.line 97
iget-object v0, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I
move-result v0
new-array v3, v0, [B
.line 99
const/4 v0, 0x1
move v1, v0
move v0, p2
:goto_3b
if-gt v1, v2, :cond_87
.line 101
iget-object v4, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
iget-object v5, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->shared:[B
iget-object v6, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->shared:[B
array-length v6, v6
invoke-interface {v4, v5, v7, v6}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 103
iget-object v4, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
int-to-byte v5, v1
invoke-interface {v4, v5}, Lorg/spongycastle/crypto/Digest;->update(B)V
.line 104
iget-object v4, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
shr-int/lit8 v5, v1, 0x8
int-to-byte v5, v5
invoke-interface {v4, v5}, Lorg/spongycastle/crypto/Digest;->update(B)V
.line 105
iget-object v4, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
shr-int/lit8 v5, v1, 0x10
int-to-byte v5, v5
invoke-interface {v4, v5}, Lorg/spongycastle/crypto/Digest;->update(B)V
.line 106
iget-object v4, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
shr-int/lit8 v5, v1, 0x18
invoke-interface {v4, v5}, Lorg/spongycastle/crypto/Digest;->update(B)V
.line 108
iget-object v4, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
iget-object v5, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->iv:[B
iget-object v6, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->iv:[B
array-length v6, v6
invoke-interface {v4, v5, v7, v6}, Lorg/spongycastle/crypto/Digest;->update([BII)V
.line 110
iget-object v4, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v4, v3, v7}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I
.line 112
sub-int v4, p3, v0
array-length v5, v3
if-le v4, v5, :cond_81
.line 114
array-length v4, v3
invoke-static {v3, v7, p1, v0, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 115
array-length v4, v3
add-int/2addr v0, v4
.line 99
:goto_7e
add-int/lit8 v1, v1, 0x1
goto :goto_3b
.line 119
:cond_81
sub-int v4, p3, v0
invoke-static {v3, v7, p1, v0, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto :goto_7e
.line 123
:cond_87
iget-object v0, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
invoke-interface {v0}, Lorg/spongycastle/crypto/Digest;->reset()V
.line 125
return p3
.end method
.method public getDigest()Lorg/spongycastle/crypto/Digest;
.registers 2
.prologue
.line 59
iget-object v0, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->digest:Lorg/spongycastle/crypto/Digest;
return-object v0
.end method
.method public init(Lorg/spongycastle/crypto/DerivationParameters;)V
.registers 4
.prologue
.line 43
instance-of v0, p1, Lorg/spongycastle/crypto/params/KDFParameters;
if-nez v0, :cond_c
.line 45
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "KDF parameters required for KDF2Generator"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 48
:cond_c
check-cast p1, Lorg/spongycastle/crypto/params/KDFParameters;
.line 50
invoke-virtual {p1}, Lorg/spongycastle/crypto/params/KDFParameters;->getSharedSecret()[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->shared:[B
.line 51
invoke-virtual {p1}, Lorg/spongycastle/crypto/params/KDFParameters;->getIV()[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/jce/provider/BrokenKDF2BytesGenerator;->iv:[B
.line 52
return-void
.end method