RSABlindingEngine.smali
.class public Lorg/spongycastle/crypto/engines/RSABlindingEngine;
.super Ljava/lang/Object;
.source "RSABlindingEngine.java"
# interfaces
.implements Lorg/spongycastle/crypto/AsymmetricBlockCipher;
# instance fields
.field private blindingFactor:Ljava/math/BigInteger;
.field private core:Lorg/spongycastle/crypto/engines/RSACoreEngine;
.field private forEncryption:Z
.field private key:Lorg/spongycastle/crypto/params/RSAKeyParameters;
# direct methods
.method public constructor <init>()V
.registers 2
.prologue
.line 18
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 21
new-instance v0, Lorg/spongycastle/crypto/engines/RSACoreEngine;
invoke-direct {v0}, Lorg/spongycastle/crypto/engines/RSACoreEngine;-><init>()V
iput-object v0, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->core:Lorg/spongycastle/crypto/engines/RSACoreEngine;
return-void
.end method
.method private blindMessage(Ljava/math/BigInteger;)Ljava/math/BigInteger;
.registers 5
.prologue
.line 116
iget-object v0, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->blindingFactor:Ljava/math/BigInteger;
.line 117
iget-object v1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->key:Lorg/spongycastle/crypto/params/RSAKeyParameters;
invoke-virtual {v1}, Lorg/spongycastle/crypto/params/RSAKeyParameters;->getExponent()Ljava/math/BigInteger;
move-result-object v1
iget-object v2, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->key:Lorg/spongycastle/crypto/params/RSAKeyParameters;
invoke-virtual {v2}, Lorg/spongycastle/crypto/params/RSAKeyParameters;->getModulus()Ljava/math/BigInteger;
move-result-object v2
invoke-virtual {v0, v1, v2}, Ljava/math/BigInteger;->modPow(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {p1, v0}, Ljava/math/BigInteger;->multiply(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 118
iget-object v1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->key:Lorg/spongycastle/crypto/params/RSAKeyParameters;
invoke-virtual {v1}, Lorg/spongycastle/crypto/params/RSAKeyParameters;->getModulus()Ljava/math/BigInteger;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/math/BigInteger;->mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 120
return-object v0
.end method
.method private unblindMessage(Ljava/math/BigInteger;)Ljava/math/BigInteger;
.registers 4
.prologue
.line 129
iget-object v0, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->key:Lorg/spongycastle/crypto/params/RSAKeyParameters;
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/RSAKeyParameters;->getModulus()Ljava/math/BigInteger;
move-result-object v0
.line 131
iget-object v1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->blindingFactor:Ljava/math/BigInteger;
invoke-virtual {v1, v0}, Ljava/math/BigInteger;->modInverse(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v1
.line 132
invoke-virtual {p1, v1}, Ljava/math/BigInteger;->multiply(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v1
.line 133
invoke-virtual {v1, v0}, Ljava/math/BigInteger;->mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 135
return-object v0
.end method
# virtual methods
.method public getInputBlockSize()I
.registers 2
.prologue
.line 67
iget-object v0, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->core:Lorg/spongycastle/crypto/engines/RSACoreEngine;
invoke-virtual {v0}, Lorg/spongycastle/crypto/engines/RSACoreEngine;->getInputBlockSize()I
move-result v0
return v0
.end method
.method public getOutputBlockSize()I
.registers 2
.prologue
.line 79
iget-object v0, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->core:Lorg/spongycastle/crypto/engines/RSACoreEngine;
invoke-virtual {v0}, Lorg/spongycastle/crypto/engines/RSACoreEngine;->getOutputBlockSize()I
move-result v0
return v0
.end method
.method public init(ZLorg/spongycastle/crypto/CipherParameters;)V
.registers 6
.prologue
.line 40
instance-of v0, p2, Lorg/spongycastle/crypto/params/ParametersWithRandom;
if-eqz v0, :cond_24
.line 42
check-cast p2, Lorg/spongycastle/crypto/params/ParametersWithRandom;
.line 44
invoke-virtual {p2}, Lorg/spongycastle/crypto/params/ParametersWithRandom;->getParameters()Lorg/spongycastle/crypto/CipherParameters;
move-result-object v0
check-cast v0, Lorg/spongycastle/crypto/params/RSABlindingParameters;
.line 51
:goto_c
iget-object v1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->core:Lorg/spongycastle/crypto/engines/RSACoreEngine;
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/RSABlindingParameters;->getPublicKey()Lorg/spongycastle/crypto/params/RSAKeyParameters;
move-result-object v2
invoke-virtual {v1, p1, v2}, Lorg/spongycastle/crypto/engines/RSACoreEngine;->init(ZLorg/spongycastle/crypto/CipherParameters;)V
.line 53
iput-boolean p1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->forEncryption:Z
.line 54
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/RSABlindingParameters;->getPublicKey()Lorg/spongycastle/crypto/params/RSAKeyParameters;
move-result-object v1
iput-object v1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->key:Lorg/spongycastle/crypto/params/RSAKeyParameters;
.line 55
invoke-virtual {v0}, Lorg/spongycastle/crypto/params/RSABlindingParameters;->getBlindingFactor()Ljava/math/BigInteger;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->blindingFactor:Ljava/math/BigInteger;
.line 56
return-void
.line 48
:cond_24
check-cast p2, Lorg/spongycastle/crypto/params/RSABlindingParameters;
move-object v0, p2
goto :goto_c
.end method
.method public processBlock([BII)[B
.registers 6
.prologue
.line 96
iget-object v0, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->core:Lorg/spongycastle/crypto/engines/RSACoreEngine;
invoke-virtual {v0, p1, p2, p3}, Lorg/spongycastle/crypto/engines/RSACoreEngine;->convertInput([BII)Ljava/math/BigInteger;
move-result-object v0
.line 98
iget-boolean v1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->forEncryption:Z
if-eqz v1, :cond_15
.line 100
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->blindMessage(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 107
:goto_e
iget-object v1, p0, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->core:Lorg/spongycastle/crypto/engines/RSACoreEngine;
invoke-virtual {v1, v0}, Lorg/spongycastle/crypto/engines/RSACoreEngine;->convertOutput(Ljava/math/BigInteger;)[B
move-result-object v0
return-object v0
.line 104
:cond_15
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/engines/RSABlindingEngine;->unblindMessage(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
goto :goto_e
.end method