12个版本 (3个稳定版本)
1.1.0 | 2023年1月30日 |
---|---|
1.0.1 | 2023年1月30日 |
0.2.2 | 2021年6月3日 |
0.1.5 | 2021年5月28日 |
0.1.1 | 2021年4月29日 |
#810 in 编码
每月下载 177 次
在 rust-ipfs 中使用
36KB
937 行
概述
这是一个用于创建和解析X509证书的简单库。
功能特点
- 构建X509证书
- 将证书编码为DER格式
- 使用外部加密函数进行签名
- 从DER格式解码X509证书
- 使用外部加密函数进行验证
- 常用扩展的编码/解码操作
使用方法
创建并验证自签名CA证书
use simple_x509::*;
fn sign_fn(data: &Vec<u8>, sign_key: &Vec<u8>) -> Option<Vec<u8>> {
// Signing implementation
}
fn verify_fn(pub_key: &Vec<u8>, data: &Vec<u8>, sign: &Vec<u8>) -> Option<bool> {
// Verify implementation
}
fn main() {
let country = "AU";
let state = "Some-State";
let organization = "Internet Widgits Pty Ltd";
// Load Public Key
let pub_key = std::fs::read("rsa_pub.der").unwrap();
// Build X509 structure
let x = X509Builder::new(vec![0xf2, 0xf9, 0xd8, 0x03]) /* SerialNumber */
.version(2)
.issuer_prstr(vec![2, 5, 4, 6], country) /* countryName */
.issuer_utf8(vec![2, 5, 4, 8], state) /* stateOrProvinceName */
.issuer_utf8(vec![2, 5, 4, 10], organization) /* organizationName */
.subject_prstr(vec![2, 5, 4, 6], country) /* countryName */
.subject_utf8(vec![2, 5, 4, 8], state) /* stateOrProvinceName */
.subject_utf8(vec![2, 5, 4, 10], organization) /* organizationName */
.not_before_utc(1_619_014_703)
.not_after_utc(1_650_550_703)
.pub_key_der(&pub_key)
.sign_oid(vec![1, 2, 840, 113549, 1, 1, 11]) /* sha256WithRSAEncryption */
.build();
// Load Signing Key
let sign_key = std::fs::read("rsa.pkcs8").unwrap();
// Signing a certificate with external function
let cert = x.sign(sign_fn, &sign_key).unwrap());
// Encode to DER format
let der = cert.x509_enc().unwrap());
// Decode
let x2 = der.x509_dec().unwrap());
// Getting Public Key in DER format from certificate
let pub_key2 = x2.pub_key().unwrap();
// Verify signature with external function
let res = x2.verify(verify_fn, &pub_key2);
}
依赖关系
~1.6–2.3MB
~45K SLoC