ECCurve.smali
.class public abstract Lorg/spongycastle/math/ec/ECCurve;
.super Ljava/lang/Object;
.source "ECCurve.java"
# static fields
.field public static final COORD_AFFINE:I = 0x0
.field public static final COORD_HOMOGENEOUS:I = 0x1
.field public static final COORD_JACOBIAN:I = 0x2
.field public static final COORD_JACOBIAN_CHUDNOVSKY:I = 0x3
.field public static final COORD_JACOBIAN_MODIFIED:I = 0x4
.field public static final COORD_LAMBDA_AFFINE:I = 0x5
.field public static final COORD_LAMBDA_PROJECTIVE:I = 0x6
.field public static final COORD_SKEWED:I = 0x7
# instance fields
.field protected a:Lorg/spongycastle/math/ec/ECFieldElement;
.field protected b:Lorg/spongycastle/math/ec/ECFieldElement;
.field protected cofactor:Ljava/math/BigInteger;
.field protected coord:I
.field protected endomorphism:Lorg/spongycastle/math/ec/endo/ECEndomorphism;
.field protected field:Lorg/spongycastle/math/field/FiniteField;
.field protected multiplier:Lorg/spongycastle/math/ec/ECMultiplier;
.field protected order:Ljava/math/BigInteger;
# direct methods
.method protected constructor <init>(Lorg/spongycastle/math/field/FiniteField;)V
.registers 4
.prologue
const/4 v1, 0x0
.line 99
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 94
const/4 v0, 0x0
iput v0, p0, Lorg/spongycastle/math/ec/ECCurve;->coord:I
.line 95
iput-object v1, p0, Lorg/spongycastle/math/ec/ECCurve;->endomorphism:Lorg/spongycastle/math/ec/endo/ECEndomorphism;
.line 96
iput-object v1, p0, Lorg/spongycastle/math/ec/ECCurve;->multiplier:Lorg/spongycastle/math/ec/ECMultiplier;
.line 100
iput-object p1, p0, Lorg/spongycastle/math/ec/ECCurve;->field:Lorg/spongycastle/math/field/FiniteField;
.line 101
return-void
.end method
.method public static getAllCoordinateSystems()[I
.registers 1
.prologue
.line 30
const/16 v0, 0x8
new-array v0, v0, [I
fill-array-data v0, :array_8
return-object v0
:array_8
.array-data 4
0x0
0x1
0x2
0x3
0x4
0x5
0x6
0x7
.end array-data
.end method
# virtual methods
.method protected checkPoint(Lorg/spongycastle/math/ec/ECPoint;)V
.registers 4
.prologue
.line 446
if-eqz p1, :cond_8
invoke-virtual {p1}, Lorg/spongycastle/math/ec/ECPoint;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v0
if-eq p0, v0, :cond_10
.line 448
:cond_8
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'point\' must be non-null and on this curve"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 450
:cond_10
return-void
.end method
.method protected checkPoints([Lorg/spongycastle/math/ec/ECPoint;)V
.registers 4
.prologue
.line 454
const/4 v0, 0x0
array-length v1, p1
invoke-virtual {p0, p1, v0, v1}, Lorg/spongycastle/math/ec/ECCurve;->checkPoints([Lorg/spongycastle/math/ec/ECPoint;II)V
.line 455
return-void
.end method
.method protected checkPoints([Lorg/spongycastle/math/ec/ECPoint;II)V
.registers 6
.prologue
.line 459
if-nez p1, :cond_a
.line 461
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'points\' cannot be null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 463
:cond_a
if-ltz p2, :cond_12
if-ltz p3, :cond_12
array-length v0, p1
sub-int/2addr v0, p3
if-le p2, v0, :cond_1a
.line 465
:cond_12
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "invalid range specified for \'points\'"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 468
:cond_1a
const/4 v0, 0x0
:goto_1b
if-ge v0, p3, :cond_34
.line 470
add-int v1, p2, v0
aget-object v1, p1, v1
.line 471
if-eqz v1, :cond_31
invoke-virtual {v1}, Lorg/spongycastle/math/ec/ECPoint;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v1
if-eq p0, v1, :cond_31
.line 473
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'points\' entries must be null or on this curve"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 468
:cond_31
add-int/lit8 v0, v0, 0x1
goto :goto_1b
.line 476
:cond_34
return-void
.end method
.method public abstract cloneCurve()Lorg/spongycastle/math/ec/ECCurve;
.end method
.method public declared-synchronized configure()Lorg/spongycastle/math/ec/ECCurve$Config;
.registers 5
.prologue
.line 111
monitor-enter p0
:try_start_1
new-instance v0, Lorg/spongycastle/math/ec/ECCurve$Config;
iget v1, p0, Lorg/spongycastle/math/ec/ECCurve;->coord:I
iget-object v2, p0, Lorg/spongycastle/math/ec/ECCurve;->endomorphism:Lorg/spongycastle/math/ec/endo/ECEndomorphism;
iget-object v3, p0, Lorg/spongycastle/math/ec/ECCurve;->multiplier:Lorg/spongycastle/math/ec/ECMultiplier;
invoke-direct {v0, p0, v1, v2, v3}, Lorg/spongycastle/math/ec/ECCurve$Config;-><init>(Lorg/spongycastle/math/ec/ECCurve;ILorg/spongycastle/math/ec/endo/ECEndomorphism;Lorg/spongycastle/math/ec/ECMultiplier;)V
:try_end_c
.catchall {:try_start_1 .. :try_end_c} :catchall_e
monitor-exit p0
return-object v0
:catchall_e
move-exception v0
monitor-exit p0
throw v0
.end method
.method public createDefaultMultiplier()Lorg/spongycastle/math/ec/ECMultiplier;
.registers 3
.prologue
.line 160
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->endomorphism:Lorg/spongycastle/math/ec/endo/ECEndomorphism;
instance-of v0, v0, Lorg/spongycastle/math/ec/endo/GLVEndomorphism;
if-eqz v0, :cond_11
.line 162
new-instance v1, Lorg/spongycastle/math/ec/GLVMultiplier;
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->endomorphism:Lorg/spongycastle/math/ec/endo/ECEndomorphism;
check-cast v0, Lorg/spongycastle/math/ec/endo/GLVEndomorphism;
invoke-direct {v1, p0, v0}, Lorg/spongycastle/math/ec/GLVMultiplier;-><init>(Lorg/spongycastle/math/ec/ECCurve;Lorg/spongycastle/math/ec/endo/GLVEndomorphism;)V
move-object v0, v1
.line 165
:goto_10
return-object v0
:cond_11
new-instance v0, Lorg/spongycastle/math/ec/WNafL2RMultiplier;
invoke-direct {v0}, Lorg/spongycastle/math/ec/WNafL2RMultiplier;-><init>()V
goto :goto_10
.end method
.method public createPoint(Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
.registers 4
.prologue
.line 140
const/4 v0, 0x0
invoke-virtual {p0, p1, p2, v0}, Lorg/spongycastle/math/ec/ECCurve;->createPoint(Ljava/math/BigInteger;Ljava/math/BigInteger;Z)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
return-object v0
.end method
.method public createPoint(Ljava/math/BigInteger;Ljava/math/BigInteger;Z)Lorg/spongycastle/math/ec/ECPoint;
.registers 6
.prologue
.line 149
invoke-virtual {p0, p1}, Lorg/spongycastle/math/ec/ECCurve;->fromBigInteger(Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v0
invoke-virtual {p0, p2}, Lorg/spongycastle/math/ec/ECCurve;->fromBigInteger(Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v1
invoke-virtual {p0, v0, v1, p3}, Lorg/spongycastle/math/ec/ECCurve;->createRawPoint(Lorg/spongycastle/math/ec/ECFieldElement;Lorg/spongycastle/math/ec/ECFieldElement;Z)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
return-object v0
.end method
.method public abstract createRawPoint(Lorg/spongycastle/math/ec/ECFieldElement;Lorg/spongycastle/math/ec/ECFieldElement;Z)Lorg/spongycastle/math/ec/ECPoint;
.end method
.method public abstract createRawPoint(Lorg/spongycastle/math/ec/ECFieldElement;Lorg/spongycastle/math/ec/ECFieldElement;[Lorg/spongycastle/math/ec/ECFieldElement;Z)Lorg/spongycastle/math/ec/ECPoint;
.end method
.method public decodePoint([B)Lorg/spongycastle/math/ec/ECPoint;
.registers 9
.prologue
const/4 v1, 0x0
const/4 v0, 0x1
.line 366
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getFieldSize()I
move-result v2
add-int/lit8 v2, v2, 0x7
div-int/lit8 v2, v2, 0x8
.line 368
aget-byte v3, p1, v1
.line 369
packed-switch v3, :pswitch_data_c0
.line 433
:pswitch_f
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Invalid point encoding 0x"
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const/16 v2, 0x10
invoke-static {v3, v2}, Ljava/lang/Integer;->toString(II)Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 373
:pswitch_2a
array-length v1, p1
if-eq v1, v0, :cond_35
.line 375
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Incorrect length for infinity encoding"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 378
:cond_35
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getInfinity()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
.line 436
:cond_39
:goto_39
if-eqz v3, :cond_be
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECPoint;->isInfinity()Z
move-result v1
if-eqz v1, :cond_be
.line 438
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Invalid infinity encoding"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 384
:pswitch_49
array-length v1, p1
add-int/lit8 v4, v2, 0x1
if-eq v1, v4, :cond_56
.line 386
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Incorrect length for compressed encoding"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 389
:cond_56
and-int/lit8 v1, v3, 0x1
.line 390
invoke-static {p1, v0, v2}, Lorg/spongycastle/util/BigIntegers;->fromUnsignedByteArray([BII)Ljava/math/BigInteger;
move-result-object v0
.line 392
invoke-virtual {p0, v1, v0}, Lorg/spongycastle/math/ec/ECCurve;->decompressPoint(ILjava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
.line 393
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECPoint;->satisfiesCofactor()Z
move-result v1
if-nez v1, :cond_39
.line 395
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Invalid point"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 402
:pswitch_6e
array-length v1, p1
mul-int/lit8 v4, v2, 0x2
add-int/lit8 v4, v4, 0x1
if-eq v1, v4, :cond_7d
.line 404
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Incorrect length for uncompressed encoding"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 407
:cond_7d
invoke-static {p1, v0, v2}, Lorg/spongycastle/util/BigIntegers;->fromUnsignedByteArray([BII)Ljava/math/BigInteger;
move-result-object v0
.line 408
add-int/lit8 v1, v2, 0x1
invoke-static {p1, v1, v2}, Lorg/spongycastle/util/BigIntegers;->fromUnsignedByteArray([BII)Ljava/math/BigInteger;
move-result-object v1
.line 410
invoke-virtual {p0, v0, v1}, Lorg/spongycastle/math/ec/ECCurve;->validatePoint(Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
goto :goto_39
.line 416
:pswitch_8c
array-length v4, p1
mul-int/lit8 v5, v2, 0x2
add-int/lit8 v5, v5, 0x1
if-eq v4, v5, :cond_9b
.line 418
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Incorrect length for hybrid encoding"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 421
:cond_9b
invoke-static {p1, v0, v2}, Lorg/spongycastle/util/BigIntegers;->fromUnsignedByteArray([BII)Ljava/math/BigInteger;
move-result-object v4
.line 422
add-int/lit8 v5, v2, 0x1
invoke-static {p1, v5, v2}, Lorg/spongycastle/util/BigIntegers;->fromUnsignedByteArray([BII)Ljava/math/BigInteger;
move-result-object v2
.line 424
invoke-virtual {v2, v1}, Ljava/math/BigInteger;->testBit(I)Z
move-result v5
const/4 v6, 0x7
if-ne v3, v6, :cond_b6
:goto_ac
if-eq v5, v0, :cond_b8
.line 426
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Inconsistent Y coordinate in hybrid encoding"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_b6
move v0, v1
.line 424
goto :goto_ac
.line 429
:cond_b8
invoke-virtual {p0, v4, v2}, Lorg/spongycastle/math/ec/ECCurve;->validatePoint(Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
goto/16 :goto_39
.line 441
:cond_be
return-object v0
.line 369
nop
:pswitch_data_c0
.packed-switch 0x0
:pswitch_2a
:pswitch_f
:pswitch_49
:pswitch_49
:pswitch_6e
:pswitch_f
:pswitch_8c
:pswitch_8c
.end packed-switch
.end method
.method protected abstract decompressPoint(ILjava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
.end method
.method public equals(Ljava/lang/Object;)Z
.registers 3
.prologue
.line 489
if-eq p0, p1, :cond_e
instance-of v0, p1, Lorg/spongycastle/math/ec/ECCurve;
if-eqz v0, :cond_10
check-cast p1, Lorg/spongycastle/math/ec/ECCurve;
invoke-virtual {p0, p1}, Lorg/spongycastle/math/ec/ECCurve;->equals(Lorg/spongycastle/math/ec/ECCurve;)Z
move-result v0
if-eqz v0, :cond_10
:cond_e
const/4 v0, 0x1
:goto_f
return v0
:cond_10
const/4 v0, 0x0
goto :goto_f
.end method
.method public equals(Lorg/spongycastle/math/ec/ECCurve;)Z
.registers 4
.prologue
.line 480
if-eq p0, p1, :cond_3e
if-eqz p1, :cond_40
.line 482
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getField()Lorg/spongycastle/math/field/FiniteField;
move-result-object v0
invoke-virtual {p1}, Lorg/spongycastle/math/ec/ECCurve;->getField()Lorg/spongycastle/math/field/FiniteField;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_40
.line 483
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->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 {p1}, Lorg/spongycastle/math/ec/ECCurve;->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 {v0, v1}, Ljava/math/BigInteger;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_40
.line 484
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getB()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 {p1}, Lorg/spongycastle/math/ec/ECCurve;->getB()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 {v0, v1}, Ljava/math/BigInteger;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_40
:cond_3e
const/4 v0, 0x1
:goto_3f
return v0
:cond_40
const/4 v0, 0x0
goto :goto_3f
.end method
.method public abstract fromBigInteger(Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECFieldElement;
.end method
.method public getA()Lorg/spongycastle/math/ec/ECFieldElement;
.registers 2
.prologue
.line 315
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->a:Lorg/spongycastle/math/ec/ECFieldElement;
return-object v0
.end method
.method public getB()Lorg/spongycastle/math/ec/ECFieldElement;
.registers 2
.prologue
.line 320
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->b:Lorg/spongycastle/math/ec/ECFieldElement;
return-object v0
.end method
.method public getCofactor()Ljava/math/BigInteger;
.registers 2
.prologue
.line 330
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->cofactor:Ljava/math/BigInteger;
return-object v0
.end method
.method public getCoordinateSystem()I
.registers 2
.prologue
.line 335
iget v0, p0, Lorg/spongycastle/math/ec/ECCurve;->coord:I
return v0
.end method
.method public getEndomorphism()Lorg/spongycastle/math/ec/endo/ECEndomorphism;
.registers 2
.prologue
.line 342
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->endomorphism:Lorg/spongycastle/math/ec/endo/ECEndomorphism;
return-object v0
.end method
.method public getField()Lorg/spongycastle/math/field/FiniteField;
.registers 2
.prologue
.line 310
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->field:Lorg/spongycastle/math/field/FiniteField;
return-object v0
.end method
.method public abstract getFieldSize()I
.end method
.method public abstract getInfinity()Lorg/spongycastle/math/ec/ECPoint;
.end method
.method public declared-synchronized getMultiplier()Lorg/spongycastle/math/ec/ECMultiplier;
.registers 2
.prologue
.line 350
monitor-enter p0
:try_start_1
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->multiplier:Lorg/spongycastle/math/ec/ECMultiplier;
if-nez v0, :cond_b
.line 352
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->createDefaultMultiplier()Lorg/spongycastle/math/ec/ECMultiplier;
move-result-object v0
iput-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->multiplier:Lorg/spongycastle/math/ec/ECMultiplier;
.line 354
:cond_b
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->multiplier:Lorg/spongycastle/math/ec/ECMultiplier;
:try_end_d
.catchall {:try_start_1 .. :try_end_d} :catchall_f
monitor-exit p0
return-object v0
.line 350
:catchall_f
move-exception v0
monitor-exit p0
throw v0
.end method
.method public getOrder()Ljava/math/BigInteger;
.registers 2
.prologue
.line 325
iget-object v0, p0, Lorg/spongycastle/math/ec/ECCurve;->order:Ljava/math/BigInteger;
return-object v0
.end method
.method public getPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;)Lorg/spongycastle/math/ec/PreCompInfo;
.registers 4
.prologue
.line 175
invoke-virtual {p0, p1}, Lorg/spongycastle/math/ec/ECCurve;->checkPoint(Lorg/spongycastle/math/ec/ECPoint;)V
.line 176
monitor-enter p1
.line 178
:try_start_4
iget-object v0, p1, Lorg/spongycastle/math/ec/ECPoint;->preCompTable:Ljava/util/Hashtable;
.line 179
if-nez v0, :cond_b
const/4 v0, 0x0
:goto_9
monitor-exit p1
return-object v0
:cond_b
invoke-virtual {v0, p2}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/spongycastle/math/ec/PreCompInfo;
goto :goto_9
.line 180
:catchall_12
move-exception v0
monitor-exit p1
:try_end_14
.catchall {:try_start_4 .. :try_end_14} :catchall_12
throw v0
.end method
.method public hashCode()I
.registers 4
.prologue
.line 494
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getField()Lorg/spongycastle/math/field/FiniteField;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Object;->hashCode()I
move-result v0
.line 495
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->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;->hashCode()I
move-result v1
const/16 v2, 0x8
invoke-static {v1, v2}, Lorg/spongycastle/util/Integers;->rotateLeft(II)I
move-result v1
xor-int/2addr v0, v1
.line 496
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getB()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;->hashCode()I
move-result v1
const/16 v2, 0x10
invoke-static {v1, v2}, Lorg/spongycastle/util/Integers;->rotateLeft(II)I
move-result v1
xor-int/2addr v0, v1
return v0
.end method
.method public importPoint(Lorg/spongycastle/math/ec/ECPoint;)Lorg/spongycastle/math/ec/ECPoint;
.registers 5
.prologue
.line 211
invoke-virtual {p1}, Lorg/spongycastle/math/ec/ECPoint;->getCurve()Lorg/spongycastle/math/ec/ECCurve;
move-result-object v0
if-ne p0, v0, :cond_7
.line 223
:goto_6
return-object p1
.line 215
:cond_7
invoke-virtual {p1}, Lorg/spongycastle/math/ec/ECPoint;->isInfinity()Z
move-result v0
if-eqz v0, :cond_12
.line 217
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getInfinity()Lorg/spongycastle/math/ec/ECPoint;
move-result-object p1
goto :goto_6
.line 221
:cond_12
invoke-virtual {p1}, Lorg/spongycastle/math/ec/ECPoint;->normalize()Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
.line 223
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECPoint;->getXCoord()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 {v0}, Lorg/spongycastle/math/ec/ECPoint;->getYCoord()Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v2
invoke-virtual {v2}, Lorg/spongycastle/math/ec/ECFieldElement;->toBigInteger()Ljava/math/BigInteger;
move-result-object v2
iget-boolean v0, v0, Lorg/spongycastle/math/ec/ECPoint;->withCompression:Z
invoke-virtual {p0, v1, v2, v0}, Lorg/spongycastle/math/ec/ECCurve;->validatePoint(Ljava/math/BigInteger;Ljava/math/BigInteger;Z)Lorg/spongycastle/math/ec/ECPoint;
move-result-object p1
goto :goto_6
.end method
.method public abstract isValidFieldElement(Ljava/math/BigInteger;)Z
.end method
.method public normalizeAll([Lorg/spongycastle/math/ec/ECPoint;)V
.registers 5
.prologue
.line 238
const/4 v0, 0x0
array-length v1, p1
const/4 v2, 0x0
invoke-virtual {p0, p1, v0, v1, v2}, Lorg/spongycastle/math/ec/ECCurve;->normalizeAll([Lorg/spongycastle/math/ec/ECPoint;IILorg/spongycastle/math/ec/ECFieldElement;)V
.line 239
return-void
.end method
.method public normalizeAll([Lorg/spongycastle/math/ec/ECPoint;IILorg/spongycastle/math/ec/ECFieldElement;)V
.registers 12
.prologue
const/4 v2, 0x0
.line 261
invoke-virtual {p0, p1, p2, p3}, Lorg/spongycastle/math/ec/ECCurve;->checkPoints([Lorg/spongycastle/math/ec/ECPoint;II)V
.line 263
invoke-virtual {p0}, Lorg/spongycastle/math/ec/ECCurve;->getCoordinateSystem()I
move-result v0
sparse-switch v0, :sswitch_data_54
.line 279
new-array v4, p3, [Lorg/spongycastle/math/ec/ECFieldElement;
.line 280
new-array v5, p3, [I
move v3, v2
move v0, v2
.line 282
:goto_11
if-ge v3, p3, :cond_3c
.line 284
add-int v1, p2, v3
aget-object v1, p1, v1
.line 285
if-eqz v1, :cond_2e
if-nez p4, :cond_21
invoke-virtual {v1}, Lorg/spongycastle/math/ec/ECPoint;->isNormalized()Z
move-result v6
if-nez v6, :cond_2e
.line 287
:cond_21
invoke-virtual {v1, v2}, Lorg/spongycastle/math/ec/ECPoint;->getZCoord(I)Lorg/spongycastle/math/ec/ECFieldElement;
move-result-object v1
aput-object v1, v4, v0
.line 288
add-int/lit8 v1, v0, 0x1
add-int v6, p2, v3
aput v6, v5, v0
move v0, v1
.line 282
:cond_2e
add-int/lit8 v1, v3, 0x1
move v3, v1
goto :goto_11
.line 268
:sswitch_32
if-eqz p4, :cond_3e
.line 270
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'iso\' not valid for affine coordinates"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 292
:cond_3c
if-nez v0, :cond_3f
.line 304
:cond_3e
return-void
.line 297
:cond_3f
invoke-static {v4, v2, v0, p4}, Lorg/spongycastle/math/ec/ECAlgorithms;->montgomeryTrick([Lorg/spongycastle/math/ec/ECFieldElement;IILorg/spongycastle/math/ec/ECFieldElement;)V
move v1, v2
.line 299
:goto_43
if-ge v1, v0, :cond_3e
.line 301
aget v2, v5, v1
.line 302
aget-object v3, p1, v2
aget-object v6, v4, v1
invoke-virtual {v3, v6}, Lorg/spongycastle/math/ec/ECPoint;->normalize(Lorg/spongycastle/math/ec/ECFieldElement;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v3
aput-object v3, p1, v2
.line 299
add-int/lit8 v1, v1, 0x1
goto :goto_43
.line 263
:sswitch_data_54
.sparse-switch
0x0 -> :sswitch_32
0x5 -> :sswitch_32
.end sparse-switch
.end method
.method public setPreCompInfo(Lorg/spongycastle/math/ec/ECPoint;Ljava/lang/String;Lorg/spongycastle/math/ec/PreCompInfo;)V
.registers 6
.prologue
.line 197
invoke-virtual {p0, p1}, Lorg/spongycastle/math/ec/ECCurve;->checkPoint(Lorg/spongycastle/math/ec/ECPoint;)V
.line 198
monitor-enter p1
.line 200
:try_start_4
iget-object v0, p1, Lorg/spongycastle/math/ec/ECPoint;->preCompTable:Ljava/util/Hashtable;
.line 201
if-nez v0, :cond_10
.line 203
new-instance v0, Ljava/util/Hashtable;
const/4 v1, 0x4
invoke-direct {v0, v1}, Ljava/util/Hashtable;-><init>(I)V
iput-object v0, p1, Lorg/spongycastle/math/ec/ECPoint;->preCompTable:Ljava/util/Hashtable;
.line 205
:cond_10
invoke-virtual {v0, p2, p3}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 206
monitor-exit p1
return-void
:catchall_15
move-exception v0
monitor-exit p1
:try_end_17
.catchall {:try_start_4 .. :try_end_17} :catchall_15
throw v0
.end method
.method public supportsCoordinateSystem(I)Z
.registers 3
.prologue
.line 170
if-nez p1, :cond_4
const/4 v0, 0x1
:goto_3
return v0
:cond_4
const/4 v0, 0x0
goto :goto_3
.end method
.method public validatePoint(Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
.registers 5
.prologue
.line 116
invoke-virtual {p0, p1, p2}, Lorg/spongycastle/math/ec/ECCurve;->createPoint(Ljava/math/BigInteger;Ljava/math/BigInteger;)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
.line 117
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECPoint;->isValid()Z
move-result v1
if-nez v1, :cond_12
.line 119
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Invalid point coordinates"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 121
:cond_12
return-object v0
.end method
.method public validatePoint(Ljava/math/BigInteger;Ljava/math/BigInteger;Z)Lorg/spongycastle/math/ec/ECPoint;
.registers 6
.prologue
.line 130
invoke-virtual {p0, p1, p2, p3}, Lorg/spongycastle/math/ec/ECCurve;->createPoint(Ljava/math/BigInteger;Ljava/math/BigInteger;Z)Lorg/spongycastle/math/ec/ECPoint;
move-result-object v0
.line 131
invoke-virtual {v0}, Lorg/spongycastle/math/ec/ECPoint;->isValid()Z
move-result v1
if-nez v1, :cond_12
.line 133
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Invalid point coordinates"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 135
:cond_12
return-object v0
.end method