public static Task <List <byte> > DecryptSealedBoxAsync(List <byte> cipherText, ulong pkHandle, ulong skHandle) { var tcs = new TaskCompletionSource <List <byte> >(); var cipherPtr = cipherText.ToIntPtr(); DecryptSealedBoxCb callback = null; callback = (self, result, dataPtr, dataLen) => { // Marshal.FreeHGlobal(cipherPtr); // TODO: Temp soln if (result.ErrorCode != 0) { tcs.SetException(result.ToException()); CallbackManager.Unregister(callback); return; } var data = dataPtr.ToList <byte>(dataLen); tcs.SetResult(data); CallbackManager.Unregister(callback); }; CallbackManager.Register(callback); NativeBindings.DecryptSealedBox(Session.AppPtr, cipherPtr, (IntPtr)cipherText.Count, pkHandle, skHandle, Session.UserData, callback); // Marshal.FreeHGlobal(cipherPtr); return(tcs.Task); }
public static extern void DecryptSealedBoxNative( IntPtr appPtr, IntPtr data, IntPtr len, ulong pkHandle, ulong skHandle, IntPtr self, DecryptSealedBoxCb callback);
public void DecryptSealedBox( IntPtr appPtr, IntPtr data, IntPtr len, ulong pkHandle, ulong skHandle, IntPtr self, DecryptSealedBoxCb callback) { DecryptSealedBoxNative(appPtr, data, len, pkHandle, skHandle, self, callback); }