private void EnsureAvailable(int bit) { int count = lookupPowX2.Count; if (count <= bit) { ulong[] tmp = (ulong[])lookupPowX2[count - 1]; do { tmp = Arrays.Clone(tmp); GcmUtilities.Square(tmp, tmp); lookupPowX2.Add(tmp); }while (++count <= bit); } }
public void ExponentiateX(long pow, byte[] output) { // Initial value is little-endian 1 ulong[] y = GcmUtilities.OneAsUlongs(); if (pow > 0) { ulong[] powX = Arrays.Clone(x); do { if ((pow & 1L) != 0) { GcmUtilities.Multiply(y, powX); } GcmUtilities.Square(powX, powX); pow >>= 1; }while (pow > 0); } GcmUtilities.AsBytes(y, output); }