簡體   English   中英

使用libtasn1的ASN.1 CHOICE解碼錯誤

[英]ASN.1 CHOICE decode error with libtasn1

我對包含CHOICE -in-a- CHOICE構造的結構類型進行編碼/解碼時遇到問題。 最簡單的示例如下。

ASN1文件:

TEST {}
DEFINITIONS IMPLICIT TAGS ::=
BEGIN

Test_ch1 ::= CHOICE {
 t1 INTEGER
}

Test_ch2 ::= CHOICE {
 t2 Test_ch1
}

END

源代碼:

#include <stdio.h>
#include <libtasn1.h>

int main()
{
 int result = 0;
 asn1_node definitions = NULL, node = NULL;
 char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
 const char * treefile = ASN1_FILE;

 char data[1024];
 int data_size = sizeof(data);

 asn1_parser2tree (treefile, &definitions, errorDescription);
 asn1_create_element (definitions, "TEST.Test_ch2", &node );
 asn1_write_value (node, "", "t2", 1);
 asn1_write_value (node, "t2", "t1", 1);
 asn1_write_value (node, "t2.t1", "1234", 0);
 asn1_der_coding (node, "", data, &data_size, errorDescription);

 asn1_create_element (definitions, "TEST.Test_ch2", &node );
 result = asn1_der_decoding (&node, data, data_size, errorDescription);
 if(result != ASN1_SUCCESS) { asn1_perror (result); printf("Decoding error = \"%s\"", errorDescription); return -1; }

 return 0;
}

編碼良好,編碼數據為: 02 02 04 d2 for t1 = 1234 但是解碼失敗。

asn1_der_decoding(...)的結果為ASN1_DER_ERROR ,errorDescription為空。

當類似Test_ch2的結構位於其他結構(SET,SEQUENCE或其他結構)內部時,例如在RFC 5280中使用GeneralName (在選擇Name情況下),確實會出現完全相同的錯誤。

為什么它拒絕自己的編碼數據? 怎么了

考慮使用lionet.info/asn1c

大家好消息! 由於他們只是在git存儲庫中修復了此問題,因此最終證明該問題是一個錯誤。 並注意:不到一年。 :)

感謝Nikos Mavrogiannopoulos。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM