Skip to content

Commit

Permalink
fix(ios): disable macos
Browse files Browse the repository at this point in the history
Signed-off-by: Berend Sliedrecht <[email protected]>
  • Loading branch information
berendsliedrecht committed Feb 23, 2024
1 parent 65fe00d commit 7b7c02a
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 113 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
include:
- target: aarch64-linux-android
runner: ubuntu-latest
- target: aarch64-apple-darwin
- target: aarch64-apple-ios
runner: macos-latest

runs-on: ${{ matrix.runner }}
Expand Down Expand Up @@ -86,7 +86,7 @@ jobs:
include:
- target: aarch64-linux-android
runner: macos-latest
- target: aarch64-apple-darwin
- target: aarch64-apple-ios
runner: macos-latest

runs-on: ${{ matrix.runner }}
Expand Down
5 changes: 1 addition & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ crate-type = ["cdylib", "rlib"]
name = "secure_env"

[target.'cfg(target_os = "ios")'.dependencies]
p256 = { version = "0.13.2", features = ["ecdsa-core"] }
security-framework = { version = "2.9.2" }
p256 = { version = "0.13.2", features = ["ecdsa-core"] }

[target.'cfg(target_os = "android")'.dependencies]
android-activity = { version = "0.5.0", features = ["native-activity"] }
Expand All @@ -28,6 +28,3 @@ ndk-context = "0.1.1"

[dependencies]
thiserror = "1.0.50"

[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dev-dependencies]
askar-crypto = "0.3.0"
42 changes: 2 additions & 40 deletions examples/android/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

80 changes: 15 additions & 65 deletions src/ios.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,24 @@ use security_framework::{
///
/// # Examples
///
/// ## Generate a keypair
///
/// ```
/// use secure_env::{SecureEnvironment, SecureEnvironmentOps};
///
/// let key = SecureEnvironment::generate_keypair("my-unique-id").unwrap();
/// ```
///
/// ## Get a keypair from the keychain
///
/// ```
/// use secure_env::{SecureEnvironment, SecureEnvironmentOps};
///
/// let _key = SecureEnvironment::generate_keypair("my-unique-id").unwrap();
/// {
/// SecureEnvironment::generate_keypair("my-unique-id").unwrap();
/// }
///
/// let key = SecureEnvironment::get_keypair_by_id("my-unique-id").unwrap();
/// ```
#[derive(Debug, Clone, Eq, PartialEq, Copy)]
pub struct SecureEnvironment;
Expand All @@ -30,12 +44,6 @@ impl SecureEnvironmentOps<Key> for SecureEnvironment {
// Set the key type to `ec` (Elliptic Curve)
let opts = opts.set_key_type(KeyType::ec());

let options = AccessControlOptions::PRIVATE_KEY_USAGE & AccessControlOptions::BIOMETRY_CURRENT_SET;
let flags = SecAccessControl::create_with_flags(options.bits()).unwrap();
let opts = opts.set_access_control(flags);

// let opts = opts.set_app_tag("id.animo.ios");

// Set the a token of `SecureEnclave`.
// Meaning Apple will store the key in a secure element
let opts = opts.set_token(Token::SecureEnclave);
Expand Down Expand Up @@ -173,61 +181,3 @@ impl KeyOps for Key {
Ok(signature)
}
}

#[cfg(all(test, any(target_os = "macos", target_os = "ios")))]
mod test {
use std::ptr::addr_of;

use askar_crypto::{alg::p256::P256KeyPair, repr::KeyPublicBytes};

use super::*;

#[test]
fn generate_key_pair() {
let key = SecureEnvironment::generate_keypair("my-test-key").unwrap();
assert!(!addr_of!(key).is_null());
}

#[test]
fn get_keypair_by_id() {
let id = "my-get-keypair-by-id-test-key";
let key = SecureEnvironment::generate_keypair(id).unwrap();
let public_key = key.get_public_key().unwrap();

let retrieved_key = SecureEnvironment::get_keypair_by_id(id).unwrap();
let retrieved_public_key = retrieved_key.get_public_key().unwrap();

assert_eq!(public_key, retrieved_public_key);
}

#[test]
fn get_public_key() {
let key = SecureEnvironment::generate_keypair("my-test-public-key").unwrap();
let public_key_bytes = key.get_public_key().unwrap();

assert_eq!(public_key_bytes.len(), 33);
}

#[test]
fn sign() {
let key = SecureEnvironment::generate_keypair("my-test-sign-key").unwrap();

let signature = key.sign(b"Hello World!").unwrap();

assert_eq!(signature.len(), 64);
}

#[test]
fn sign_and_external_verification() {
let msg = b"Hello World!";
let key = SecureEnvironment::generate_keypair("my-test-sign-key").unwrap();

let public_key = key.get_public_key().unwrap();
let signature = key.sign(b"Hello World!").unwrap();

let verify_key = P256KeyPair::from_public_bytes(&public_key).unwrap();
let is_signature_valid = verify_key.verify_signature(msg, &signature);

assert!(is_signature_valid);
}
}
4 changes: 2 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ pub use key::*;
mod secure_environment;
pub use secure_environment::*;

#[cfg(any(target_os = "macos", target_os = "ios"))]
#[cfg(target_os = "ios")]
mod ios;
#[cfg(any(target_os = "macos", target_os = "ios"))]
#[cfg(target_os = "ios")]
pub use ios::*;

#[cfg(target_os = "android")]
Expand Down

0 comments on commit 7b7c02a

Please sign in to comment.