diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-03-04 15:10:33 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-03-04 15:10:33 +0700 |
commit | c2fe9bb1d2b4d3b8e01642068714c824a3c74581 (patch) | |
tree | e5a4712684f092946f6439e1e0e0938817313041 /crypto/src/math/ec/custom/sec/SecP224K1Field.cs | |
parent | Just use shift methods from Nat class evverywhere (diff) | |
download | BouncyCastle.NET-ed25519-c2fe9bb1d2b4d3b8e01642068714c824a3c74581.tar.xz |
Remove some length-specific methods in favour of the Nat class
Add more method variations to Nat Use customized reductions in various fields
Diffstat (limited to 'crypto/src/math/ec/custom/sec/SecP224K1Field.cs')
-rw-r--r-- | crypto/src/math/ec/custom/sec/SecP224K1Field.cs | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/crypto/src/math/ec/custom/sec/SecP224K1Field.cs b/crypto/src/math/ec/custom/sec/SecP224K1Field.cs index 03df35d36..57fd1179a 100644 --- a/crypto/src/math/ec/custom/sec/SecP224K1Field.cs +++ b/crypto/src/math/ec/custom/sec/SecP224K1Field.cs @@ -10,9 +10,10 @@ namespace Org.BouncyCastle.Math.EC.Custom.Sec 0xFFFFFFFF }; internal static readonly uint[] PExt = new uint[]{ 0x02C23069, 0x00003526, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFCADA, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + private static readonly uint[] PExtInv = new uint[]{ 0xFD3DCF97, 0xFFFFCAD9, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00003525, 0x00000002 }; private const uint P6 = 0xFFFFFFFF; private const uint PExt13 = 0xFFFFFFFF; - private const ulong PInv = 0x0000000100001A93L; private const uint PInv33 = 0x1A93; public static void Add(uint[] x, uint[] y, uint[] z) @@ -20,26 +21,28 @@ namespace Org.BouncyCastle.Math.EC.Custom.Sec uint c = Nat224.Add(x, y, z); if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) { - Nat224.AddDWord(PInv, z, 0); + Nat.Add33To(7, PInv33, z); } } public static void AddExt(uint[] xx, uint[] yy, uint[] zz) { - uint c = Nat224.AddExt(xx, yy, zz); + uint c = Nat.Add(14, xx, yy, zz); if (c != 0 || (zz[13] == PExt13 && Nat224.GteExt(zz, PExt))) { - Nat224.SubExt(zz, PExt, zz); + if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.IncAt(14, zz, PExtInv.Length); + } } } public static void AddOne(uint[] x, uint[] z) { - Nat224.Copy(x, z); - uint c = Nat224.Inc(z, 0); + uint c = Nat.Inc(7, x, z); if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) { - Nat224.AddDWord(PInv, z, 0); + Nat.Add33To(7, PInv33, z); } } @@ -94,7 +97,7 @@ namespace Org.BouncyCastle.Math.EC.Custom.Sec if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) { - Nat224.AddDWord(PInv, z, 0); + Nat.Add33To(7, PInv33, z); } } @@ -103,7 +106,7 @@ namespace Org.BouncyCastle.Math.EC.Custom.Sec if ((x != 0 && Nat224.Mul33WordAdd(PInv33, x, z, 0) != 0) || (z[6] == P6 && Nat224.Gte(z, P))) { - Nat224.AddDWord(PInv, z, 0); + Nat.Add33To(7, PInv33, z); } } @@ -134,16 +137,19 @@ namespace Org.BouncyCastle.Math.EC.Custom.Sec int c = Nat224.Sub(x, y, z); if (c != 0) { - Nat224.SubDWord(PInv, z); + Nat.Sub33From(7, PInv33, z); } } public static void SubtractExt(uint[] xx, uint[] yy, uint[] zz) { - int c = Nat224.SubExt(xx, yy, zz); + int c = Nat.Sub(14, xx, yy, zz); if (c != 0) { - Nat224.AddExt(zz, PExt, zz); + if (Nat.SubFrom(PExtInv.Length, PExtInv, zz) != 0) + { + Nat.DecAt(14, zz, PExtInv.Length); + } } } @@ -152,7 +158,7 @@ namespace Org.BouncyCastle.Math.EC.Custom.Sec uint c = Nat.ShiftUpBit(7, x, 0, z); if (c != 0 || (z[6] == P6 && Nat224.Gte(z, P))) { - Nat224.AddDWord(PInv, z, 0); + Nat.Add33To(7, PInv33, z); } } } |