diff --git a/AGENTS.md b/AGENTS.md index 7d4cc86..fc318a7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -365,8 +365,9 @@ The former C 3DES helper and C PIV protocol parsers have been removed. - `src/backend/`: PC/SC lifetime, the bounded synchronous libcanokey executor, typed result conversion and public cache/profile coordination. - `src/internal/`: host hashing/padding/crypto, templates, logging and mutexes. -- `rust/`: private static linkage to the exact pinned libcanokey C ABI. Rust owns - PIV APDUs, formats, credentials, management crypto and firmware compatibility. +- `rust/`: private static linkage to the published crates.io canokey-c C ABI. + Rust owns PIV APDUs, formats, credentials, management crypto and firmware + compatibility. PIV object IDs map to slots as: diff --git a/Cargo.lock b/Cargo.lock index b313e84..2264ef5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -44,7 +44,8 @@ dependencies = [ [[package]] name = "canokey" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df997647c84069fd570187cea7101412b1b201f3f690891e2672689fe8fedc74" dependencies = [ "canokey-admin", "canokey-compat", @@ -59,7 +60,8 @@ dependencies = [ [[package]] name = "canokey-admin" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcdb22e2fb4096bd58f462a201aac845acbb6f979f653be440a28653dcfa9ae6" dependencies = [ "canokey-compat", "canokey-protocol", @@ -68,7 +70,8 @@ dependencies = [ [[package]] name = "canokey-c" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e84b1931753a92c57d39e674e56c1b2ac93ddeac46b447ca7254b01936f5d9" dependencies = [ "canokey", ] @@ -76,7 +79,8 @@ dependencies = [ [[package]] name = "canokey-compat" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0df93a34fbaa00bea3aec13542a089274582d4a117b348606d0029c55c5b12" dependencies = [ "canokey-protocol", ] @@ -84,7 +88,8 @@ dependencies = [ [[package]] name = "canokey-ctap" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b134b52e6fe121c6b67e40fd682e1583b96668cd50c7e2424d3618be3424a742" dependencies = [ "canokey-protocol", ] @@ -92,7 +97,8 @@ dependencies = [ [[package]] name = "canokey-key" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3e4f5fcde4c677795c3293a1a27f73f7e9676287626281d806099cec710f1c" dependencies = [ "canokey-compat", "canokey-protocol", @@ -104,7 +110,8 @@ dependencies = [ [[package]] name = "canokey-ndef" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7a1d7b5966765c50fb9bbe5b78c3697180192167cf27a9f1ab10a50e42acae2" dependencies = [ "canokey-protocol", ] @@ -112,7 +119,8 @@ dependencies = [ [[package]] name = "canokey-oath" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de3d3af36fb8a18fb8ab12649399787695ec42a3d167b0eda11f6de1e62abac" dependencies = [ "canokey-compat", "canokey-protocol", @@ -125,7 +133,8 @@ dependencies = [ [[package]] name = "canokey-openpgp" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82c9f782ebf542345715f04dfbf3445a1a850881e601e6fea099d2603cfd39bb" dependencies = [ "canokey-compat", "canokey-key", @@ -135,7 +144,8 @@ dependencies = [ [[package]] name = "canokey-piv" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9392afe4b41fd3de56ada20d061facb4bfb0007d2ed8e4c62c49c73a3e26e664" dependencies = [ "aes", "canokey-compat", @@ -163,7 +173,8 @@ dependencies = [ [[package]] name = "canokey-protocol" version = "0.1.0" -source = "git+https://github.com/canokeys/libcanokey?rev=b709b3dfe30402e4c6224949b20185bc809ec7e8#b709b3dfe30402e4c6224949b20185bc809ec7e8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b2b23e9353979f1be204494c60366ab8c17798314232957ff3178fa5c0db62" dependencies = [ "thiserror", "zeroize", diff --git a/Cargo.toml b/Cargo.toml index d5b8aa2..30ed38d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ path = "rust/lib.rs" crate-type = ["staticlib"] [dependencies] -canokey-c = { git = "https://github.com/canokeys/libcanokey", rev = "b709b3dfe30402e4c6224949b20185bc809ec7e8", default-features = false, features = ["piv"] } +canokey-c = { version = "0.1.0", default-features = false, features = ["piv"] } [profile.release] lto = "thin" diff --git a/README.md b/README.md index 37303d7..ea478ce 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ GCC should be supported, but is not tested. This experimental branch also requires CMake 3.20+ and the latest stable Rust via rustup. Cargo builds the private protocol adapter as a static library; -`Cargo.toml` pins libcanokey by Git revision and `Cargo.lock` pins its transitive -dependencies. There is no libcanokey submodule or Rust DLL. Existing C crypto +`Cargo.toml` selects the published `canokey-c` crate from crates.io and +`Cargo.lock` pins its transitive dependencies. There is no libcanokey submodule or Rust DLL. Existing C crypto and synchronization submodules are still needed. See [the migration status and acceptance plan](docs/libcanokey-piv-migration-plan.md) for the remaining PIV work. diff --git a/cmake/libcanokey.cmake b/cmake/libcanokey.cmake index 2fe7fac..3012049 100644 --- a/cmake/libcanokey.cmake +++ b/cmake/libcanokey.cmake @@ -1,4 +1,4 @@ -# Cargo owns the pinned Git dependency; no source checkout/submodule is needed. +# Cargo owns the crates.io canokey-c dependency; no source checkout/submodule is needed. find_program(CNK_CARGO cargo HINTS "$ENV{USERPROFILE}/.cargo/bin" "$ENV{HOME}/.cargo/bin" REQUIRED) find_program(CNK_RUSTC rustc HINTS "$ENV{USERPROFILE}/.cargo/bin" "$ENV{HOME}/.cargo/bin" REQUIRED) diff --git a/docs/architecture.md b/docs/architecture.md index e06d1b5..adc5f7f 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -151,7 +151,7 @@ Both credential mutations revoke host credentials/private contexts on attempted ## Build and diagnostics -Cargo.toml pins libcanokey; Cargo.lock pins its dependency closure. The private Rust +Cargo.toml selects the published crates.io canokey-c crate; Cargo.lock pins its dependency closure. The private Rust static library is linked into the existing DLL, with no Rust DLL or submodule. ThinLTO and function/data section collection remove unused code. PIV-only C ABI features exclude unrelated applets; host crypto, curves and Rust runtime still @@ -204,7 +204,7 @@ prehash case (RustCrypto's half-field minimum is 33 bytes). These experiments we not retained: Rust hash/ECDSA APIs need explicit compatibility adaptation and a measured benefit before replacing the existing host backend. RSA and PQC stay put. -The dependency follows merged libcanokey main (b709b3d). PIV-only C ABI features +The dependency is the published crates.io canokey-c release (currently 0.1.0). PIV-only C ABI features remain selected; NDEF/CTAP facade modules do not opt this consumer into ClientPIN or expose additional PKCS11 operations. The error POD retains its size and uses its formerly reserved byte for optional applet status; diagnostics preserve that