现在有GitHub上的几个片段展示了如何调用SecAsn1Decode
功能,see here for example:
typedef struct {
size_t length;
unsigned char *data;
} ASN1_Data;
typedef struct {
ASN1_Data type; // INTEGER
ASN1_Data version; // INTEGER
ASN1_Data value; // OCTET STRING
} RVNReceiptAttribute;
typedef struct {
RVNReceiptAttribute **attrs;
} RVNReceiptPayload;
// ASN.1 receipt attribute template
static const SecAsn1Template kReceiptAttributeTemplate[] = {
{ SEC_ASN1_SEQUENCE, 0, NULL, sizeof(RVNReceiptAttribute) },
{ SEC_ASN1_INTEGER, offsetof(RVNReceiptAttribute, type), NULL, 0 },
{ SEC_ASN1_INTEGER, offsetof(RVNReceiptAttribute, version), NULL, 0 },
{ SEC_ASN1_OCTET_STRING, offsetof(RVNReceiptAttribute, value), NULL, 0 },
{ 0, 0, NULL, 0 }
};
// ASN.1 receipt template set
static const SecAsn1Template kSetOfReceiptAttributeTemplate[] = {
{ SEC_ASN1_SET_OF, 0, kReceiptAttributeTemplate, sizeof(RVNReceiptPayload) },
{ 0, 0, NULL, 0 }
};
及更高版本:
NSData *payloadData = …
RVNReceiptPayload payload = { NULL };
status = SecAsn1Decode(asn1Decoder, payloadData.bytes, payloadData.length, kSetOfReceiptAttributeTemplate, &payload);
[苹果的开发技术支持建议,如果你想OpenSSL的功能] (https://lists.apple.com/archives/macnetworkprog/2015/Jun/msg00025.html),您可以构建自己的库版本并将其包含在您的应用程序中。这是我现在在自己的应用中所做的。 –
@MichaelDautermann,感谢您指出了这一点,但我已经找到了Apple的替代密码框架在“CommonCrypto/CommonCrypto.h”中打开了,您可以在其中进行各种sha/hash计算,并且为了完全结束依赖关系在SDK之外的源代码,我需要asn1解析器。如果可行的话,我想知道如何。 – Zohar81
您可以在***'/Applications/.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Security.framework/Headers/SecAsn1Templates.h ***模板常量。搜索[SecAsn1Decode site:apple.com](http://www.google.com/search?q=SecAsn1Decode+site%3Aapple.com)时有很多匹配和示例代码。你可以用***'filetype:c' ***进一步细化它。 – jww