Index: openssl/crypto/pkcs7/example.c |
diff --git a/openssl/crypto/pkcs7/example.c b/openssl/crypto/pkcs7/example.c |
deleted file mode 100644 |
index 2953d04b5c905e54a37c9dd7e0c1308be80b3852..0000000000000000000000000000000000000000 |
--- a/openssl/crypto/pkcs7/example.c |
+++ /dev/null |
@@ -1,329 +0,0 @@ |
-#include <stdio.h> |
-#include <stdlib.h> |
-#include <string.h> |
-#include <openssl/pkcs7.h> |
-#include <openssl/asn1_mac.h> |
-#include <openssl/x509.h> |
- |
-int add_signed_time(PKCS7_SIGNER_INFO *si) |
- { |
- ASN1_UTCTIME *sign_time; |
- |
- /* The last parameter is the amount to add/subtract from the current |
- * time (in seconds) */ |
- sign_time=X509_gmtime_adj(NULL,0); |
- PKCS7_add_signed_attribute(si,NID_pkcs9_signingTime, |
- V_ASN1_UTCTIME,(char *)sign_time); |
- return(1); |
- } |
- |
-ASN1_UTCTIME *get_signed_time(PKCS7_SIGNER_INFO *si) |
- { |
- ASN1_TYPE *so; |
- |
- so=PKCS7_get_signed_attribute(si,NID_pkcs9_signingTime); |
- if (so->type == V_ASN1_UTCTIME) |
- return so->value.utctime; |
- return NULL; |
- } |
- |
-static int signed_string_nid= -1; |
- |
-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 get_signed_string(PKCS7_SIGNER_INFO *si, char *buf, int len) |
- { |
- ASN1_TYPE *so; |
- ASN1_OCTET_STRING *os; |
- int i; |
- |
- if (signed_string_nid == -1) |
- signed_string_nid= |
- OBJ_create("1.2.3.4.5","OID_example","Our example OID"); |
- /* To retrieve */ |
- so=PKCS7_get_signed_attribute(si,signed_string_nid); |
- if (so != NULL) |
- { |
- if (so->type == V_ASN1_OCTET_STRING) |
- { |
- os=so->value.octet_string; |
- i=os->length; |
- if ((i+1) > len) |
- i=len-1; |
- memcpy(buf,os->data,i); |
- return(i); |
- } |
- } |
- return(0); |
- } |
- |
-static int signed_seq2string_nid= -1; |
-/* ########################################### */ |
-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); |
- } |
- |
-/* For this case, I will malloc the return strings */ |
-int get_signed_seq2string(PKCS7_SIGNER_INFO *si, char **str1, char **str2) |
- { |
- ASN1_TYPE *so; |
- |
- if (signed_seq2string_nid == -1) |
- signed_seq2string_nid= |
- OBJ_create("1.9.9999","OID_example","Our example OID"); |
- /* To retrieve */ |
- so=PKCS7_get_signed_attribute(si,signed_seq2string_nid); |
- if (so && (so->type == V_ASN1_SEQUENCE)) |
- { |
- ASN1_const_CTX c; |
- ASN1_STRING *s; |
- long length; |
- ASN1_OCTET_STRING *os1,*os2; |
- |
- s=so->value.sequence; |
- c.p=ASN1_STRING_data(s); |
- c.max=c.p+ASN1_STRING_length(s); |
- if (!asn1_GetSequence(&c,&length)) goto err; |
- /* Length is the length of the seqence */ |
- |
- c.q=c.p; |
- if ((os1=d2i_ASN1_OCTET_STRING(NULL,&c.p,c.slen)) == NULL) |
- goto err; |
- c.slen-=(c.p-c.q); |
- |
- c.q=c.p; |
- if ((os2=d2i_ASN1_OCTET_STRING(NULL,&c.p,c.slen)) == NULL) |
- goto err; |
- c.slen-=(c.p-c.q); |
- |
- if (!asn1_const_Finish(&c)) goto err; |
- *str1=malloc(os1->length+1); |
- *str2=malloc(os2->length+1); |
- memcpy(*str1,os1->data,os1->length); |
- memcpy(*str2,os2->data,os2->length); |
- (*str1)[os1->length]='\0'; |
- (*str2)[os2->length]='\0'; |
- ASN1_OCTET_STRING_free(os1); |
- ASN1_OCTET_STRING_free(os2); |
- return(1); |
- } |
-err: |
- return(0); |
- } |
- |
- |
-/* ####################################### |
- * THE OTHER WAY TO DO THINGS |
- * ####################################### |
- */ |
-X509_ATTRIBUTE *create_time(void) |
- { |
- ASN1_UTCTIME *sign_time; |
- X509_ATTRIBUTE *ret; |
- |
- /* The last parameter is the amount to add/subtract from the current |
- * time (in seconds) */ |
- sign_time=X509_gmtime_adj(NULL,0); |
- ret=X509_ATTRIBUTE_create(NID_pkcs9_signingTime, |
- V_ASN1_UTCTIME,(char *)sign_time); |
- return(ret); |
- } |
- |
-ASN1_UTCTIME *sk_get_time(STACK_OF(X509_ATTRIBUTE) *sk) |
- { |
- ASN1_TYPE *so; |
- PKCS7_SIGNER_INFO si; |
- |
- si.auth_attr=sk; |
- so=PKCS7_get_signed_attribute(&si,NID_pkcs9_signingTime); |
- if (so->type == V_ASN1_UTCTIME) |
- return so->value.utctime; |
- return NULL; |
- } |
- |
-X509_ATTRIBUTE *create_string(char *str) |
- { |
- ASN1_OCTET_STRING *os; |
- X509_ATTRIBUTE *ret; |
- |
- /* 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 */ |
- ret=X509_ATTRIBUTE_create(signed_string_nid, |
- V_ASN1_OCTET_STRING,(char *)os); |
- return(ret); |
- } |
- |
-int sk_get_string(STACK_OF(X509_ATTRIBUTE) *sk, char *buf, int len) |
- { |
- ASN1_TYPE *so; |
- ASN1_OCTET_STRING *os; |
- int i; |
- PKCS7_SIGNER_INFO si; |
- |
- si.auth_attr=sk; |
- |
- if (signed_string_nid == -1) |
- signed_string_nid= |
- OBJ_create("1.2.3.4.5","OID_example","Our example OID"); |
- /* To retrieve */ |
- so=PKCS7_get_signed_attribute(&si,signed_string_nid); |
- if (so != NULL) |
- { |
- if (so->type == V_ASN1_OCTET_STRING) |
- { |
- os=so->value.octet_string; |
- i=os->length; |
- if ((i+1) > len) |
- i=len-1; |
- memcpy(buf,os->data,i); |
- return(i); |
- } |
- } |
- return(0); |
- } |
- |
-X509_ATTRIBUTE *add_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; |
- X509_ATTRIBUTE *ret; |
- 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); |
- |
- ret=X509_ATTRIBUTE_create(signed_seq2string_nid, |
- V_ASN1_SEQUENCE,(char *)seq); |
- return(ret); |
- } |
- |
-/* For this case, I will malloc the return strings */ |
-int sk_get_seq2string(STACK_OF(X509_ATTRIBUTE) *sk, char **str1, char **str2) |
- { |
- ASN1_TYPE *so; |
- PKCS7_SIGNER_INFO si; |
- |
- if (signed_seq2string_nid == -1) |
- signed_seq2string_nid= |
- OBJ_create("1.9.9999","OID_example","Our example OID"); |
- |
- si.auth_attr=sk; |
- /* To retrieve */ |
- so=PKCS7_get_signed_attribute(&si,signed_seq2string_nid); |
- if (so->type == V_ASN1_SEQUENCE) |
- { |
- ASN1_const_CTX c; |
- ASN1_STRING *s; |
- long length; |
- ASN1_OCTET_STRING *os1,*os2; |
- |
- s=so->value.sequence; |
- c.p=ASN1_STRING_data(s); |
- c.max=c.p+ASN1_STRING_length(s); |
- if (!asn1_GetSequence(&c,&length)) goto err; |
- /* Length is the length of the seqence */ |
- |
- c.q=c.p; |
- if ((os1=d2i_ASN1_OCTET_STRING(NULL,&c.p,c.slen)) == NULL) |
- goto err; |
- c.slen-=(c.p-c.q); |
- |
- c.q=c.p; |
- if ((os2=d2i_ASN1_OCTET_STRING(NULL,&c.p,c.slen)) == NULL) |
- goto err; |
- c.slen-=(c.p-c.q); |
- |
- if (!asn1_const_Finish(&c)) goto err; |
- *str1=malloc(os1->length+1); |
- *str2=malloc(os2->length+1); |
- memcpy(*str1,os1->data,os1->length); |
- memcpy(*str2,os2->data,os2->length); |
- (*str1)[os1->length]='\0'; |
- (*str2)[os2->length]='\0'; |
- ASN1_OCTET_STRING_free(os1); |
- ASN1_OCTET_STRING_free(os2); |
- return(1); |
- } |
-err: |
- return(0); |
- } |
- |
- |