Exemplo n.º 1
0
 public void Init(byte[] x)
 {
     uint[] array = GcmUtilities.AsUints(x);
     if (lookupPowX2 == null || !Arrays.AreEqual(array, (uint[])lookupPowX2[0]))
     {
         lookupPowX2 = Platform.CreateArrayList(8);
         lookupPowX2.Add(array);
     }
 }
    public void Init(byte[] H)
    {
        if (M == null)
        {
            M = new uint[16][][];
        }
        else if (Arrays.AreEqual(this.H, H))
        {
            return;
        }
        this.H    = Arrays.Clone(H);
        M[0]      = new uint[256][];
        M[0][0]   = new uint[4];
        M[0][128] = GcmUtilities.AsUints(H);
        for (int num = 64; num >= 1; num >>= 1)
        {
            uint[] array = (uint[])M[0][num + num].Clone();
            GcmUtilities.MultiplyP(array);
            M[0][num] = array;
        }
        int num2 = 0;

        while (true)
        {
            for (int i = 2; i < 256; i += i)
            {
                for (int j = 1; j < i; j++)
                {
                    uint[] array2 = (uint[])M[num2][i].Clone();
                    GcmUtilities.Xor(array2, M[num2][j]);
                    M[num2][i + j] = array2;
                }
            }
            if (++num2 == 16)
            {
                break;
            }
            M[num2]    = new uint[256][];
            M[num2][0] = new uint[4];
            for (int num3 = 128; num3 > 0; num3 >>= 1)
            {
                uint[] array3 = (uint[])M[num2 - 1][num3].Clone();
                GcmUtilities.MultiplyP8(array3);
                M[num2][num3] = array3;
            }
        }
    }
Exemplo n.º 3
0
 public void Init(byte[] H)
 {
     this.H = GcmUtilities.AsUints(H);
 }
Exemplo n.º 4
0
 public void MultiplyH(byte[] x)
 {
     uint[] x2 = GcmUtilities.AsUints(x);
     GcmUtilities.Multiply(x2, H);
     GcmUtilities.AsBytes(x2, x);
 }
Exemplo n.º 5
0
        public void Tables8kGcmMultiplier_Init(byte[] H)
        {
            if (Tables8kGcmMultiplier_M == null)
            {
                Tables8kGcmMultiplier_M = new uint[32][][];
            }
            else if (Arrays.AreEqual(this.Tables8kGcmMultiplier_H, H))
            {
                return;
            }

            this.Tables8kGcmMultiplier_H = Arrays.Clone(H);

            Tables8kGcmMultiplier_M[0]    = new uint[16][];
            Tables8kGcmMultiplier_M[1]    = new uint[16][];
            Tables8kGcmMultiplier_M[0][0] = new uint[4];
            Tables8kGcmMultiplier_M[1][0] = new uint[4];
            Tables8kGcmMultiplier_M[1][8] = GcmUtilities.AsUints(H);

            for (int j = 4; j >= 1; j >>= 1)
            {
                uint[] tmp = (uint[])Tables8kGcmMultiplier_M[1][j + j].Clone();
                GcmUtilities.MultiplyP(tmp);
                Tables8kGcmMultiplier_M[1][j] = tmp;
            }

            {
                uint[] tmp = (uint[])Tables8kGcmMultiplier_M[1][1].Clone();
                GcmUtilities.MultiplyP(tmp);
                Tables8kGcmMultiplier_M[0][8] = tmp;
            }

            for (int j = 4; j >= 1; j >>= 1)
            {
                uint[] tmp = (uint[])Tables8kGcmMultiplier_M[0][j + j].Clone();
                GcmUtilities.MultiplyP(tmp);
                Tables8kGcmMultiplier_M[0][j] = tmp;
            }

            for (int i = 0; ;)
            {
                for (int j = 2; j < 16; j += j)
                {
                    for (int k = 1; k < j; ++k)
                    {
                        uint[] tmp = (uint[])Tables8kGcmMultiplier_M[i][j].Clone();
                        GcmUtilities.Xor(tmp, Tables8kGcmMultiplier_M[i][k]);
                        Tables8kGcmMultiplier_M[i][j + k] = tmp;
                    }
                }

                if (++i == 32)
                {
                    return;
                }

                if (i > 1)
                {
                    Tables8kGcmMultiplier_M[i]    = new uint[16][];
                    Tables8kGcmMultiplier_M[i][0] = new uint[4];
                    for (int j = 8; j > 0; j >>= 1)
                    {
                        uint[] tmp = (uint[])Tables8kGcmMultiplier_M[i - 2][j].Clone();
                        GcmUtilities.MultiplyP8(tmp);
                        Tables8kGcmMultiplier_M[i][j] = tmp;
                    }
                }
            }
        }
 public void Init(byte[] x)
 {
     this.x = GcmUtilities.AsUints(x);
 }
Exemplo n.º 7
0
    public void Init(byte[] H)
    {
        if (M == null)
        {
            M = new uint[32][][];
        }
        else if (Arrays.AreEqual(this.H, H))
        {
            return;
        }
        this.H  = Arrays.Clone(H);
        M[0]    = new uint[16][];
        M[1]    = new uint[16][];
        M[0][0] = new uint[4];
        M[1][0] = new uint[4];
        M[1][8] = GcmUtilities.AsUints(H);
        for (int num = 4; num >= 1; num >>= 1)
        {
            uint[] array = (uint[])M[1][num + num].Clone();
            GcmUtilities.MultiplyP(array);
            M[1][num] = array;
        }
        uint[] array2 = (uint[])M[1][1].Clone();
        GcmUtilities.MultiplyP(array2);
        M[0][8] = array2;
        for (int num2 = 4; num2 >= 1; num2 >>= 1)
        {
            uint[] array3 = (uint[])M[0][num2 + num2].Clone();
            GcmUtilities.MultiplyP(array3);
            M[0][num2] = array3;
        }
        int num3 = 0;

        while (true)
        {
            for (int i = 2; i < 16; i += i)
            {
                for (int j = 1; j < i; j++)
                {
                    uint[] array4 = (uint[])M[num3][i].Clone();
                    GcmUtilities.Xor(array4, M[num3][j]);
                    M[num3][i + j] = array4;
                }
            }
            if (++num3 == 32)
            {
                break;
            }
            if (num3 > 1)
            {
                M[num3]    = new uint[16][];
                M[num3][0] = new uint[4];
                for (int num4 = 8; num4 > 0; num4 >>= 1)
                {
                    uint[] array5 = (uint[])M[num3 - 2][num4].Clone();
                    GcmUtilities.MultiplyP8(array5);
                    M[num3][num4] = array5;
                }
            }
        }
    }