Mont256.smali
.class public abstract Lorg/spongycastle/math/raw/Mont256;
.super Ljava/lang/Object;
.source "Mont256.java"
# static fields
.field private static final M:J = 0xffffffffL
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 3
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static inverse32(I)I
.registers 3
.prologue
.line 11
mul-int v0, p0, p0
rsub-int/lit8 v0, v0, 0x2
mul-int/2addr v0, p0
.line 12
mul-int v1, p0, v0
rsub-int/lit8 v1, v1, 0x2
mul-int/2addr v0, v1
.line 13
mul-int v1, p0, v0
rsub-int/lit8 v1, v1, 0x2
mul-int/2addr v0, v1
.line 14
mul-int v1, p0, v0
rsub-int/lit8 v1, v1, 0x2
mul-int/2addr v0, v1
.line 16
return v0
.end method
.method public static multAdd([I[I[I[II)V
.registers 31
.prologue
.line 21
const/4 v5, 0x0
.line 22
const/4 v4, 0x0
aget v4, p1, v4
int-to-long v6, v4
const-wide v8, 0xffffffffL
and-long v10, v6, v8
.line 24
const/4 v4, 0x0
move v7, v4
move v8, v5
:goto_f
const/16 v4, 0x8
if-ge v7, v4, :cond_cc
.line 26
const/4 v4, 0x0
aget v4, p2, v4
int-to-long v4, v4
const-wide v12, 0xffffffffL
and-long/2addr v4, v12
.line 27
aget v6, p0, v7
int-to-long v12, v6
const-wide v14, 0xffffffffL
and-long/2addr v12, v14
.line 29
mul-long v14, v12, v10
.line 30
const-wide v16, 0xffffffffL
and-long v16, v16, v14
add-long v4, v4, v16
.line 32
long-to-int v6, v4
mul-int v6, v6, p4
int-to-long v0, v6
move-wide/from16 v16, v0
const-wide v18, 0xffffffffL
and-long v16, v16, v18
.line 34
const/4 v6, 0x0
aget v6, p3, v6
int-to-long v0, v6
move-wide/from16 v18, v0
const-wide v20, 0xffffffffL
and-long v18, v18, v20
mul-long v18, v18, v16
.line 35
const-wide v20, 0xffffffffL
and-long v20, v20, v18
add-long v4, v4, v20
.line 37
const/16 v6, 0x20
ushr-long/2addr v4, v6
const/16 v6, 0x20
ushr-long/2addr v14, v6
add-long/2addr v4, v14
const/16 v6, 0x20
ushr-long v14, v18, v6
add-long/2addr v4, v14
.line 39
const/4 v6, 0x1
:goto_63
const/16 v9, 0x8
if-ge v6, v9, :cond_b6
.line 41
aget v9, p1, v6
int-to-long v14, v9
const-wide v18, 0xffffffffL
and-long v14, v14, v18
mul-long/2addr v14, v12
.line 42
aget v9, p3, v6
int-to-long v0, v9
move-wide/from16 v18, v0
const-wide v20, 0xffffffffL
and-long v18, v18, v20
mul-long v18, v18, v16
.line 44
const-wide v20, 0xffffffffL
and-long v20, v20, v14
const-wide v22, 0xffffffffL
and-long v22, v22, v18
add-long v20, v20, v22
aget v9, p2, v6
int-to-long v0, v9
move-wide/from16 v22, v0
const-wide v24, 0xffffffffL
and-long v22, v22, v24
add-long v20, v20, v22
add-long v4, v4, v20
.line 45
add-int/lit8 v9, v6, -0x1
long-to-int v0, v4
move/from16 v20, v0
aput v20, p2, v9
.line 46
const/16 v9, 0x20
ushr-long/2addr v4, v9
const/16 v9, 0x20
ushr-long/2addr v14, v9
add-long/2addr v4, v14
const/16 v9, 0x20
ushr-long v14, v18, v9
add-long/2addr v4, v14
.line 39
add-int/lit8 v6, v6, 0x1
goto :goto_63
.line 49
:cond_b6
int-to-long v8, v8
const-wide v12, 0xffffffffL
and-long/2addr v8, v12
add-long/2addr v4, v8
.line 50
const/4 v6, 0x7
long-to-int v8, v4
aput v8, p2, v6
.line 51
const/16 v6, 0x20
ushr-long/2addr v4, v6
long-to-int v5, v4
.line 24
add-int/lit8 v4, v7, 0x1
move v7, v4
move v8, v5
goto/16 :goto_f
.line 54
:cond_cc
if-nez v8, :cond_d4
invoke-static/range {p2 .. p3}, Lorg/spongycastle/math/raw/Nat256;->gte([I[I)Z
move-result v4
if-eqz v4, :cond_dd
.line 56
:cond_d4
move-object/from16 v0, p2
move-object/from16 v1, p3
move-object/from16 v2, p2
invoke-static {v0, v1, v2}, Lorg/spongycastle/math/raw/Nat256;->sub([I[I[I)I
.line 58
:cond_dd
return-void
.end method
.method public static multAddXF([I[I[I[I)V
.registers 30
.prologue
.line 64
const/4 v5, 0x0
.line 65
const/4 v4, 0x0
aget v4, p1, v4
int-to-long v6, v4
const-wide v8, 0xffffffffL
and-long v10, v6, v8
.line 67
const/4 v4, 0x0
move v8, v5
move v5, v4
:goto_f
const/16 v4, 0x8
if-ge v5, v4, :cond_a4
.line 69
aget v4, p0, v5
int-to-long v6, v4
const-wide v12, 0xffffffffL
and-long/2addr v12, v6
.line 71
mul-long v6, v12, v10
const/4 v4, 0x0
aget v4, p2, v4
int-to-long v14, v4
const-wide v16, 0xffffffffL
and-long v14, v14, v16
add-long/2addr v6, v14
.line 72
const-wide v14, 0xffffffffL
and-long/2addr v14, v6
.line 73
const/16 v4, 0x20
ushr-long/2addr v6, v4
add-long/2addr v6, v14
.line 75
const/4 v4, 0x1
:goto_35
const/16 v9, 0x8
if-ge v4, v9, :cond_8e
.line 77
aget v9, p1, v4
int-to-long v0, v9
move-wide/from16 v16, v0
const-wide v18, 0xffffffffL
and-long v16, v16, v18
mul-long v16, v16, v12
.line 78
aget v9, p3, v4
int-to-long v0, v9
move-wide/from16 v18, v0
const-wide v20, 0xffffffffL
and-long v18, v18, v20
mul-long v18, v18, v14
.line 80
const-wide v20, 0xffffffffL
and-long v20, v20, v16
const-wide v22, 0xffffffffL
and-long v22, v22, v18
add-long v20, v20, v22
aget v9, p2, v4
int-to-long v0, v9
move-wide/from16 v22, v0
const-wide v24, 0xffffffffL
and-long v22, v22, v24
add-long v20, v20, v22
add-long v6, v6, v20
.line 81
add-int/lit8 v9, v4, -0x1
long-to-int v0, v6
move/from16 v20, v0
aput v20, p2, v9
.line 82
const/16 v9, 0x20
ushr-long/2addr v6, v9
const/16 v9, 0x20
ushr-long v16, v16, v9
add-long v6, v6, v16
const/16 v9, 0x20
ushr-long v16, v18, v9
add-long v6, v6, v16
.line 75
add-int/lit8 v4, v4, 0x1
goto :goto_35
.line 85
:cond_8e
int-to-long v8, v8
const-wide v12, 0xffffffffL
and-long/2addr v8, v12
add-long/2addr v6, v8
.line 86
const/4 v4, 0x7
long-to-int v8, v6
aput v8, p2, v4
.line 87
const/16 v4, 0x20
ushr-long/2addr v6, v4
long-to-int v6, v6
.line 67
add-int/lit8 v4, v5, 0x1
move v5, v4
move v8, v6
goto/16 :goto_f
.line 90
:cond_a4
if-nez v8, :cond_ac
invoke-static/range {p2 .. p3}, Lorg/spongycastle/math/raw/Nat256;->gte([I[I)Z
move-result v4
if-eqz v4, :cond_b5
.line 92
:cond_ac
move-object/from16 v0, p2
move-object/from16 v1, p3
move-object/from16 v2, p2
invoke-static {v0, v1, v2}, Lorg/spongycastle/math/raw/Nat256;->sub([I[I[I)I
.line 94
:cond_b5
return-void
.end method
.method public static reduce([I[II)V
.registers 15
.prologue
.line 98
const/4 v0, 0x0
move v3, v0
:goto_2
const/16 v0, 0x8
if-ge v3, v0, :cond_55
.line 100
const/4 v0, 0x0
aget v0, p0, v0
.line 102
mul-int v1, v0, p2
int-to-long v4, v1
const-wide v6, 0xffffffffL
and-long/2addr v4, v6
.line 104
const/4 v1, 0x0
aget v1, p1, v1
int-to-long v6, v1
const-wide v8, 0xffffffffL
and-long/2addr v6, v8
mul-long/2addr v6, v4
int-to-long v0, v0
const-wide v8, 0xffffffffL
and-long/2addr v0, v8
add-long/2addr v0, v6
.line 106
const/16 v2, 0x20
ushr-long/2addr v0, v2
.line 108
const/4 v2, 0x1
:goto_29
const/16 v6, 0x8
if-ge v2, v6, :cond_4d
.line 110
aget v6, p1, v2
int-to-long v6, v6
const-wide v8, 0xffffffffL
and-long/2addr v6, v8
mul-long/2addr v6, v4
aget v8, p0, v2
int-to-long v8, v8
const-wide v10, 0xffffffffL
and-long/2addr v8, v10
add-long/2addr v6, v8
add-long/2addr v0, v6
.line 111
add-int/lit8 v6, v2, -0x1
long-to-int v7, v0
aput v7, p0, v6
.line 112
const/16 v6, 0x20
ushr-long/2addr v0, v6
.line 108
add-int/lit8 v2, v2, 0x1
goto :goto_29
.line 115
:cond_4d
const/4 v2, 0x7
long-to-int v0, v0
aput v0, p0, v2
.line 98
add-int/lit8 v0, v3, 0x1
move v3, v0
goto :goto_2
.line 119
:cond_55
invoke-static {p0, p1}, Lorg/spongycastle/math/raw/Nat256;->gte([I[I)Z
move-result v0
if-eqz v0, :cond_5e
.line 121
invoke-static {p0, p1, p0}, Lorg/spongycastle/math/raw/Nat256;->sub([I[I[I)I
.line 123
:cond_5e
return-void
.end method
.method public static reduceXF([I[I)V
.registers 14
.prologue
.line 129
const/4 v0, 0x0
move v5, v0
:goto_2
const/16 v0, 0x8
if-ge v5, v0, :cond_3f
.line 131
const/4 v0, 0x0
aget v0, p0, v0
.line 133
int-to-long v0, v0
const-wide v2, 0xffffffffL
and-long/2addr v2, v0
.line 136
const/4 v0, 0x1
move v4, v0
move-wide v0, v2
:goto_13
const/16 v6, 0x8
if-ge v4, v6, :cond_37
.line 138
aget v6, p1, v4
int-to-long v6, v6
const-wide v8, 0xffffffffL
and-long/2addr v6, v8
mul-long/2addr v6, v2
aget v8, p0, v4
int-to-long v8, v8
const-wide v10, 0xffffffffL
and-long/2addr v8, v10
add-long/2addr v6, v8
add-long/2addr v0, v6
.line 139
add-int/lit8 v6, v4, -0x1
long-to-int v7, v0
aput v7, p0, v6
.line 140
const/16 v6, 0x20
ushr-long/2addr v0, v6
.line 136
add-int/lit8 v4, v4, 0x1
goto :goto_13
.line 143
:cond_37
const/4 v2, 0x7
long-to-int v0, v0
aput v0, p0, v2
.line 129
add-int/lit8 v0, v5, 0x1
move v5, v0
goto :goto_2
.line 147
:cond_3f
invoke-static {p0, p1}, Lorg/spongycastle/math/raw/Nat256;->gte([I[I)Z
move-result v0
if-eqz v0, :cond_48
.line 149
invoke-static {p0, p1, p0}, Lorg/spongycastle/math/raw/Nat256;->sub([I[I[I)I
.line 151
:cond_48
return-void
.end method