Commit Graph

428 Commits

Author SHA1 Message Date
Alex Konradi
8959e64ed1 Build TESTING_ functions for Android test
Run tests that call native TESTING_ functions on Android. This requires 
building a separate version of libsignal_jni.so with the testing functions 
included. The test code is still omitted from the published artifacts.
2024-02-15 16:53:05 -05:00
Max Moiseev
7ef4efdb85 Bump to version 0.40.0 2024-02-12 12:03:40 -08:00
Alex Konradi
100ce19945 Fix Java error handling for CDSI lookup
CDSI error handling code would attempt to instantiate a nonexistent Java class. 
Add the missing class and split up the handling for CDSI lookup errors to reuse 
existing error types.
2024-02-09 15:31:35 -05:00
Jordan Rose
1827eb7780 java: DecryptionErrorMessage deserialization can InvalidKeyException 2024-02-08 15:43:35 -08:00
Jordan Rose
09abe004cc java: HsmEnclaveClient can fail at any point during the protocol 2024-02-08 15:43:35 -08:00
Jordan Rose
204ce07c21 java: Aes256GcmSiv.encrypt can't fail
More specifically, it can't throw an InvalidMessageException, and
IllegalArgumentException is a RuntimeException already.
2024-02-08 15:43:35 -08:00
Alex Konradi
483d220aba Expose CDSI debugPermitsUsed in app libs 2024-02-08 15:25:33 -05:00
Alex Konradi
d08adf19bb Return username candidates as string array
Use the string bridging code introduced previously to provide string arrays to 
client directly instead of joining and splitting. This eliminates the use of a 
magic ',' character as a delimiter.
2024-02-06 09:46:06 -05:00
Alex Konradi
580913d225 Re-throw input stream errors in Swift and Java
Re-raise errors produced by an input stream after bubbling them through Rust 
code. This makes the interface less magic and avoids unnecessary 
stringification of error values.
2024-02-02 15:14:27 -05:00
Alex Konradi
e95f00d849 Print size difference of a PR versus main
Use the GitHub CLI utility, if present, to fetch the size from the logs of the 
"Build and Test" workflow run for the merge-base of the current branch and 
upstream main. This represents the true "delta" attributable to the current 
branch, as opposed to the integral of changes since the last release.
2024-02-01 16:30:42 -05:00
Alex Konradi
c70b66dc8c Bridge message backup validator to Java
Provide a simple API for validating message backups read from InputStream 
instances.
2024-01-26 13:33:36 -05:00
Jordan Rose
b92da3a15c Bump to version v0.39.3 2024-01-24 11:13:13 -08:00
Jordan Rose
1f8701213b zkgroup: Add GroupSendCredentialResponse::receive_with_ciphertexts
If a client already has the members of a group as ciphertexts, it's
more efficient to receive a GroupSendCredential that way, because then
they get to skip the conversion from ServiceId to UidStruct. If they
don't, however, the existing entry point is going to be both more
convenient and faster.

For Swift and Java, this is an overload of the existing receive()
method; for TypeScript, it's receiveWithCiphertexts.
2024-01-22 12:34:34 -08:00
Jordan Rose
fa364bc625 Java: Expose sealed sender certificate classes to the server too 2024-01-22 09:57:38 -08:00
Jordan Rose
a028068efd Java: Expose ServerCertificate and SenderCertificate creation
These are already exposed for testing in TypeScript and Swift.
2024-01-22 09:57:38 -08:00
Jordan Rose
5436160313 Bump to version v0.39.2 2024-01-18 16:04:39 -08:00
Jordan Rose
b31ca0781c Remove length parameter for webpsan
The way images are displayed on Android makes it annoying to provide,
and the implementation of webpsan doesn't actually need it.
2024-01-18 12:36:31 -08:00
Dimitris Apostolou
be16e47d7f Fix typos 2024-01-18 12:09:47 -08:00
Jordan Rose
224646389a java: Work around InputStreams that don't provide a good skip()
In particular, some streams seem to override skip() to always return
0, which means that even looping on skip() won't end up skipping the
full amount. Work around this by using a wrapper InputStream that
falls back to read() instead.

This removes a requirement for the streams passed to Mp4Sanitizer and
WebpSanitizer, but providing a good skip() is still recommended.
2024-01-18 11:23:05 -08:00
Jordan Rose
d0879d7150 Bump to version v0.39.1 (Node-only release) 2024-01-10 17:18:20 -08:00
Jordan Rose
455b3bf7a0 Bump to version v0.39.0 2024-01-10 13:17:40 -08:00
Jordan Rose
70a9662acd usernames: Expose Username.fromParts to app languages 2024-01-10 12:26:19 -08:00
Jordan Rose
0ef2c7cc54 usernames: Split up BadDiscriminator error into more specific errors
Rust: UsernameError now has more cases. ProofVerificationFailure is
also split off into its own error type, separate from structural
username errors.

Java: Subclasses of BadDiscriminatorException have been added.

Swift: Some error codes have been renamed and others have been added.

TypeScript: Some error codes have been renamed and others have been
added. Discriminator errors are now proper LibSignalErrors.
2024-01-10 12:26:19 -08:00
Alex Konradi
72ccec8cdd Fix java tests
- use int instead of promoting to long
- add missing return type to fix compilation
 - run auto-formatter

