1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use coarsetime::{Duration, UnixTimeStamp};
#[derive(Clone, Debug, Default)]
pub struct VerificationOptions {
pub reject_before: Option<UnixTimeStamp>,
pub accept_future: bool,
pub required_issuer: Option<String>,
pub required_subject: Option<String>,
pub required_key_id: Option<String>,
pub required_public_key: Option<String>,
pub required_nonce: Option<String>,
pub time_tolerance: Option<Duration>,
pub max_validity: Option<Duration>,
}
#[inline(never)]
pub(crate) fn timingsafe_eq(a: &[u8], b: &[u8]) -> bool {
assert_eq!(a.len(), b.len());
a.iter().zip(b.iter()).fold(0, |c, (x, y)| c | (x ^ y)) == 0
}