Replace the radix64 crate with base64

The radix64 crate was last updated over 3 years ago. On the other
hand the base64 crate appears to be far more actively maintained,
supports all the needed features and has a few orders of magnitude
more users.
This commit is contained in:
Benno Rice 2023-01-03 11:54:56 +11:00
parent 2d4ee168d7
commit b4667c1b31
2 changed files with 21 additions and 16 deletions

View File

@ -38,6 +38,7 @@ path = "rust-bindings/tests/tests.rs"
members = [".", "rust-bindings/sys"]
[dependencies]
base64 = "0.20.0"
bitflags = "1.2.1"
cap-std = { version = "1.0", optional = true}
io-lifetimes = { version = "1.0", optional = true}
@ -47,7 +48,6 @@ glib = "0.16"
hex = "0.4.2"
libc = "0.2"
once_cell = "1.4.0"
radix64 = "0.6.2"
thiserror = "1.0.20"
[dev-dependencies]

View File

@ -1,23 +1,28 @@
use base64::{
alphabet::Alphabet,
engine::fast_portable::{FastPortable, FastPortableConfig},
engine::DecodePaddingMode,
};
use glib::ffi::{g_free, g_malloc0, gpointer};
use glib::translate::{FromGlibPtrFull, FromGlibPtrNone};
use once_cell::sync::OnceCell;
use once_cell::sync::Lazy;
use std::ptr::copy_nonoverlapping;
const BYTES_LEN: usize = ffi::OSTREE_SHA256_DIGEST_LEN as usize;
static BASE64_CONFIG: OnceCell<radix64::CustomConfig> = OnceCell::new();
static BASE64_ENGINE: Lazy<FastPortable> = Lazy::new(|| {
// modified base64 alphabet used by ostree (uses _ instead of /)
let alphabet =
Alphabet::from_str("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+_")
.expect("bad base64 alphabet");
fn base64_config() -> &'static radix64::CustomConfig {
BASE64_CONFIG.get_or_init(|| {
radix64::configs::CustomConfigBuilder::with_alphabet(
// modified base64 alphabet used by ostree (uses _ instead of /)
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+_",
)
.no_padding()
.build()
.unwrap()
})
}
FastPortable::from(
&alphabet,
FastPortableConfig::new()
.with_encode_padding(false)
.with_decode_padding_mode(DecodePaddingMode::Indifferent),
)
});
/// Error returned from parsing a checksum.
#[derive(Debug, thiserror::Error)]
@ -61,7 +66,7 @@ impl Checksum {
/// Create a `Checksum` from a base64-encoded String.
pub fn from_base64(b64_checksum: &str) -> Result<Checksum, ChecksumError> {
let mut checksum = Checksum::zeroed();
match base64_config().decode_slice(b64_checksum, checksum.as_mut()) {
match base64::decode_engine_slice(b64_checksum, checksum.as_mut(), &*BASE64_ENGINE) {
Ok(BYTES_LEN) => Ok(checksum),
Ok(_) => Err(ChecksumError::InvalidBase64String),
Err(_) => Err(ChecksumError::InvalidBase64String),
@ -75,7 +80,7 @@ impl Checksum {
/// Convert checksum to base64 string.
pub fn to_base64(&self) -> String {
base64_config().encode(self.as_slice())
base64::encode_engine(self.as_slice(), &*BASE64_ENGINE)
}
/// Create a `Checksum` value, taking ownership of the given memory location.