我下面的蘋果收據驗證編程指南currently implementing當地的收據驗證。我可以得到試驗收據但是當我嘗試如下解析它錯誤 「預期:[UNIVERSAL 17],期望失敗(TN = 0,TM = 0)」,而解析ASN.1申請回執
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)
(即如清單引導1-5中建議的)
asn_DEF_Payload
(和其他C代碼)已由ans1c
(ASN.1編譯器,v0.9.24)生成,其中包含本指南的清單1-1作爲輸入。我首先從NSBundle appStoreReceiptURL
指示的URL中讀取了NSData dataWithContentsOfURL
的收據。 pld
和pld_sz
分別是數據的bytes
和length
。
這個錯誤代表什麼,它如何避免?
UPDATE它看起來好像分析器在測試配方開始時看到標籤17(SET和SET OF)時的標籤16(SEQUENCE和SEQUENCE OF)。清單1-1中的Payload的定義確實指的是SET。
UPDATE我管理了如下所示的帶有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
UPDATE嗯,this在線ASN.1解碼器可以轉儲我的測試配方就好了。 (它始於一個SEQUENCE,雖然)。它顯然是一個簽名,我的錯誤是(可能),我應該從其簽名的信封內獲得有效載荷...