Commit Graph

259 Commits

Author SHA1 Message Date
Jordan Rose
333d2be846 java: Fix CalledFromNative target annotations
"TYPE" is for type *uses*, not type *definitions*.
2025-06-23 10:37:55 -07:00
Jordan Rose
4e304bf167 javadoc-isms -> KDoc 2025-06-20 10:15:51 -07:00
Alex Bakon
8f671bd2d0 Make BackupLevel.value public 2025-06-18 14:22:14 -04:00
Jordan Rose
2879220e93 Require Kyber keys/ciphertexts throughout all XDH APIs 2025-06-13 16:06:07 -07:00
Alex Bakon
2b01021d7e Add offset/length constructor for Java ECPublicKey and KEMPublicKey 2025-06-13 16:26:26 -04:00
Alex Bakon
02b786b07e Limit device ID to the range 1-127
This is already required for sealed sender messages and enforced by the server.
2025-06-13 14:18:16 -04:00
Jordan Rose
5001df1ee4 Kotlin: use explicitApi() mode 2025-06-13 10:27:37 -07:00
Alex Bakon
881b3a4c8e Port some Java classes to Kotlin 2025-06-12 18:24:15 -04:00
Alex Bakon
a32aca9bce Remove Java Curve class 2025-06-12 17:24:31 -04:00
moiseev-signal
44c470f388 java: Synchronize close for incremental mac streams 2025-06-12 14:14:45 -07:00
Alex Bakon
3c89a5fa07 Colocate Kotlin sources with Java 2025-06-12 16:00:05 -04:00
gram-signal
b7b8040e3a Integrate post-quantum ratchet SPQR.
This PR integrates a post-quantum ratchet (SPQR) into libsignal, using an API that maintains its own internal chain and provides per-message keys.  In doing so, it also aims to be fully backwards-compatible with current clients and stored session state.

## Backwards compatibility with current clients

Remote clients that connect to us or that we connect to may not have this integration.  If they don't, their SignalMessage wire format should still deserialize, and in doing so we'll receive an empty pq_ratchet field.  SQPR handles this internally, by downgrading the protocol version to "version 0" or "don't do anything".  Note that should we eventually want to disallow this, we can do so via increasing the `min_version` field passed into the SQPR init functions to V1.  This is also the method by which we would upgrade SQPR from v1 to a future v2, etc.

## Opt-in

The publicly facing API calls for this now expose an explicit opt-in via a passed-in `use_pq_ratchet` bool (and associated enums in language-specific APIs).  If false, they default to SQPR `v0`, IE: none.  If true, they try to set up SPQR on new sessions, but will downgrade if the remote party cannot or will not do the same.
2025-06-04 11:18:12 -07:00
Alex Bakon
8782d0a406 Add bridging tests for optional UUID return 2025-06-03 13:50:26 -04:00
Alex Bakon
033abcf96f Support checking Java @CalledFromNative annotation 2025-06-02 13:02:41 -04:00
andrew-signal
6968a0b9ee Java: Fix CalledFromNative.kt compatibility with Android 5.0 2025-06-02 09:50:56 -04:00
moiseev-signal
bf096c449d keytrans: Improve errors 2025-05-30 16:00:06 -07:00
Alex Bakon
f09c862e7d Add CalledFromNative.Enforcement to check annotations 2025-05-30 13:23:35 -04:00
Alex Bakon
eea11499fd Expand Java keep rule for exception constructors
Instead of fuzzy name matching, use inheritance from Exception as the
determiniant for whether an annotated type is a libsignal exception.
2025-05-28 17:12:00 -04:00
andrew-signal
73ba569f66 Java: Fix libsignal submodule build after refactor of Curve.java to Kotlin
Sets Kotlin compiler output to JDK_17 and makes the changes to the Curve object non-breaking
2025-05-27 09:36:32 -04:00
Alex Bakon
14adc1c74d Introduce Kotlin to the libsignal Java library 2025-05-23 09:57:41 -04:00
andrew-signal
65686e681c Java: Fix error that caused CompletableFuture to be stripped by apps using ProGuard/R8 2025-05-21 21:18:11 -04:00
andrew-signal
1f92b82029 Add comment to testFutureFromRustCancel to explain if-statement in test 2025-05-20 16:29:54 -04:00
Andrew
a282afe43f Fix testFutureFromRustCancel 2025-05-20 15:11:19 -04:00
Alex Bakon
bf1e08b427 Check for cancellation of Rust task in test 2025-05-20 14:15:23 -04:00
Jordan Rose
0e1ec3909b bridge: Require that PreKeyBundles have Kyber pre-keys
Support for starting sessions with pre-quantum X3DH has been removed
from Swift, Java, and TypeScript. PQXDH will be required going
forward.
2025-05-19 12:25:53 -07:00
moiseev-signal
a823fd4a14 keytrans: Remove SearchResult type 2025-05-16 11:33:31 -07:00
andrew-signal
eaa32e1b4c Bridge CompletableFuture Cancellation to Android 2025-05-16 11:23:37 -04:00
Alex Bakon
5f56145e74 Bridge re-register account function 2025-05-15 16:00:29 -04:00
moiseev-signal
15f398452b Java: fix the incremental mac test failure 2025-05-13 17:15:25 -07:00
moiseev-signal
4975cf230a Java: Improve native handle management for incremental MAC 2025-05-13 13:30:24 -07:00
Michelle Tang
f1142dbebd Java: Improve incremental MAC InputStream implementation
Co-authored-by: Max Moiseev <moiseev@signal.org>
2025-05-13 12:46:12 -07:00
Jordan Rose
26d92fb09e jni: Add a debug mode to type-tag bridged object handles
Use `./gradlew -P jniTypeTagging` to build with type tags enabled.

