#error #gmssl #openssl #api-bindings #message #private-key #io-error

gmssl-errors

为gmssl crate提供自定义错误库支持

1个不稳定版本

0.1.0 2023年4月16日

#57#io-error

MIT/Apache

370KB
10K SLoC

rust-gmssl

为Rust编程语言提供的GmSSL绑定。

文档.

发布支持

当前支持的gmssl版本为0.1,gmssl-sys版本为0.1。

构建 & 测试

仅支持GmSSL 3.1.0+,编译前必须设置环境变量DEP_OPENSSL_VERSION_NUMBER。

export DEP_OPENSSL_VERSION_NUMBER=806354944

cargo build

cargo test -- --nocapture

贡献

除非你明确说明,否则任何有意提交以包含在作品中的贡献,根据Apache-2.0许可协议定义,均应同时以Apache License,版本2.0和MIT许可协议的双重许可方式提供,不附加任何额外条款或条件。


lib.rs:

为openssl crate提供自定义错误库支持。

OpenSSL允许第三方库集成其错误API。此crate提供了一个安全的接口。

示例

use gmssl_errors::{gmssl_errors, put_error};
use gmssl::error::Error;

// Errors are organized at the top level into "libraries". The
// gmssl_errors! macro can define these.
//
// Libraries contain a set of functions and reasons. The library itself,
// its functions, and its definitions all all have an associated message
// string. This string is what's shown in OpenSSL errors.
//
// The macro creates a type for each library with associated constants for
// its functions and reasons.
gmssl_errors! {
    pub library MyLib("my cool library") {
        functions {
            FIND_PRIVATE_KEY("find_private_key");
        }

        reasons {
            IO_ERROR("IO error");
            BAD_PASSWORD("invalid private key password");
        }
    }
}

// The put_error! macro pushes errors onto the OpenSSL error stack.
put_error!(MyLib::FIND_PRIVATE_KEY, MyLib::BAD_PASSWORD);

// Prints `error:80001002:my cool library:find_private_key:invalid private key password:src/lib.rs:27:`
println!("{}", Error::get().unwrap());

// You can also optionally attach an extra string of context using the
// standard Rust format syntax.
let tries = 2;
put_error!(MyLib::FIND_PRIVATE_KEY, MyLib::IO_ERROR, "tried {} times", tries);

// Prints `error:80001001:my cool library:find_private_key:IO error:src/lib.rs:34:tried 2 times`
println!("{}", Error::get().unwrap());

依赖关系

~235KB