WTauNafMultiplier.smali
.class public Lorg/spongycastle/math/ec/WTauNafMultiplier;
.super Lorg/spongycastle/math/ec/AbstractECMultiplier;
.source "WTauNafMultiplier.java"
# static fields
.field static final PRECOMP_NAME:Ljava/lang/String; = "bc_wtnaf"
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 9
invoke-direct {p0}, Lorg/spongycastle/math/ec/AbstractECMultiplier;-><init>()V
return-void
.end method
.method private static multiplyFromWTnaf(Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;[BLorg/spongycastle/math/ec/PreCompInfo;)Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
.registers 10
.prologue
const/4 v3, 0x0
.line 76
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v0
check-cast v0, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;
.line 77
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;->getA()Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v1
invoke-virtual {v1}, Lorg/spongycastle/math/ec/ECFieldElement;->toBigInteger()Ljava/math/BigInteger;
move-result-object v1
invoke-virtual {v1}, Ljava/math/BigInteger;->byteValue()B
move-result v1
.line 80
if-eqz p2, :cond_19
instance-of v2, p2, Lorg/spongycastle/math/ec/WTauNafPreCompInfo;
if-nez v2, :cond_3f
.line 82
:cond_19
invoke-static {p0, v1}, Lorg/spongycastle/math/ec/Tnaf;->getPreComp(Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;B)[Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move-result-object v1
.line 84
new-instance v2, Lorg/spongycastle/math/ec/WTauNafPreCompInfo;
invoke-direct {v2}, Lorg/spongycastle/math/ec/WTauNafPreCompInfo;-><init>()V
.line 85
invoke-virtual {v2, v1}, Lorg/spongycastle/math/ec/WTauNafPreCompInfo;->setPreComp([Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;)V
.line 86
const-string v4, "bc_wtnaf"
invoke-virtual {v0, p0, v4, v2}, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;->setPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;Lorg/spongycastle/math/ec/PreCompInfo;)V
.line 94
:goto_2a
array-length v0, v1
new-array v5, v0, [Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move v2, v3
.line 95
:goto_2e
array-length v0, v1
if-ge v2, v0, :cond_47
.line 97
aget-object v0, v1, v2
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;->negate()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
check-cast v0, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
aput-object v0, v5, v2
.line 95
add-int/lit8 v0, v2, 0x1
move v2, v0
goto :goto_2e
.line 90
:cond_3f
check-cast p2, Lorg/spongycastle/math/ec/WTauNafPreCompInfo;
invoke-virtual {p2}, Lorg/spongycastle/math/ec/WTauNafPreCompInfo;->getPreComp()[Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move-result-object v0
move-object v1, v0
goto :goto_2a
.line 102
:cond_47
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v0
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECCurve;->getInfinity()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
check-cast v0, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
.line 105
array-length v2, p1
add-int/lit8 v2, v2, -0x1
move v4, v2
move v2, v3
:goto_56
if-ltz v4, :cond_78
.line 107
add-int/lit8 v2, v2, 0x1
.line 108
aget-byte v6, p1, v4
.line 109
if-eqz v6, :cond_6f
.line 111
invoke-virtual {v0, v2}, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;->tauPow(I)Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move-result-object v2
.line 114
if-lez v6, :cond_72
ushr-int/lit8 v0, v6, 0x1
aget-object v0, v1, v0
.line 115
:goto_68
invoke-virtual {v2, v0}, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;->add(Lorg/spongycastle/math/ec/ECPoint;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
check-cast v0, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move v2, v3
.line 105
:cond_6f
add-int/lit8 v4, v4, -0x1
goto :goto_56
.line 114
:cond_72
neg-int v0, v6
ushr-int/lit8 v0, v0, 0x1
aget-object v0, v5, v0
goto :goto_68
.line 118
:cond_78
if-lez v2, :cond_7e
.line 120
invoke-virtual {v0, v2}, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;->tauPow(I)Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move-result-object v0
.line 122
:cond_7e
return-object v0
.end method
.method private multiplyWTnaf(Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;Lorg/spongycastle/math/ec/ZTauElement;Lorg/spongycastle/math/ec/PreCompInfo;BB)Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
.registers 12
.prologue
const/4 v2, 0x4
.line 55
if-nez p4, :cond_1a
sget-object v5, Lorg/spongycastle/math/ec/Tnaf;->alpha0:[Lorg/spongycastle/math/ec/ZTauElement;
.line 57
:goto_5
invoke-static {p5, v2}, Lorg/spongycastle/math/ec/Tnaf;->getTw(BI)Ljava/math/BigInteger;
move-result-object v4
.line 59
const-wide/16 v0, 0x10
.line 60
invoke-static {v0, v1}, Ljava/math/BigInteger;->valueOf(J)Ljava/math/BigInteger;
move-result-object v3
move v0, p5
move-object v1, p2
.line 59
invoke-static/range {v0 .. v5}, Lorg/spongycastle/math/ec/Tnaf;->tauAdicWNaf(BLorg/spongycastle/math/ec/ZTauElement;BLjava/math/BigInteger;Ljava/math/BigInteger;[Lorg/spongycastle/math/ec/ZTauElement;)[B
move-result-object v0
.line 62
invoke-static {p1, v0, p3}, Lorg/spongycastle/math/ec/WTauNafMultiplier;->multiplyFromWTnaf(Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;[BLorg/spongycastle/math/ec/PreCompInfo;)Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move-result-object v0
return-object v0
.line 55
:cond_1a
sget-object v5, Lorg/spongycastle/math/ec/Tnaf;->alpha1:[Lorg/spongycastle/math/ec/ZTauElement;
goto :goto_5
.end method
# virtual methods
.method protected multiplyPositive(Lorg/spongycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
.registers 14
.prologue
.line 24
instance-of v0, p1, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
if-nez v0, :cond_c
.line 26
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Only ECPoint.AbstractF2m can be used in WTauNafMultiplier"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_c
move-object v6, p1
.line 30
check-cast v6, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
.line 31
invoke-virtual {v6}, Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v0
move-object v8, v0
check-cast v8, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;
.line 32
invoke-virtual {v8}, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;->getFieldSize()I
move-result v1
.line 33
invoke-virtual {v8}, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;->getA()Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v0
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECFieldElement;->toBigInteger()Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0}, Ljava/math/BigInteger;->byteValue()B
move-result v2
.line 34
invoke-static {v2}, Lorg/spongycastle/math/ec/Tnaf;->getMu(I)B
move-result v4
.line 35
invoke-virtual {v8}, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;->getSi()[Ljava/math/BigInteger;
move-result-object v3
.line 37
const/16 v5, 0xa
move-object v0, p2
invoke-static/range {v0 .. v5}, Lorg/spongycastle/math/ec/Tnaf;->partModReduction(Ljava/math/BigInteger;IB[Ljava/math/BigInteger;BB)Lorg/spongycastle/math/ec/ZTauElement;
move-result-object v7
.line 39
const-string v0, "bc_wtnaf"
invoke-virtual {v8, v6, v0}, Lorg/spongycastle/math/ec/ECCurve$AbstractF2m;->getPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;)Lorg/spongycastle/math/ec/PreCompInfo;
move-result-object v8
move-object v5, p0
move v9, v2
move v10, v4
invoke-direct/range {v5 .. v10}, Lorg/spongycastle/math/ec/WTauNafMultiplier;->multiplyWTnaf(Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;Lorg/spongycastle/math/ec/ZTauElement;Lorg/spongycastle/math/ec/PreCompInfo;BB)Lorg/spongycastle/math/ec/ECPoint$AbstractF2m;
move-result-object v0
return-object v0
.end method