0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 03:52:17 +02:00

Bridge: move remaining int-returning APIs to plain bridge_fns

They don't fit in bridge_get! because they have extra logic, but
that's okay.
This commit is contained in:
Jordan Rose 2021-02-01 18:05:32 -08:00
parent 1803d4fa4f
commit 6e46c905f4
8 changed files with 29 additions and 67 deletions

View File

@ -186,7 +186,7 @@ public final class Native {
public static native void SenderKeyName_Destroy(long handle);
public static native String SenderKeyName_GetGroupId(long obj);
public static native int SenderKeyName_GetSenderDeviceId(long handle);
public static native int SenderKeyName_GetSenderDeviceId(long skn);
public static native String SenderKeyName_GetSenderName(long obj);
public static native long SenderKeyName_New(String groupId, String senderName, int senderDeviceId);
@ -221,7 +221,7 @@ public final class Native {
public static native byte[] SessionRecord_GetRemoteIdentityKeyPublic(long handle);
public static native int SessionRecord_GetRemoteRegistrationId(long obj);
public static native byte[] SessionRecord_GetSenderChainKeyValue(long handle);
public static native int SessionRecord_GetSessionVersion(long handle);
public static native int SessionRecord_GetSessionVersion(long s);
public static native boolean SessionRecord_HasSenderChain(long obj);
public static native long SessionRecord_InitializeAliceSession(long identityKeyPrivate, long identityKeyPublic, long basePrivate, long basePublic, long theirIdentityKey, long theirSignedPrekey, long theirRatchetKey);
public static native long SessionRecord_InitializeBobSession(long identityKeyPrivate, long identityKeyPublic, long signedPrekeyPrivate, long signedPrekeyPublic, long ephPrivate, long ephPublic, long theirIdentityKey, long theirBaseKey);
@ -251,7 +251,7 @@ public final class Native {
public static native long UnidentifiedSenderMessageContent_Deserialize(byte[] data);
public static native void UnidentifiedSenderMessageContent_Destroy(long handle);
public static native byte[] UnidentifiedSenderMessageContent_GetContents(long handle);
public static native int UnidentifiedSenderMessageContent_GetMsgType(long handle);
public static native int UnidentifiedSenderMessageContent_GetMsgType(long m);
public static native long UnidentifiedSenderMessageContent_GetSenderCert(long handle);
public static native byte[] UnidentifiedSenderMessageContent_GetSerialized(long handle);
public static native long UnidentifiedSenderMessageContent_New(int msgType, long sender, byte[] contents);

View File

@ -74,6 +74,7 @@ export function SenderKeyMessage_New(key_id: number, iteration: number, cipherte
export function SenderKeyMessage_Serialize(obj: SenderKeyMessage): Buffer;
export function SenderKeyMessage_VerifySignature(skm: SenderKeyMessage, pubkey: PublicKey): boolean;
export function SenderKeyName_GetGroupId(obj: SenderKeyName): string;
export function SenderKeyName_GetSenderDeviceId(skn: SenderKeyName): number;
export function SenderKeyName_GetSenderName(obj: SenderKeyName): string;
export function SenderKeyName_New(group_id: string, sender_name: string, sender_device_id: number): SenderKeyName;
export function SenderKeyRecord_Deserialize(buffer: Buffer): SenderKeyRecord;

View File

@ -200,10 +200,6 @@ ffi_fn_get_new_boxed_obj!(signal_sender_key_distribution_message_get_signature_k
ffi_fn_get_new_boxed_obj!(signal_pre_key_bundle_get_identity_key(PublicKey) from PreKeyBundle,
|p: &PreKeyBundle| Ok(*p.identity_key()?.public_key()));
/* SenderKeyName */
ffi_fn_get_uint32!(signal_sender_key_name_get_sender_device_id(SenderKeyName) using
|m: &SenderKeyName| Ok(m.sender()?.device_id()));
type GetIdentityKeyPair =
extern "C" fn(store_ctx: *mut c_void, keyp: *mut *mut PrivateKey, ctx: *mut c_void) -> c_int;
type GetLocalRegistrationId =

View File

@ -249,16 +249,3 @@ macro_rules! ffi_fn_get_new_boxed_obj {
}
};
}
#[macro_export]
macro_rules! ffi_fn_get_uint32 {
( $nm:ident($typ:ty) using $body:expr ) => {
#[no_mangle]
pub unsafe extern "C" fn $nm(out: *mut c_uint, obj: *const $typ) -> *mut SignalFfiError {
run_ffi_safe(|| {
let obj = native_handle_cast::<$typ>(obj)?;
write_uint32_to(out, $body(&obj))
})
}
};
}

View File

@ -141,9 +141,6 @@ jni_fn_get_new_boxed_obj!(Java_org_signal_client_internal_Native_PreKeyBundle_1G
/* SenderKeyName */
jni_fn_get_jint!(Java_org_signal_client_internal_Native_SenderKeyName_1GetSenderDeviceId(SenderKeyName) using
|m: &SenderKeyName| Ok(m.sender()?.device_id()));
fn sender_key_name_to_jobject<'a>(
env: &'a JNIEnv,
sender_key_name: &SenderKeyName,
@ -991,13 +988,6 @@ pub unsafe extern "C" fn Java_org_signal_client_internal_Native_SessionRecord_1F
})
}
// For historical reasons Android assumes this function will return zero if there is no session state
jni_fn_get_jint!(Java_org_signal_client_internal_Native_SessionRecord_1GetSessionVersion(SessionRecord) using |s: &SessionRecord| match s.session_version() {
Ok(v) => Ok(v),
Err(SignalProtocolError::InvalidState(_, _)) => Ok(0),
Err(e) => Err(e)
});
// The following are just exposed to make it possible to retain some of the Java tests:
#[no_mangle]
@ -1133,9 +1123,6 @@ pub unsafe extern "C" fn Java_org_signal_client_internal_Native_SenderCertificat
}
// UnidentifiedSenderMessageContent
jni_fn_get_jint!(Java_org_signal_client_internal_Native_UnidentifiedSenderMessageContent_1GetMsgType(UnidentifiedSenderMessageContent) using
|m: &UnidentifiedSenderMessageContent| Ok(m.msg_type()? as u32));
jni_fn_get_new_boxed_obj!(Java_org_signal_client_internal_Native_UnidentifiedSenderMessageContent_1GetSenderCert(SenderCertificate) from UnidentifiedSenderMessageContent,
|s: &UnidentifiedSenderMessageContent| Ok(s.sender()?.clone()));

