summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/evp_asn1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/evp_asn1.c')
-rw-r--r--src/lib/libcrypto/asn1/evp_asn1.c62
1 files changed, 27 insertions, 35 deletions
diff --git a/src/lib/libcrypto/asn1/evp_asn1.c b/src/lib/libcrypto/asn1/evp_asn1.c
index ebe34a3362..3506005a71 100644
--- a/src/lib/libcrypto/asn1/evp_asn1.c
+++ b/src/lib/libcrypto/asn1/evp_asn1.c
@@ -58,26 +58,22 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include "cryptlib.h" 60#include "cryptlib.h"
61#include "asn1.h" 61#include <openssl/asn1.h>
62#include "asn1_mac.h" 62#include <openssl/asn1_mac.h>
63 63
64int ASN1_TYPE_set_octetstring(a,data,len) 64int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len)
65ASN1_TYPE *a;
66unsigned char *data;
67int len;
68 { 65 {
69 ASN1_STRING *os; 66 ASN1_STRING *os;
70 67
71 if ((os=ASN1_OCTET_STRING_new()) == NULL) return(0); 68 if ((os=M_ASN1_OCTET_STRING_new()) == NULL) return(0);
72 if (!ASN1_OCTET_STRING_set(os,data,len)) return(0); 69 if (!M_ASN1_OCTET_STRING_set(os,data,len)) return(0);
73 ASN1_TYPE_set(a,V_ASN1_OCTET_STRING,(char *)os); 70 ASN1_TYPE_set(a,V_ASN1_OCTET_STRING,os);
74 return(1); 71 return(1);
75 } 72 }
76 73
77int ASN1_TYPE_get_octetstring(a,data,max_len) 74/* int max_len: for returned value */
78ASN1_TYPE *a; 75int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data,
79unsigned char *data; 76 int max_len)
80int max_len; /* for returned value */
81 { 77 {
82 int ret,num; 78 int ret,num;
83 unsigned char *p; 79 unsigned char *p;
@@ -87,8 +83,8 @@ int max_len; /* for returned value */
87 ASN1err(ASN1_F_ASN1_TYPE_GET_OCTETSTRING,ASN1_R_DATA_IS_WRONG); 83 ASN1err(ASN1_F_ASN1_TYPE_GET_OCTETSTRING,ASN1_R_DATA_IS_WRONG);
88 return(-1); 84 return(-1);
89 } 85 }
90 p=ASN1_STRING_data(a->value.octet_string); 86 p=M_ASN1_STRING_data(a->value.octet_string);
91 ret=ASN1_STRING_length(a->value.octet_string); 87 ret=M_ASN1_STRING_length(a->value.octet_string);
92 if (ret < max_len) 88 if (ret < max_len)
93 num=ret; 89 num=ret;
94 else 90 else
@@ -97,11 +93,8 @@ int max_len; /* for returned value */
97 return(ret); 93 return(ret);
98 } 94 }
99 95
100int ASN1_TYPE_set_int_octetstring(a,num,data,len) 96int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, unsigned char *data,
101ASN1_TYPE *a; 97 int len)
102long num;
103unsigned char *data;
104int len;
105 { 98 {
106 int n,size; 99 int n,size;
107 ASN1_OCTET_STRING os,*osp; 100 ASN1_OCTET_STRING os,*osp;
@@ -124,23 +117,22 @@ int len;
124 /* Grow the 'string' */ 117 /* Grow the 'string' */
125 ASN1_STRING_set(osp,NULL,size); 118 ASN1_STRING_set(osp,NULL,size);
126 119
127 ASN1_STRING_length(osp)=size; 120 M_ASN1_STRING_length_set(osp, size);
128 p=ASN1_STRING_data(osp); 121 p=M_ASN1_STRING_data(osp);
129 122
130 ASN1_put_object(&p,1,n,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); 123 ASN1_put_object(&p,1,n,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);
131 i2d_ASN1_INTEGER(&in,&p); 124 i2d_ASN1_INTEGER(&in,&p);
132 M_i2d_ASN1_OCTET_STRING(&os,&p); 125 M_i2d_ASN1_OCTET_STRING(&os,&p);
133 126
134 ASN1_TYPE_set(a,V_ASN1_SEQUENCE,(char *)osp); 127 ASN1_TYPE_set(a,V_ASN1_SEQUENCE,osp);
135 return(1); 128 return(1);
136 } 129 }
137 130
138/* we return the actual length... */ 131/* we return the actual length..., num may be missing, in which
139int ASN1_TYPE_get_int_octetstring(a,num,data,max_len) 132 * case, set it to zero */
140ASN1_TYPE *a; 133/* int max_len: for returned value */
141long *num; 134int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num, unsigned char *data,
142unsigned char *data; 135 int max_len)
143int max_len; /* for returned value */
144 { 136 {
145 int ret= -1,n; 137 int ret= -1,n;
146 ASN1_INTEGER *ai=NULL; 138 ASN1_INTEGER *ai=NULL;
@@ -153,8 +145,8 @@ int max_len; /* for returned value */
153 { 145 {
154 goto err; 146 goto err;
155 } 147 }
156 p=ASN1_STRING_data(a->value.sequence); 148 p=M_ASN1_STRING_data(a->value.sequence);
157 length=ASN1_STRING_length(a->value.sequence); 149 length=M_ASN1_STRING_length(a->value.sequence);
158 150
159 c.pp= &p; 151 c.pp= &p;
160 c.p=p; 152 c.p=p;
@@ -173,21 +165,21 @@ int max_len; /* for returned value */
173 if (num != NULL) 165 if (num != NULL)
174 *num=ASN1_INTEGER_get(ai); 166 *num=ASN1_INTEGER_get(ai);
175 167
176 ret=ASN1_STRING_length(os); 168 ret=M_ASN1_STRING_length(os);
177 if (max_len > ret) 169 if (max_len > ret)
178 n=ret; 170 n=ret;
179 else 171 else
180 n=max_len; 172 n=max_len;
181 173
182 if (data != NULL) 174 if (data != NULL)
183 memcpy(data,ASN1_STRING_data(os),n); 175 memcpy(data,M_ASN1_STRING_data(os),n);
184 if (0) 176 if (0)
185 { 177 {
186err: 178err:
187 ASN1err(ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING,ASN1_R_DATA_IS_WRONG); 179 ASN1err(ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING,ASN1_R_DATA_IS_WRONG);
188 } 180 }
189 if (os != NULL) ASN1_OCTET_STRING_free(os); 181 if (os != NULL) M_ASN1_OCTET_STRING_free(os);
190 if (ai != NULL) ASN1_INTEGER_free(ai); 182 if (ai != NULL) M_ASN1_INTEGER_free(ai);
191 return(ret); 183 return(ret);
192 } 184 }
193 185