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); }