Skip to main content

security_framework/os/macos/
item.rs

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