1 //! OSX specific extensions. 2 3 pub mod access; 4 pub mod certificate; 5 pub mod certificate_oids; 6 pub mod digest_transform; 7 pub mod encrypt_transform; 8 pub mod identity; 9 pub mod import_export; 10 pub mod item; 11 pub mod key; 12 pub mod keychain; 13 pub mod keychain_item; 14 pub mod passwords; 15 pub mod secure_transport; 16 pub mod transform; 17 18 #[cfg(test)] 19 pub mod test { 20 use std::fs::File; 21 use std::io::prelude::*; 22 use std::path::Path; 23 24 use crate::identity::SecIdentity; 25 use crate::item::{ItemClass, ItemSearchOptions, Reference, SearchResult}; 26 use crate::os::macos::keychain::SecKeychain; 27 28 #[allow(deprecated)] identity(dir: &Path) -> SecIdentity29 pub fn identity(dir: &Path) -> SecIdentity { 30 // FIXME https://github.com/rust-lang/rust/issues/30018 31 let keychain = keychain(dir); 32 let mut items = p!(ItemSearchOptions::new() 33 .class(ItemClass::identity()) 34 .keychains(&[keychain]) 35 .search()); 36 match items.pop().unwrap() { 37 SearchResult::Ref(Reference::Identity(identity)) => identity, 38 _ => panic!("expected identity"), 39 } 40 } 41 keychain(dir: &Path) -> SecKeychain42 pub fn keychain(dir: &Path) -> SecKeychain { 43 let path = dir.join("server.keychain"); 44 let mut file = p!(File::create(&path)); 45 p!(file.write_all(include_bytes!("../../../test/server.keychain"))); 46 drop(file); 47 48 let mut keychain = p!(SecKeychain::open(&path)); 49 p!(keychain.unlock(Some("password123"))); 50 keychain 51 } 52 } 53