WNafUtil.smali
.class public abstract Lorg/spongycastle/math/ec/WNafUtil;
.super Ljava/lang/Object;
.source "WNafUtil.java"
# static fields
.field private static final DEFAULT_WINDOW_SIZE_CUTOFFS:[I
.field private static final EMPTY_BYTES:[B
.field private static final EMPTY_INTS:[I
.field private static final EMPTY_POINTS:[Lorg/spongycastle/math/ec/ECPoint;
.field public static final PRECOMP_NAME:Ljava/lang/String; = "bc_wnaf"
# direct methods
.method static constructor <clinit>()V
.registers 2
.prologue
const/4 v1, 0x0
.line 9
const/4 v0, 0x6
new-array v0, v0, [I
fill-array-data v0, :array_16
sput-object v0, Lorg/spongycastle/math/ec/WNafUtil;->DEFAULT_WINDOW_SIZE_CUTOFFS:[I
.line 11
new-array v0, v1, [B
sput-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_BYTES:[B
.line 12
new-array v0, v1, [I
sput-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_INTS:[I
.line 13
new-array v0, v1, [Lorg/spongycastle/math/ec/ECPoint;
sput-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_POINTS:[Lorg/spongycastle/math/ec/ECPoint;
return-void
.line 9
:array_16
.array-data 4
0xd
0x29
0x79
0x151
0x381
0x901
.end array-data
.end method
.method public constructor <init>()V
.registers 1
.prologue
.line 5
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static generateCompactNaf(Ljava/math/BigInteger;)[I
.registers 11
.prologue
const/4 v2, 0x0
const/4 v1, 0x1
.line 17
invoke-virtual {p0}, Ljava/math/BigInteger;->bitLength()I
move-result v0
ushr-int/lit8 v0, v0, 0x10
if-eqz v0, :cond_12
.line 19
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'k\' must have bitlength < 2^16"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 21
:cond_12
invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I
move-result v0
if-nez v0, :cond_1b
.line 23
sget-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_INTS:[I
.line 55
:goto_1a
return-object v0
.line 26
:cond_1b
invoke-virtual {p0, v1}, Ljava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0, p0}, Ljava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 28
invoke-virtual {v0}, Ljava/math/BigInteger;->bitLength()I
move-result v3
.line 29
shr-int/lit8 v4, v3, 0x1
new-array v5, v4, [I
.line 31
invoke-virtual {v0, p0}, Ljava/math/BigInteger;->xor(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v7
.line 33
add-int/lit8 v8, v3, -0x1
move v6, v2
move v3, v2
move v2, v1
.line 34
:goto_34
if-ge v2, v8, :cond_5b
.line 36
invoke-virtual {v7, v2}, Ljava/math/BigInteger;->testBit(I)Z
move-result v0
if-nez v0, :cond_46
.line 38
add-int/lit8 v0, v6, 0x1
move v9, v2
move v2, v0
move v0, v9
.line 34
:goto_41
add-int/lit8 v0, v0, 0x1
move v6, v2
move v2, v0
goto :goto_34
.line 42
:cond_46
invoke-virtual {p0, v2}, Ljava/math/BigInteger;->testBit(I)Z
move-result v0
if-eqz v0, :cond_59
const/4 v0, -0x1
.line 43
:goto_4d
add-int/lit8 v4, v3, 0x1
shl-int/lit8 v0, v0, 0x10
or-int/2addr v0, v6
aput v0, v5, v3
.line 45
add-int/lit8 v0, v2, 0x1
move v2, v1
move v3, v4
goto :goto_41
:cond_59
move v0, v1
.line 42
goto :goto_4d
.line 48
:cond_5b
add-int/lit8 v0, v3, 0x1
const/high16 v1, 0x10000
or-int/2addr v1, v6
aput v1, v5, v3
.line 50
array-length v1, v5
if-le v1, v0, :cond_6a
.line 52
invoke-static {v5, v0}, Lorg/spongycastle/math/ec/WNafUtil;->trim([II)[I
move-result-object v0
goto :goto_1a
:cond_6a
move-object v0, v5
goto :goto_1a
.end method
.method public static generateCompactWindowNaf(ILjava/math/BigInteger;)[I
.registers 13
.prologue
const/4 v0, 0x2
const/4 v7, 0x1
const/4 v1, 0x0
.line 60
if-ne p0, v0, :cond_a
.line 62
invoke-static {p1}, Lorg/spongycastle/math/ec/WNafUtil;->generateCompactNaf(Ljava/math/BigInteger;)[I
move-result-object v0
.line 121
:goto_9
return-object v0
.line 65
:cond_a
if-lt p0, v0, :cond_10
const/16 v0, 0x10
if-le p0, v0, :cond_18
.line 67
:cond_10
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'width\' must be in the range [2, 16]"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 69
:cond_18
invoke-virtual {p1}, Ljava/math/BigInteger;->bitLength()I
move-result v0
ushr-int/lit8 v0, v0, 0x10
if-eqz v0, :cond_28
.line 71
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'k\' must have bitlength < 2^16"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 73
:cond_28
invoke-virtual {p1}, Ljava/math/BigInteger;->signum()I
move-result v0
if-nez v0, :cond_31
.line 75
sget-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_INTS:[I
goto :goto_9
.line 78
:cond_31
invoke-virtual {p1}, Ljava/math/BigInteger;->bitLength()I
move-result v0
div-int/2addr v0, p0
add-int/lit8 v0, v0, 0x1
new-array v5, v0, [I
.line 81
shl-int v8, v7, p0
.line 82
add-int/lit8 v9, v8, -0x1
.line 83
ushr-int/lit8 v10, v8, 0x1
move v0, v1
move v2, v1
move v3, v1
.line 88
:goto_43
invoke-virtual {p1}, Ljava/math/BigInteger;->bitLength()I
move-result v4
if-gt v0, v4, :cond_7b
.line 90
invoke-virtual {p1, v0}, Ljava/math/BigInteger;->testBit(I)Z
move-result v4
if-ne v4, v3, :cond_52
.line 92
add-int/lit8 v0, v0, 0x1
.line 93
goto :goto_43
.line 96
:cond_52
invoke-virtual {p1, v0}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
move-result-object p1
.line 98
invoke-virtual {p1}, Ljava/math/BigInteger;->intValue()I
move-result v4
and-int/2addr v4, v9
.line 99
if-eqz v3, :cond_5f
.line 101
add-int/lit8 v4, v4, 0x1
.line 104
:cond_5f
and-int v3, v4, v10
if-eqz v3, :cond_77
move v3, v7
.line 105
:goto_64
if-eqz v3, :cond_85
.line 107
sub-int/2addr v4, v8
move v6, v4
.line 110
:goto_68
if-lez v2, :cond_79
add-int/lit8 v0, v0, -0x1
move v4, v0
.line 111
:goto_6d
add-int/lit8 v0, v2, 0x1
shl-int/lit8 v6, v6, 0x10
or-int/2addr v4, v6
aput v4, v5, v2
move v2, v0
move v0, p0
.line 113
goto :goto_43
:cond_77
move v3, v1
.line 104
goto :goto_64
:cond_79
move v4, v0
.line 110
goto :goto_6d
.line 116
:cond_7b
array-length v0, v5
if-le v0, v2, :cond_83
.line 118
invoke-static {v5, v2}, Lorg/spongycastle/math/ec/WNafUtil;->trim([II)[I
move-result-object v0
goto :goto_9
:cond_83
move-object v0, v5
goto :goto_9
:cond_85
move v6, v4
goto :goto_68
.end method
.method public static generateJSF(Ljava/math/BigInteger;Ljava/math/BigInteger;)[B
.registers 15
.prologue
.line 126
invoke-virtual {p0}, Ljava/math/BigInteger;->bitLength()I
move-result v0
invoke-virtual {p1}, Ljava/math/BigInteger;->bitLength()I
move-result v1
invoke-static {v0, v1}, Ljava/lang/Math;->max(II)I
move-result v0
add-int/lit8 v10, v0, 0x1
.line 127
new-array v3, v10, [B
.line 130
const/4 v1, 0x0
const/4 v5, 0x0
const/4 v4, 0x0
.line 132
const/4 v0, 0x0
move v8, v0
move v9, v1
move-object v2, p0
move v0, v4
move-object v1, p1
move v4, v5
.line 133
:goto_1a
or-int v5, v4, v0
if-nez v5, :cond_2a
invoke-virtual {v2}, Ljava/math/BigInteger;->bitLength()I
move-result v5
if-gt v5, v8, :cond_2a
invoke-virtual {v1}, Ljava/math/BigInteger;->bitLength()I
move-result v5
if-le v5, v8, :cond_93
.line 135
:cond_2a
invoke-virtual {v2}, Ljava/math/BigInteger;->intValue()I
move-result v5
ushr-int/2addr v5, v8
add-int/2addr v5, v4
and-int/lit8 v6, v5, 0x7
invoke-virtual {v1}, Ljava/math/BigInteger;->intValue()I
move-result v5
ushr-int/2addr v5, v8
add-int/2addr v5, v0
and-int/lit8 v11, v5, 0x7
.line 137
and-int/lit8 v5, v6, 0x1
.line 138
if-eqz v5, :cond_a2
.line 140
and-int/lit8 v7, v6, 0x2
sub-int/2addr v5, v7
.line 141
add-int v7, v6, v5
const/4 v12, 0x4
if-ne v7, v12, :cond_a2
and-int/lit8 v7, v11, 0x3
const/4 v12, 0x2
if-ne v7, v12, :cond_a2
.line 143
neg-int v5, v5
move v7, v5
.line 147
:goto_4d
and-int/lit8 v5, v11, 0x1
.line 148
if-eqz v5, :cond_a0
.line 150
and-int/lit8 v12, v11, 0x2
sub-int/2addr v5, v12
.line 151
add-int/2addr v11, v5
const/4 v12, 0x4
if-ne v11, v12, :cond_a0
and-int/lit8 v6, v6, 0x3
const/4 v11, 0x2
if-ne v6, v11, :cond_a0
.line 153
neg-int v5, v5
move v6, v5
.line 157
:goto_5f
shl-int/lit8 v5, v4, 0x1
add-int/lit8 v11, v7, 0x1
if-ne v5, v11, :cond_9e
.line 159
xor-int/lit8 v4, v4, 0x1
move v5, v4
.line 161
:goto_68
shl-int/lit8 v4, v0, 0x1
add-int/lit8 v11, v6, 0x1
if-ne v4, v11, :cond_9c
.line 163
xor-int/lit8 v0, v0, 0x1
move v4, v0
.line 166
:goto_71
add-int/lit8 v0, v8, 0x1
const/16 v8, 0x1e
if-ne v0, v8, :cond_84
.line 168
const/4 v0, 0x0
.line 169
const/16 v8, 0x1e
invoke-virtual {v2, v8}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
move-result-object v2
.line 170
const/16 v8, 0x1e
invoke-virtual {v1, v8}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
move-result-object v1
.line 173
:cond_84
add-int/lit8 v8, v9, 0x1
shl-int/lit8 v7, v7, 0x4
and-int/lit8 v6, v6, 0xf
or-int/2addr v6, v7
int-to-byte v6, v6
aput-byte v6, v3, v9
move v9, v8
move v8, v0
move v0, v4
move v4, v5
.line 174
goto :goto_1a
.line 177
:cond_93
if-le v10, v9, :cond_9a
.line 179
invoke-static {v3, v9}, Lorg/spongycastle/math/ec/WNafUtil;->trim([BI)[B
move-result-object v0
.line 182
:goto_99
return-object v0
:cond_9a
move-object v0, v3
goto :goto_99
:cond_9c
move v4, v0
goto :goto_71
:cond_9e
move v5, v4
goto :goto_68
:cond_a0
move v6, v5
goto :goto_5f
:cond_a2
move v7, v5
goto :goto_4d
.end method
.method public static generateNaf(Ljava/math/BigInteger;)[B
.registers 8
.prologue
const/4 v1, 0x1
.line 187
invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I
move-result v0
if-nez v0, :cond_a
.line 189
sget-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_BYTES:[B
.line 210
:goto_9
return-object v0
.line 192
:cond_a
invoke-virtual {p0, v1}, Ljava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0, p0}, Ljava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 194
invoke-virtual {v0}, Ljava/math/BigInteger;->bitLength()I
move-result v2
add-int/lit8 v4, v2, -0x1
.line 195
new-array v3, v4, [B
.line 197
invoke-virtual {v0, p0}, Ljava/math/BigInteger;->xor(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v5
move v2, v1
.line 199
:goto_1f
if-ge v2, v4, :cond_3a
.line 201
invoke-virtual {v5, v2}, Ljava/math/BigInteger;->testBit(I)Z
move-result v0
if-eqz v0, :cond_40
.line 203
add-int/lit8 v6, v2, -0x1
invoke-virtual {p0, v2}, Ljava/math/BigInteger;->testBit(I)Z
move-result v0
if-eqz v0, :cond_38
const/4 v0, -0x1
:goto_30
int-to-byte v0, v0
aput-byte v0, v3, v6
.line 204
add-int/lit8 v0, v2, 0x1
.line 199
:goto_35
add-int/lit8 v2, v0, 0x1
goto :goto_1f
:cond_38
move v0, v1
.line 203
goto :goto_30
.line 208
:cond_3a
add-int/lit8 v0, v4, -0x1
aput-byte v1, v3, v0
move-object v0, v3
.line 210
goto :goto_9
:cond_40
move v0, v2
goto :goto_35
.end method
.method public static generateWindowNaf(ILjava/math/BigInteger;)[B
.registers 12
.prologue
const/4 v0, 0x2
const/4 v6, 0x1
const/4 v1, 0x0
.line 227
if-ne p0, v0, :cond_a
.line 229
invoke-static {p1}, Lorg/spongycastle/math/ec/WNafUtil;->generateNaf(Ljava/math/BigInteger;)[B
move-result-object v0
.line 284
:goto_9
return-object v0
.line 232
:cond_a
if-lt p0, v0, :cond_10
const/16 v0, 0x8
if-le p0, v0, :cond_18
.line 234
:cond_10
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'width\' must be in the range [2, 8]"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 236
:cond_18
invoke-virtual {p1}, Ljava/math/BigInteger;->signum()I
move-result v0
if-nez v0, :cond_21
.line 238
sget-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_BYTES:[B
goto :goto_9
.line 241
:cond_21
invoke-virtual {p1}, Ljava/math/BigInteger;->bitLength()I
move-result v0
add-int/lit8 v0, v0, 0x1
new-array v4, v0, [B
.line 244
shl-int v7, v6, p0
.line 245
add-int/lit8 v8, v7, -0x1
.line 246
ushr-int/lit8 v9, v7, 0x1
move v0, v1
move v2, v1
move v3, v1
.line 251
:goto_32
invoke-virtual {p1}, Ljava/math/BigInteger;->bitLength()I
move-result v5
if-gt v0, v5, :cond_65
.line 253
invoke-virtual {p1, v0}, Ljava/math/BigInteger;->testBit(I)Z
move-result v5
if-ne v5, v3, :cond_41
.line 255
add-int/lit8 v0, v0, 0x1
.line 256
goto :goto_32
.line 259
:cond_41
invoke-virtual {p1, v0}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
move-result-object p1
.line 261
invoke-virtual {p1}, Ljava/math/BigInteger;->intValue()I
move-result v5
and-int/2addr v5, v8
.line 262
if-eqz v3, :cond_4e
.line 264
add-int/lit8 v5, v5, 0x1
.line 267
:cond_4e
and-int v3, v5, v9
if-eqz v3, :cond_63
move v3, v6
.line 268
:goto_53
if-eqz v3, :cond_56
.line 270
sub-int/2addr v5, v7
.line 273
:cond_56
if-lez v2, :cond_5a
add-int/lit8 v0, v0, -0x1
:cond_5a
add-int/2addr v2, v0
.line 274
add-int/lit8 v0, v2, 0x1
int-to-byte v5, v5
aput-byte v5, v4, v2
move v2, v0
move v0, p0
.line 276
goto :goto_32
:cond_63
move v3, v1
.line 267
goto :goto_53
.line 279
:cond_65
array-length v0, v4
if-le v0, v2, :cond_6d
.line 281
invoke-static {v4, v2}, Lorg/spongycastle/math/ec/WNafUtil;->trim([BI)[B
move-result-object v0
goto :goto_9
:cond_6d
move-object v0, v4
goto :goto_9
.end method
.method public static getNafWeight(Ljava/math/BigInteger;)I
.registers 2
.prologue
.line 289
invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I
move-result v0
if-nez v0, :cond_8
.line 291
const/4 v0, 0x0
.line 297
:goto_7
return v0
.line 294
:cond_8
const/4 v0, 0x1
invoke-virtual {p0, v0}, Ljava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
move-result-object v0
invoke-virtual {v0, p0}, Ljava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 295
invoke-virtual {v0, p0}, Ljava/math/BigInteger;->xor(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 297
invoke-virtual {v0}, Ljava/math/BigInteger;->bitCount()I
move-result v0
goto :goto_7
.end method
.method public static getWNafPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;)Lorg/spongycastle/math/ec/WNafPreCompInfo;
.registers 3
.prologue
.line 302
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECPoint;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v0
const-string v1, "bc_wnaf"
invoke-virtual {v0, p0, v1}, Lorg/spongycastle/math/ec/ECCurve;->getPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;)Lorg/spongycastle/math/ec/PreCompInfo;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/math/ec/WNafUtil;->getWNafPreCompInfo(Lorg/spongycastle/math/ec/PreCompInfo;)Lorg/spongycastle/math/ec/WNafPreCompInfo;
move-result-object v0
return-object v0
.end method
.method public static getWNafPreCompInfo(Lorg/spongycastle/math/ec/PreCompInfo;)Lorg/spongycastle/math/ec/WNafPreCompInfo;
.registers 2
.prologue
.line 307
if-eqz p0, :cond_9
instance-of v0, p0, Lorg/spongycastle/math/ec/WNafPreCompInfo;
if-eqz v0, :cond_9
.line 309
check-cast p0, Lorg/spongycastle/math/ec/WNafPreCompInfo;
.line 312
:goto_8
return-object p0
:cond_9
new-instance p0, Lorg/spongycastle/math/ec/WNafPreCompInfo;
invoke-direct {p0}, Lorg/spongycastle/math/ec/WNafPreCompInfo;-><init>()V
goto :goto_8
.end method
.method public static getWindowSize(I)I
.registers 2
.prologue
.line 323
sget-object v0, Lorg/spongycastle/math/ec/WNafUtil;->DEFAULT_WINDOW_SIZE_CUTOFFS:[I
invoke-static {p0, v0}, Lorg/spongycastle/math/ec/WNafUtil;->getWindowSize(I[I)I
move-result v0
return v0
.end method
.method public static getWindowSize(I[I)I
.registers 4
.prologue
.line 335
const/4 v0, 0x0
.line 336
:goto_1
array-length v1, p1
if-ge v0, v1, :cond_b
.line 338
aget v1, p1, v0
if-lt p0, v1, :cond_b
.line 336
add-int/lit8 v0, v0, 0x1
goto :goto_1
.line 343
:cond_b
add-int/lit8 v0, v0, 0x2
return v0
.end method
.method public static mapPointWithPrecomp(Lorg/spongycastle/math/ec/ECPoint;IZLorg/spongycastle/math/ec/ECPointMap;)Lorg/spongycastle/math/ec/ECPoint;
.registers 12
.prologue
const/4 v1, 0x0
.line 349
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECPoint;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v2
.line 350
invoke-static {p0, p1, p2}, Lorg/spongycastle/math/ec/WNafUtil;->precompute(Lorg/spongycastle/math/ec/ECPoint;IZ)Lorg/spongycastle/math/ec/WNafPreCompInfo;
move-result-object v0
.line 352
invoke-interface {p3, p0}, Lorg/spongycastle/math/ec/ECPointMap;->map(Lorg/spongycastle/math/ec/ECPoint;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v3
.line 353
const-string v4, "bc_wnaf"
invoke-virtual {v2, v3, v4}, Lorg/spongycastle/math/ec/ECCurve;->getPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;)Lorg/spongycastle/math/ec/PreCompInfo;
move-result-object v4
invoke-static {v4}, Lorg/spongycastle/math/ec/WNafUtil;->getWNafPreCompInfo(Lorg/spongycastle/math/ec/PreCompInfo;)Lorg/spongycastle/math/ec/WNafPreCompInfo;
move-result-object v4
.line 355
invoke-virtual {v0}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->getTwice()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v5
.line 356
if-eqz v5, :cond_24
.line 358
invoke-interface {p3, v5}, Lorg/spongycastle/math/ec/ECPointMap;->map(Lorg/spongycastle/math/ec/ECPoint;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v5
.line 359
invoke-virtual {v4, v5}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->setTwice(Lorg/spongycastle/math/ec/ECPoint;)V
.line 362
:cond_24
invoke-virtual {v0}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->getPreComp()[Lorg/spongycastle/math/ec/ECPoint;
move-result-object v5
.line 363
array-length v0, v5
new-array v6, v0, [Lorg/spongycastle/math/ec/ECPoint;
move v0, v1
.line 364
:goto_2c
array-length v7, v5
if-ge v0, v7, :cond_3a
.line 366
aget-object v7, v5, v0
invoke-interface {p3, v7}, Lorg/spongycastle/math/ec/ECPointMap;->map(Lorg/spongycastle/math/ec/ECPoint;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v7
aput-object v7, v6, v0
.line 364
add-int/lit8 v0, v0, 0x1
goto :goto_2c
.line 368
:cond_3a
invoke-virtual {v4, v6}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->setPreComp([Lorg/spongycastle/math/ec/ECPoint;)V
.line 370
if-eqz p2, :cond_53
.line 372
array-length v0, v6
new-array v0, v0, [Lorg/spongycastle/math/ec/ECPoint;
.line 373
:goto_42
array-length v5, v0
if-ge v1, v5, :cond_50
.line 375
aget-object v5, v6, v1
invoke-virtual {v5}, Lorg/spongycastle/math/ec/ECPoint;->negate()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v5
aput-object v5, v0, v1
.line 373
add-int/lit8 v1, v1, 0x1
goto :goto_42
.line 377
:cond_50
invoke-virtual {v4, v0}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->setPreCompNeg([Lorg/spongycastle/math/ec/ECPoint;)V
.line 380
:cond_53
const-string v0, "bc_wnaf"
invoke-virtual {v2, v3, v0, v4}, Lorg/spongycastle/math/ec/ECCurve;->setPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;Lorg/spongycastle/math/ec/PreCompInfo;)V
.line 382
return-object v3
.end method
.method public static precompute(Lorg/spongycastle/math/ec/ECPoint;IZ)Lorg/spongycastle/math/ec/WNafPreCompInfo;
.registers 16
.prologue
const/4 v3, 0x1
const/4 v2, 0x0
.line 387
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECPoint;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v8
.line 388
const-string v0, "bc_wnaf"
invoke-virtual {v8, p0, v0}, Lorg/spongycastle/math/ec/ECCurve;->getPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;)Lorg/spongycastle/math/ec/PreCompInfo;
move-result-object v0
invoke-static {v0}, Lorg/spongycastle/math/ec/WNafUtil;->getWNafPreCompInfo(Lorg/spongycastle/math/ec/PreCompInfo;)Lorg/spongycastle/math/ec/WNafPreCompInfo;
move-result-object v9
.line 390
add-int/lit8 v0, p1, -0x2
invoke-static {v2, v0}, Ljava/lang/Math;->max(II)I
move-result v0
shl-int v10, v3, v0
.line 392
invoke-virtual {v9}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->getPreComp()[Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
.line 393
if-nez v0, :cond_4d
.line 395
sget-object v0, Lorg/spongycastle/math/ec/WNafUtil;->EMPTY_POINTS:[Lorg/spongycastle/math/ec/ECPoint;
move v7, v2
.line 402
:goto_21
if-ge v7, v10, :cond_30
.line 404
invoke-static {v0, v10}, Lorg/spongycastle/math/ec/WNafUtil;->resizeTable([Lorg/spongycastle/math/ec/ECPoint;I)[Lorg/spongycastle/math/ec/ECPoint;
move-result-object v1
.line 406
if-ne v10, v3, :cond_4f
.line 408
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECPoint;->normalize()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
aput-object v0, v1, v2
move-object v0, v1
.line 485
:cond_30
:goto_30
invoke-virtual {v9, v0}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->setPreComp([Lorg/spongycastle/math/ec/ECPoint;)V
.line 487
if-eqz p2, :cond_d6
.line 489
invoke-virtual {v9}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->getPreCompNeg()[Lorg/spongycastle/math/ec/ECPoint;
move-result-object v3
.line 492
if-nez v3, :cond_ca
.line 495
new-array v1, v10, [Lorg/spongycastle/math/ec/ECPoint;
move v12, v2
move-object v2, v1
move v1, v12
.line 506
:goto_40
if-ge v1, v10, :cond_d3
.line 508
aget-object v3, v0, v1
invoke-virtual {v3}, Lorg/spongycastle/math/ec/ECPoint;->negate()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v3
aput-object v3, v2, v1
.line 509
add-int/lit8 v1, v1, 0x1
goto :goto_40
.line 399
:cond_4d
array-length v7, v0
goto :goto_21
.line 413
:cond_4f
if-nez v7, :cond_df
.line 415
aput-object p0, v1, v2
move v6, v3
.line 419
:goto_54
const/4 v0, 0x0
.line 421
const/4 v4, 0x2
if-ne v10, v4, :cond_65
.line 423
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECPoint;->threeTimes()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v4
aput-object v4, v1, v3
.line 481
:cond_5e
sub-int v3, v10, v7
invoke-virtual {v8, v1, v7, v3, v0}, Lorg/spongycastle/math/ec/ECCurve;->normalizeAll([Lorg/spongycastle/math/ec/ECPoint;IILorg/spongycastle/math/ec/ECFieldElement;)V
move-object v0, v1
goto :goto_30
.line 427
:cond_65
invoke-virtual {v9}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->getTwice()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v4
add-int/lit8 v3, v6, -0x1
aget-object v3, v1, v3
.line 428
if-nez v4, :cond_8d
.line 430
aget-object v4, v1, v2
invoke-virtual {v4}, Lorg/spongycastle/math/ec/ECPoint;->twice()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v4
.line 431
invoke-virtual {v9, v4}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->setTwice(Lorg/spongycastle/math/ec/ECPoint;)V
.line 443
invoke-static {v8}, Lorg/spongycastle/math/ec/ECAlgorithms;->isFpCurve(Lorg/spongycastle/math/ec/ECCurve;)Z
move-result v5
if-eqz v5, :cond_8d
invoke-virtual {v8}, Lorg/spongycastle/math/ec/ECCurve;->getFieldSize()I
move-result v5
const/16 v11, 0x40
if-lt v5, v11, :cond_8d
.line 445
invoke-virtual {v8}, Lorg/spongycastle/math/ec/ECCurve;->getCoordinateSystem()I
move-result v5
packed-switch v5, :pswitch_data_e2
:cond_8d
move v5, v6
.line 468
:goto_8e
if-ge v5, v10, :cond_5e
.line 474
add-int/lit8 v6, v5, 0x1
invoke-virtual {v3, v4}, Lorg/spongycastle/math/ec/ECPoint;->add(Lorg/spongycastle/math/ec/ECPoint;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v3
aput-object v3, v1, v5
move v5, v6
goto :goto_8e
.line 451
:pswitch_9a
invoke-virtual {v4, v2}, Lorg/spongycastle/math/ec/ECPoint;->getZCoord(I)Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v5
.line 452
invoke-virtual {v4}, Lorg/spongycastle/math/ec/ECPoint;->getXCoord()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 {v4}, Lorg/spongycastle/math/ec/ECPoint;->getYCoord()Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v4
.line 453
invoke-virtual {v4}, Lorg/spongycastle/math/ec/ECFieldElement;->toBigInteger()Ljava/math/BigInteger;
move-result-object v4
.line 452
invoke-virtual {v8, v0, v4}, Lorg/spongycastle/math/ec/ECCurve;->createPoint(Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v4
.line 455
invoke-virtual {v5}, Lorg/spongycastle/math/ec/ECFieldElement;->square()Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v0
invoke-virtual {v0, v5}, Lorg/spongycastle/math/ec/ECFieldElement;->multiply(Lorg/spongycastle/math/ec/ECFieldElement;)Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v11
.line 456
invoke-virtual {v3, v0}, Lorg/spongycastle/math/ec/ECPoint;->scaleX(Lorg/spongycastle/math/ec/ECFieldElement;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
invoke-virtual {v0, v11}, Lorg/spongycastle/math/ec/ECPoint;->scaleY(Lorg/spongycastle/math/ec/ECFieldElement;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
.line 458
if-nez v7, :cond_c6
.line 460
aput-object v0, v1, v2
:cond_c6
move-object v3, v0
move-object v0, v5
move v5, v6
goto :goto_8e
.line 499
:cond_ca
array-length v1, v3
.line 500
if-ge v1, v10, :cond_dc
.line 502
invoke-static {v3, v10}, Lorg/spongycastle/math/ec/WNafUtil;->resizeTable([Lorg/spongycastle/math/ec/ECPoint;I)[Lorg/spongycastle/math/ec/ECPoint;
move-result-object v2
goto/16 :goto_40
.line 512
:cond_d3
invoke-virtual {v9, v2}, Lorg/spongycastle/math/ec/WNafPreCompInfo;->setPreCompNeg([Lorg/spongycastle/math/ec/ECPoint;)V
.line 515
:cond_d6
const-string v0, "bc_wnaf"
invoke-virtual {v8, p0, v0, v9}, Lorg/spongycastle/math/ec/ECCurve;->setPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;Lorg/spongycastle/math/ec/PreCompInfo;)V
.line 517
return-object v9
:cond_dc
move-object v2, v3
goto/16 :goto_40
:cond_df
move v6, v7
goto/16 :goto_54
.line 445
:pswitch_data_e2
.packed-switch 0x2
:pswitch_9a
:pswitch_9a
:pswitch_9a
.end packed-switch
.end method
.method private static resizeTable([Lorg/spongycastle/math/ec/ECPoint;I)[Lorg/spongycastle/math/ec/ECPoint;
.registers 5
.prologue
const/4 v2, 0x0
.line 536
new-array v0, p1, [Lorg/spongycastle/math/ec/ECPoint;
.line 537
array-length v1, p0
invoke-static {p0, v2, v0, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 538
return-object v0
.end method
.method private static trim([BI)[B
.registers 4
.prologue
const/4 v1, 0x0
.line 522
new-array v0, p1, [B
.line 523
invoke-static {p0, v1, v0, v1, p1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 524
return-object v0
.end method
.method private static trim([II)[I
.registers 4
.prologue
const/4 v1, 0x0
.line 529
new-array v0, p1, [I
.line 530
invoke-static {p0, v1, v0, v1, p1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 531
return-object v0
.end method