HexString

Struct HexString 

Source
pub struct HexString(/* private fields */);
Expand description

Validated, lowercase hex string wrapper for secret data.

This struct ensures the contained string is valid hex (even length, valid chars). Provides methods for decoding back to bytes.

The string is normalized to lowercase during validation.

§Examples

let valid = HexString::new("deadbeef".to_string()).unwrap();
assert_eq!(valid.expose_secret(), "deadbeef");
let bytes = valid.decode_into_bytes(); // Vec<u8> of [0xde, 0xad, 0xbe, 0xef]

Implementations§

Source§

impl HexString

Source

pub fn new(s: String) -> Result<Self, &'static str>

Create a new HexString from a String, validating it in-place.

The input String is consumed.

§Security Note

Invalid inputs are only securely zeroized if the zeroize feature is enabled. Without zeroize, rejected bytes may remain in memory until the String is dropped normally. Enable the zeroize feature for secure wiping of invalid inputs.

Validation rules:

  • Even length
  • Only ASCII hex digits (0-9, a-f, A-F)
  • Uppercase letters are normalized to lowercase

Zero extra allocations are performed – everything happens on the original buffer.

§Errors

Returns Err("invalid hex string") if validation fails.

§Example
use secure_gate::{encoding::hex::HexString, ExposeSecret};
let valid = HexString::new("deadbeef".to_string()).unwrap();
assert_eq!(valid.expose_secret(), "deadbeef");
Source

pub fn byte_len(&self) -> usize

Number of bytes the decoded hex string represents.

Source

pub fn decode_to_bytes(&self) -> Vec<u8>

decode_to_bytes: borrowing, allocates fresh ` from decoded bytes

Source

pub fn decode_into_bytes(self) -> Vec<u8>

decode_into_bytes: consuming, decodes then zeroizes the wrapper immediately

Trait Implementations§

Source§

impl Debug for HexString

Debug implementation (always redacted).

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExposeSecret for HexString

Available on crate feature encoding-hex only.

Implementation for HexString - read-only access.

Encoding wrappers only provide read-only access to prevent invalidation of validation invariants. The Inner type is str since encoded strings are always valid UTF-8.

Source§

type Inner = str

The inner secret type being exposed. Read more
Source§

fn expose_secret(&self) -> &str

Expose the secret for read-only access.
Source§

fn len(&self) -> usize

Returns the length of the secret.
Source§

fn is_empty(&self) -> bool

Returns true if the secret is empty.
Source§

impl PartialEq for HexString

Available on crate feature ct-eq only.

Constant-time equality for hex strings — prevents timing attacks when ct-eq feature is enabled.

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for HexString

Equality implementation for hex strings.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V