如何在python中使用ePass3003令牌进行数字签名?

how to use ePass3003 token in python for digital signature?

提问人:aisha 提问时间:10/23/2023 最后编辑:aisha 更新时间:10/23/2023 访问量:36

问:

我想用Python连接到ePass3003令牌,对JSON中的字符串或数据进行签名并签名(我想签名的一切,我以JSON为例) 我知道无法提取此令牌中的私钥 但是,我有以下一段代码,但它给了我一个错误

from PyKCS11 import *


# Initialize the PKCS#11 library
lib = 'E:/lib_x64/ShuttleCsp11_3003.dll'  



pkcs11 = PyKCS11Lib()
pkcs11.load(lib)

# Open a session
slot = pkcs11.getSlotList()[0]  
session = pkcs11.openSession(slot)

try:
    # Login with PIN 
    session.login('1234')


    private_key = session.findObjects([(CKA.CLASS, CKO.PRIVATE_KEY), (CKA.LABEL, 'PrivateKeyLabel')])[0]

    # Data to be signed
    data_to_sign = b'Your data to be signed'

    # Sign the data
    signature = session.sign(private_key, data_to_sign, Mechanism(CKM.RSA_PKCS))

    print("signature==> ",signature)

    # 'signature' now contains the RSA-256 signature of the data
except PyKCS11Error as e:
    print(f"PyKCS11 error: {e}")
finally:
    session.logout()
    session.closeSession()

错误:private_key = session.findObjects([(CKA.CLASS, CKO.PRIVATE_KEY), (CKA.LABEL, 'PrivateKeyLabel')])[0]

AttributeError: 'dict' object has no attribute 'CLASS'

还有一件事我不知道该放什么来代替 PrivateKeyLabel,我不知道在哪里可以找到这个标签 我在 ePass3003 应用程序下面的图片中找不到任何称为私钥标签的东西

如果有人能帮助我,我将不胜感激

Python RSA 数字 签名 PKCS#11

评论


答:

1赞 Daviid 10/23/2023 #1

你是从 ChatGPT 那里得到的吗?

改变

private_key = session.findObjects([(CKA.CLASS, CKO.PRIVATE_KEY), (CKA.LABEL, 'PrivateKeyLabel')])[0]

private_key = session.findObjects([(CKA_CLASS, CKO_PRIVATE_KEY), (CKA_LABEL, 'PrivateKeyLabel')])[0]

没有 或 对象具有属性,它们是 pkcs11.h 中定义的常量CKACKO

还要检查此答案

评论

0赞 aisha 10/25/2023
是的,我从 ChatGPT 那里得到了这个,重点是我想使用此代码创建一个 JWT 令牌,但是当我给出标头和有效负载值以使用这些代码进行签名时,我得到CKR_DATA_LEN_RANGE error (0x00000021)
0赞 aisha 10/25/2023
我不知道如何解决这个问题