1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/crypto.h */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ====================================================================
3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * Copyright (c) 1998-2006 The OpenSSL Project.  All rights reserved.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the documentation and/or other materials provided with the
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    distribution.
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    software must display the following acknowledgment:
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    endorse or promote products derived from this software without
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    prior written permission. For written permission, please contact
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    openssl-core@openssl.org.
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL"
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    nor may "OpenSSL" appear in their names without prior written
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    permission of the OpenSSL Project.
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    acknowledgment:
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE.
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ====================================================================
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com).  This product includes software written by Tim
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com).
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved.
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com).
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL.
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to.  The following conditions
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA,
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com).
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed.
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used.
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package.
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    documentation and/or other materials provided with the distribution.
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    must display the following acknowledgement:
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes cryptographic software written by
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *     Eric Young (eay@cryptsoft.com)"
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    The word 'cryptographic' can be left out if the rouines from the library
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    being used are not cryptographic related :-).
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the apps directory (application code) you must include an acknowledgement:
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE.
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed.  i.e. this code cannot simply be
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.]
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ====================================================================
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ECDH support in OpenSSL originally developed by
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef HEADER_CRYPTO_H
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define HEADER_CRYPTO_H
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h>
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/e_os2.h>
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_FP_API
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/stack.h>
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/safestack.h>
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/opensslv.h>
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/ossl_typ.h>
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef CHARSET_EBCDIC
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/ebcdic.h>
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Resolve problems on some operating systems with symbol names that clash
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   one way or another */
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/symhacks.h>
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectextern "C" {
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Backward compatibility to SSLeay */
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This is more to be used to check the correct DLL is being used
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in the MS world. */
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SSLEAY_VERSION_NUMBER	OPENSSL_VERSION_NUMBER
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SSLEAY_VERSION		0
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* #define SSLEAY_OPTIONS	1 no longer supported */
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SSLEAY_CFLAGS		2
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SSLEAY_BUILT_ON		3
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SSLEAY_PLATFORM		4
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SSLEAY_DIR		5
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Already declared in ossl_typ.h */
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if 0
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct crypto_ex_data_st CRYPTO_EX_DATA;
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Called when a new object is created */
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project					int idx, long argl, void *argp);
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Called when an object is free()ed */
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project					int idx, long argl, void *argp);
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Called when we need to dup an object */
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d,
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project					int idx, long argl, void *argp);
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* A generic structure to pass assorted data in a expandable way */
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct openssl_item_st
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int code;
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *value;		/* Not used for flag attributes */
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	size_t value_size;	/* Max size of value for output, length for input */
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	size_t *value_length;	/* Returned length of value for output */
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} OPENSSL_ITEM;
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * names in cryptlib.c
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define	CRYPTO_LOCK_ERR			1
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define	CRYPTO_LOCK_EX_DATA		2
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define	CRYPTO_LOCK_X509		3
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define	CRYPTO_LOCK_X509_INFO		4
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define	CRYPTO_LOCK_X509_PKEY		5
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_X509_CRL		6
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_X509_REQ		7
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_DSA			8
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_RSA			9
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_EVP_PKEY		10
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_X509_STORE		11
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_SSL_CTX		12
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_SSL_CERT		13
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_SSL_SESSION		14
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_SSL_SESS_CERT	15
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_SSL			16
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_SSL_METHOD		17
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_RAND		18
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_RAND2		19
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_MALLOC		20
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_BIO			21
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_GETHOSTBYNAME	22
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_GETSERVBYNAME	23
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_READDIR		24
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_RSA_BLINDING	25
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_DH			26
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_MALLOC2		27
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_DSO			28
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_DYNLOCK		29
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_ENGINE		30
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_UI			31
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_ECDSA               32
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_EC			33
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_ECDH		34
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_BN  		35
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_EC_PRE_COMP		36
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_STORE		37
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK_COMP		38
222e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#define CRYPTO_LOCK_FIPS		39
223e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#define CRYPTO_LOCK_FIPS2		40
224e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#define CRYPTO_NUM_LOCKS		41
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_LOCK		1
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_UNLOCK		2
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_READ		4
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_WRITE		8
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_LOCKING
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef CRYPTO_w_lock
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_w_lock(type)	\
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_w_unlock(type)	\
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)
237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_r_lock(type)	\
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__)
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_r_unlock(type)	\
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__)
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_add(addr,amount,type)	\
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__)
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_w_lock(a)
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_w_unlock(a)
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_r_lock(a)
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_r_unlock(a)
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_add(a,b,c)	((*(a))+=(b))
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Some applications as well as some parts of OpenSSL need to allocate
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   and deallocate locks in a dynamic fashion.  The following typedef
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   makes this possible in a type-safe manner.  */
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* struct CRYPTO_dynlock_value has to be defined by the application. */
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int references;
259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct CRYPTO_dynlock_value *data;
260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} CRYPTO_dynlock;
261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following can be used to detect memory leaks in the SSLeay library.
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * It used, it turns on malloc checking */
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_MEM_CHECK_OFF	0x0	/* an enume */
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_MEM_CHECK_ON	0x1	/* a bit */
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_MEM_CHECK_ENABLE	0x2	/* a bit */
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_MEM_CHECK_DISABLE 0x3	/* an enume */
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following are bit values to turn on or off options connected to the
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * malloc checking functionality */
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Adds time to the memory checking information */
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define V_CRYPTO_MDEBUG_TIME	0x1 /* a bit */
276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Adds thread number to the memory checking information */
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define V_CRYPTO_MDEBUG_THREAD	0x2 /* a bit */
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD)
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* predec of the BIO type */
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct bio_st BIO_dummy;
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct crypto_ex_data_st
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
287221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	STACK_OF(void) *sk;
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int dummy; /* gcc is screwing up this data structure :-( */
289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
290221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromDECLARE_STACK_OF(void)
291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This stuff is basically class callback functions
293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */
294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct crypto_ex_data_func_st
296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	long argl;	/* Arbitary long */
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	void *argp;	/* Arbitary void * */
299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_EX_new *new_func;
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_EX_free *free_func;
301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_EX_dup *dup_func;
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} CRYPTO_EX_DATA_FUNCS;
303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS)
305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA
307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * entry.
308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_BIO		0
311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_SSL		1
312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_SSL_CTX		2
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_SSL_SESSION	3
314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_X509_STORE	4
315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_X509_STORE_CTX	5
316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_RSA		6
317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_DSA		7
318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_DH		8
319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_ENGINE		9
320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_X509		10
321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_UI		11
322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_ECDSA		12
323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_ECDH		13
324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_COMP		14
325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_STORE		15
326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Dynamically assigned indexes start from this value (don't use directly, use
328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * via CRYPTO_ex_data_new_class). */
329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_EX_INDEX_USER		100
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This is the default callbacks, but we can have others as well:
333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * this is needed in Win32 where the application malloc and the
334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * library malloc may not be the same.
335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_malloc_init()	CRYPTO_set_mem_functions(\
337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	malloc, realloc, free)
338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD
340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ifndef CRYPTO_MDEBUG /* avoid duplicate #define */
341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  define CRYPTO_MDEBUG
342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# endif
343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Set standard debugging functions (not done by default
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * unless CRYPTO_MDEBUG is defined) */
347221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define CRYPTO_malloc_debug_init()	do {\
348221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	CRYPTO_set_mem_debug_functions(\
349221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		CRYPTO_dbg_malloc,\
350221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		CRYPTO_dbg_realloc,\
351221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		CRYPTO_dbg_free,\
352221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		CRYPTO_dbg_set_options,\
353221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		CRYPTO_dbg_get_options);\
354221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	} while(0)
355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_mem_ctrl(int mode);
357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_is_mem_check_on(void);
358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* for applications */
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON)
361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define MemCheck_stop()	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF)
362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* for library-internal use */
364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define MemCheck_on()	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE)
365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define MemCheck_off()	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE)
366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define is_MemCheck_on() CRYPTO_is_mem_check_on()
367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_malloc(num)	CRYPTO_malloc((int)num,__FILE__,__LINE__)
369e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#define OPENSSL_strdup(str)	CRYPTO_strdup((str),__FILE__,__LINE__)
370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_realloc(addr,num) \
371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__)
372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_realloc_clean(addr,old_num,num) \
373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__)
374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_remalloc(addr,num) \
375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__)
376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_freeFunc	CRYPTO_free
377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_free(addr)	CRYPTO_free(addr)
378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_malloc_locked(num) \
380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	CRYPTO_malloc_locked((int)num,__FILE__,__LINE__)
381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr)
382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst char *SSLeay_version(int type);
385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectunsigned long SSLeay(void);
386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint OPENSSL_issetugid(void);
388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* An opaque type representing an implementation of "ex_data" support */
390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct st_CRYPTO_EX_DATA_IMPL	CRYPTO_EX_DATA_IMPL;
391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Return an opaque pointer to the current "ex_data" implementation */
392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void);
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Sets the "ex_data" implementation to be used (if it's not too late) */
394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i);
395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Get a new "ex_data" class, and return the corresponding "class_index" */
396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_ex_data_new_class(void);
397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Within a given class, get/register a new index */
398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_get_ex_new_index(int class_index, long argl, void *argp,
399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func,
400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		CRYPTO_EX_free *free_func);
401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a given
402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * class (invokes whatever per-class callbacks are applicable) */
403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to,
405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		CRYPTO_EX_DATA *from);
406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular index
408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (relative to the class type involved) */
409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);
410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad,int idx);
411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This function cleans up all "ex_data" state. It mustn't be called under
412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * potential race-conditions. */
413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_cleanup_all_ex_data(void);
414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_get_new_lockid(char *name);
416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */
418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_lock(int mode, int type,const char *file,int line);
419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_locking_callback(void (*func)(int mode,int type,
420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project					      const char *file,int line));
421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file,
422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		int line);
423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type,
424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project					      const char *file, int line));
425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type,
426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project					  const char *file,int line);
427221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
428221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom/* Don't use this structure directly. */
429221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromtypedef struct crypto_threadid_st
430221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	{
431221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	void *ptr;
432221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	unsigned long val;
433221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	} CRYPTO_THREADID;
434221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */
435221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val);
436221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr);
437221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint CRYPTO_THREADID_set_callback(void (*threadid_func)(CRYPTO_THREADID *));
438221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *);
439221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid CRYPTO_THREADID_current(CRYPTO_THREADID *id);
440221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b);
441221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src);
442221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromunsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id);
443221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef OPENSSL_NO_DEPRECATED
444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_id_callback(unsigned long (*func)(void));
445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectunsigned long (*CRYPTO_get_id_callback(void))(void);
446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectunsigned long CRYPTO_thread_id(void);
447221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif
448221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst char *CRYPTO_get_lock_name(int type);
450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_add_lock(int *pointer,int amount,int type, const char *file,
451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		    int line);
452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_get_new_dynlockid(void);
454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_destroy_dynlockid(int i);
455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i);
456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line));
457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line));
458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line));
459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file,int line);
460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file,int line);
461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file,int line);
462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions --
464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * call the latter last if you need different functions */
465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void (*f)(void *));
466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *));
467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_ex_functions(void *(*m)(size_t,const char *,int),
468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                void *(*r)(void *,size_t,const char *,int),
469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                void (*f)(void *));
470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t,const char *,int),
471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                       void (*free_func)(void *));
472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int),
473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   void (*r)(void *,void *,int,const char *,int,int),
474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   void (*f)(void *,int),
475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   void (*so)(long),
476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   long (*go)(void));
477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void (**f)(void *));
478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *));
479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_ex_functions(void *(**m)(size_t,const char *,int),
480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 void *(**r)(void *, size_t,const char *,int),
481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 void (**f)(void *));
482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t,const char *,int),
483656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                        void (**f)(void *));
484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int),
485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    void (**r)(void *,void *,int,const char *,int,int),
486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    void (**f)(void *,int),
487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    void (**so)(long),
488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				    long (**go)(void));
489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_malloc_locked(int num, const char *file, int line);
49104ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstromvoid CRYPTO_free_locked(void *ptr);
492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_malloc(int num, const char *file, int line);
493e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modaduguchar *CRYPTO_strdup(const char *str, const char *file, int line);
49404ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstromvoid CRYPTO_free(void *ptr);
495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_realloc(void *addr,int num, const char *file, int line);
496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file,
497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			   int line);
498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_remalloc(void *addr,int num, const char *file, int line);
499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid OPENSSL_cleanse(void *ptr, size_t len);
501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_mem_debug_options(long bits);
503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong CRYPTO_get_mem_debug_options(void);
504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_push_info(info) \
506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        CRYPTO_push_info_(info, __FILE__, __LINE__);
507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_push_info_(const char *info, const char *file, int line);
508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_pop_info(void);
509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_remove_all_info(void);
510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro;
513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * used as default in CRYPTO_MDEBUG compilations): */
514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The last argument has the following significance:
515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 0:	called before the actual memory allocation has taken place
517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1:	called after the actual memory allocation has taken place
518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p);
520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p);
521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_dbg_free(void *addr,int before_p);
522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Tell the debugging code about options.  By default, the following values
523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply:
524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 0:                           Clear all options.
526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * V_CRYPTO_MDEBUG_TIME (1):    Set the "Show Time" option.
527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * V_CRYPTO_MDEBUG_THREAD (2):  Set the "Show Thread Number" option.
528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * V_CRYPTO_MDEBUG_ALL (3):     1 + 2
529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_dbg_set_options(long bits);
531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong CRYPTO_dbg_get_options(void);
532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_FP_API
535656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_mem_leaks_fp(FILE *);
536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
537656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_mem_leaks(struct bio_st *bio);
538656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* unsigned long order, char *file, int line, int num_bytes, char *addr */
539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *);
540656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb);
541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* die if we have to */
543656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid OpenSSLDie(const char *file,int line,const char *assertion);
544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_assert(e)       (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1))
545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
546656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectunsigned long *OPENSSL_ia32cap_loc(void);
547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc()))
548e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modaduguint OPENSSL_isservice(void);
549e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
550392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint FIPS_mode(void);
551392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint FIPS_mode_set(int r);
552392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
553392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromvoid OPENSSL_init(void);
554392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
555392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define fips_md_init(alg) fips_md_init_ctx(alg, alg)
556392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
557392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef OPENSSL_FIPS
558392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define fips_md_init_ctx(alg, cx) \
559392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	int alg##_Init(cx##_CTX *c) \
560392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	{ \
561392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \
562392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		"Low level API call to digest " #alg " forbidden in FIPS mode!"); \
563392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	return private_##alg##_Init(c); \
564392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	} \
565392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	int private_##alg##_Init(cx##_CTX *c)
566392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
567392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define fips_cipher_abort(alg) \
568392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \
569392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		"Low level API call to cipher " #alg " forbidden in FIPS mode!")
570392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
571392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
572392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define fips_md_init_ctx(alg, cx) \
573392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	int alg##_Init(cx##_CTX *c)
574392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define fips_cipher_abort(alg) while(0)
575392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
576392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
577fa75fdba32eae335f286afb1dc93ef1b5ec72615Brian Carlstrom/* CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. It
578fa75fdba32eae335f286afb1dc93ef1b5ec72615Brian Carlstrom * takes an amount of time dependent on |len|, but independent of the contents
579fa75fdba32eae335f286afb1dc93ef1b5ec72615Brian Carlstrom * of |a| and |b|. Unlike memcmp, it cannot be used to put elements into a
580fa75fdba32eae335f286afb1dc93ef1b5ec72615Brian Carlstrom * defined order as the return value when a != b is undefined, other than to be
581fa75fdba32eae335f286afb1dc93ef1b5ec72615Brian Carlstrom * non-zero. */
582fa75fdba32eae335f286afb1dc93ef1b5ec72615Brian Carlstromint CRYPTO_memcmp(const void *a, const void *b, size_t len);
583fa75fdba32eae335f286afb1dc93ef1b5ec72615Brian Carlstrom
584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* BEGIN ERROR CODES */
585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following lines are auto generated by the script mkerr.pl. Any changes
586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * made after this point may be overwritten when the script is next run.
587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid ERR_load_CRYPTO_strings(void);
589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Error codes for the CRYPTO functions. */
591656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Function codes. */
593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX		 100
594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID		 103
595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_CRYPTO_GET_NEW_LOCKID			 101
596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_CRYPTO_SET_EX_DATA			 102
597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_DEF_ADD_INDEX				 104
598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_DEF_GET_CLASS				 105
599392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define CRYPTO_F_FIPS_MODE_SET				 109
600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_INT_DUP_EX_DATA			 106
601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_INT_FREE_EX_DATA			 107
602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_F_INT_NEW_EX_DATA			 108
603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Reason codes. */
605392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED		 101
606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK		 100
607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
612