ECDHKEKGenerator.smali
.class public Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;
.super Ljava/lang/Object;
.source "ECDHKEKGenerator.java"
# interfaces
.implements Lorg/spongycastle/crypto/DigestDerivationFunction;
# instance fields
.field private algorithm:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
.field private kdf:Lorg/spongycastle/crypto/DigestDerivationFunction;
.field private keySize:I
.field private z:[B
# direct methods
.method public constructor <init>(Lorg/spongycastle/crypto/Digest;)V
.registers 3
.prologue
.line 35
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 36
new-instance v0, Lorg/spongycastle/crypto/generators/KDF2BytesGenerator;
invoke-direct {v0, p1}, Lorg/spongycastle/crypto/generators/KDF2BytesGenerator;-><init>(Lorg/spongycastle/crypto/Digest;)V
iput-object v0, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->kdf:Lorg/spongycastle/crypto/DigestDerivationFunction;
.line 37
return-void
.end method
# virtual methods
.method public generateBytes([BII)I
.registers 10
.prologue
.line 58
new-instance v0, Lorg/spongycastle/asn1/ASN1EncodableVector;
invoke-direct {v0}, Lorg/spongycastle/asn1/ASN1EncodableVector;-><init>()V
.line 60
new-instance v1, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;
iget-object v2, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->algorithm:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
sget-object v3, Lorg/spongycastle/asn1/DERNull;->INSTANCE:Lorg/spongycastle/asn1/DERNull;
invoke-direct {v1, v2, v3}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;-><init>(Lorg/spongycastle/asn1/ASN1ObjectIdentifier;Lorg/spongycastle/asn1/ASN1Encodable;)V
invoke-virtual {v0, v1}, Lorg/spongycastle/asn1/ASN1EncodableVector;->add(Lorg/spongycastle/asn1/ASN1Encodable;)V
.line 61
new-instance v1, Lorg/spongycastle/asn1/DERTaggedObject;
const/4 v2, 0x1
const/4 v3, 0x2
new-instance v4, Lorg/spongycastle/asn1/DEROctetString;
iget v5, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->keySize:I
invoke-static {v5}, Lorg/spongycastle/util/Pack;->intToBigEndian(I)[B
move-result-object v5
invoke-direct {v4, v5}, Lorg/spongycastle/asn1/DEROctetString;-><init>([B)V
invoke-direct {v1, v2, v3, v4}, Lorg/spongycastle/asn1/DERTaggedObject;-><init>(ZILorg/spongycastle/asn1/ASN1Encodable;)V
invoke-virtual {v0, v1}, Lorg/spongycastle/asn1/ASN1EncodableVector;->add(Lorg/spongycastle/asn1/ASN1Encodable;)V
.line 65
:try_start_26
iget-object v1, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->kdf:Lorg/spongycastle/crypto/DigestDerivationFunction;
new-instance v2, Lorg/spongycastle/crypto/params/KDFParameters;
iget-object v3, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->z:[B
new-instance v4, Lorg/spongycastle/asn1/DERSequence;
invoke-direct {v4, v0}, Lorg/spongycastle/asn1/DERSequence;-><init>(Lorg/spongycastle/asn1/ASN1EncodableVector;)V
const-string v0, "DER"
invoke-virtual {v4, v0}, Lorg/spongycastle/asn1/DERSequence;->getEncoded(Ljava/lang/String;)[B
move-result-object v0
invoke-direct {v2, v3, v0}, Lorg/spongycastle/crypto/params/KDFParameters;-><init>([B[B)V
invoke-interface {v1, v2}, Lorg/spongycastle/crypto/DigestDerivationFunction;->init(Lorg/spongycastle/crypto/DerivationParameters;)V
:try_end_3d
.catch Ljava/io/IOException; {:try_start_26 .. :try_end_3d} :catch_44
.line 72
iget-object v0, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->kdf:Lorg/spongycastle/crypto/DigestDerivationFunction;
invoke-interface {v0, p1, p2, p3}, Lorg/spongycastle/crypto/DigestDerivationFunction;->generateBytes([BII)I
move-result v0
return v0
.line 67
:catch_44
move-exception v0
.line 69
new-instance v1, Ljava/lang/IllegalArgumentException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "unable to initialise kdf: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method public getDigest()Lorg/spongycastle/crypto/Digest;
.registers 2
.prologue
.line 50
iget-object v0, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->kdf:Lorg/spongycastle/crypto/DigestDerivationFunction;
invoke-interface {v0}, Lorg/spongycastle/crypto/DigestDerivationFunction;->getDigest()Lorg/spongycastle/crypto/Digest;
move-result-object v0
return-object v0
.end method
.method public init(Lorg/spongycastle/crypto/DerivationParameters;)V
.registers 3
.prologue
.line 41
check-cast p1, Lorg/spongycastle/crypto/agreement/kdf/DHKDFParameters;
.line 43
invoke-virtual {p1}, Lorg/spongycastle/crypto/agreement/kdf/DHKDFParameters;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->algorithm:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
.line 44
invoke-virtual {p1}, Lorg/spongycastle/crypto/agreement/kdf/DHKDFParameters;->getKeySize()I
move-result v0
iput v0, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->keySize:I
.line 45
invoke-virtual {p1}, Lorg/spongycastle/crypto/agreement/kdf/DHKDFParameters;->getZ()[B
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/agreement/kdf/ECDHKEKGenerator;->z:[B
.line 46
return-void
.end method