15 个版本 (破坏性)

0.16.0 2023年4月22日
0.15.0 2022年4月3日
0.14.1 2021年4月10日
0.14.0 2020年11月14日
0.5.2 2016年9月16日

#76 in 身份验证

Download history 2470/week @ 2024-03-14 2029/week @ 2024-03-21 2829/week @ 2024-03-28 3394/week @ 2024-04-04 3499/week @ 2024-04-11 3131/week @ 2024-04-18 2385/week @ 2024-04-25 2460/week @ 2024-05-02 2941/week @ 2024-05-09 3444/week @ 2024-05-16 2965/week @ 2024-05-23 3601/week @ 2024-05-30 3572/week @ 2024-06-06 3084/week @ 2024-06-13 2978/week @ 2024-06-20 2074/week @ 2024-06-27

12,335 每月下载量
用于 5 crates

CECILL-C OR CECILL-2.1

225KB
5K SLoC

LibreAuth

Build Status LibreAuth on crates.io LibreAuth on docs.rs License: CeCILL-C License: CeCILL-2.1

LibreAuth 是用户身份验证工具集合。

特性

  • 密码/口令认证
    • 无字符集限制
    • 合理的长度限制(安全与拒绝服务攻击
    • 强大、可演化和向后兼容的密码散列函数
    • NFKC 对 Unicode 密码进行规范化
    • 可选 NIST 特殊出版物 800-63B 兼容性
    • 可选在散列密码前后添加外部盐的 HMAC
  • HOTP - 基于 HMAC 的一次性密码算法(OATH - RFC 4226
    • 密钥可以以字节、ASCII 字符串、十六进制字符串、base32 字符串或 base64 字符串的形式传递
    • 可定制的计数器
    • 可定制的散列函数(sha1、完整的 sha2 家族、sha3/Keccak 固定大小家族)
    • 可定制的输出长度
    • 可定制的输出字母表
  • TOTP - 基于时间的一次性密码算法(OATH - RFC 6238
    • 密钥可以以字节、ASCII 字符串、十六进制字符串、base32 字符串或 base64 字符串的形式传递
    • 可定制的时间戳
    • 可定制的周期
    • 可定制的初始时间(T0)
    • 可定制的散列函数(sha1、完整的 sha2 家族、sha3/Keccak 固定大小家族)
    • 可定制的输出长度
    • 可定制的输出字母表
    • 可定制的正负周期容差
  • 随机密钥生成
    • 使用平台的安全熵源
    • 可定制的尺寸
    • 可定制的输出格式(Vec、十六进制字符串、base32 字符串、base64 字符串)
  • WebAuthn - Web 认证:访问公钥证书级别的 API (W3C) ⚠️ 尚未开始
    • 认证器 API
    • 服务器 API

状态

该项目仍在开发中,因此在使用 1.0.0 版本之前不应在生产中使用。以下是将在第一个稳定版本中存在的功能及其各自的状态。

  • OATH HOTP/TOTP:几乎准备好了!
    • ✅ 许多功能
    • ✅ 稳定的 API
    • ⚠️ 缺乏同行评审
  • 密码/口令认证:几乎准备好了!
    • ✅ 合理的默认值
    • ✅ 稳定的 API
    • ⚠️ 缺乏同行评审
  • 随机密钥生成:几乎准备好了!
    • ⚠️ 稳定的 API
    • ⚠️ 缺乏同行评审

在 Rust 项目中使用

您可以在 crates.io 上找到 LibreAuth,并将其包含在您的 Cargo.toml 中。

libreauth = "*"

可以使用 default-features = false 选择性地使用模块,然后仅使用您需要的功能。

[dependencies.libreauth]
version = "*"
default-features = false
features = ["key", "oath", "pass"]

在 Rust 之外使用

为了构建 LibreAuth,您需要 Rust 编译器和其包管理器 Cargo。所需的最小 Rust 版本是 1.60,尽管推荐使用最新的稳定版。

$ make
$ make install

快速示例

Rust

更多示例请参阅 文档

use libreauth::oath::TOTPBuilder;

fn main() {
    let key = "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ".to_string();
    let code = TOTPBuilder::new()
        .base32_key(&key)
        .finalize()
        .unwrap()
        .generate();
    assert_eq!(code.len(), 6);
}

C

#include <stdio.h>
#include <libreauth.h>

int main(void) {
  struct libreauth_totp_cfg cfg;
  char   code[7], key[] = "12345678901234567890";

  if (libreauth_totp_init(&cfg) != LIBREAUTH_OTP_SUCCESS) {
    return 1;
  }
  cfg.key = key;
  cfg.key_len = strlen(key);
  if (libreauth_totp_generate(&cfg, code) != LIBREAUTH_OTP_SUCCESS) {
    return 2;
  }

  printf("%s\n", code);

  return 0;
}
$ cc -o totp totp.c -llibreauth
$ ./totp
848085

许可证

LibreAuth 是一种免费软件,可在 CeCILL-C 许可证或 CeCILL 2.1 许可证下使用。有关这些许可证的简要概述,您可以在许可证网站的 常见问题 中阅读。这些许可证的完整副本以英文和法语形式都可在本存储库中找到。

尽管 CeCILL 2.1 是 LibreAuth 的原始许可证,但未来的版本可能仅以 CeCILL-C 许可证发布。这种变化发生是因为 CeCILL 2.1 并不适合作为库,它是一种“病毒性”许可证。

依赖项

~0–1.2MB
~24K SLoC