pub struct Integrity {
pub hashes: Vec<Hash>,
}
Expand description
Representation of a full Subresource Integrity string.
Integrity
can be used for parsing and also includes convenience methods
for shorthand versions of IntegrityOpts
and
IntegrityChecker
.
Example
let source = "sha256-uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=";
let parsed: Integrity = source.parse().unwrap();
assert_eq!(parsed.to_string(), source);
Fields§
§hashes: Vec<Hash>
Implementations§
source§impl Integrity
impl Integrity
sourcepub fn pick_algorithm(&self) -> Algorithm
pub fn pick_algorithm(&self) -> Algorithm
Pick the most secure available Algorithm
in this Integrity
.
Example
use ssri::{Integrity, Algorithm};
let sri: Integrity = "sha1-deadbeef sha256-badc0ffee".parse().unwrap();
let algorithm = sri.pick_algorithm();
assert_eq!(algorithm, Algorithm::Sha256);
sourcepub fn from<B: AsRef<[u8]>>(data: B) -> Integrity
pub fn from<B: AsRef<[u8]>>(data: B) -> Integrity
Create a new Integrity
based on data
. Use
IntegrityOpts
for more options.
Example
use ssri::Integrity;
let sri = Integrity::from(b"hello");
assert_eq!(sri.to_string(), "sha256-LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=".to_owned());
sourcepub fn from_hex<B: AsRef<[u8]>>(
hex: B,
algorithm: Algorithm
) -> Result<Integrity, Error>
pub fn from_hex<B: AsRef<[u8]>>( hex: B, algorithm: Algorithm ) -> Result<Integrity, Error>
Converts a hex string obtained from to_hex()
to an Integrity
with a Hash
containing algorithm and decoded hex string.
Example
use ssri::{Integrity, Algorithm};
let expected = Integrity::from(b"hello");
let hex = String::from("2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824");
assert_eq!(Integrity::from_hex(hex, Algorithm::Sha256).unwrap(), expected);
sourcepub fn concat(&self, other: Integrity) -> Self
pub fn concat(&self, other: Integrity) -> Self
Join together two Integrity
instances. Hashes will be grouped and
sorted by algorithm but otherwise kept in the same order.
Example
use ssri::Integrity;
let sri1: Integrity = "sha256-deadbeef".parse().unwrap();
let sri2: Integrity = "sha256-badc0ffee".parse().unwrap();
let sri3 = sri1.concat(sri2);
assert_eq!(sri3.to_string(), "sha256-deadbeef sha256-badc0ffee".to_owned());
sourcepub fn to_hex(&self) -> (Algorithm, String)
pub fn to_hex(&self) -> (Algorithm, String)
Converts the first Hash
in this Integrity
into its hex string
format.
Example
use ssri::{Algorithm, Integrity};
let sri = Integrity::from(b"hello");
let (algo, hex) = sri.to_hex();
assert_eq!(algo, Algorithm::Sha256);
assert_eq!(hex, "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824".to_owned());
sourcepub fn matches(&self, other: &Self) -> Option<Algorithm>
pub fn matches(&self, other: &Self) -> Option<Algorithm>
Compares self
against a given SRI to see if there’s a match. The
deciding algorithm is determined by other
.
Example
use ssri::{Algorithm, Integrity};
let sri1 = Integrity::from(b"hello");
let sri2 = Integrity::from(b"hello").concat(Integrity::from(b"world"));
let m = sri1.matches(&sri2);
assert_eq!(m, Some(Algorithm::Sha256));
Trait Implementations§
source§impl<'de> Deserialize<'de> for Integrity
impl<'de> Deserialize<'de> for Integrity
source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl FromStr for Integrity
impl FromStr for Integrity
source§impl PartialEq<Integrity> for Integrity
impl PartialEq<Integrity> for Integrity
impl Eq for Integrity
impl StructuralEq for Integrity
impl StructuralPartialEq for Integrity
Auto Trait Implementations§
impl RefUnwindSafe for Integrity
impl Send for Integrity
impl Sync for Integrity
impl Unpin for Integrity
impl UnwindSafe for Integrity
Blanket Implementations§
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
Mutably borrows from an owned value. Read more