Click here to Skip to main content
15,883,914 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
In the example (openssl/crypto/pkcs7/example.c)
There are add_signed_string and add_signed_seq2string functions.
On the basis of your library do such functions:

C++
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);
	}


C++
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);
	}


How can I add sequences to make it like this:

C++
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.


What I have tried:

I tried to change the code, but the sequences are not added correctly.
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900