【问题标题】:Error "Expected: [UNIVERSAL 17], expectation failed (tn=0, tm=0)" while parsing ASN.1 application receipt解析 ASN.1 申请收据时出现错误“预期:[UNIVERSAL 17],预期失败 (tn=0,tm=0)”
【发布时间】:2014-07-11 10:58:44
【问题描述】:

我是 currently implementing 遵循 Apple 的收据验证编程指南的本地收据验证。我可以获得测试收据,但是当我尝试按如下方式解析它时(即按照指南清单 1-5 中的建议)

rval = asn_DEF_Payload.ber_decoder(NULL, &asn_DEF_Payload, (void **)&payload, pld, pld_sz, 0);

我收到以下错误(ASN_DEBUG() 的输出)

Expected: [UNIVERSAL 17], expectation failed (tn=0, tm=0)

asn_DEF_Payload(和其他 C 代码)已由 ans1c(ASN.1 编译器,v0.9.24)生成,并使用指南的清单 1-1 作为输入。我首先从NSBundle appStoreReceiptURL 指示的URL 中阅读了带有NSData dataWithContentsOfURL 的收据。 pldpld_sz分别是数据的byteslength

此错误表示什么以及如何避免?

更新 当解析器在测试配方开始时需要标签 17(SET 和 SET OF)时,它看起来好像看到了标签 16(SEQUENCE 和 SEQUENCE OF)。清单 1-1 中 Payload 的定义确实是指 SET。

更新 我已经管理了asn1c 附带的转换器,如下所示。

export CFLAGS=-DPDU=Payload
make -f Makefile.am.sample
./progname -h

我还设法将收据从物理 iOS 设备复制到 OS X,例如 so。当我现在尝试使用./progname -d -iber -otext receipt 转储收据时,我得到以下输出:

AD: Processing receipt
AD: Decoding 4704 bytes
AD: decode(0) consumed 0+0b (4704), code 2
AD: Clean up partially decoded structure
AD: ofp 1, no=0, oo=0, dbl=0
receipt.ber: Decode failed past byte 0: Input processing error

更新嗯,this 在线 ASN.1 解码器可以很好地转储我的测试配方。 (不过,它以 SEQUENCE 开头。)这显然是一个签名,我的错误是(可能是)我应该从签名的信封中获取有效负载......

【问题讨论】:

    标签: ios7 in-app-purchase asn.1 receipt receipt-validation


    【解决方案1】:

    好吧,这个解决方案实际上让我眼前一亮:无论是在 Apple 的 Receipt Validation Programming Guide 中对Validating Receipts Locally 的介绍中,还是在其图 1-1 中.

    最外面的部分(图中标记为 Receipt)是一个 PKCS #7 RFC 2315 定义的容器,其有效负载使用编码 ASN.1(Abstract Syntax Notation One),由 ITU-T X.690 定义。

    通过检查签名(清单 1-4),还可以获得对有效负载的访问权(用于在清单 1-5 中进行解析)。

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 2021-03-25
      • 2019-08-21
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多