stefanberger/go-pkcs11uri

GitHub: stefanberger/go-pkcs11uri

遵循 RFC 7512 标准的 Go 语言 PKCS#11 URI 解析与构建库,用于从 URI 字符串中提取加密令牌的模块路径、插槽和 PIN 等连接参数。

Stars: 2 | Forks: 1

# go-pkcs11uri 欢迎使用 go-pkcs11uri 库。本实现遵循 [RFC 7512](https://tools.ietf.org/html/rfc7512) 和此 [勘误](https://www.rfc-editor.org/errata/rfc7512)。 # 示例用法: 以下示例基于[此处](https://github.com/miekg/pkcs11)的库,并在 Fedora 上使用 softhsm2。 ## 示例 此示例程序扩展了[此处](https://github.com/miekg/pkcs11/blob/master/README.md#examples)找到的程序: ``` package main import ( "fmt" "os" "strconv" "github.com/miekg/pkcs11" pkcs11uri "github.com/stefanberger/go-pkcs11uri" ) func main() { if len(os.Args) < 2 { panic("Missing pkcs11 URI argument") } uristr := os.Args[1] uri, err := pkcs11uri.New() if err != nil { panic(err) } err = uri.Parse(uristr) if err != nil { panic(err) } module, err := uri.GetModule() if err != nil { panic(err) } slot, ok := uri.GetPathAttribute("slot-id", false) if !ok { panic("No slot-id in pkcs11 URI") } slotid, err := strconv.Atoi(slot) if err != nil { panic(err) } pin, err := uri.GetPIN() if err != nil { panic(err) } p := pkcs11.New(module) err = p.Initialize() if err != nil { panic(err) } defer p.Destroy() defer p.Finalize() session, err := p.OpenSession(uint(slotid), pkcs11.CKF_SERIAL_SESSION|pkcs11.CKF_RW_SESSION) if err != nil { panic(err) } defer p.CloseSession(session) err = p.Login(session, pkcs11.CKU_USER, pin) if err != nil { panic(err) } defer p.Logout(session) p.DigestInit(session, []*pkcs11.Mechanism{pkcs11.NewMechanism(pkcs11.CKM_SHA_1, nil)}) hash, err := p.Digest(session, []byte("this is a string")) if err != nil { panic(err) } for _, d := range hash { fmt.Printf("%x", d) } fmt.Println() } ``` ## 示例用法 ``` $ sudo softhsm2-util --init-token --slot 1 --label test --pin 1234 --so-pin 1234 The token has been initialized and is reassigned to slot 2053753261 $ go build ./... $ sudo ./pkcs11-example 'pkcs11:slot-id=2053753261?module-path=/usr/lib64/pkcs11/libsofthsm2.so&pin-value=1234' 517592df8fec3ad146a79a9af153db2a4d784ec5 ```
标签:EVTX分析, Golang, PKCS#11, URI解析, 安全编程, 密码学, 开发库, 手动系统调用, 日志审计