Как я могу добавить новые последовательности в 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.
Что я уже пробовал:
Я попытался изменить код, но последовательности не были добавлены правильно.