projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sha1-armv4-large.pl: comply with ABI.
[oweals/openssl.git]
/
crypto
/
pkcs7
/
bio_ber.c
diff --git
a/crypto/pkcs7/bio_ber.c
b/crypto/pkcs7/bio_ber.c
index 2f17723e984c3b1f2de7a44f771829668a98dd25..31973fcd1fc56ae463ca9f46da598ca9e7b70e02 100644
(file)
--- a/
crypto/pkcs7/bio_ber.c
+++ b/
crypto/pkcs7/bio_ber.c
@@
-69,6
+69,7
@@
static int ber_read(BIO *h,char *buf,int size);
static long ber_ctrl(BIO *h,int cmd,long arg1,char *arg2);
static int ber_new(BIO *h);
static int ber_free(BIO *data);
static long ber_ctrl(BIO *h,int cmd,long arg1,char *arg2);
static int ber_new(BIO *h);
static int ber_free(BIO *data);
+static long ber_callback_ctrl(BIO *h,int cmd,void *(*fp)());
#define BER_BUF_SIZE (32)
/* This is used to hold the state of the BER objects being read. */
#define BER_BUF_SIZE (32)
/* This is used to hold the state of the BER objects being read. */
@@
-92,7
+93,7
@@
typedef struct bio_ber_struct
/* most of the following are used when doing non-blocking IO */
/* reading */
long num_left; /* number of bytes still to read/write in block */
/* most of the following are used when doing non-blocking IO */
/* reading */
long num_left; /* number of bytes still to read/write in block */
- int depth; /* used with idefinite encoding. */
+ int depth; /* used with i
n
definite encoding. */
int finished; /* No more read data */
/* writting */
int finished; /* No more read data */
/* writting */
@@
-115,6
+116,7
@@
static BIO_METHOD methods_ber=
ber_ctrl,
ber_new,
ber_free,
ber_ctrl,
ber_new,
ber_free,
+ ber_callback_ctrl,
};
BIO_METHOD *BIO_f_ber(void)
};
BIO_METHOD *BIO_f_ber(void)
@@
-126,7
+128,7
@@
static int ber_new(BIO *bi)
{
BIO_BER_CTX *ctx;
{
BIO_BER_CTX *ctx;
- ctx=(BIO_BER_CTX *)
M
alloc(sizeof(BIO_BER_CTX));
+ ctx=(BIO_BER_CTX *)
OPENSSL_m
alloc(sizeof(BIO_BER_CTX));
if (ctx == NULL) return(0);
memset((char *)ctx,0,sizeof(BIO_BER_CTX));
if (ctx == NULL) return(0);
memset((char *)ctx,0,sizeof(BIO_BER_CTX));
@@
-143,8
+145,8
@@
static int ber_free(BIO *a)
if (a == NULL) return(0);
b=(BIO_BER_CTX *)a->ptr;
if (a == NULL) return(0);
b=(BIO_BER_CTX *)a->ptr;
-
memset(a->ptr,0
,sizeof(BIO_BER_CTX));
-
F
ree(a->ptr);
+
OPENSSL_cleanse(a->ptr
,sizeof(BIO_BER_CTX));
+
OPENSSL_f
ree(a->ptr);
a->ptr=NULL;
a->init=0;
a->flags=0;
a->ptr=NULL;
a->init=0;
a->flags=0;
@@
-202,7
+204,7
@@
int bio_ber_get_header(BIO *bio, BIO_BER_CTX *ctx)
if ((ctx->buf_len < BER_BUF_SIZE) &&
(ERR_GET_REASON(ERR_peek_error()) == ASN1_R_TOO_LONG))
{
if ((ctx->buf_len < BER_BUF_SIZE) &&
(ERR_GET_REASON(ERR_peek_error()) == ASN1_R_TOO_LONG))
{
- ERR_
get
_error(); /* clear the error */
+ ERR_
clear
_error(); /* clear the error */
BIO_set_retry_read(b);
}
return(-1);
BIO_set_retry_read(b);
}
return(-1);
@@
-337,7
+339,7
@@
static long ber_ctrl(BIO *b, int cmd, long num, char *ptr)
case BIO_CTRL_RESET:
ctx->ok=1;
ctx->finished=0;
case BIO_CTRL_RESET:
ctx->ok=1;
ctx->finished=0;
- EVP_CipherInit
(&(ctx->cipher)
,NULL,NULL,NULL,
+ EVP_CipherInit
_ex(&(ctx->cipher),NULL
,NULL,NULL,NULL,
ctx->cipher.berrypt);
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
break;
ctx->cipher.berrypt);
ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
break;
@@
-374,7
+376,7
@@
again:
{
ctx->finished=1;
ctx->buf_off=0;
{
ctx->finished=1;
ctx->buf_off=0;
- ret=EVP_CipherFinal(&(ctx->cipher),
+ ret=EVP_CipherFinal
_ex
(&(ctx->cipher),
(unsigned char *)ctx->buf,
&(ctx->buf_len));
ctx->ok=(int)ret;
(unsigned char *)ctx->buf,
&(ctx->buf_len));
ctx->ok=(int)ret;
@@
-409,6
+411,20
@@
again:
return(ret);
}
return(ret);
}
+static long ber_callback_ctrl(BIO *b, int cmd, void *(*fp)())
+ {
+ long ret=1;
+
+ if (b->next_bio == NULL) return(0);
+ switch (cmd)
+ {
+ default:
+ ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
+ break;
+ }
+ return(ret);
+ }
+
/*
void BIO_set_cipher_ctx(b,c)
BIO *b;
/*
void BIO_set_cipher_ctx(b,c)
BIO *b;
@@
-442,7
+458,7
@@
void BIO_set_cipher(BIO *b, EVP_CIPHER *c, unsigned char *k, unsigned char *i,
b->init=1;
ctx=(BIO_ENC_CTX *)b->ptr;
b->init=1;
ctx=(BIO_ENC_CTX *)b->ptr;
- EVP_CipherInit
(&(ctx->cipher),c
,k,i,e);
+ EVP_CipherInit
_ex(&(ctx->cipher),c,NULL
,k,i,e);
if (b->callback != NULL)
b->callback(b,BIO_CB_CTRL,(char *)c,BIO_CTRL_SET,e,1L);
if (b->callback != NULL)
b->callback(b,BIO_CB_CTRL,(char *)c,BIO_CTRL_SET,e,1L);