View File

@ -177,34 +177,3 @@ macro_rules! jni_fn_get_new_boxed_optional_obj {
}
};
}
#[macro_export]
macro_rules! jni_fn_get_jint {
( $nm:ident($typ:ty) using $body:expr ) => {
#[no_mangle]
pub unsafe extern "C" fn $nm(env: JNIEnv, _class: JClass, handle: ObjectHandle) -> jint {
run_ffi_safe(&env, || {
let obj = native_handle_cast::<$typ>(handle)?;
jint_from_u32($body(obj))
})
}
};
}
#[macro_export]
macro_rules! jni_fn_get_jboolean {
( $nm:ident($typ:ty) using $body:expr ) => {
#[no_mangle]
pub unsafe extern "C" fn $nm(
env: JNIEnv,
_class: JClass,
handle: ObjectHandle,
) -> jboolean {
run_ffi_safe(&env, || {
let obj = native_handle_cast::<$typ>(handle)?;
let r: bool = $body(obj)?;
Ok(r as jboolean)
})
}
};
}

View File

@ -393,6 +393,11 @@ fn SenderKeyName_New(
)
}
#[bridge_fn]
fn SenderKeyName_GetSenderDeviceId(skn: &SenderKeyName) -> Result<u32, SignalProtocolError> {
Ok(skn.sender()?.device_id())
}
bridge_deserialize!(SenderKeyRecord::deserialize);
bridge_get_bytearray!(Serialize(SenderKeyRecord), jni = "SenderKeyRecord_1GetSerialized" =>
SenderKeyRecord::serialize
@ -473,6 +478,13 @@ bridge_get_bytearray!(GetContents(UnidentifiedSenderMessageContent) =>
UnidentifiedSenderMessageContent::contents
);
#[bridge_fn(ffi = false, node = false)]
fn UnidentifiedSenderMessageContent_GetMsgType(
m: &UnidentifiedSenderMessageContent,
) -> Result<u32, SignalProtocolError> {
Ok(m.msg_type()? as u32)
}
bridge_deserialize!(
UnidentifiedSenderMessage::deserialize,
ffi = false,
@ -489,6 +501,16 @@ bridge_get_bytearray!(GetEncryptedStatic(UnidentifiedSenderMessage), ffi = false
);
bridge_get!(UnidentifiedSenderMessage::ephemeral_public -> PublicKey, ffi = false, node = false);
// For historical reasons Android assumes this function will return zero if there is no session state
#[bridge_fn(ffi = false, node = false)]
fn SessionRecord_GetSessionVersion(s: &SessionRecord) -> Result<u32, SignalProtocolError> {
match s.session_version() {
Ok(v) => Ok(v),
Err(SignalProtocolError::InvalidState(_, _)) => Ok(0),
Err(e) => Err(e),
}
}
bridge_deserialize!(SessionRecord::deserialize);
bridge_get_bytearray!(Serialize(SessionRecord) => SessionRecord::serialize);
bridge_get_bytearray!(GetAliceBaseKey(SessionRecord), ffi = false, node = false =>

View File

@ -236,9 +236,6 @@ SignalFfiError *signal_sender_key_distribution_message_get_signature_key(SignalP
SignalFfiError *signal_pre_key_bundle_get_identity_key(SignalPublicKey **new_obj,
const SignalPreKeyBundle *obj);
SignalFfiError *signal_sender_key_name_get_sender_device_id(unsigned int *out,
const SignalSenderKeyName *obj);
SignalFfiError *signal_process_prekey_bundle(SignalPreKeyBundle *bundle,
const SignalProtocolAddress *protocol_address,
const SignalSessionStore *session_store,
@ -720,6 +717,9 @@ SignalFfiError *signal_sender_key_name_new(SignalSenderKeyName **out,
const char *sender_name,
uint32_t sender_device_id);
SignalFfiError *signal_sender_key_name_get_sender_device_id(uint32_t *out,
const SignalSenderKeyName *skn);
SignalFfiError *signal_sender_key_record_deserialize(SignalSenderKeyRecord **p,
const unsigned char *data,
size_t data_len);