Also add the check that would have caught all of these to CI
2024-01-10 14:48:13 -05:00
Jonathan Klabunde Tomer
c3cb6ed0bf expose non-copying method on SealedSenderMultiRecipientMessage to get message size for a recipient 2024-01-09 11:28:12 -08:00
Jordan Rose
4a69727457 Bump to version v0.38.0 2024-01-05 11:04:43 -08:00
Jordan Rose
31babcbd68 Bump to version v0.37.0 2023-12-13 15:57:14 -08:00
Jordan Rose
88a25e889e Collect acknowledgments for libsignal's Cargo dependencies 2023-12-11 16:39:33 -08:00
Jordan Rose
0d09a8352c Add GroupSendCredential
This credential is issued by the group server and presented to the
chat server to prove that the holder is a member of *some* group with
a known list of people. This can be used to replace the access key
requirement for multi-recipient sealed sender sends.
2023-12-11 13:45:12 -08:00
Jordan Rose
16653ffea1 SSv2: Add send support for excluded recipients 2023-12-11 12:36:54 -08:00
Jordan Rose
6a2ebfdabf java: Fix SenderKeyDistributionMessage.getDistributionId()
...which was using the wrong untyped Native function!
2023-12-08 12:11:25 -08:00
Jordan Rose
1229846d06 java: Convert GroupCipherTest to JUnit 4 2023-12-08 12:11:25 -08:00
Max Moiseev
126f87b73c Bump to version 0.36.1 2023-12-06 15:20:54 -08:00
Clark
7bf7b5e261 Java: Take in session list for sealed sender multiRecipientEncrypt 2023-12-06 10:03:32 -08:00
Jordan Rose
b7bbabd228 Bump to version v0.36.0 2023-12-05 13:00:53 -08:00
Alex Konradi
1f2d761889 Allow returning handle types from Swift invokeAsyncFunction
Implement the Completable protocol for OpaquePointer and add a test that runs
futures that return handle types to prove that it works.
2023-12-04 16:39:32 -05:00
Alex Konradi
f06faef7a4 Split CDSI lookup to allow token retrieval
Split the libsignal-net implementation of CDSI lookup into two parts: one that
does the initial handshake and token acquisition, and the other to acknowledge
the token and then parse results. Expose the token in Java via the same Consumer
type used in the Android codebase.
2023-12-01 16:05:10 -05:00
Alex Konradi
2c985f3d84 Add CompletableFuture.thenCompose
This is needed for splitting up the CDSI lookup function. The signature mirrors
the Java standard library version.
2023-11-30 16:13:05 -05:00
Alex Konradi
1c6e8e512d Fix CompletableFuture error handling
Fix the behavior of CompletableFuture.thenApply so that if the applied function
throws an exception, the pending future receives the exception (instead of never
completing). Add tests.
2023-11-30 15:38:22 -05:00
Alex Konradi
7f023e7d46 Fix exclude for libsignal-net tests on Android
Use the path within the directory specified by srcDir without the common
prefix. Verified with ./gradlew test :android:connectedDebugAndroidTest
locally.
2023-11-16 14:47:17 -05:00
Jordan Rose
75b78438d5 Enable full LTO for Android, *disable* it for non-iOS Swift
And make sure CFLAGS has a matching flag, for maximum LTO.
2023-11-15 10:18:43 -08:00
Jordan Rose
caf3dade92 Java: Add -Xcheck:jni to host testing
This can give better error messages for JNI mistakes that might
otherwise crash or go unnoticed. Tested by introducing such a mistake.
(Though it's hard to do with the jni crate's safe interfaces, which is
a good thing!)

The Android Emulator always has its equivalent checks on, so the Slow
Tests are also giving us some confidence about our JNI usage.
2023-11-15 10:17:26 -08:00
Alex Konradi
4c78373114 Expose libsignal-net function for CDSI via JNI
Expose the existing CDSI lookup async function to Java clients. Provide a small
library that can be easily integrated into the existing codebase.
2023-11-15 10:00:46 -05:00
akonradi-signal
3d8933ec96 Add CompletableFuture.thenApply method
Add the ability to chain futures by applying arbitrary functions. Mirrors
CompletableFuture.thenApply in the Java standard library.
2023-11-13 15:06:40 -05:00
Jordan Rose
4acd05bd5d Automatically release builds on Sonatype 2023-11-13 11:31:42 -08:00
Jordan Rose
3b6100eb1d Bump to version v0.35.0 2023-11-13 10:39:59 -08:00
Jordan Rose
9839a5be79 Always use the original SSv2 version byte, 0x22, for ReceivedMessages
The format hasn't changed, so we don't need to bump the version number
for the messages the server sends to recipients.

This is implemented in two places: the Rust side for round-trip
testing, and the Java side for what the server actually does. (Both
are implemented to avoid unnecessary copies and unfortunately the two
aren't conveniently compatible with one another, but it's a simple
implementation anyway.)
2023-11-10 09:30:39 -08:00
Jordan Rose
0c13580240 SSv2: Add receive support for excluded recipients
These are encoded as having a device ID of zero. Rust-level tests will
come with the send support, so we can do round-trip tests.
2023-11-07 16:25:22 -08:00
Jordan Rose
b618fd58e7 SSv2: Require known versions in SealedSenderV2SentMessage::parse
And if we're not trying to be open to future versions, we can validate
that there's enough bytes for the ephemeral public key as well.
2023-11-07 16:25:22 -08:00
Jordan Rose
418886c599 SSv2: Add server receive support for compact device lists
This takes advantage of the fact that multiple devices for the same
user will have the same identity key and therefore will use the same
per-recipient SSv2 data anyway.

This commit also enforces (on the server side) that device IDs are in
the range 1..=127 for destinations of a SSv2 message; previously they
were varint-encoded.

When send support is added, the round-trip Rust tests will
automatically start testing this as well.
2023-11-07 16:25:22 -08:00