#fido2 #webauthn #api-bindings

fido2-rs

Rust绑定Yubico fido2

1 个不稳定版本

0.1.0 2023年1月7日

#1044认证

MIT 许可证

105KB
2K SLoC

fido2-rs

crates.io MIT

libfido2 对Rust编程语言的绑定。

更多详情,请见 tyan-boot/fido-rs

use fido2_rs::device::Device;
use fido2_rs::credentials::Credential;
use fido2_rs::credentials::CoseType;
use anyhow::Result;

fn main() -> Result<()> {
    let dev = Device::open("windows://hello").expect("unable open windows hello");

    let mut cred = Credential::new();
    cred.set_client_data(&[1, 2, 3, 4, 5, 6])?;
    cred.set_rp("fido_rs", "fido example")?;
    cred.set_user(&[1, 2, 3, 4, 5, 6], "alice", Some("alice"), None)?;
    cred.set_cose_type(CoseType::RS256)?;

    let _ = dev.make_credential(&mut cred, None)?;
    dbg!(cred.id());

    Ok(())
}

lib.rs:

Yubico libfido2绑定

此包提供了一个安全的接口来访问Yubico libfido2库。

构建

有多种方式可以定位libfido2。

预构建MSVC二进制文件。

如果rust工具链是msvc,则libfido2-sys包将从Yubico发布中下载预构建的二进制dll。

从源代码构建。

如果目标是msvc(Windows上的mingw或Linux),则此包将从源代码构建静态库。

构建过程需要C编译器、cmake、libcbor、zlib、libcrypto。

自动

libfido2-sys包可以通过Windows上的vcpkg和Linux上的pkg-config自动检测libfido2安装。

可以通过设置环境变量FIDO2_USE_PKG_CONFIG为任何非空值来启用此方法。

手动

可以使用环境变量FIDO2_LIB_DIR来帮助libfido2-sys查找libfido2安装。

该目录应包含libfido2库。

其他依赖项,如libcbor、libcrypto、zlib将使用系统版本。目前没有设置这些库目录的方法,但您可以将它们放在FIDO2_LIB_DIR中。

示例

枚举系统上的fido设备

use fido2_rs::device::DeviceList;

let list = DeviceList::list_devices(4);
for dev in list {
    println!("{:?}", dev.path);
}

创建凭证

use fido2_rs::device::Device;
use fido2_rs::credentials::Credential;
use fido2_rs::credentials::CoseType;
use anyhow::Result;
fn main() -> Result<()> {
    let dev = Device::open("windows://hello").expect("unable open windows hello");
 
    let mut cred = Credential::new();
    cred.set_client_data(&[1, 2, 3, 4, 5, 6])?;
    cred.set_rp("fido_rs", "fido example")?;
    cred.set_user(&[1, 2, 3, 4, 5, 6], "alice", Some("alice"), None)?;
    cred.set_cose_type(CoseType::RS256)?;

    let _ = dev.make_credential(&mut cred, None)?;
    dbg!(cred.id());

    Ok(())
}

依赖项

~1.8–4.5MB
~97K SLoC