summary refs log tree commit diff
path: root/crypto/src/crypto/modes/gcm/Tables1kGcmExponentiator.cs
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2022-02-09 00:27:55 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2022-02-09 00:27:55 +0700
commit7999d9a94a6bf6eb6de72258e5167d88a86f4d9b (patch)
tree627d928b61be8dcd35a1fb8c1426175b53c6b951 /crypto/src/crypto/modes/gcm/Tables1kGcmExponentiator.cs
parentGCM perf. opts. (diff)
downloadBouncyCastle.NET-ed25519-7999d9a94a6bf6eb6de72258e5167d88a86f4d9b.tar.xz
Further GCM updates
Diffstat (limited to '')
-rw-r--r--crypto/src/crypto/modes/gcm/Tables1kGcmExponentiator.cs20
1 files changed, 11 insertions, 9 deletions
diff --git a/crypto/src/crypto/modes/gcm/Tables1kGcmExponentiator.cs b/crypto/src/crypto/modes/gcm/Tables1kGcmExponentiator.cs

index 3667241e3..4a15712c2 100644 --- a/crypto/src/crypto/modes/gcm/Tables1kGcmExponentiator.cs +++ b/crypto/src/crypto/modes/gcm/Tables1kGcmExponentiator.cs
@@ -14,8 +14,9 @@ namespace Org.BouncyCastle.Crypto.Modes.Gcm public void Init(byte[] x) { - ulong[] y = GcmUtilities.AsUlongs(x); - if (lookupPowX2 != null && Arrays.AreEqual(y, (ulong[])lookupPowX2[0])) + GcmUtilities.FieldElement y; + GcmUtilities.AsFieldElement(x, out y); + if (lookupPowX2 != null && y.Equals(lookupPowX2[0])) return; lookupPowX2 = Platform.CreateArrayList(8); @@ -24,20 +25,22 @@ namespace Org.BouncyCastle.Crypto.Modes.Gcm public void ExponentiateX(long pow, byte[] output) { - ulong[] y = GcmUtilities.OneAsUlongs(); + GcmUtilities.FieldElement y; + GcmUtilities.One(out y); int bit = 0; while (pow > 0) { if ((pow & 1L) != 0) { EnsureAvailable(bit); - GcmUtilities.Multiply(y, (ulong[])lookupPowX2[bit]); + GcmUtilities.FieldElement powX2 = (GcmUtilities.FieldElement)lookupPowX2[bit]; + GcmUtilities.Multiply(ref y, ref powX2); } ++bit; pow >>= 1; } - GcmUtilities.AsBytes(y, output); + GcmUtilities.AsBytes(ref y, output); } private void EnsureAvailable(int bit) @@ -45,12 +48,11 @@ namespace Org.BouncyCastle.Crypto.Modes.Gcm int count = lookupPowX2.Count; if (count <= bit) { - ulong[] tmp = (ulong[])lookupPowX2[count - 1]; + GcmUtilities.FieldElement powX2 = (GcmUtilities.FieldElement)lookupPowX2[count - 1]; do { - tmp = Arrays.Clone(tmp); - GcmUtilities.Square(tmp, tmp); - lookupPowX2.Add(tmp); + GcmUtilities.Square(ref powX2); + lookupPowX2.Add(powX2); } while (++count <= bit); }