Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F85647606
D361.1787766916.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
D361.1787766916.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D361: Expose base64 functions from vodozemac
Attached
Detach File
Event Timeline
Log In to Comment