summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2021-06-19 12:01:15 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2021-06-19 12:01:15 +0000
commit42313980c6dd3d1903172f72e3d01852ceff4922 (patch)
treedaf45d522673930ba2a90970d64295962b9ce13e /bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
parent83b9892b84200128c2347ee35283a8c970085b75 (diff)
parent8687a85bc0e6ef46bac3bce290cca2cddc7d6720 (diff)
downloadbouncycastle-android12-mainline-media-swcodec-release.tar.gz
Change-Id: Ib3a8f3f2512b55882cc72ba19833aad06fc14250
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java50
1 files changed, 45 insertions, 5 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java b/bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
index e05f6775..6ffc6275 100644
--- a/bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
+++ b/bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
@@ -1,18 +1,22 @@
package org.bouncycastle.math.ec.custom.sec;
import java.math.BigInteger;
+import java.security.SecureRandom;
+import org.bouncycastle.math.raw.Mod;
import org.bouncycastle.math.raw.Nat;
import org.bouncycastle.math.raw.Nat224;
+import org.bouncycastle.util.Pack;
public class SecP224R1Field
{
private static final long M = 0xFFFFFFFFL;
// 2^224 - 2^96 + 1
- static final int[] P = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
- static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF,
- 0xFFFFFFFF, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ static final int[] P = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF };
+ private static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
private static final int[] PExtInv = new int[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000001, 0x00000000,
0x00000000, 0xFFFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000001 };
private static final int P6 = 0xFFFFFFFF;
@@ -71,6 +75,22 @@ public class SecP224R1Field
}
}
+ public static void inv(int[] x, int[] z)
+ {
+ Mod.checkedModOddInverse(P, x, z);
+ }
+
+ public static int isZero(int[] x)
+ {
+ int d = 0;
+ for (int i = 0; i < 7; ++i)
+ {
+ d |= x[i];
+ }
+ d = (d >>> 1) | (d & 1);
+ return (d - 1) >> 31;
+ }
+
public static void multiply(int[] x, int[] y, int[] z)
{
int[] tt = Nat224.createExt();
@@ -92,9 +112,9 @@ public class SecP224R1Field
public static void negate(int[] x, int[] z)
{
- if (Nat224.isZero(x))
+ if (0 != isZero(x))
{
- Nat224.zero(z);
+ Nat224.sub(P, P, z);
}
else
{
@@ -102,6 +122,26 @@ public class SecP224R1Field
}
}
+ public static void random(SecureRandom r, int[] z)
+ {
+ byte[] bb = new byte[7 * 4];
+ do
+ {
+ r.nextBytes(bb);
+ Pack.littleEndianToInt(bb, 0, z, 0, 7);
+ }
+ while (0 == Nat.lessThan(7, z, P));
+ }
+
+ public static void randomMult(SecureRandom r, int[] z)
+ {
+ do
+ {
+ random(r, z);
+ }
+ while (0 != isZero(z));
+ }
+
public static void reduce(int[] xx, int[] z)
{
long xx10 = xx[10] & M, xx11 = xx[11] & M, xx12 = xx[12] & M, xx13 = xx[13] & M;