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