public static byte[] decrypt(byte[] enc, KeyPair kp, EncParams param) { byte[] dec = new byte[param.max_msg_len()]; ushort dec_len = 0; IntPtr dec_len_ptr = new IntPtr(dec_len); IntPtr enc_ptr = Marshal.AllocHGlobal(enc.Length); Marshal.Copy(enc, 0, enc_ptr, enc.Length); IntPtr dec_ptr = Marshal.AllocHGlobal(dec.Length); IntPtr key_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(kp)); Marshal.StructureToPtr(kp, key_ptr, false); IntPtr param_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(param)); Marshal.StructureToPtr(param, param_ptr, false); var result = ffi.ntru_decrypt(enc_ptr, key_ptr, param_ptr, dec_ptr, out dec_len_ptr); if (result != 0) { Console.WriteLine("Error: Failed to Decrypt Message"); } byte[] final_dec = new byte[dec_len_ptr.ToInt32()]; Marshal.Copy(dec_ptr, final_dec, 0, final_dec.Length); Marshal.FreeHGlobal(enc_ptr); Marshal.FreeHGlobal(dec_ptr); Marshal.FreeHGlobal(key_ptr); Marshal.FreeHGlobal(param_ptr); return(final_dec); }
public static byte[] encrypt(byte[] msg, PublicKey pub, EncParams param, RandContext rand_ctx) { byte[] enc = new byte[param.enc_len()]; IntPtr enc_ptr = Marshal.AllocHGlobal(param.enc_len()); IntPtr msg_ptr = Marshal.AllocHGlobal(msg.Length); Marshal.Copy(msg, 0, msg_ptr, msg.Length); IntPtr pub_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(pub)); Marshal.StructureToPtr(pub, pub_ptr, false); IntPtr param_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(param)); Marshal.StructureToPtr(param, param_ptr, false); IntPtr rand_ctx_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(rand_ctx.rand_ctx)); Marshal.StructureToPtr(rand_ctx.rand_ctx, rand_ctx_ptr, false); IntPtr msg_len_ptr = new IntPtr(msg.Length); var result = ffi.ntru_encrypt(msg_ptr, msg_len_ptr, pub_ptr, param_ptr, rand_ctx_ptr, enc_ptr); if (result != 0) { Console.WriteLine("Error: Failed to Encrypt Message"); } Console.WriteLine("Went through FFI Encrypt Function"); Marshal.Copy(enc_ptr, enc, 0, enc.Length); Marshal.FreeHGlobal(msg_ptr); Marshal.FreeHGlobal(pub_ptr); Marshal.FreeHGlobal(param_ptr); Marshal.FreeHGlobal(rand_ctx_ptr); Marshal.FreeHGlobal(enc_ptr); return(enc); }
public byte[] export(EncParams param) { byte[] arr = new byte[param.public_len()]; IntPtr arr_ptr = Marshal.AllocHGlobal(arr.Length); IntPtr key_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(this)); Marshal.StructureToPtr(this, key_ptr, false); ffi.ntru_export_pub(key_ptr, arr_ptr); Marshal.Copy(arr_ptr, arr, 0, arr.Length); Marshal.FreeHGlobal(key_ptr); Marshal.FreeHGlobal(arr_ptr); return(arr); }
public byte[] to_arr_sse_2048(EncParams param) { IntPtr this_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(this)); Marshal.StructureToPtr(this, this_ptr, false); byte[] a = new byte[param.enc_len()]; IntPtr a_byte = Marshal.AllocHGlobal(param.enc_len()); ffi.ntru_to_arr_sse_2048(this_ptr, a_byte); Marshal.Copy(a_byte, a, 0, param.enc_len()); Marshal.FreeHGlobal(this_ptr); Marshal.FreeHGlobal(a_byte); return(a); }
public EncParams get_params() { EncParams param = EncParams.Default(); IntPtr key_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(this)); Marshal.StructureToPtr(this, key_ptr, false); IntPtr param_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(param)); Marshal.StructureToPtr(param, param_ptr, false); var result = ffi.ntru_params_from_priv_key(key_ptr, param_ptr); if (result != 0) { Console.WriteLine("Error: Failed to Get Encryption Params from private key"); } param = (EncParams)Marshal.PtrToStructure(param_ptr, typeof(EncParams)); Marshal.FreeHGlobal(param_ptr); Marshal.FreeHGlobal(key_ptr); return(param); }
public static KeyPair generate_key_pair(EncParams param, RandContext rand_context) { KeyPair kp = KeyPair.Default(); IntPtr key_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(kp)); Marshal.StructureToPtr(kp, key_ptr, false); IntPtr param_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(param)); Marshal.StructureToPtr(param, param_ptr, false); IntPtr rand_ctx_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(rand_context.rand_ctx)); Marshal.StructureToPtr(rand_context.rand_ctx, rand_ctx_ptr, false); var result = ffi.ntru_gen_key_pair(param_ptr, key_ptr, rand_ctx_ptr); if (result.ToInt32() != 0) { Console.WriteLine("Error: Failed to Generate KeyPair"); } kp = (KeyPair)Marshal.PtrToStructure(key_ptr, typeof(KeyPair)); Marshal.FreeHGlobal(key_ptr); Marshal.FreeHGlobal(param_ptr); Marshal.FreeHGlobal(rand_ctx_ptr); return(kp); }