apple_security/os/macos/
item.rs

1//! OSX specific functionality for items.
2use crate::item::ItemSearchOptions;
3use crate::os::macos::keychain::SecKeychain;
4use crate::ItemSearchOptionsInternals;
5
6// Moved to crate::Key
7pub use crate::key::KeyType;
8
9/// An extension trait adding OSX specific functionality to `ItemSearchOptions`.
10pub trait ItemSearchOptionsExt {
11    /// Search within the specified keychains.
12    ///
13    /// If this is not called, the default keychain will be searched.
14    fn keychains(&mut self, keychains: &[SecKeychain]) -> &mut Self;
15}
16
17impl ItemSearchOptionsExt for ItemSearchOptions {
18    #[inline(always)]
19    fn keychains(&mut self, keychains: &[SecKeychain]) -> &mut Self {
20        ItemSearchOptionsInternals::keychains(self, keychains)
21    }
22}
23
24#[cfg(test)]
25mod test {
26    use crate::item::*;
27    use crate::os::macos::certificate::SecCertificateExt;
28    use crate::os::macos::item::ItemSearchOptionsExt;
29    use crate::os::macos::test::keychain;
30    use tempfile::tempdir;
31
32    #[test]
33    fn find_certificate() {
34        let dir = p!(tempdir());
35        let keychain = keychain(dir.path());
36        let results = p!(ItemSearchOptions::new()
37            .keychains(&[keychain])
38            .class(ItemClass::certificate())
39            .search());
40        assert_eq!(1, results.len());
41        let certificate = match results[0] {
42            SearchResult::Ref(Reference::Certificate(ref cert)) => cert,
43            _ => panic!("expected certificate"),
44        };
45        assert_eq!("foobar.com", p!(certificate.common_name()));
46    }
47}