realy1 Ответов: 0

Как я могу добавить новые последовательности в ASN1?


В примере (в OpenSSL/крипто/pkcs7 в/пример.с)
Существуют функции add_signed_string и add_signed_seq2string.
На базе вашей библиотеки выполняйте такие функции:

void add_signed_string(PKCS7_SIGNER_INFO *si, char *str)
	{
	ASN1_OCTET_STRING *os;

	/* To a an object of OID 1.2.3.4.5, which is an octet string */
	if (signed_string_nid == -1)
		signed_string_nid=
			OBJ_create("1.2.3.4.5","OID_example","Our example OID");
	os=ASN1_OCTET_STRING_new();
	ASN1_OCTET_STRING_set(os,(unsigned char*)str,strlen(str));
	/* When we add, we do not free */
	PKCS7_add_signed_attribute(si,signed_string_nid,
		V_ASN1_OCTET_STRING,(char *)os);
	}


int add_signed_seq2string(PKCS7_SIGNER_INFO *si, char *str1, char *str2)
	{
	/* To add an object of OID 1.9.999, which is a sequence containing
	 * 2 octet strings */
	unsigned char *p;
	ASN1_OCTET_STRING *os1,*os2;
	ASN1_STRING *seq;
	unsigned char *data;
	int i,total;

	if (signed_seq2string_nid == -1)
		signed_seq2string_nid=
			OBJ_create("1.9.9999","OID_example","Our example OID");

	os1=ASN1_OCTET_STRING_new();
	os2=ASN1_OCTET_STRING_new();
	ASN1_OCTET_STRING_set(os1,(unsigned char*)str1,strlen(str1));
	ASN1_OCTET_STRING_set(os2,(unsigned char*)str1,strlen(str1));
	i =i2d_ASN1_OCTET_STRING(os1,NULL);
	i+=i2d_ASN1_OCTET_STRING(os2,NULL);
	total=ASN1_object_size(1,i,V_ASN1_SEQUENCE);

	data=malloc(total);
	p=data;
	ASN1_put_object(&p,1,i,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);
	i2d_ASN1_OCTET_STRING(os1,&p);
	i2d_ASN1_OCTET_STRING(os2,&p);

	seq=ASN1_STRING_new();
	ASN1_STRING_set(seq,data,total);
	free(data);
	ASN1_OCTET_STRING_free(os1);
	ASN1_OCTET_STRING_free(os2);

	PKCS7_add_signed_attribute(si,signed_seq2string_nid,
		V_ASN1_SEQUENCE,(char *)seq);
	return(1);
	}


Как я могу добавить последовательности, чтобы сделать это так:

SEQUENCE (2 elem)
              OBJECT IDENTIFIER 1.3.6.1.4.1.6801.2.8
              SET (1 elem)
                SEQUENCE (10 elem)
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.3 commonName (X.520 DN component)
                      UTF8String TEST TEST 
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.4 surname (X.520 DN component)
                      UTF8String TEST
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.5 serialNumber (X.520 DN component)
                      PrintableString IIN123128350123
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.6 countryName (X.520 DN component)
                      PrintableString KZ
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.7 localityName (X.520 DN component)
                      UTF8String АСТАНА
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.8 stateOrProvinceName (X.520 DN component)
                      UTF8String АСТАНА
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.10 organizationName (X.520 DN component)
                      UTF8String ТОВАРИЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "123"
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.11 organizationalUnitName (X.520 DN component)
                      UTF8String BIN123840007123
                  SET (1 elem)
                    SEQUENCE (2 elem)
                      OBJECT IDENTIFIER 2.5.4.42 givenName (X.520 DN component)
                      UTF8String TEST
                  SET (1 elem)
                    SEQUENCE (1 elem)
                      OBJECT IDENTIFIER 1.2.840.113549.1.9.1 emailAddress (PKCS #9.


Что я уже пробовал:

Я попытался изменить код, но последовательности не были добавлены правильно.

0 Ответов