All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.spongycastle.crypto.modes.gcm.Tables1kGCMExponentiator Maven / Gradle / Ivy

Go to download

Spongy Castle is a package-rename (org.bouncycastle.* to org.spongycastle.*) of Bouncy Castle intended for Android. Android ships with a stripped-down version of Bouncy Castle - this causes classloader collisions if you try to add an alternative (updated/complete) Bouncy Castle jar. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5.

There is a newer version: 1.46.99.3-UNOFFICIAL-ROBERTO-RELEASE
Show newest version
package org.spongycastle.crypto.modes.gcm;

import org.spongycastle.util.Arrays;

public class Tables1kGCMExponentiator implements GCMExponentiator
{
    // A lookup table of the power-of-two powers of 'x'
    byte[][] lookupPowX2 = new byte[64][];

    public void init(byte[] x)
    {
        // Initial value is little-endian 1
        lookupPowX2[0] = new byte[16];
        lookupPowX2[0][0] = (byte)0x80;

        lookupPowX2[1] = Arrays.clone(x); 

        for (int i = 2; i != 64; ++i)
        {
            byte[] tmp = Arrays.clone(lookupPowX2[i - 1]);
            GCMUtil.multiply(tmp, tmp);
            lookupPowX2[i] = tmp;
        }
    }

    public void exponentiateX(long pow, byte[] output)
    {
        // Initial value is little-endian 1
        byte[] y = GCMUtil.oneAsBytes();
        int powX2 = 1;

        while (pow > 0)
        {
            if ((pow & 1L) != 0)
            {
                GCMUtil.multiply(y, lookupPowX2[powX2]);
            }
            ++powX2;
            pow >>>= 1;
        }

        System.arraycopy(y, 0, output, 0, 16);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy