1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/pkcs7/pkcs7.h */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com).
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to.  The following conditions
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA,
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed.
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package.
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    documentation and/or other materials provided with the distribution.
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    must display the following acknowledgement:
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes cryptographic software written by
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *     Eric Young (eay@cryptsoft.com)"
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    The word 'cryptographic' can be left out if the rouines from the library
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    being used are not cryptographic related :-).
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the apps directory (application code) you must include an acknowledgement:
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE.
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed.  i.e. this code cannot simply be
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.]
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef HEADER_PKCS7_H
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define HEADER_PKCS7_H
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/asn1.h>
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/bio.h>
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/e_os2.h>
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/symhacks.h>
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/ossl_typ.h>
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectextern "C" {
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_SYS_WIN32
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Under Win32 thes are defined in wincrypt.h */
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef PKCS7_ISSUER_AND_SERIAL
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef PKCS7_SIGNER_INFO
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectEncryption_ID		DES-CBC
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDigest_ID		MD5
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDigest_Encryption_ID	rsaEncryption
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectKey_Encryption_ID	rsaEncryption
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project*/
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_issuer_and_serial_st
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	X509_NAME *issuer;
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER *serial;
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_ISSUER_AND_SERIAL;
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_signer_info_st
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER 			*version;	/* version 1 */
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	PKCS7_ISSUER_AND_SERIAL		*issuer_and_serial;
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	X509_ALGOR			*digest_alg;
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509_ATTRIBUTE)	*auth_attr;	/* [ 0 ] */
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	X509_ALGOR			*digest_enc_alg;
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_OCTET_STRING		*enc_digest;
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509_ATTRIBUTE)	*unauth_attr;	/* [ 1 ] */
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* The private key to sign with */
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	EVP_PKEY			*pkey;
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_SIGNER_INFO;
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_STACK_OF(PKCS7_SIGNER_INFO)
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO)
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_recip_info_st
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER			*version;	/* version 0 */
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	PKCS7_ISSUER_AND_SERIAL		*issuer_and_serial;
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	X509_ALGOR			*key_enc_algor;
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_OCTET_STRING		*enc_key;
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	X509				*cert; /* get the pub-key from this */
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_RECIP_INFO;
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_STACK_OF(PKCS7_RECIP_INFO)
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO)
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_signed_st
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER			*version;	/* version 1 */
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509_ALGOR)		*md_algs;	/* md used */
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509)			*cert;		/* [ 0 ] */
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509_CRL)		*crl;		/* [ 1 ] */
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(PKCS7_SIGNER_INFO)	*signer_info;
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct pkcs7_st			*contents;
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_SIGNED;
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The above structure is very very similar to PKCS7_SIGN_ENVELOPE.
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * How about merging the two */
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_enc_content_st
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_OBJECT			*content_type;
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	X509_ALGOR			*algorithm;
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_OCTET_STRING		*enc_data;	/* [ 0 ] */
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	const EVP_CIPHER		*cipher;
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_ENC_CONTENT;
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_enveloped_st
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER			*version;	/* version 0 */
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(PKCS7_RECIP_INFO)	*recipientinfo;
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	PKCS7_ENC_CONTENT		*enc_data;
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_ENVELOPE;
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_signedandenveloped_st
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER			*version;	/* version 1 */
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509_ALGOR)		*md_algs;	/* md used */
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509)			*cert;		/* [ 0 ] */
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(X509_CRL)		*crl;		/* [ 1 ] */
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(PKCS7_SIGNER_INFO)	*signer_info;
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	PKCS7_ENC_CONTENT		*enc_data;
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	STACK_OF(PKCS7_RECIP_INFO)	*recipientinfo;
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_SIGN_ENVELOPE;
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_digest_st
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER			*version;	/* version 0 */
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	X509_ALGOR			*md;		/* md used */
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct pkcs7_st 		*contents;
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_OCTET_STRING		*digest;
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_DIGEST;
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_encrypted_st
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_INTEGER			*version;	/* version 0 */
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	PKCS7_ENC_CONTENT		*enc_data;
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7_ENCRYPT;
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct pkcs7_st
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* The following is non NULL if it contains ASN1 encoding of
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * this structure */
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char *asn1;
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	long length;
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_S_HEADER	0
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_S_BODY	1
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_S_TAIL	2
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int state; /* used during processing */
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int detached;
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ASN1_OBJECT *type;
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* content as defined by the type */
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* all encryption/message digests are applied to the 'contents',
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * leaving out the 'type' field. */
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	union	{
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		char *ptr;
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* NID_pkcs7_data */
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ASN1_OCTET_STRING *data;
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* NID_pkcs7_signed */
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS7_SIGNED *sign;
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* NID_pkcs7_enveloped */
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS7_ENVELOPE *enveloped;
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* NID_pkcs7_signedAndEnveloped */
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS7_SIGN_ENVELOPE *signed_and_enveloped;
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* NID_pkcs7_digest */
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS7_DIGEST *digest;
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* NID_pkcs7_encrypted */
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS7_ENCRYPT *encrypted;
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* Anything else */
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ASN1_TYPE *other;
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		} d;
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} PKCS7;
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_STACK_OF(PKCS7)
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_SET_OF(PKCS7)
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_PKCS12_STACK_OF(PKCS7)
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_OP_SET_DETACHED_SIGNATURE	1
224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_OP_GET_DETACHED_SIGNATURE	2
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_get_signed_attributes(si)	((si)->auth_attr)
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_get_attributes(si)	((si)->unauth_attr)
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed)
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted)
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped)
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_type_is_signedAndEnveloped(a) \
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		(OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped)
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_type_is_data(a)   (OBJ_obj2nid((a)->type) == NID_pkcs7_data)
235221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_type_is_digest(a)   (OBJ_obj2nid((a)->type) == NID_pkcs7_digest)
236221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_type_is_encrypted(a) \
237221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		(OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted)
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_type_is_digest(a)   (OBJ_obj2nid((a)->type) == NID_pkcs7_digest)
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_set_detached(p,v) \
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL)
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_get_detached(p) \
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL)
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7))
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* S/MIME related flags */
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_TEXT		0x1
251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOCERTS		0x2
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOSIGS		0x4
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOCHAIN		0x8
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOINTERN		0x10
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOVERIFY		0x20
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_DETACHED		0x40
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_BINARY		0x80
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOATTR		0x100
259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define	PKCS7_NOSMIMECAP	0x200
260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOOLDMIMETYPE	0x400
261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_CRLFEOL		0x800
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_STREAM		0x1000
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_NOCRL		0x2000
264221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_PARTIAL		0x4000
265221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_REUSE_DIGEST	0x8000
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Flags: for compatibility with older code */
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_TEXT	PKCS7_TEXT
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_NOCERTS	PKCS7_NOCERTS
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_NOSIGS	PKCS7_NOSIGS
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_NOCHAIN	PKCS7_NOCHAIN
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_NOINTERN	PKCS7_NOINTERN
274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_NOVERIFY	PKCS7_NOVERIFY
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_DETACHED	PKCS7_DETACHED
276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_BINARY	PKCS7_BINARY
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SMIME_NOATTR	PKCS7_NOATTR
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL)
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,const EVP_MD *type,
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char *md,unsigned int *len);
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_FP_API
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7 *d2i_PKCS7_fp(FILE *fp,PKCS7 **p7);
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint i2d_PKCS7_fp(FILE *fp,PKCS7 *p7);
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7 *PKCS7_dup(PKCS7 *p7);
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7 *d2i_PKCS7_bio(BIO *bp,PKCS7 **p7);
289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint i2d_PKCS7_bio(BIO *bp,PKCS7 *p7);
290221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
291221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO)
294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO)
295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED)
296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT)
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE)
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE)
299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST)
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT)
301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_FUNCTIONS(PKCS7)
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN)
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY)
305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_NDEF_FUNCTION(PKCS7)
307221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromDECLARE_ASN1_PRINT_FUNCTION(PKCS7)
308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg);
310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_set_type(PKCS7 *p7, int type);
312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other);
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data);
314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	const EVP_MD *dgst);
316221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si);
317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i);
318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_add_certificate(PKCS7 *p7, X509 *x509);
319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509);
320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_content_new(PKCS7 *p7, int nid);
321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx,
322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si);
323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project								X509 *x509);
325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectBIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio);
327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_dataFinal(PKCS7 *p7, BIO *bio);
328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectBIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert);
329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509,
332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	EVP_PKEY *pkey, const EVP_MD *dgst);
333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectX509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si);
334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md);
335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSTACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7);
336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509);
338221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk,
339221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom					X509_ALGOR **pdig, X509_ALGOR **psig);
340221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc);
341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri);
342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509);
343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher);
344221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint PKCS7_stream(unsigned char ***boundary, PKCS7 *p7);
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx);
347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk);
348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si,int nid,int type,
349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *data);
350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_add_attribute (PKCS7_SIGNER_INFO *p7si, int nid, int atrtype,
351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *value);
352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid);
353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid);
354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si,
355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				STACK_OF(X509_ATTRIBUTE) *sk);
356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si,STACK_OF(X509_ATTRIBUTE) *sk);
357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project							BIO *data, int flags);
361221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
362221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromPKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7,
363221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom			X509 *signcert, EVP_PKEY *pkey, const EVP_MD *md,
364221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom			int flags);
365221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
366221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint PKCS7_final(PKCS7 *p7, BIO *data, int flags);
367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project					BIO *indata, BIO *out, int flags);
369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSTACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags);
370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher,
371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project								int flags);
372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags);
373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si,
375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			      STACK_OF(X509_ALGOR) *cap);
376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSTACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si);
377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg);
378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
379221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid);
380221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t);
381221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si,
382221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom				const unsigned char *md, int mdlen);
383221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);
385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectPKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
386221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
387221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromBIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7);
388221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* BEGIN ERROR CODES */
391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following lines are auto generated by the script mkerr.pl. Any changes
392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * made after this point may be overwritten when the script is next run.
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid ERR_load_PKCS7_strings(void);
395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Error codes for the PKCS7 functions. */
397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Function codes. */
399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_B64_READ_PKCS7				 120
400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_B64_WRITE_PKCS7				 121
401221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB			 136
402221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_I2D_PKCS7_BIO_STREAM			 140
403221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME		 135
404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP		 118
405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_ADD_CERTIFICATE			 100
406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_ADD_CRL				 101
407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO		 102
408221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_ADD_SIGNATURE			 131
409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_ADD_SIGNER			 103
410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_BIO_ADD_DIGEST			 125
411221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST		 138
412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_CTRL				 104
413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_DATADECODE			 112
414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_DATAFINAL				 128
415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_DATAINIT				 105
416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_DATASIGN				 106
417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_DATAVERIFY			 107
418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_DECRYPT				 114
419221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_DECRYPT_RINFO			 133
420221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_ENCODE_RINFO			 132
421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_ENCRYPT				 115
422221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_FINAL				 134
423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_FIND_DIGEST			 127
424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_GET0_SIGNERS			 124
425221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_RECIP_INFO_SET			 130
426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_SET_CIPHER			 108
427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_SET_CONTENT			 109
428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_SET_DIGEST			 126
429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_SET_TYPE				 110
430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_SIGN				 116
431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_SIGNATUREVERIFY			 113
432221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_SIGNER_INFO_SET			 129
433221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_SIGNER_INFO_SIGN			 139
434221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_F_PKCS7_SIGN_ADD_SIGNER			 137
435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_SIMPLE_SMIMECAP			 119
436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_PKCS7_VERIFY				 117
437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_SMIME_READ_PKCS7			 122
438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_F_SMIME_TEXT				 123
439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Reason codes. */
441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_CERTIFICATE_VERIFY_ERROR		 117
442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER		 144
443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_CIPHER_NOT_INITIALIZED			 116
444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_CONTENT_AND_DATA_PRESENT		 118
445221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_CTRL_ERROR				 152
446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_DECODE_ERROR				 130
447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH		 100
448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_DECRYPT_ERROR				 119
449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_DIGEST_FAILURE				 101
450221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_ENCRYPTION_CTRL_FAILURE			 149
451221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150
452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_ERROR_ADDING_RECIPIENT			 120
453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_ERROR_SETTING_CIPHER			 121
454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_INVALID_MIME_TYPE			 131
455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_INVALID_NULL_POINTER			 143
456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_MIME_NO_CONTENT_TYPE			 132
457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_MIME_PARSE_ERROR			 133
458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_MIME_SIG_PARSE_ERROR			 134
459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_MISSING_CERIPEND_INFO			 103
460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_CONTENT				 122
461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_CONTENT_TYPE				 135
462221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_NO_DEFAULT_DIGEST			 151
463221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND		 154
464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_MULTIPART_BODY_FAILURE		 136
465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_MULTIPART_BOUNDARY			 137
466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE	 115
467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_RECIPIENT_MATCHES_KEY		 146
468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_SIGNATURES_ON_DATA			 123
469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_SIGNERS				 142
470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_NO_SIG_CONTENT_TYPE			 138
471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE	 104
472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR		 124
473221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_PKCS7_ADD_SIGNER_ERROR			 153
474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_PKCS7_DATAFINAL				 126
475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_PKCS7_DATAFINAL_ERROR			 125
476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_PKCS7_DATASIGN				 145
477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_PKCS7_PARSE_ERROR			 139
478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_PKCS7_SIG_PARSE_ERROR			 140
479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE	 127
480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_SIGNATURE_FAILURE			 105
481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND		 128
482221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_SIGNING_CTRL_FAILURE			 147
483221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE	 148
484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_SIG_INVALID_MIME_TYPE			 141
485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_SMIME_TEXT_ERROR			 129
486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE		 106
487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_UNABLE_TO_FIND_MEM_BIO			 107
488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST		 108
489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_UNKNOWN_DIGEST_TYPE			 109
490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_UNKNOWN_OPERATION			 110
491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_UNSUPPORTED_CIPHER_TYPE			 111
492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_UNSUPPORTED_CONTENT_TYPE		 112
493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_WRONG_CONTENT_TYPE			 113
494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PKCS7_R_WRONG_PKCS7_TYPE			 114
495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
500