Socket-Class

 view release on metacpan or  search on metacpan

xs/sc_ssl/openssl/source/crypto/pkcs12/p12_crt.c  view on Meta::CPAN

PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key,
						int key_usage, int iter,
						int nid_key, char *pass)
	{

	PKCS12_SAFEBAG *bag = NULL;
	PKCS8_PRIV_KEY_INFO *p8 = NULL;

	/* Make a PKCS#8 structure */
	if(!(p8 = EVP_PKEY2PKCS8(key)))
		goto err;
	if(key_usage && !PKCS8_add_keyusage(p8, key_usage))
		goto err;
	if (nid_key != -1)
		{
		bag = PKCS12_MAKE_SHKEYBAG(nid_key, pass, -1, NULL, 0, iter, p8);
		PKCS8_PRIV_KEY_INFO_free(p8);
		}
	else
		bag = PKCS12_MAKE_KEYBAG(p8);

	if(!bag)
		goto err;

	if (!pkcs12_add_bag(pbags, bag))
		goto err;

	return bag;

	err:

	if (bag)
		PKCS12_SAFEBAG_free(bag);

	return NULL;

	}

int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,
						int nid_safe, int iter, char *pass)
	{
	PKCS7 *p7 = NULL;
	int free_safes = 0;

	if (!*psafes)
		{
		*psafes = sk_PKCS7_new_null();
		if (!*psafes)
			return 0;
		free_safes = 1;
		}
	else
		free_safes = 0;

	if (nid_safe == 0)
		nid_safe = NID_pbe_WithSHA1And40BitRC2_CBC;

	if (nid_safe == -1)
		p7 = PKCS12_pack_p7data(bags);
	else
		p7 = PKCS12_pack_p7encdata(nid_safe, pass, -1, NULL, 0,
					  iter, bags);
	if (!p7)
		goto err;

	if (!sk_PKCS7_push(*psafes, p7))
		goto err;

	return 1;

	err:
	if (free_safes)
		{
		sk_PKCS7_free(*psafes);
		*psafes = NULL;
		}

	if (p7)
		PKCS7_free(p7);

	return 0;

	}

static int pkcs12_add_bag(STACK_OF(PKCS12_SAFEBAG) **pbags, PKCS12_SAFEBAG *bag)
	{
	int free_bags;
	if (!pbags)
		return 1;
	if (!*pbags)
		{
		*pbags = sk_PKCS12_SAFEBAG_new_null();
		if (!*pbags)
			return 0;
		free_bags = 1;
		}
	else 
		free_bags = 0;

	if (!sk_PKCS12_SAFEBAG_push(*pbags, bag))
		{
		if (free_bags)
			{
			sk_PKCS12_SAFEBAG_free(*pbags);
			*pbags = NULL;
			}
		return 0;
		}

	return 1;

	}
		

PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int nid_p7)
	{
	PKCS12 *p12;
	if (nid_p7 <= 0)
		nid_p7 = NID_pkcs7_data;
	p12 = PKCS12_init(nid_p7);



( run in 0.754 second using v1.01-cache-2.11-cpan-63c85eba8c4 )