AsymmetricBlockCipher.smali
.class public abstract Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;
.super Lorg/spongycastle/pqc/jcajce/provider/util/CipherSpiExt;
.source "AsymmetricBlockCipher.java"
# instance fields
.field protected buf:Ljava/io/ByteArrayOutputStream;
.field protected cipherTextSize:I
.field protected maxPlainTextSize:I
.field protected paramSpec:Ljava/security/spec/AlgorithmParameterSpec;
# direct methods
.method public constructor <init>()V
.registers 2
.prologue
.line 51
invoke-direct {p0}, Lorg/spongycastle/pqc/jcajce/provider/util/CipherSpiExt;-><init>()V
.line 52
new-instance v0, Ljava/io/ByteArrayOutputStream;
invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;-><init>()V
iput-object v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->buf:Ljava/io/ByteArrayOutputStream;
.line 53
return-void
.end method
# virtual methods
.method protected checkLength(I)V
.registers 6
.prologue
.line 437
iget-object v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->buf:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
add-int/2addr v0, p1
.line 439
iget v1, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->opMode:I
const/4 v2, 0x1
if-ne v1, v2, :cond_37
.line 441
iget v1, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->maxPlainTextSize:I
if-le v0, v1, :cond_67
.line 443
new-instance v1, Ljavax/crypto/IllegalBlockSizeException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "The length of the plaintext ("
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
const-string v2, " bytes) is not supported by the cipher (max. "
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
iget v2, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->maxPlainTextSize:I
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
const-string v2, " bytes)."
invoke-virtual {v0, v2}, 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}, Ljavax/crypto/IllegalBlockSizeException;-><init>(Ljava/lang/String;)V
throw v1
.line 450
:cond_37
iget v1, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->opMode:I
const/4 v2, 0x2
if-ne v1, v2, :cond_67
.line 452
iget v1, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->cipherTextSize:I
if-eq v0, v1, :cond_67
.line 454
new-instance v1, Ljavax/crypto/IllegalBlockSizeException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Illegal ciphertext length (expected "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget v3, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->cipherTextSize:I
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " bytes, was "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
const-string v2, " bytes)."
invoke-virtual {v0, v2}, 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}, Ljavax/crypto/IllegalBlockSizeException;-><init>(Ljava/lang/String;)V
throw v1
.line 460
:cond_67
return-void
.end method
.method public final doFinal([BII[BI)I
.registers 9
.prologue
.line 389
array-length v0, p4
invoke-virtual {p0, p3}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->getOutputSize(I)I
move-result v1
if-ge v0, v1, :cond_f
.line 391
new-instance v0, Ljavax/crypto/ShortBufferException;
const-string v1, "Output buffer too short."
invoke-direct {v0, v1}, Ljavax/crypto/ShortBufferException;-><init>(Ljava/lang/String;)V
throw v0
.line 394
:cond_f
invoke-virtual {p0, p1, p2, p3}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->doFinal([BII)[B
move-result-object v0
.line 395
const/4 v1, 0x0
array-length v2, v0
invoke-static {v0, v1, p4, p5, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 396
array-length v0, v0
return v0
.end method
.method public final doFinal([BII)[B
.registers 6
.prologue
.line 350
invoke-virtual {p0, p3}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->checkLength(I)V
.line 351
invoke-virtual {p0, p1, p2, p3}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->update([BII)[B
.line 352
iget-object v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->buf:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v0
.line 353
iget-object v1, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->buf:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->reset()V
.line 355
iget v1, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->opMode:I
packed-switch v1, :pswitch_data_22
.line 364
const/4 v0, 0x0
:goto_17
return-object v0
.line 358
:pswitch_18
invoke-virtual {p0, v0}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->messageEncrypt([B)[B
move-result-object v0
goto :goto_17
.line 361
:pswitch_1d
invoke-virtual {p0, v0}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->messageDecrypt([B)[B
move-result-object v0
goto :goto_17
.line 355
:pswitch_data_22
.packed-switch 0x1
:pswitch_18
:pswitch_1d
.end packed-switch
.end method
.method public final getBlockSize()I
.registers 3
.prologue
.line 66
iget v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->opMode:I
const/4 v1, 0x1
if-ne v0, v1, :cond_8
iget v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->maxPlainTextSize:I
:goto_7
return v0
:cond_8
iget v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->cipherTextSize:I
goto :goto_7
.end method
.method public final getIV()[B
.registers 2
.prologue
.line 74
const/4 v0, 0x0
return-object v0
.end method
.method public final getOutputSize(I)I
.registers 4
.prologue
.line 95
iget-object v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->buf:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->size()I
move-result v0
add-int v1, p1, v0
.line 97
invoke-virtual {p0}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->getBlockSize()I
move-result v0
.line 99
if-le v1, v0, :cond_f
.line 102
const/4 v0, 0x0
.line 105
:cond_f
return v0
.end method
.method public final getParameters()Ljava/security/spec/AlgorithmParameterSpec;
.registers 2
.prologue
.line 124
iget-object v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->paramSpec:Ljava/security/spec/AlgorithmParameterSpec;
return-object v0
.end method
.method public abstract initCipherDecrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.end method
.method public abstract initCipherEncrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.end method
.method public final initDecrypt(Ljava/security/Key;)V
.registers 4
.prologue
.line 261
const/4 v0, 0x0
:try_start_1
invoke-virtual {p0, p1, v0}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->initDecrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
:try_end_4
.catch Ljava/security/InvalidAlgorithmParameterException; {:try_start_1 .. :try_end_4} :catch_5
.line 267
return-void
.line 265
:catch_5
move-exception v0
new-instance v0, Ljava/security/InvalidParameterException;
const-string v1, "This cipher needs algorithm parameters for initialization (cannot be null)."
invoke-direct {v0, v1}, Ljava/security/InvalidParameterException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public final initDecrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.registers 4
.prologue
.line 295
const/4 v0, 0x2
iput v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->opMode:I
.line 296
invoke-virtual {p0, p1, p2}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->initCipherDecrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.line 297
return-void
.end method
.method public final initEncrypt(Ljava/security/Key;)V
.registers 4
.prologue
.line 148
const/4 v0, 0x0
:try_start_1
new-instance v1, Ljava/security/SecureRandom;
invoke-direct {v1}, Ljava/security/SecureRandom;-><init>()V
invoke-virtual {p0, p1, v0, v1}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->initEncrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
:try_end_9
.catch Ljava/security/InvalidAlgorithmParameterException; {:try_start_1 .. :try_end_9} :catch_a
.line 154
return-void
.line 152
:catch_a
move-exception v0
new-instance v0, Ljava/security/InvalidParameterException;
const-string v1, "This cipher needs algorithm parameters for initialization (cannot be null)."
invoke-direct {v0, v1}, Ljava/security/InvalidParameterException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public final initEncrypt(Ljava/security/Key;Ljava/security/SecureRandom;)V
.registers 5
.prologue
.line 180
const/4 v0, 0x0
:try_start_1
invoke-virtual {p0, p1, v0, p2}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->initEncrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
:try_end_4
.catch Ljava/security/InvalidAlgorithmParameterException; {:try_start_1 .. :try_end_4} :catch_5
.line 186
return-void
.line 184
:catch_5
move-exception v0
new-instance v0, Ljava/security/InvalidParameterException;
const-string v1, "This cipher needs algorithm parameters for initialization (cannot be null)."
invoke-direct {v0, v1}, Ljava/security/InvalidParameterException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public final initEncrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
.registers 4
.prologue
.line 205
new-instance v0, Ljava/security/SecureRandom;
invoke-direct {v0}, Ljava/security/SecureRandom;-><init>()V
invoke-virtual {p0, p1, p2, v0}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->initEncrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.line 206
return-void
.end method
.method public final initEncrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.registers 5
.prologue
.line 236
const/4 v0, 0x1
iput v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->opMode:I
.line 237
invoke-virtual {p0, p1, p2, p3}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->initCipherEncrypt(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
.line 238
return-void
.end method
.method public abstract messageDecrypt([B)[B
.end method
.method public abstract messageEncrypt([B)[B
.end method
.method protected final setMode(Ljava/lang/String;)V
.registers 2
.prologue
.line 408
return-void
.end method
.method protected final setPadding(Ljava/lang/String;)V
.registers 2
.prologue
.line 419
return-void
.end method
.method public final update([BII[BI)I
.registers 7
.prologue
.line 331
invoke-virtual {p0, p1, p2, p3}, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->update([BII)[B
.line 332
const/4 v0, 0x0
return v0
.end method
.method public final update([BII)[B
.registers 5
.prologue
.line 310
if-eqz p3, :cond_7
.line 312
iget-object v0, p0, Lorg/spongycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher;->buf:Ljava/io/ByteArrayOutputStream;
invoke-virtual {v0, p1, p2, p3}, Ljava/io/ByteArrayOutputStream;->write([BII)V
.line 314
:cond_7
const/4 v0, 0x0
new-array v0, v0, [B
return-object v0
.end method