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解析, 安全编程, 密码学, 开发库, 手动系统调用, 日志审计