diff options
Diffstat (limited to 'src/lib/libssl/src/crypto/evp/bio_md.c')
-rw-r--r-- | src/lib/libssl/src/crypto/evp/bio_md.c | 101 |
1 files changed, 46 insertions, 55 deletions
diff --git a/src/lib/libssl/src/crypto/evp/bio_md.c b/src/lib/libssl/src/crypto/evp/bio_md.c index fa5fdc055b..c632dfb202 100644 --- a/src/lib/libssl/src/crypto/evp/bio_md.c +++ b/src/lib/libssl/src/crypto/evp/bio_md.c | |||
@@ -59,29 +59,20 @@ | |||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include <errno.h> | 60 | #include <errno.h> |
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include "buffer.h" | 62 | #include <openssl/buffer.h> |
63 | #include "evp.h" | 63 | #include <openssl/evp.h> |
64 | 64 | ||
65 | /* BIO_put and BIO_get both add to the digest, | 65 | /* BIO_put and BIO_get both add to the digest, |
66 | * BIO_gets returns the digest */ | 66 | * BIO_gets returns the digest */ |
67 | 67 | ||
68 | #ifndef NOPROTO | 68 | static int md_write(BIO *h, char const *buf, int num); |
69 | static int md_write(BIO *h,char *buf,int num); | 69 | static int md_read(BIO *h, char *buf, int size); |
70 | static int md_read(BIO *h,char *buf,int size); | 70 | /*static int md_puts(BIO *h, const char *str); */ |
71 | /*static int md_puts(BIO *h,char *str); */ | 71 | static int md_gets(BIO *h, char *str, int size); |
72 | static int md_gets(BIO *h,char *str,int size); | 72 | static long md_ctrl(BIO *h, int cmd, long arg1, void *arg2); |
73 | static long md_ctrl(BIO *h,int cmd,long arg1,char *arg2); | ||
74 | static int md_new(BIO *h); | 73 | static int md_new(BIO *h); |
75 | static int md_free(BIO *data); | 74 | static int md_free(BIO *data); |
76 | #else | 75 | static long md_callback_ctrl(BIO *h,int cmd,bio_info_cb *fp); |
77 | static int md_write(); | ||
78 | static int md_read(); | ||
79 | /*static int md_puts(); */ | ||
80 | static int md_gets(); | ||
81 | static long md_ctrl(); | ||
82 | static int md_new(); | ||
83 | static int md_free(); | ||
84 | #endif | ||
85 | 76 | ||
86 | static BIO_METHOD methods_md= | 77 | static BIO_METHOD methods_md= |
87 | { | 78 | { |
@@ -93,19 +84,19 @@ static BIO_METHOD methods_md= | |||
93 | md_ctrl, | 84 | md_ctrl, |
94 | md_new, | 85 | md_new, |
95 | md_free, | 86 | md_free, |
87 | md_callback_ctrl, | ||
96 | }; | 88 | }; |
97 | 89 | ||
98 | BIO_METHOD *BIO_f_md() | 90 | BIO_METHOD *BIO_f_md(void) |
99 | { | 91 | { |
100 | return(&methods_md); | 92 | return(&methods_md); |
101 | } | 93 | } |
102 | 94 | ||
103 | static int md_new(bi) | 95 | static int md_new(BIO *bi) |
104 | BIO *bi; | ||
105 | { | 96 | { |
106 | EVP_MD_CTX *ctx; | 97 | EVP_MD_CTX *ctx; |
107 | 98 | ||
108 | ctx=(EVP_MD_CTX *)Malloc(sizeof(EVP_MD_CTX)); | 99 | ctx=EVP_MD_CTX_create(); |
109 | if (ctx == NULL) return(0); | 100 | if (ctx == NULL) return(0); |
110 | 101 | ||
111 | bi->init=0; | 102 | bi->init=0; |
@@ -114,27 +105,23 @@ BIO *bi; | |||
114 | return(1); | 105 | return(1); |
115 | } | 106 | } |
116 | 107 | ||
117 | static int md_free(a) | 108 | static int md_free(BIO *a) |
118 | BIO *a; | ||
119 | { | 109 | { |
120 | if (a == NULL) return(0); | 110 | if (a == NULL) return(0); |
121 | Free(a->ptr); | 111 | EVP_MD_CTX_destroy(a->ptr); |
122 | a->ptr=NULL; | 112 | a->ptr=NULL; |
123 | a->init=0; | 113 | a->init=0; |
124 | a->flags=0; | 114 | a->flags=0; |
125 | return(1); | 115 | return(1); |
126 | } | 116 | } |
127 | 117 | ||
128 | static int md_read(b,out,outl) | 118 | static int md_read(BIO *b, char *out, int outl) |
129 | BIO *b; | ||
130 | char *out; | ||
131 | int outl; | ||
132 | { | 119 | { |
133 | int ret=0; | 120 | int ret=0; |
134 | EVP_MD_CTX *ctx; | 121 | EVP_MD_CTX *ctx; |
135 | 122 | ||
136 | if (out == NULL) return(0); | 123 | if (out == NULL) return(0); |
137 | ctx=(EVP_MD_CTX *)b->ptr; | 124 | ctx=b->ptr; |
138 | 125 | ||
139 | if ((ctx == NULL) || (b->next_bio == NULL)) return(0); | 126 | if ((ctx == NULL) || (b->next_bio == NULL)) return(0); |
140 | 127 | ||
@@ -152,16 +139,13 @@ int outl; | |||
152 | return(ret); | 139 | return(ret); |
153 | } | 140 | } |
154 | 141 | ||
155 | static int md_write(b,in,inl) | 142 | static int md_write(BIO *b, const char *in, int inl) |
156 | BIO *b; | ||
157 | char *in; | ||
158 | int inl; | ||
159 | { | 143 | { |
160 | int ret=0; | 144 | int ret=0; |
161 | EVP_MD_CTX *ctx; | 145 | EVP_MD_CTX *ctx; |
162 | 146 | ||
163 | if ((in == NULL) || (inl <= 0)) return(0); | 147 | if ((in == NULL) || (inl <= 0)) return(0); |
164 | ctx=(EVP_MD_CTX *)b->ptr; | 148 | ctx=b->ptr; |
165 | 149 | ||
166 | if ((ctx != NULL) && (b->next_bio != NULL)) | 150 | if ((ctx != NULL) && (b->next_bio != NULL)) |
167 | ret=BIO_write(b->next_bio,in,inl); | 151 | ret=BIO_write(b->next_bio,in,inl); |
@@ -178,25 +162,21 @@ int inl; | |||
178 | return(ret); | 162 | return(ret); |
179 | } | 163 | } |
180 | 164 | ||
181 | static long md_ctrl(b,cmd,num,ptr) | 165 | static long md_ctrl(BIO *b, int cmd, long num, void *ptr) |
182 | BIO *b; | ||
183 | int cmd; | ||
184 | long num; | ||
185 | char *ptr; | ||
186 | { | 166 | { |
187 | EVP_MD_CTX *ctx,*dctx,**pctx; | 167 | EVP_MD_CTX *ctx,*dctx,**pctx; |
188 | EVP_MD **ppmd; | 168 | const EVP_MD **ppmd; |
189 | EVP_MD *md; | 169 | EVP_MD *md; |
190 | long ret=1; | 170 | long ret=1; |
191 | BIO *dbio; | 171 | BIO *dbio; |
192 | 172 | ||
193 | ctx=(EVP_MD_CTX *)b->ptr; | 173 | ctx=b->ptr; |
194 | 174 | ||
195 | switch (cmd) | 175 | switch (cmd) |
196 | { | 176 | { |
197 | case BIO_CTRL_RESET: | 177 | case BIO_CTRL_RESET: |
198 | if (b->init) | 178 | if (b->init) |
199 | EVP_DigestInit(ctx,ctx->digest); | 179 | EVP_DigestInit_ex(ctx,ctx->digest, NULL); |
200 | else | 180 | else |
201 | ret=0; | 181 | ret=0; |
202 | ret=BIO_ctrl(b->next_bio,cmd,num,ptr); | 182 | ret=BIO_ctrl(b->next_bio,cmd,num,ptr); |
@@ -204,7 +184,7 @@ char *ptr; | |||
204 | case BIO_C_GET_MD: | 184 | case BIO_C_GET_MD: |
205 | if (b->init) | 185 | if (b->init) |
206 | { | 186 | { |
207 | ppmd=(EVP_MD **)ptr; | 187 | ppmd=ptr; |
208 | *ppmd=ctx->digest; | 188 | *ppmd=ctx->digest; |
209 | } | 189 | } |
210 | else | 190 | else |
@@ -213,7 +193,7 @@ char *ptr; | |||
213 | case BIO_C_GET_MD_CTX: | 193 | case BIO_C_GET_MD_CTX: |
214 | if (b->init) | 194 | if (b->init) |
215 | { | 195 | { |
216 | pctx=(EVP_MD_CTX **)ptr; | 196 | pctx=ptr; |
217 | *pctx=ctx; | 197 | *pctx=ctx; |
218 | } | 198 | } |
219 | else | 199 | else |
@@ -226,14 +206,14 @@ char *ptr; | |||
226 | break; | 206 | break; |
227 | 207 | ||
228 | case BIO_C_SET_MD: | 208 | case BIO_C_SET_MD: |
229 | md=(EVP_MD *)ptr; | 209 | md=ptr; |
230 | EVP_DigestInit(ctx,md); | 210 | EVP_DigestInit_ex(ctx,md, NULL); |
231 | b->init=1; | 211 | b->init=1; |
232 | break; | 212 | break; |
233 | case BIO_CTRL_DUP: | 213 | case BIO_CTRL_DUP: |
234 | dbio=(BIO *)ptr; | 214 | dbio=ptr; |
235 | dctx=(EVP_MD_CTX *)dbio->ptr; | 215 | dctx=dbio->ptr; |
236 | memcpy(dctx,ctx,sizeof(ctx)); | 216 | EVP_MD_CTX_copy_ex(dctx,ctx); |
237 | b->init=1; | 217 | b->init=1; |
238 | break; | 218 | break; |
239 | default: | 219 | default: |
@@ -243,19 +223,30 @@ char *ptr; | |||
243 | return(ret); | 223 | return(ret); |
244 | } | 224 | } |
245 | 225 | ||
246 | static int md_gets(bp,buf,size) | 226 | static long md_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) |
247 | BIO *bp; | 227 | { |
248 | char *buf; | 228 | long ret=1; |
249 | int size; | 229 | |
230 | if (b->next_bio == NULL) return(0); | ||
231 | switch (cmd) | ||
232 | { | ||
233 | default: | ||
234 | ret=BIO_callback_ctrl(b->next_bio,cmd,fp); | ||
235 | break; | ||
236 | } | ||
237 | return(ret); | ||
238 | } | ||
239 | |||
240 | static int md_gets(BIO *bp, char *buf, int size) | ||
250 | { | 241 | { |
251 | EVP_MD_CTX *ctx; | 242 | EVP_MD_CTX *ctx; |
252 | unsigned int ret; | 243 | unsigned int ret; |
253 | 244 | ||
254 | 245 | ||
255 | ctx=(EVP_MD_CTX *)bp->ptr; | 246 | ctx=bp->ptr; |
256 | if (size < ctx->digest->md_size) | 247 | if (size < ctx->digest->md_size) |
257 | return(0); | 248 | return(0); |
258 | EVP_DigestFinal(ctx,(unsigned char *)buf,&ret); | 249 | EVP_DigestFinal_ex(ctx,(unsigned char *)buf,&ret); |
259 | return((int)ret); | 250 | return((int)ret); |
260 | } | 251 | } |
261 | 252 | ||