diff options
| author | beck <> | 2000-12-15 02:58:47 +0000 |
|---|---|---|
| committer | beck <> | 2000-12-15 02:58:47 +0000 |
| commit | 9200bb13d15da4b2a23e6bc92c20e95b74aa2113 (patch) | |
| tree | 5c52d628ec1e34be76e7ef2a4235d248b7c44d24 /src/lib/libcrypto/evp/bio_b64.c | |
| parent | e131d25072e3d4197ba4b9bcc0d1b27d34d6488d (diff) | |
| download | openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.gz openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.bz2 openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.zip | |
openssl-engine-0.9.6 merge
Diffstat (limited to 'src/lib/libcrypto/evp/bio_b64.c')
| -rw-r--r-- | src/lib/libcrypto/evp/bio_b64.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/lib/libcrypto/evp/bio_b64.c b/src/lib/libcrypto/evp/bio_b64.c index bd5e24f993..af6fa2ae8f 100644 --- a/src/lib/libcrypto/evp/bio_b64.c +++ b/src/lib/libcrypto/evp/bio_b64.c | |||
| @@ -62,14 +62,14 @@ | |||
| 62 | #include <openssl/buffer.h> | 62 | #include <openssl/buffer.h> |
| 63 | #include <openssl/evp.h> | 63 | #include <openssl/evp.h> |
| 64 | 64 | ||
| 65 | static int b64_write(BIO *h,char *buf,int num); | 65 | static int b64_write(BIO *h, const char *buf, int num); |
| 66 | static int b64_read(BIO *h,char *buf,int size); | 66 | static int b64_read(BIO *h, char *buf, int size); |
| 67 | /*static int b64_puts(BIO *h,char *str); */ | 67 | /*static int b64_puts(BIO *h, const char *str); */ |
| 68 | /*static int b64_gets(BIO *h,char *str,int size); */ | 68 | /*static int b64_gets(BIO *h, char *str, int size); */ |
| 69 | static long b64_ctrl(BIO *h,int cmd,long arg1,char *arg2); | 69 | static long b64_ctrl(BIO *h, int cmd, long arg1, void *arg2); |
| 70 | static int b64_new(BIO *h); | 70 | static int b64_new(BIO *h); |
| 71 | static int b64_free(BIO *data); | 71 | static int b64_free(BIO *data); |
| 72 | static long b64_callback_ctrl(BIO *h,int cmd,void (*fp)()); | 72 | static long b64_callback_ctrl(BIO *h,int cmd,bio_info_cb *fp); |
| 73 | #define B64_BLOCK_SIZE 1024 | 73 | #define B64_BLOCK_SIZE 1024 |
| 74 | #define B64_BLOCK_SIZE2 768 | 74 | #define B64_BLOCK_SIZE2 768 |
| 75 | #define B64_NONE 0 | 75 | #define B64_NONE 0 |
| @@ -113,7 +113,7 @@ static int b64_new(BIO *bi) | |||
| 113 | { | 113 | { |
| 114 | BIO_B64_CTX *ctx; | 114 | BIO_B64_CTX *ctx; |
| 115 | 115 | ||
| 116 | ctx=(BIO_B64_CTX *)Malloc(sizeof(BIO_B64_CTX)); | 116 | ctx=(BIO_B64_CTX *)OPENSSL_malloc(sizeof(BIO_B64_CTX)); |
| 117 | if (ctx == NULL) return(0); | 117 | if (ctx == NULL) return(0); |
| 118 | 118 | ||
| 119 | ctx->buf_len=0; | 119 | ctx->buf_len=0; |
| @@ -133,7 +133,7 @@ static int b64_new(BIO *bi) | |||
| 133 | static int b64_free(BIO *a) | 133 | static int b64_free(BIO *a) |
| 134 | { | 134 | { |
| 135 | if (a == NULL) return(0); | 135 | if (a == NULL) return(0); |
| 136 | Free(a->ptr); | 136 | OPENSSL_free(a->ptr); |
| 137 | a->ptr=NULL; | 137 | a->ptr=NULL; |
| 138 | a->init=0; | 138 | a->init=0; |
| 139 | a->flags=0; | 139 | a->flags=0; |
| @@ -340,7 +340,7 @@ static int b64_read(BIO *b, char *out, int outl) | |||
| 340 | return((ret == 0)?ret_code:ret); | 340 | return((ret == 0)?ret_code:ret); |
| 341 | } | 341 | } |
| 342 | 342 | ||
| 343 | static int b64_write(BIO *b, char *in, int inl) | 343 | static int b64_write(BIO *b, const char *in, int inl) |
| 344 | { | 344 | { |
| 345 | int ret=inl,n,i; | 345 | int ret=inl,n,i; |
| 346 | BIO_B64_CTX *ctx; | 346 | BIO_B64_CTX *ctx; |
| @@ -370,10 +370,11 @@ static int b64_write(BIO *b, char *in, int inl) | |||
| 370 | n-=i; | 370 | n-=i; |
| 371 | } | 371 | } |
| 372 | /* at this point all pending data has been written */ | 372 | /* at this point all pending data has been written */ |
| 373 | ctx->buf_off=0; | ||
| 374 | ctx->buf_len=0; | ||
| 373 | 375 | ||
| 374 | if ((in == NULL) || (inl <= 0)) return(0); | 376 | if ((in == NULL) || (inl <= 0)) return(0); |
| 375 | 377 | ||
| 376 | ctx->buf_off=0; | ||
| 377 | while (inl > 0) | 378 | while (inl > 0) |
| 378 | { | 379 | { |
| 379 | n=(inl > B64_BLOCK_SIZE)?B64_BLOCK_SIZE:inl; | 380 | n=(inl > B64_BLOCK_SIZE)?B64_BLOCK_SIZE:inl; |
| @@ -383,14 +384,20 @@ static int b64_write(BIO *b, char *in, int inl) | |||
| 383 | if (ctx->tmp_len > 0) | 384 | if (ctx->tmp_len > 0) |
| 384 | { | 385 | { |
| 385 | n=3-ctx->tmp_len; | 386 | n=3-ctx->tmp_len; |
| 387 | /* There's a teoretical possibility for this */ | ||
| 388 | if (n > inl) | ||
| 389 | n=inl; | ||
| 386 | memcpy(&(ctx->tmp[ctx->tmp_len]),in,n); | 390 | memcpy(&(ctx->tmp[ctx->tmp_len]),in,n); |
| 387 | ctx->tmp_len+=n; | 391 | ctx->tmp_len+=n; |
| 388 | n=ctx->tmp_len; | 392 | if (ctx->tmp_len < 3) |
| 389 | if (n < 3) | ||
| 390 | break; | 393 | break; |
| 391 | ctx->buf_len=EVP_EncodeBlock( | 394 | ctx->buf_len=EVP_EncodeBlock( |
| 392 | (unsigned char *)ctx->buf, | 395 | (unsigned char *)ctx->buf, |
| 393 | (unsigned char *)ctx->tmp,n); | 396 | (unsigned char *)ctx->tmp, |
| 397 | ctx->tmp_len); | ||
| 398 | /* Since we're now done using the temporary | ||
| 399 | buffer, the length should be 0'd */ | ||
| 400 | ctx->tmp_len=0; | ||
| 394 | } | 401 | } |
| 395 | else | 402 | else |
| 396 | { | 403 | { |
| @@ -434,7 +441,7 @@ static int b64_write(BIO *b, char *in, int inl) | |||
| 434 | return(ret); | 441 | return(ret); |
| 435 | } | 442 | } |
| 436 | 443 | ||
| 437 | static long b64_ctrl(BIO *b, int cmd, long num, char *ptr) | 444 | static long b64_ctrl(BIO *b, int cmd, long num, void *ptr) |
| 438 | { | 445 | { |
| 439 | BIO_B64_CTX *ctx; | 446 | BIO_B64_CTX *ctx; |
| 440 | long ret=1; | 447 | long ret=1; |
| @@ -524,7 +531,7 @@ again: | |||
| 524 | return(ret); | 531 | return(ret); |
| 525 | } | 532 | } |
| 526 | 533 | ||
| 527 | static long b64_callback_ctrl(BIO *b, int cmd, void (*fp)()) | 534 | static long b64_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) |
| 528 | { | 535 | { |
| 529 | long ret=1; | 536 | long ret=1; |
| 530 | 537 | ||
