コード例 #1
0
        public static int CryptoScalarmult(byte[] Q, byte[] N, byte[] P)
        {
            int[]  work = new int[96];
            byte[] e    = new byte[32];

            for (int i = 0; i < 32; ++i)
            {
                e[i] = N[i];
            }

            e[0]  &= 248;
            e[31] &= 127;
            e[31] |= 64;

            for (int i = 0; i < 32; ++i)
            {
                work[i] = P[i] & 0xFF;
            }

            Curve25519.Mainloop(work, e);

            Curve25519.Recip(work, 32, work, 32);
            Curve25519.Mult(work, 64, work, 0, work, 32);
            Curve25519.Freeze(work, 64);

            for (int i = 0; i < 32; ++i)
            {
                Q[i] = (byte)work[64 + i];
            }

            return(0);
        }