diff --git a/.gitmodules b/.gitmodules index bf8fe006..02c33f98 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "libsignal-protocol-c"] path = plugins/signal-protocol/libsignal-protocol-c url = https://github.com/WhisperSystems/libsignal-protocol-c.git - branch = e59089a644ca747ed50442eb8804266618f11c0b + branch = v2.3.2 diff --git a/plugins/signal-protocol/libsignal-protocol-c b/plugins/signal-protocol/libsignal-protocol-c index e59089a6..4a137eaf 160000 --- a/plugins/signal-protocol/libsignal-protocol-c +++ b/plugins/signal-protocol/libsignal-protocol-c @@ -1 +1 @@ -Subproject commit e59089a644ca747ed50442eb8804266618f11c0b +Subproject commit 4a137eaf4eb4421949e2e1dde9f11ec7bc07b88f diff --git a/plugins/signal-protocol/src/store.vala b/plugins/signal-protocol/src/store.vala index 8a0e5853..2e277478 100644 --- a/plugins/signal-protocol/src/store.vala +++ b/plugins/signal-protocol/src/store.vala @@ -142,21 +142,22 @@ public class Store : Object { return 0; } - static int ss_load_session_func(out Buffer? buffer, Address address, void* user_data) { + static int ss_load_session_func(out Buffer? record, out Buffer? user_record, Address address, void* user_data) { Store store = (Store) user_data; uint8[]? res = null; try { res = store.session_store.load_session(address); } catch (Error e) { - buffer = null; + record = null; return e.code; } if (res == null) { - buffer = null; + record = null; return 0; } - buffer = new Buffer.from((!)res); - if (buffer == null) return ErrorCode.NOMEM; + record = new Buffer.from((!)res); + user_record = null; // No support for user_record + if (record == null) return ErrorCode.NOMEM; return 1; } @@ -171,7 +172,8 @@ public class Store : Object { return 0; } - static int ss_store_session_func(Address address, uint8[] record, void* user_data) { + static int ss_store_session_func(Address address, uint8[] record, uint8[] user_record, void* user_data) { + // Ignoring user_record Store store = (Store) user_data; return catch_to_code(() => { store.session_store.store_session(address, record); diff --git a/plugins/signal-protocol/vapi/signal-protocol-native.vapi b/plugins/signal-protocol/vapi/signal-protocol-native.vapi index ed391020..9161a3ed 100644 --- a/plugins/signal-protocol/vapi/signal-protocol-native.vapi +++ b/plugins/signal-protocol/vapi/signal-protocol-native.vapi @@ -62,11 +62,11 @@ namespace Signal { public void* user_data; } [CCode (has_target = false)] - public delegate int LoadSessionFunc(out Buffer buffer, Address address, void* user_data); + public delegate int LoadSessionFunc(out Buffer record, out Buffer user_record, Address address, void* user_data); [CCode (has_target = false)] public delegate int GetSubDeviceSessionsFunc(out IntList sessions, char[] name, void* user_data); [CCode (has_target = false)] - public delegate int StoreSessionFunc(Address address, uint8[] record, void* user_data); + public delegate int StoreSessionFunc(Address address, uint8[] record, uint8[] user_record, void* user_data); [CCode (has_target = false)] public delegate int ContainsSessionFunc(Address address, void* user_data); [CCode (has_target = false)] @@ -134,9 +134,9 @@ namespace Signal { void* user_data; } [CCode (has_target = false)] - public delegate int StoreSenderKeyFunc(SenderKeyName sender_key_name, uint8[] record, void* user_data); + public delegate int StoreSenderKeyFunc(SenderKeyName sender_key_name, uint8[] record, uint8[] user_record, void* user_data); [CCode (has_target = false)] - public delegate int LoadSenderKeyFunc(out Buffer record, SenderKeyName sender_key_name, void* user_data); + public delegate int LoadSenderKeyFunc(out Buffer record, out Buffer user_record, SenderKeyName sender_key_name, void* user_data); [CCode (has_target = false)] public delegate int DestroyFunc(void* user_data); @@ -271,4 +271,4 @@ namespace Signal { public static void setup_crypto_provider(NativeContext context); [CCode (cname = "signal_crypto_random", cheader_filename = "signal_protocol_internal.h")] public static int native_random(NativeContext context, uint8[] data); -} \ No newline at end of file +} diff --git a/plugins/signal-protocol/vapi/signal-protocol-public.vapi b/plugins/signal-protocol/vapi/signal-protocol-public.vapi index bb22bdaa..0a4456ad 100644 --- a/plugins/signal-protocol/vapi/signal-protocol-public.vapi +++ b/plugins/signal-protocol/vapi/signal-protocol-public.vapi @@ -137,6 +137,7 @@ namespace Signal { [CCode (cname = "session_record", cprefix = "session_record_", cheader_filename = "signal/signal_protocol_types.h")] public class SessionRecord : TypeBase { public SessionState state { get; } + public Buffer user_record { get; } } [Compact] @@ -386,4 +387,4 @@ namespace Signal { throw_by_code(aes_decrypt_(out buf, cipher, key, iv, ciphertext, null)); return buf.data; } -} \ No newline at end of file +}