summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/crypto/evp/bio_md.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/crypto/evp/bio_md.c')
-rw-r--r--src/lib/libssl/src/crypto/evp/bio_md.c101
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 68static int md_write(BIO *h, char const *buf, int num);
69static int md_write(BIO *h,char *buf,int num); 69static int md_read(BIO *h, char *buf, int size);
70static 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); */ 71static int md_gets(BIO *h, char *str, int size);
72static int md_gets(BIO *h,char *str,int size); 72static long md_ctrl(BIO *h, int cmd, long arg1, void *arg2);
73static long md_ctrl(BIO *h,int cmd,long arg1,char *arg2);
74static int md_new(BIO *h); 73static int md_new(BIO *h);
75static int md_free(BIO *data); 74static int md_free(BIO *data);
76#else 75static long md_callback_ctrl(BIO *h,int cmd,bio_info_cb *fp);
77static int md_write();
78static int md_read();
79/*static int md_puts(); */
80static int md_gets();
81static long md_ctrl();
82static int md_new();
83static int md_free();
84#endif
85 76
86static BIO_METHOD methods_md= 77static 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
98BIO_METHOD *BIO_f_md() 90BIO_METHOD *BIO_f_md(void)
99 { 91 {
100 return(&methods_md); 92 return(&methods_md);
101 } 93 }
102 94
103static int md_new(bi) 95static int md_new(BIO *bi)
104BIO *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
117static int md_free(a) 108static int md_free(BIO *a)
118BIO *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
128static int md_read(b,out,outl) 118static int md_read(BIO *b, char *out, int outl)
129BIO *b;
130char *out;
131int 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
155static int md_write(b,in,inl) 142static int md_write(BIO *b, const char *in, int inl)
156BIO *b;
157char *in;
158int 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
181static long md_ctrl(b,cmd,num,ptr) 165static long md_ctrl(BIO *b, int cmd, long num, void *ptr)
182BIO *b;
183int cmd;
184long num;
185char *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
246static int md_gets(bp,buf,size) 226static long md_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)
247BIO *bp; 227 {
248char *buf; 228 long ret=1;
249int 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
240static 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