diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-19 12:01:15 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-19 12:01:15 +0000 |
commit | 42313980c6dd3d1903172f72e3d01852ceff4922 (patch) | |
tree | daf45d522673930ba2a90970d64295962b9ce13e /bcprov/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java | |
parent | 83b9892b84200128c2347ee35283a8c970085b75 (diff) | |
parent | 8687a85bc0e6ef46bac3bce290cca2cddc7d6720 (diff) | |
download | bouncycastle-android12-mainline-media-swcodec-release.tar.gz |
Snap for 7474514 from 8687a85bc0e6ef46bac3bce290cca2cddc7d6720 to mainline-media-swcodec-releaseandroid-mainline-12.0.0_r91android-mainline-12.0.0_r75android-mainline-12.0.0_r47android-mainline-12.0.0_r30android-mainline-12.0.0_r13android-mainline-12.0.0_r120android-mainline-12.0.0_r105android12-mainline-media-swcodec-release
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.java | 50 |
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; |