現在有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