diff --git a/sphinx-ffi/src/onion.rs b/sphinx-ffi/src/onion.rs index 3104c59..a53a174 100644 --- a/sphinx-ffi/src/onion.rs +++ b/sphinx-ffi/src/onion.rs @@ -17,6 +17,13 @@ pub fn sign_ms(seed: String, time: String) -> Result { Ok(hex::encode(sig)) } +pub fn pubkey_from_seed(seed: String, time: String) -> Result { + let km = make_keys_manager(&seed, &time)?; + let secp_ctx = sphinx::Secp256k1::new(); + let pubkey = PublicKey::from_secret_key(&secp_ctx, &km.get_node_secret_key()); + Ok(hex::encode(pubkey.serialize())) +} + pub fn create_onion(seed: String, time: String, hops: String, payload: Vec) -> Result> { let km = make_keys_manager(&seed, &time)?; let hops = parse_hops(&hops)?; diff --git a/sphinx-ffi/src/sphinxrs.swift b/sphinx-ffi/src/sphinxrs.swift index 2418fa7..d17013d 100644 --- a/sphinx-ffi/src/sphinxrs.swift +++ b/sphinx-ffi/src/sphinxrs.swift @@ -942,6 +942,16 @@ public func `signMs`(`seed`: String, `time`: String) throws -> String { ) } +public func `pubkeyFromSeed`(`seed`: String, `time`: String) throws -> String { + return try FfiConverterString.lift( + try rustCallWithError(FfiConverterTypeSphinxError.lift) { + uniffi_sphinxrs_fn_func_pubkey_from_seed( + FfiConverterString.lower(`seed`), + FfiConverterString.lower(`time`),$0) +} + ) +} + private enum InitializationResult { case ok case contractVersionMismatch @@ -1014,6 +1024,9 @@ private var initializationResult: InitializationResult { if (uniffi_sphinxrs_checksum_func_sign_ms() != 65056) { return InitializationResult.apiChecksumMismatch } + if (uniffi_sphinxrs_checksum_func_pubkey_from_seed() != 40652) { + return InitializationResult.apiChecksumMismatch + } return InitializationResult.ok } diff --git a/sphinx-ffi/src/sphinxrs.udl b/sphinx-ffi/src/sphinxrs.udl index 9b052df..ecbb2e8 100644 --- a/sphinx-ffi/src/sphinxrs.udl +++ b/sphinx-ffi/src/sphinxrs.udl @@ -71,4 +71,6 @@ namespace sphinxrs { bytes peel_payment(string seed, string time, bytes payload, string preimage); [Throws=SphinxError] string sign_ms(string seed, string time); + [Throws=SphinxError] + string pubkey_from_seed(string seed, string time); }; \ No newline at end of file diff --git a/sphinx-ffi/src/sphinxrsFFI.h b/sphinx-ffi/src/sphinxrsFFI.h index 9e50eb7..b1c4807 100644 --- a/sphinx-ffi/src/sphinxrsFFI.h +++ b/sphinx-ffi/src/sphinxrsFFI.h @@ -101,6 +101,8 @@ RustBuffer uniffi_sphinxrs_fn_func_peel_payment(RustBuffer seed, RustBuffer time ); RustBuffer uniffi_sphinxrs_fn_func_sign_ms(RustBuffer seed, RustBuffer time, RustCallStatus *_Nonnull out_status ); +RustBuffer uniffi_sphinxrs_fn_func_pubkey_from_seed(RustBuffer seed, RustBuffer time, RustCallStatus *_Nonnull out_status +); RustBuffer ffi_sphinxrs_rustbuffer_alloc(int32_t size, RustCallStatus *_Nonnull out_status ); RustBuffer ffi_sphinxrs_rustbuffer_from_bytes(ForeignBytes bytes, RustCallStatus *_Nonnull out_status @@ -165,6 +167,9 @@ uint16_t uniffi_sphinxrs_checksum_func_peel_payment(void ); uint16_t uniffi_sphinxrs_checksum_func_sign_ms(void +); +uint16_t uniffi_sphinxrs_checksum_func_pubkey_from_seed(void + ); uint32_t ffi_sphinxrs_uniffi_contract_version(void