1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* p12_mutl.c */
2e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * project 1999.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ====================================================================
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the documentation and/or other materials provided with the
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    distribution.
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    software must display the following acknowledgment:
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    endorse or promote products derived from this software without
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    prior written permission. For written permission, please contact
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    licensing@OpenSSL.org.
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL"
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    nor may "OpenSSL" appear in their names without prior written
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    permission of the OpenSSL Project.
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    acknowledgment:
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE.
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ====================================================================
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com).  This product includes software written by Tim
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com).
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_HMAC
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h"
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/hmac.h>
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/rand.h>
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/pkcs12.h>
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Generate a MAC */
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		   unsigned char *mac, unsigned int *maclen)
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	const EVP_MD *md_type;
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	HMAC_CTX hmac;
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char key[EVP_MAX_MD_SIZE], *salt;
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int saltlen, iter;
74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	int md_size;
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!PKCS7_type_is_data(p12->authsafes))
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_CONTENT_TYPE_NOT_DATA);
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	salt = p12->mac->salt->data;
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	saltlen = p12->mac->salt->length;
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!p12->mac->iter) iter = 1;
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	else iter = ASN1_INTEGER_get (p12->mac->iter);
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    	if(!(md_type =
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 EVP_get_digestbyobj (p12->mac->dinfo->algor->algorithm))) {
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_UNKNOWN_DIGEST_ALGORITHM);
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	md_size = EVP_MD_size(md_type);
92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	if (md_size < 0)
93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	    return 0;
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if(!PKCS12_key_gen (pass, passlen, salt, saltlen, PKCS12_MAC_ID, iter,
95221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom				 md_size, key, md_type)) {
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_GEN_MAC,PKCS12_R_KEY_GEN_ERROR);
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	HMAC_CTX_init(&hmac);
100392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (!HMAC_Init_ex(&hmac, key, md_size, md_type, NULL)
101392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    		|| !HMAC_Update(&hmac, p12->authsafes->d.data->data,
102392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom					 p12->authsafes->d.data->length)
103392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    		|| !HMAC_Final(&hmac, mac, maclen))
104392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		{
105392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    		HMAC_CTX_cleanup(&hmac);
106392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		return 0;
107392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		}
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    	HMAC_CTX_cleanup(&hmac);
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Verify the mac */
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen)
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char mac[EVP_MAX_MD_SIZE];
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int maclen;
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if(p12->mac == NULL) {
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_VERIFY_MAC,PKCS12_R_MAC_ABSENT);
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!PKCS12_gen_mac (p12, pass, passlen, mac, &maclen)) {
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_VERIFY_MAC,PKCS12_R_MAC_GENERATION_ERROR);
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((maclen != (unsigned int)p12->mac->dinfo->digest->length)
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	|| memcmp (mac, p12->mac->dinfo->digest->data, maclen)) return 0;
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Set a mac */
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen,
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	     unsigned char *salt, int saltlen, int iter, const EVP_MD *md_type)
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char mac[EVP_MAX_MD_SIZE];
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int maclen;
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!md_type) md_type = EVP_sha1();
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (PKCS12_setup_mac (p12, iter, salt, saltlen, md_type) ==
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				 	PKCS12_ERROR) {
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_SETUP_ERROR);
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!PKCS12_gen_mac (p12, pass, passlen, mac, &maclen)) {
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_GENERATION_ERROR);
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!(M_ASN1_OCTET_STRING_set (p12->mac->dinfo->digest, mac, maclen))) {
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_STRING_SET_ERROR);
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project						return 0;
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Set up a mac structure */
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen,
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	     const EVP_MD *md_type)
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!(p12->mac = PKCS12_MAC_DATA_new())) return PKCS12_ERROR;
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (iter > 1) {
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if(!(p12->mac->iter = M_ASN1_INTEGER_new())) {
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE);
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			return 0;
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (!ASN1_INTEGER_set(p12->mac->iter, iter)) {
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE);
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			return 0;
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!saltlen) saltlen = PKCS12_SALT_LEN;
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	p12->mac->salt->length = saltlen;
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!(p12->mac->salt->data = OPENSSL_malloc (saltlen))) {
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE);
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!salt) {
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (RAND_pseudo_bytes (p12->mac->salt->data, saltlen) < 0)
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			return 0;
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	else memcpy (p12->mac->salt->data, salt, saltlen);
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	p12->mac->dinfo->algor->algorithm = OBJ_nid2obj(EVP_MD_type(md_type));
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (!(p12->mac->dinfo->algor->parameter = ASN1_TYPE_new())) {
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE);
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return 0;
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	p12->mac->dinfo->algor->parameter->type = V_ASN1_NULL;
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return 1;
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
191