如何从智能卡获取universalPrincipalName对象?

如何从智能卡获取universalPrincipalName对象?,c,smartcard,pkcs#11,C,Smartcard,Pkcs#11,我正在使用pkcs11库来实现这一点,但是我找不到与我要存储在程序中的universalPrincipalName对应的属性 以下是dumpasn1的结果: SEQUENCE { OBJECT IDENTIFIER subjectAltName (52 565 529 177) OCTET STRING, encapsulates { SEQUENCE { [0] { OBJECT IDENTIFIER univ

我正在使用pkcs11库来实现这一点,但是我找不到与我要存储在程序中的universalPrincipalName对应的属性

以下是dumpasn1的结果:

SEQUENCE {
   OBJECT IDENTIFIER subjectAltName (52 565 529 177) 
   OCTET STRING, encapsulates {
     SEQUENCE {
        [0] {
          OBJECT IDENTIFIER
            universalPrincipalName (1 783 756 578 457 155 473 200 654 565)
          [0] {
            UTF8String 'thefoo.bar@foo.com'
            }
          }
我怎样才能得到那只鸟。bar@foo.com'将该字段存储在变量中

我认为我需要使用CK_属性,但似乎没有一个属性与universalPrincipalName(即“thefoo”)对应。bar@foo.com")


C#u GetAttributeValue是获取此信息的正确函数,还是有其他方法获取universalPrincipalName?

没有为UPN定义标准PKCS#11属性。您需要读取整个证书(证书对象的CKA_值属性)并自己解析。

我不知道如何解析证书。我如何判断只从相应的对象标识符读取UPN?是否有函数获取对象标识符的名称?使用CK_属性数据[2]={{{CKA_标签,NULL_PTR,0},{CKA_值,NULL_PTR,0},};我是从C_GetAttributeValue:data[1]得到的。pValue=0��0�Ġ8��[�J�所以我无法解析它来检索UPN。我需要解码pValue的结果吗?
CK_ATTRIBUTE getattribute[] = {
            {CKA_WHICH_ONE_TO_USE, NULL_PTR, 0}
    };

C_GetAttributeValue(hSession, privKeyObject, getattribute, size);