2014-07-11 37 views
1

我下面的蘋果收據驗證編程指南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的收據。 pldpld_sz分別是數據的byteslength

這個錯誤代表什麼,它如何避免?

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,雖然)。它顯然是一個簽名,我的錯誤是(可能),我應該從其簽名的信封內獲得有效載荷...

回答

0

那麼,解決方案實際上是凝視着我進入面對:在的介紹中,驗證收據本地在蘋果的收據驗證編程指南及其圖1-1中。

最外面的部分(在圖中標記爲收據)是PKCS#7 容器,如RFC 2315所定義,與其有效載荷使用 ASN.1(抽象語法標記)進行編碼,由ITU定義-T X.690。

通過檢查簽名(清單1-4),還可以獲得對有效負載的訪問(用於清單1-5中的解析)。

相關問題