pub struct Codec { /* private fields */ }Expand description
Core encoder/decoder.
Implementations§
Source§impl Codec
impl Codec
Sourcepub fn new(name: &str, config: &Config) -> Codec
pub fn new(name: &str, config: &Config) -> Codec
Creates a new Codec instance with the given name and key.
The name is used as a prefix in the encoded output and to derive a prefix-specifc
key together with the master key.
Security note: In order to be secure, you must provide a secure random key
with sufficient entropy, and manage it appropriately.
§Arguments
name- A string slice that holds the name of the codec.key- A byte slice that holds the master key for encryption and MAC.
§Returns
A new instance of Codec.
§Examples
use cryptid_rs::{Config, Codec};
let codec = Codec::new("example", &Config::new(b"your-secure-key"));Sourcepub fn encode(&self, num: u64) -> String
pub fn encode(&self, num: u64) -> String
Encodes a given numeric value into a secure string representation.
This method applies format-preserving encryption to the number and then encodes it into a base62 string with a prefix. It also appends an HMAC for integrity verification.
§Arguments
num- The 64-bit unsigned integer to be encoded.
§Returns
A Result which is Ok containing the encoded string if successful,
or an Error if encoding fails.
§Examples
use cryptid_rs::{Codec, Config};
let codec = Codec::new("example", &Config::new(b"your-secure-key"));
let encoded = codec.encode(12345);
assert_eq!(encoded, "example_VgwPy6rwatl");Sourcepub fn encode_uuid(&self, num: u64) -> Uuid
pub fn encode_uuid(&self, num: u64) -> Uuid
Encrypts num into an UUID. This is useful in situations where using an UUID is
forced by some interface. Otherwise you should use the default type safe strings.
Sourcepub fn decode_uuid(&self, uuid: Uuid) -> Result<u64, Error>
pub fn decode_uuid(&self, uuid: Uuid) -> Result<u64, Error>
Decodes a previously encrypted UUID back into its original numeric value.
§Arguments
uuid- The UUID to be decoded.
§Returns
A Result which is Ok containing the decoded 64-bit unsigned integer if successful,
or an Error if decoding fails.
§Examples
use cryptid_rs::{Codec, Config};
use uuid::Uuid;
let codec = Codec::new("test", &Config::new(b"Test key here"));
let uuid = codec.encode_uuid(0);
let decoded = codec.decode_uuid(uuid).unwrap();
assert_eq!(decoded, 0);Sourcepub fn decode(&self, encoded: &str) -> Result<u64, Error>
pub fn decode(&self, encoded: &str) -> Result<u64, Error>
Decodes a previously encoded string back into its original numeric value.
This method first verifies the integrity of the encoded data using HMAC, and then applies format-preserving decryption to retrieve the original number. It expects the encoded data to start with the correct prefix.
§Arguments
encoded- A string slice representing the encoded data.
§Returns
A Result which is Ok containing the decoded 64-bit unsigned integer if successful,
or an Error if decoding fails.
§Examples
use cryptid_rs::{Codec, Config};
let codec = Codec::new("example", &Config::new(b"your-secure-key"));
let decoded = codec.decode("example_VgwPy6rwatl").unwrap();
assert_eq!(decoded, 12345);Auto Trait Implementations§
impl Freeze for Codec
impl RefUnwindSafe for Codec
impl Send for Codec
impl Sync for Codec
impl Unpin for Codec
impl UnwindSafe for Codec
Blanket Implementations§
Source§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
Source§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read moreSource§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL modifier for aggregate functions Read moreSource§fn aggregate_filter<P>(self, f: P) -> Self::Output
fn aggregate_filter<P>(self, f: P) -> Self::Output
Source§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoSql for T
impl<T> IntoSql for T
Source§fn into_sql<T>(self) -> Self::Expression
fn into_sql<T>(self) -> Self::Expression
self to an expression for Diesel’s query builder. Read moreSource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
&self to an expression for Diesel’s query builder. Read more