if (RAND_pseudo_bytes(iv,8) <= 0)
if (RAND_pseudo_bytes(iv,8) < 0)
int PEM_ASN1_write_bio(int (*i2d)(), const char *name, BIO *bp, char *x,	     const EVP_CIPHER *enc, unsigned char *kstr, int klen,	     pem_password_cb *callback, void *u)	{	EVP_CIPHER_CTX ctx;	int dsize=0,i,j,ret=0;	unsigned char *p,*data=NULL;	const char *objstr=NULL;	char buf[PEM_BUFSIZE];	unsigned char key[EVP_MAX_KEY_LENGTH];	unsigned char iv[EVP_MAX_IV_LENGTH];		if (enc != NULL)		{		objstr=OBJ_nid2sn(EVP_CIPHER_nid(enc));		if (objstr == NULL)			{			PEMerr(PEM_F_PEM_ASN1_WRITE_BIO,PEM_R_UNSUPPORTED_CIPHER);			goto err;			}		}	if ((dsize=i2d(x,NULL)) < 0)		{		PEMerr(PEM_F_PEM_ASN1_WRITE_BIO,ERR_R_MALLOC_FAILURE);		dsize=0;		goto err;		}	/* dzise + 8 bytes are needed */	data=(unsigned char *)Malloc((unsigned int)dsize+20);	if (data == NULL)		{		PEMerr(PEM_F_PEM_ASN1_WRITE_BIO,ERR_R_MALLOC_FAILURE);		goto err;		}	p=data;	i=i2d(x,&p);	if (enc != NULL)		{		if (kstr == NULL)			{			if (callback == NULL)				klen=def_callback(buf,PEM_BUFSIZE,1,u);			else				klen=(*callback)(buf,PEM_BUFSIZE,1,u);			if (klen <= 0)				{				PEMerr(PEM_F_PEM_ASN1_WRITE_BIO,PEM_R_READ_KEY);				goto err;				}#ifdef CHARSET_EBCDIC			/* Convert the pass phrase from EBCDIC */			ebcdic2ascii(buf, buf, klen);#endif			kstr=(unsigned char *)buf;			}		RAND_add(data,i,0);/* put in the RSA key. */		if (RAND_pseudo_bytes(iv,8) <= 0)	/* Generate a salt */			goto err;		/* The 'iv' is used as the iv and as a salt.  It is		 * NOT taken from the BytesToKey function */		EVP_BytesToKey(enc,EVP_md5(),iv,kstr,klen,1,key,NULL);		if (kstr == (unsigned char *)buf) memset(buf,0,PEM_BUFSIZE);		buf[0]='\0';		PEM_proc_type(buf,PEM_TYPE_ENCRYPTED);		PEM_dek_info(buf,objstr,8,(char *)iv);		/* k=strlen(buf); */			EVP_EncryptInit(&ctx,enc,key,iv);		EVP_EncryptUpdate(&ctx,data,&j,data,i);		EVP_EncryptFinal(&ctx,&(data[j]),&i);		i+=j;		ret=1;		}	else		{		ret=1;		buf[0]='\0';		}	i=PEM_write_bio(bp,name,buf,data,i);	if (i <= 0) ret=0;err:	memset(key,0,sizeof(key));	memset(iv,0,sizeof(iv));	memset((char *)&ctx,0,sizeof(ctx));	memset(buf,0,PEM_BUFSIZE);	memset(data,0,(unsigned int)dsize);	Free(data);	return(ret);	}