2个版本

0.0.1-rc22023年11月15日
0.0.1-rc02023年2月16日

#10 in #subject

MIT 许可证

32KB
675

BeNu

简单 & 紧凑的二进制凭证

未完成

字段

名称 标志 类型 描述
TYP 0x1 字节 令牌的类型(例如用户或会话)
SUBJECT 0x2 数据 令牌的主题
INCREMENT 0x4 整数 用于令牌无效化的增量
BEFORE 0x8 整数 令牌过期的时间
AFTER 0x10 整数 令牌有效的时间
DATA 0x20 数据 定义的令牌声明
SALT 0x40 数据 一些额外的盐 (为什么不行?)

用法

use std::time::Duration;
use crate::signed::SignedToken;
use crate::{Header, Token};

// define key
let key = [0u8; 32];

// build the token
let token = Token::builder()
    .typ(0x01)
    .subject("Sam")
    .data("Hello World!")
    .before(Duration::from_secs(300));

println!("{:?}", token);

// seal and sign the token with the key
let token = token
    .seal()
    .sign(key.as_ref());

    println!("{:?} -> {:?}", token.len(), token);

// create a signed token
let token = SignedToken::decode(&token).unwrap()
    // verify the token with the key
    .verify(&key.as_ref()).unwrap()

    // require typ, subject, data.
    .require(Header::TYP | Header::SUBJECT | Header::DATA | Header::BEFORE).unwrap()

    // check the token is of the given type
    .match_typ(0x01).unwrap()

    // validate before time
    .validate().unwrap()

// unseal the token
.unseal();

// get the subject field
println!("{:?}", token.subject().unwrap().as_str());

依赖项

~360–520KB
~12K SLoC