if (!(plen = i2d_PBEPARAM (pbe, NULL))) { ASN1err(ASN1_F_ASN1_PBE_SET,ASN1_R_ENCODE_ERROR); return NULL; } if (!(pdata = Malloc (plen))) { ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); return NULL; } ptmp = pdata; i2d_PBEPARAM (pbe, &ptmp); PBEPARAM_free (pbe);
X509_ALGOR *PKCS5_pbe_set(int alg, int iter, unsigned char *salt,	     int saltlen){	unsigned char *pdata, *ptmp;	int plen;	PBEPARAM *pbe;	ASN1_OBJECT *al;	X509_ALGOR *algor;	ASN1_TYPE *astype;	if (!(pbe = PBEPARAM_new ())) {		ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE);		return NULL;	}	ASN1_INTEGER_set (pbe->iter, iter);	if (!saltlen) saltlen = PKCS5_SALT_LEN;	if (!(pbe->salt->data = Malloc (saltlen))) {		ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE);		return NULL;	}	pbe->salt->length = saltlen;	if (salt) memcpy (pbe->salt->data, salt, saltlen);	else RAND_bytes (pbe->salt->data, saltlen);	if (!(plen = i2d_PBEPARAM (pbe, NULL))) {		ASN1err(ASN1_F_ASN1_PBE_SET,ASN1_R_ENCODE_ERROR);		return NULL;	}	if (!(pdata = Malloc (plen))) {		ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE);		return NULL;	}	ptmp = pdata;	i2d_PBEPARAM (pbe, &ptmp);	PBEPARAM_free (pbe);	if (!(astype = ASN1_TYPE_new())) {		ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE);		return NULL;	}	astype->type = V_ASN1_SEQUENCE;	if (!(astype->value.sequence=ASN1_STRING_new())) {		ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE);		return NULL;	}	ASN1_STRING_set (astype->value.sequence, pdata, plen);	Free (pdata);		al = OBJ_nid2obj(alg); /* never need to free al */	if (!(algor = X509_ALGOR_new())) {		ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE);		return NULL;	}	ASN1_OBJECT_free(algor->algorithm);	algor->algorithm = al;	algor->parameter = astype;	return (algor);}