Page MenuHomePhorge

D361.1787766916.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D361.1787766916.diff

diff --git a/cpp/Makefile b/cpp/Makefile
--- a/cpp/Makefile
+++ b/cpp/Makefile
@@ -92,7 +92,7 @@
-L /usr/local/lib -Wl,-rpath,/usr/local/lib
TEST_DEPS = $(SHARED_LIB_PREFIX).$(VERSION) tests/util.hpp
-TESTS_EXCEPT = account-test session-test sas-test group-session-test
+TESTS_EXCEPT = account-test session-test sas-test group-session-test utilities-test
TESTS_NOEXCEPT = $(TESTS_EXCEPT:-test=-noexcept-test)
TESTS = $(TESTS_EXCEPT) $(TESTS_NOEXCEPT)
diff --git a/cpp/build.rs b/cpp/build.rs
--- a/cpp/build.rs
+++ b/cpp/build.rs
@@ -11,6 +11,7 @@
"src/sas.rs",
"src/session.rs",
"src/types.rs",
+ "src/utilities.rs",
"src/maybe.rs",
"vodozemac_maybe_derive/src/lib.rs",
];
diff --git a/cpp/src/lib.rs.in b/cpp/src/lib.rs.in
--- a/cpp/src/lib.rs.in
+++ b/cpp/src/lib.rs.in
@@ -3,6 +3,7 @@
mod sas;
mod session;
mod types;
+mod utilities;
mod maybe;
use account::{
@@ -59,6 +60,11 @@
Curve25519PublicKey, Ed25519PublicKey,
Ed25519Signature,
};
+use utilities::{
+ base64_decode,
+ base64_decode_noexcept,
+ base64_encode,
+};
use maybe::Maybe;
use crate::ffi::InboundCreationResult;
use crate::ffi::DecryptedMessage;
@@ -249,4 +255,10 @@
fn emoji_indices(self: &SasBytes) -> [u8; 7];
fn decimals(self: &SasBytes) -> [u16; 3];
}
+
+ #[namespace = "vodozemac::utilities"]
+ extern "Rust" {
+ fn base64_decode(input: &str) -> Result<Vec<u8>>;
+ fn base64_encode(input: &[u8]) -> String;
+ }
}
diff --git a/cpp/src/utilities.rs b/cpp/src/utilities.rs
new file mode 100644
--- /dev/null
+++ b/cpp/src/utilities.rs
@@ -0,0 +1,11 @@
+use vodozemac_maybe_derive::gen_noexcept;
+use crate::maybe::Maybe;
+
+#[gen_noexcept]
+pub fn base64_decode(input: &str) -> Result<Vec<u8>, anyhow::Error> {
+ Ok(vodozemac::base64_decode(input)?)
+}
+
+pub fn base64_encode(input: &[u8]) -> String {
+ vodozemac::base64_encode(input)
+}
diff --git a/cpp/tests/utilities.cpp b/cpp/tests/utilities.cpp
new file mode 100644
--- /dev/null
+++ b/cpp/tests/utilities.cpp
@@ -0,0 +1,13 @@
+#include "../../target/cxxbridge/vodozemac/src/lib.rs.h"
+#include <catch2/catch_test_macros.hpp>
+#include "util.hpp"
+
+using namespace rust;
+using namespace vodozemac;
+
+TEST_CASE("EncodeDecode", "[UtilitiesTest]") {
+ std::string str = "mewmew";
+ auto encoded = utilities::base64_encode(Slice<const std::uint8_t>(reinterpret_cast<const std::uint8_t *>(str.data()), str.size()));
+ auto decoded = REQUIRE_VODOZEMAC_OK(utilities::MAYBE_NOEXCEPT(base64_decode)(encoded));
+ REQUIRE(as_std_string(decoded) == str);
+}

File Metadata

Mime Type
text/plain
Expires
Wed, Aug 26, 10:55 AM (23 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1735853
Default Alt Text
D361.1787766916.diff (2 KB)

Event Timeline