diff --git a/.github/workflows/android_test.sh b/.github/workflows/android_test.sh index 25d2dc1..dd841a3 100755 --- a/.github/workflows/android_test.sh +++ b/.github/workflows/android_test.sh @@ -19,7 +19,7 @@ else fi if [ -n "$HAS_ERROR" ]; then - cat $LOG + echo $LOG echo "::error:: Rust panicked! Tests failed. Logs will be uploaded" exit 1 else diff --git a/Cargo.lock b/Cargo.lock index 4ccd84c..8cd179f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,9 +77,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block-buffer" @@ -433,9 +433,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -597,22 +597,23 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags", "core-foundation", "core-foundation-sys", "libc", + "num-bigint", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", diff --git a/Cargo.toml b/Cargo.toml index 7b2b17e..5363e24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,7 +33,7 @@ default = [] android_testing = [] [target.'cfg(target_os = "ios")'.dependencies] -security-framework = { version = "2.9.2" } +security-framework = { version = "2.11.1", features = ["OSX_10_13"] } [target.'cfg(target_os = "android")'.dependencies] jni = { version = "0.21.1", features = ["invocation"] } diff --git a/examples/android/Cargo.lock b/examples/android/Cargo.lock index 78680da..cca6c23 100644 --- a/examples/android/Cargo.lock +++ b/examples/android/Cargo.lock @@ -66,7 +66,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9880c221189377adad673ed5030e06d38578d86fa6bcf79dc7b135e64ac545c" dependencies = [ "android-properties", - "bitflags 2.4.2", + "bitflags 2.6.0", "cc", "cesu8", "jni", @@ -228,9 +228,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "blake2" @@ -453,16 +453,15 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", - "platforms", "rustc_version", "subtle", "zeroize", @@ -627,9 +626,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "generic-array" @@ -655,9 +654,9 @@ dependencies = [ [[package]] name = "ghash" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ "opaque-debug", "polyval", @@ -876,11 +875,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -968,9 +966,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "p256" @@ -1021,12 +1019,6 @@ dependencies = [ "spki", ] -[[package]] -name = "platforms" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" - [[package]] name = "poly1305" version = "0.8.0" @@ -1040,9 +1032,9 @@ dependencies = [ [[package]] name = "polyval" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", "cpufeatures", @@ -1203,9 +1195,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "salsa20" @@ -1241,22 +1233,23 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", + "num-bigint", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -1264,9 +1257,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" diff --git a/examples/ios/Cargo.lock b/examples/ios/Cargo.lock index 1a75228..c2f3048 100644 --- a/examples/ios/Cargo.lock +++ b/examples/ios/Cargo.lock @@ -38,32 +38,21 @@ dependencies = [ ] [[package]] -name = "android-activity" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +name = "animo-secure-env" +version = "0.4.0" dependencies = [ - "android-properties", - "bitflags 2.4.2", - "cc", - "cesu8", "jni", - "jni-sys", + "lazy_static", "libc", - "log", - "ndk", "ndk-context", "ndk-sys", - "num_enum", + "p256", + "paste", + "security-framework", "thiserror", + "x509-parser", ] -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - [[package]] name = "askar-crypto" version = "0.3.1" @@ -103,9 +92,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "22ad1373757efa0f70ec53939aabc7152e1591cb485208052993070ac8d2429d" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -119,25 +108,25 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "synstructure", ] [[package]] name = "asn1-rs-impl" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -166,15 +155,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "blake2" @@ -237,15 +220,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "cc" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9fa1897e4325be0d68d48df6aa1a71ac2ed4d27723887e7754192705350730" -dependencies = [ - "libc", -] - [[package]] name = "cesu8" version = "1.1.0" @@ -420,7 +394,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -442,9 +416,9 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.2.0" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" dependencies = [ "asn1-rs", "displaydoc", @@ -483,7 +457,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -543,12 +517,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "ff" version = "0.13.0" @@ -614,12 +582,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - [[package]] name = "hkdf" version = "0.12.4" @@ -638,16 +600,6 @@ dependencies = [ "digest", ] -[[package]] -name = "indexmap" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "inout" version = "0.1.3" @@ -725,9 +677,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" @@ -761,26 +713,12 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" name = "mobile_tests" version = "0.1.0" dependencies = [ + "animo-secure-env", "askar-crypto", "p256", - "secure-env", "uuid", ] -[[package]] -name = "ndk" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" -dependencies = [ - "bitflags 2.4.2", - "jni-sys", - "log", - "ndk-sys", - "num_enum", - "thiserror", -] - [[package]] name = "ndk-context" version = "0.1.1" @@ -789,9 +727,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.5.0+25.2.9519653" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ "jni-sys", ] @@ -808,11 +746,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -841,32 +778,11 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_enum" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.50", -] - [[package]] name = "oid-registry" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d" dependencies = [ "asn1-rs", ] @@ -903,9 +819,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pem-rfc7468" @@ -976,15 +892,6 @@ dependencies = [ "elliptic-curve", ] -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit", -] - [[package]] name = "proc-macro2" version = "1.0.78" @@ -1099,39 +1006,25 @@ dependencies = [ "zeroize", ] -[[package]] -name = "secure-env" -version = "0.1.0" -dependencies = [ - "android-activity", - "jni", - "lazy_static", - "ndk-context", - "p256", - "paste", - "security-framework", - "thiserror", - "x509-parser", -] - [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "core-foundation-sys", "libc", + "num-bigint", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -1170,7 +1063,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -1210,17 +1103,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.50" @@ -1234,34 +1116,33 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.12.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "unicode-xid", + "syn", ] [[package]] name = "thiserror" -version = "1.0.57" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.57" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -1295,23 +1176,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - [[package]] name = "typenum" version = "1.17.0" @@ -1324,12 +1188,6 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - [[package]] name = "universal-hash" version = "0.5.1" @@ -1469,15 +1327,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "x25519-dalek" version = "2.0.1" @@ -1491,9 +1340,9 @@ dependencies = [ [[package]] name = "x509-parser" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" dependencies = [ "asn1-rs", "data-encoding", @@ -1523,5 +1372,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] diff --git a/examples/mobile_tests/Cargo.lock b/examples/mobile_tests/Cargo.lock index 4b5aa2e..1756b5e 100644 --- a/examples/mobile_tests/Cargo.lock +++ b/examples/mobile_tests/Cargo.lock @@ -37,41 +37,15 @@ dependencies = [ "subtle", ] -[[package]] -name = "android-activity" -version = "0.5.0-beta.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9880c221189377adad673ed5030e06d38578d86fa6bcf79dc7b135e64ac545c" -dependencies = [ - "android-properties", - "bitflags 2.5.0", - "cc", - "cesu8", - "jni", - "jni-sys", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "num_enum 0.7.2", - "thiserror", -] - -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - [[package]] name = "animo-secure-env" -version = "0.3.1" +version = "0.4.0" dependencies = [ - "android-activity", "jni", "lazy_static", + "libc", "ndk-context", + "ndk-sys", "p256", "paste", "security-framework", @@ -140,7 +114,7 @@ checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", "synstructure", ] @@ -152,7 +126,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -181,15 +155,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "blake2" @@ -252,15 +220,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "cc" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9fa1897e4325be0d68d48df6aa1a71ac2ed4d27723887e7754192705350730" -dependencies = [ - "libc", -] - [[package]] name = "cesu8" version = "1.1.0" @@ -435,7 +394,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -498,7 +457,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -558,12 +517,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "ff" version = "0.13.0" @@ -629,12 +582,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - [[package]] name = "hkdf" version = "0.12.4" @@ -653,16 +600,6 @@ dependencies = [ "digest", ] -[[package]] -name = "indexmap" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "inout" version = "0.1.3" @@ -733,9 +670,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" @@ -775,20 +712,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "ndk" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" -dependencies = [ - "bitflags 1.3.2", - "jni-sys", - "ndk-sys", - "num_enum 0.5.11", - "raw-window-handle", - "thiserror", -] - [[package]] name = "ndk-context" version = "0.1.1" @@ -797,9 +720,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.4.1+23.1.7779620" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ "jni-sys", ] @@ -816,11 +739,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -849,48 +771,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive 0.5.11", -] - -[[package]] -name = "num_enum" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" -dependencies = [ - "num_enum_derive 0.7.2", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.50", -] - [[package]] name = "oid-registry" version = "0.7.0" @@ -900,12 +780,6 @@ dependencies = [ "asn1-rs", ] -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - [[package]] name = "opaque-debug" version = "0.3.0" @@ -1011,16 +885,6 @@ dependencies = [ "elliptic-curve", ] -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - [[package]] name = "proc-macro2" version = "1.0.78" @@ -1069,12 +933,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - [[package]] name = "rfc6979" version = "0.4.0" @@ -1143,22 +1001,23 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "core-foundation-sys", "libc", + "num-bigint", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -1197,7 +1056,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -1237,17 +1096,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.50" @@ -1267,7 +1115,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -1287,7 +1135,7 @@ checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] [[package]] @@ -1321,23 +1169,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - [[package]] name = "typenum" version = "1.17.0" @@ -1489,15 +1320,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "x25519-dalek" version = "2.0.1" @@ -1543,5 +1365,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn", ] diff --git a/examples/mobile_tests/src/lib.rs b/examples/mobile_tests/src/lib.rs index 1db9ecb..dcac2a8 100644 --- a/examples/mobile_tests/src/lib.rs +++ b/examples/mobile_tests/src/lib.rs @@ -44,7 +44,7 @@ pub fn run_tests() { fn test_generate_keypair() { let id = Uuid::new_v4(); - let key = SecureEnvironment::generate_keypair(id).unwrap(); + let key = SecureEnvironment::generate_keypair(id, false).unwrap(); assert!((addr_of!(key) != null())); } @@ -52,7 +52,7 @@ fn test_generate_keypair() { fn test_get_keypair_by_id() { let id = Uuid::new_v4(); - SecureEnvironment::generate_keypair(id).unwrap(); + SecureEnvironment::generate_keypair(id, false).unwrap(); let key = SecureEnvironment::get_keypair_by_id(id).unwrap(); assert!((addr_of!(key) != null())); @@ -60,7 +60,7 @@ fn test_get_keypair_by_id() { fn test_get_public_key() { let id = Uuid::new_v4(); - let key = SecureEnvironment::generate_keypair(id).unwrap(); + let key = SecureEnvironment::generate_keypair(id, false).unwrap(); let public_key = key.get_public_key().unwrap(); @@ -70,7 +70,7 @@ fn test_get_public_key() { fn test_get_by_id_and_get_public_key() { let id = Uuid::new_v4(); - SecureEnvironment::generate_keypair(id).unwrap(); + SecureEnvironment::generate_keypair(id, false).unwrap(); let key = SecureEnvironment::get_keypair_by_id(id).unwrap(); let public_key = key.get_public_key().unwrap(); @@ -81,7 +81,7 @@ fn test_get_by_id_and_get_public_key() { fn test_generate_and_sign() { let id = Uuid::new_v4(); - let key = SecureEnvironment::generate_keypair(id).unwrap(); + let key = SecureEnvironment::generate_keypair(id,false).unwrap(); let msg = b"Hello World!"; let signature = key.sign(msg).unwrap(); @@ -92,7 +92,7 @@ fn test_generate_and_sign() { fn test_get_by_id_and_sign() { let id = Uuid::new_v4(); - SecureEnvironment::generate_keypair(id).unwrap(); + SecureEnvironment::generate_keypair(id,false).unwrap(); let key = SecureEnvironment::get_keypair_by_id(id).unwrap(); let msg = b"Hello World!"; @@ -104,7 +104,7 @@ fn test_get_by_id_and_sign() { fn test_generate_and_sign_and_verify_with_askar() { let id = Uuid::new_v4(); - let key = SecureEnvironment::generate_keypair(id).unwrap(); + let key = SecureEnvironment::generate_keypair(id,false).unwrap(); let public_key = key.get_public_key().unwrap(); let msg = b"Hello World!"; @@ -120,7 +120,7 @@ fn test_generate_and_sign_and_verify_with_askar() { fn test_get_by_id_and_sign_and_verify_with_askar() { let id = Uuid::new_v4(); - SecureEnvironment::generate_keypair(id).unwrap(); + SecureEnvironment::generate_keypair(id,false).unwrap(); let key = SecureEnvironment::get_keypair_by_id(id).unwrap(); let public_key = key.get_public_key().unwrap(); let msg = b"Hello World!"; diff --git a/src/android.rs b/src/android.rs index 7577ad2..b291574 100644 --- a/src/android.rs +++ b/src/android.rs @@ -5,8 +5,8 @@ use crate::{ }; use jni::{ objects::{JByteArray, JClass, JObject, JString, JValue}, - sys::{jint, jobject, JNI_VERSION_1_6}, - JNIEnv, JavaVM, + sys::jobject, + JNIEnv, }; use lazy_static::lazy_static; use libc::c_void; @@ -138,7 +138,7 @@ macro_rules! jni_find_class { pub struct SecureEnvironment; impl SecureEnvironmentOps for SecureEnvironment { - fn generate_keypair(id: impl Into) -> SecureEnvResult { + fn generate_keypair(id: impl Into, backed_by_biometrics: bool) -> SecureEnvResult { let jvm = JAVA_VM.lock().map_err(|_| { SecureEnvError::UnableToAttachJVMToThread("Could not acquire lock on JVM".to_owned()) })?; @@ -178,7 +178,7 @@ impl SecureEnvironmentOps for SecureEnvironment { let digest_sha256 = jni_get_static_field!( env, - kp_cls, + &kp_cls, KEY_PROPERTIES_DIGEST_SHA256, l, UnableToGenerateKey @@ -208,6 +208,45 @@ impl SecureEnvironmentOps for SecureEnvironment { UnableToGenerateKey )?; + let builder = if backed_by_biometrics { + let auth_biometric_strong = jni_get_static_field!( + env, + &kp_cls, + KEY_PROPERTIES_AUTH_BIOMETRIC_STRONG, + i, + UnableToGenerateKey + )?; + + let builder = jni_call_method!( + env, + builder, + KEY_GEN_PARAMETER_SPEC_BUILDER_SET_USER_AUTHENTICATION_REQUIRED, + &[JValue::Bool(1)], + l, + UnableToGenerateKey + )?; + + let builder = jni_call_method!( + env, + builder, + KEY_GEN_PARAMETER_SPEC_BUILDER_SET_INVALIDATED_BY_BIOMETRIC_ENROLLMENT, + &[JValue::Bool(1)], + l, + UnableToGenerateKey + )?; + + jni_call_method!( + env, + builder, + KEY_GEN_PARAMETER_SPEC_BUILDER_SET_USER_AUTHENTICATION_PARAMETERS, + &[JValue::from(0), auth_biometric_strong.into()], + l, + UnableToGenerateKey + )? + } else { + builder + }; + let current_activity_thread = jni_call_static_method!( env, ACTIVITY_THREAD, @@ -506,6 +545,12 @@ impl KeyOps for Key { Ok(public_key) } + /** + * + * Signing is an operation that requires authentication. Make sure to manually authenticate + * before calling this operation + * + */ fn sign(&self, msg: &[u8]) -> SecureEnvResult> { let jvm = JAVA_VM.lock().map_err(|_| { SecureEnvError::UnableToAttachJVMToThread("Could not acquire lock on JVM".to_owned()) diff --git a/src/ios.rs b/src/ios.rs index eeb6062..8347e94 100644 --- a/src/ios.rs +++ b/src/ios.rs @@ -4,8 +4,10 @@ use crate::{ }; use p256::{ecdsa::Signature, elliptic_curve::group::GroupEncoding}; use security_framework::{ + access_control::{ProtectionMode, SecAccessControl}, item::{ItemClass, ItemSearchOptions, KeyClass, Location, SearchResult}, key::{Algorithm, GenerateKeyOptions, KeyType, SecKey, Token}, + passwords_options::AccessControlOptions, }; /// Unit struct that can be used to create and get keypairs by id @@ -35,7 +37,7 @@ use security_framework::{ pub struct SecureEnvironment; impl SecureEnvironmentOps for SecureEnvironment { - fn generate_keypair(id: impl Into) -> SecureEnvResult { + fn generate_keypair(id: impl Into, backed_by_biometrics: bool) -> SecureEnvResult { // Create a dictionary with the following options: let mut opts = GenerateKeyOptions::default(); @@ -46,6 +48,23 @@ impl SecureEnvironmentOps for SecureEnvironment { // Meaning Apple will store the key in a secure element let opts = opts.set_token(Token::SecureEnclave); + let opts = if backed_by_biometrics { + // Set the access control so that biometrics via LocalAuthentication.framework is required + let access_control = SecAccessControl::create_with_protection( + Some(ProtectionMode::AccessibleWhenUnlockedThisDeviceOnly), + AccessControlOptions::BIOMETRY_CURRENT_SET.bits(), + ) + .map_err(|_| { + SecureEnvError::UnableToGenerateKey( + "Unable to create access control flags".to_owned(), + ) + })?; + + opts.set_access_control(access_control) + } else { + opts + }; + // Store the key in the keychain let opts = opts.set_location(Location::DataProtectionKeychain); @@ -75,6 +94,8 @@ impl SecureEnvironmentOps for SecureEnvironment { .class(ItemClass::key()) // We want access to the private key .key_class(KeyClass::private()) + // Limit to 1 output key + .limit(1) // Search the keychain .search() .map_err(|_| { @@ -92,13 +113,13 @@ impl SecureEnvironmentOps for SecureEnvironment { match result { SearchResult::Ref(r) => match r { security_framework::item::Reference::Key(k) => Ok(Key(k.to_owned())), - _ => Err(SecureEnvError::UnableToGetKeyPairById(format!( - "Found Reference, but not of key instance", - ))), + _ => Err(SecureEnvError::UnableToGetKeyPairById( + "Found Reference, but not of key instance".to_owned(), + )), }, - _ => Err(SecureEnvError::UnableToGetKeyPairById(format!( - "Did not find search reference", - ))), + _ => Err(SecureEnvError::UnableToGetKeyPairById( + "Did not find search reference".to_owned(), + )), } } } @@ -178,6 +199,12 @@ impl KeyOps for Key { Ok(public_key) } + /** + * + * Signing is an operation that requires authentication. Make sure to manually authenticate + * before calling this operation + * + */ fn sign(&self, msg: &[u8]) -> SecureEnvResult> { // Sign the message with the `der` format let der_sig = self diff --git a/src/jni_tokens.rs b/src/jni_tokens.rs index a4d0165..7dd792f 100644 --- a/src/jni_tokens.rs +++ b/src/jni_tokens.rs @@ -21,6 +21,9 @@ pub static PACKAGE_MANAGER_HAS_SYSTEM_FEATURE_SIG: &str = "(Ljava/lang/String;I) pub static KEY_PROPERTIES_CLS: &str = "android/security/keystore/KeyProperties"; +pub static KEY_PROPERTIES_AUTH_BIOMETRIC_STRONG: &str = "AUTH_BIOMETRIC_STRONG"; +pub static KEY_PROPERTIES_AUTH_BIOMETRIC_STRONG_SIG: &str = "I"; + pub static KEY_PROPERTIES_PURPOSE_SIGN: &str = "PURPOSE_SIGN"; pub static KEY_PROPERTIES_PURPOSE_SIGN_SIG: &str = "I"; @@ -42,6 +45,21 @@ pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_KEY_SIZE: &str = "setKeySize"; pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_KEY_SIZE_SIG: &str = "(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;"; +pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_USER_AUTHENTICATION_REQUIRED: &str = + "setUserAuthenticationRequired"; +pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_USER_AUTHENTICATION_REQUIRED_SIG: &str = + "(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;"; + +pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_INVALIDATED_BY_BIOMETRIC_ENROLLMENT: &str = + "setInvalidatedByBiometricEnrollment"; +pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_INVALIDATED_BY_BIOMETRIC_ENROLLMENT_SIG: &str = + "(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;"; + +pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_USER_AUTHENTICATION_PARAMETERS: &str = + "setUserAuthenticationParameters"; +pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_USER_AUTHENTICATION_PARAMETERS_SIG: &str = + "(II)Landroid/security/keystore/KeyGenParameterSpec$Builder;"; + pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_IS_STRONG_BOX_BACKED: &str = "setIsStrongBoxBacked"; pub static KEY_GEN_PARAMETER_SPEC_BUILDER_SET_IS_STRONG_BOX_BACKED_SIG: &str = "(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;"; diff --git a/src/secure_environment.rs b/src/secure_environment.rs index 97e2512..904280a 100644 --- a/src/secure_environment.rs +++ b/src/secure_environment.rs @@ -1,7 +1,7 @@ use crate::{error::SecureEnvResult, key::KeyOps}; pub trait SecureEnvironmentOps { - fn generate_keypair(id: impl Into) -> SecureEnvResult; + fn generate_keypair(id: impl Into, backed_by_biometrics: bool) -> SecureEnvResult; fn get_keypair_by_id(id: impl Into) -> SecureEnvResult; }