pkcs11
1.0.0
นี่คือการใช้งาน GO ของ PKCS#11 API มันห่อหุ้มห้องสมุดอย่างใกล้ชิด แต่ใช้สำนวนไปที่ซึ่งมันสมเหตุสมผล มันได้รับการทดสอบกับ Softhsm
ทำให้มันใช้ไฟล์กำหนดค่าที่กำหนดเอง export SOFTHSM_CONF=$PWD/softhsm.conf
จากนั้นใช้ softhsm เพื่อเริ่มต้น
softhsm --init-token --slot 0 --label test --pin 1234
จากนั้นใช้ libsofthsm2.so เป็นโมดูล PKCS11:
p := pkcs11 . New ( "/usr/lib/softhsm/libsofthsm2.so" )โปรแกรมโครงกระดูกจะมีลักษณะเช่นนี้ (ใช่, PKCS#11 เป็น verbose):
p := pkcs11 . New ( "/usr/lib/softhsm/libsofthsm2.so" )
err := p . Initialize ()
if err != nil {
panic ( err )
}
defer p . Destroy ()
defer p . Finalize ()
slots , err := p . GetSlotList ( true )
if err != nil {
panic ( err )
}
session , err := p . OpenSession ( slots [ 0 ], pkcs11 . CKF_SERIAL_SESSION | pkcs11 . CKF_RW_SESSION )
if err != nil {
panic ( err )
}
defer p . CloseSession ( session )
err = p . Login ( session , pkcs11 . CKU_USER , "1234" )
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 ()ตัวอย่างเพิ่มเติมรวมอยู่ในการทดสอบ
ในการเปิดเผยปุ่ม PKCS#11 โดยใช้อินเทอร์เฟซ crypto.signer โปรดดู github.com/thalesignite/crypto11