如何使用SEC_ASN1_SAVE?

时间:2017-06-10 07:16:54

标签: c++ xcode macos

我需要从SEQUENCE获取完整的DER编码项。但我有Segmentation fault: 11。有什么问题?

如果我对SEC_ASN1_SAVE发表评论,那么version就行了,但我需要derVersion

typedef struct {
    SecAsn1Item derVersion;
    SecAsn1Item version;
} ASN1_TEST;

const SecAsn1Template kTestTemplate[] = {
    {SEC_ASN1_SEQUENCE, 0, NULL, sizeof(ASN1_TEST)},
    {SEC_ASN1_SAVE, offsetof(ASN1_TEST, derVersion)},
    {SEC_ASN1_INTEGER, offsetof(ASN1_TEST, version)},
    {0}
};

void ParseASN1(){
    const char der[] = "\x30\x05\x02\x03\x01\x00\x01";

    SecAsn1CoderRef coder = NULL;
    OSStatus status = SecAsn1CoderCreate(&coder);
    if (status) {
        THROW_EXCEPTION("SecAsn1CoderCreate");
    }

    ASN1_TEST test;
    status = SecAsn1Decode(
                  coder,
                  (CK_BYTE_PTR)der, 7,
                  kTestTemplate,
                  &test
                  );
    if (status) {
        SecAsn1CoderRelease(coder);

        THROW_EXCEPTION("SecAsn1Decode");
    }

    fprintf(stdout, "Test.version: %lu\n", test.version.Length);
    fprintf(stdout, "Test.derVersion: %lu\n", test.derVersion.Length);

    SecAsn1CoderRelease(coder);
}

以下是我找到的代码的一些链接。

NSS_TBSCertificate structure

kSecAsn1TBSCertificateTemplate template

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我必须在memset(&test, 0, sizeof(ASN1_TEST));声明

之后添加test