pub struct SdJwtKb(str);
impl SdJwtKb {
pub fn parts(&self) -> PartsRef {
let mut chars = self.0.char_indices();
let jwt = loop {
if let Some((i, '~')) = chars.next() {
break unsafe {
Jws::new_unchecked(self.0[..i].as_bytes())
}
}
};
let mut disclosures = Vec::new();
let mut i = jwt.len() + 1;
let key_binding_jwt = loop {
match chars.next() {
Some((j, '~')) => {
disclosures.push(unsafe {
Disclosure::new_unchecked(self.0[i..j].as_bytes())
});
i = j + 1;
}
Some(_) => (),
None => {
break if i < self.0.len() {
Some(unsafe {
Jws::new_unchecked(self.0[i..].as_bytes())
})
} else {
None
}
}
}
};
PartsRef {
jwt,
disclosures,
key_binding_jwt
}
}
}
#[derive(Debug, PartialEq)]
pub struct PartsRef<'a> {
pub jwt: &'a Jws,
pub disclosures: Vec<&'a Disclosure>,
pub key_binding_jwt: Option<&'a Jws>
}