This has a moderate code size cost, and an unmeasured cost in run-time
performance. On 64-bit targets, the tagging relies on bits 48..56 of 
pointers produced by the default Rust memory allocator being unused
(specifically 0), which they are on all our current targets.
2025-05-12 08:37:08 -07:00
andrew-signal
ec49709fa6 Fix deadlock in CompletableFuture by releasing lock while calling completion callbacks 2025-05-01 14:10:50 -05:00
andrew-signal
483070bc61 Add more detailed context to Java exceptions thrown due to failed futures 2025-05-01 12:31:39 -05:00
Alex Bakon
b95359ced8 Allow using registration client to check SVR2 credentials 2025-05-01 08:51:00 -04:00
Alex Bakon
890ac9e006 Enable account registration via Java registration service client 2025-04-29 13:41:51 -04:00
Alex Bakon
8f1baf561c Use an enum value for IdentityKeyStore.saveIdentity in libraries 2025-04-25 12:52:58 -04:00
Alex Bakon
e0e79e567c Bridge register account error to Java 2025-04-25 10:33:12 -04:00
Alex Bakon
b749afc059 Bridge RegisterAccountResponse to Java 2025-04-22 14:30:14 -04:00
Alex Bakon
a8d4849c9e Add Java type for public parts of a signed prekey 2025-04-21 16:29:56 -04:00
Alex Bakon
f0b83376e4 Don't bridge SessionRecord test-only code in real .so 2025-04-18 15:06:32 -04:00
Alex Bakon
a88a1b873e Accept languages list for SMS/call verification 2025-04-11 16:57:04 -04:00
Alex Bakon
0d916d3aa0 Bridge registration client to Java 2025-04-09 18:57:07 -04:00
Alex Bakon
5d7ce2d165 Remove app language code marked as deprecated 2025-04-09 15:41:35 -04:00
Jordan Rose
73494c21a0 java: Demote BridgedStringMap.dump() to package visibility
Testing-only API should be restricted as much as possible, so it
doesn't accidentally get referenced in prod.
2025-04-04 10:54:36 -07:00
Jordan Rose
5563e4d277 net: Add "remote config" string-to-string map to Net/ConnectionManager
This can be set at creation time as well as updated later without
recreating the Net instance.
2025-04-03 15:16:35 -07:00
Jordan Rose
fed4a6e54a bridge: Add BridgedStringMap
This is a utility class that should not be exposed directly in
app-facing APIs.
2025-04-03 15:16:35 -07:00
andrew-signal
5b0d993cab GSE/Node: Allow toToken to take CallLinkSecretParams 2025-04-03 14:27:11 -04:00
Alex Bakon
d13bc958e2 Remove fallback CDSI connect code 2025-04-02 13:39:38 -04:00
Alex Bakon
8756d1ab1d Java: inherit from NativeHandleGuard.SimpleOwner 2025-03-21 16:56:40 -04:00