#pkcs11 #back-end #module #credentials #native #key #pkcs

native-pkcs11

Cross-platform PKCS#11 module written in rust. Can be extended with custom credential backends.

18 releases

0.2.17 Mar 13, 2024
0.2.15 Nov 14, 2023
0.2.12 Jun 21, 2023
0.2.7 Mar 22, 2023
0.1.0 Nov 24, 2022

#172 in Cryptography

Download history 3/week @ 2023-12-30 12/week @ 2024-02-10 12/week @ 2024-02-17 18/week @ 2024-02-24 76/week @ 2024-03-09 16/week @ 2024-03-16 2/week @ 2024-03-23 59/week @ 2024-03-30 19/week @ 2024-04-06

107 downloads per month

Apache-2.0

1MB
27K SLoC

native-pkcs11

pkcs11 module for native credential stores

native-pkcs11 is a crate for building PKCS#11 modules. Its primary use-case is authenticating with client certificates. native-pkcs11 aims to support native certificate stores (MacOS Keychain, Windows Platform Key Provider) out of the box. It can also be extended with a custom backend (see this section).

Host Software Compatibility

Software compatibility is a core goal of native-pkcs11. It is currently tested with

  • openssh
  • openvpn
  • Chrome
  • Firefox

If a native-pkcs11 module does not work for your software, please file an issue.

Building a Custom Backend

The native_pkcs11_traits::Backend trait can be implemented to add support for a new credential store. Backends are registered in the exported C_GetFunctionList function. In order to register your own backend, enable the custom-function-list feature on native-pkcs11 and export the method from your crate. For example:

use native_pkcs11::{CKR_OK, CK_FUNCTION_LIST_PTR_PTR, CK_RV, FUNC_LIST};
#[no_mangle]
pub extern "C" fn C_GetFunctionList(ppFunctionList: CK_FUNCTION_LIST_PTR_PTR) -> CK_RV {
    native_pkcs11_traits::register_backend(Box::new(backend::MyBackend {}));
    unsafe { *ppFunctionList = &mut FUNC_LIST };
    return CKR_OK;
}

Releasing

The cargo-ws tool can be used to version bump and release all crates in the workspace at once. It can be installed with cargo install cargo-workspaces.

# Bump the version of all crates in the workspace
cargo ws version --no-git-push
# Publish all crates to crates.io
cargo ws publish --no-git-push

Dependencies

~8–37MB
~536K SLoC