xref: /aosp_15_r20/external/boringssl/src/include/openssl/crypto.h (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (c) 2014, Google Inc.
2*8fb009dcSAndroid Build Coastguard Worker  *
3*8fb009dcSAndroid Build Coastguard Worker  * Permission to use, copy, modify, and/or distribute this software for any
4*8fb009dcSAndroid Build Coastguard Worker  * purpose with or without fee is hereby granted, provided that the above
5*8fb009dcSAndroid Build Coastguard Worker  * copyright notice and this permission notice appear in all copies.
6*8fb009dcSAndroid Build Coastguard Worker  *
7*8fb009dcSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8*8fb009dcSAndroid Build Coastguard Worker  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9*8fb009dcSAndroid Build Coastguard Worker  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10*8fb009dcSAndroid Build Coastguard Worker  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11*8fb009dcSAndroid Build Coastguard Worker  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12*8fb009dcSAndroid Build Coastguard Worker  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13*8fb009dcSAndroid Build Coastguard Worker  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14*8fb009dcSAndroid Build Coastguard Worker 
15*8fb009dcSAndroid Build Coastguard Worker #ifndef OPENSSL_HEADER_CRYPTO_H
16*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_HEADER_CRYPTO_H
17*8fb009dcSAndroid Build Coastguard Worker 
18*8fb009dcSAndroid Build Coastguard Worker #include <openssl/base.h>
19*8fb009dcSAndroid Build Coastguard Worker #include <openssl/sha.h>
20*8fb009dcSAndroid Build Coastguard Worker 
21*8fb009dcSAndroid Build Coastguard Worker // Upstream OpenSSL defines |OPENSSL_malloc|, etc., in crypto.h rather than
22*8fb009dcSAndroid Build Coastguard Worker // mem.h.
23*8fb009dcSAndroid Build Coastguard Worker #include <openssl/mem.h>
24*8fb009dcSAndroid Build Coastguard Worker 
25*8fb009dcSAndroid Build Coastguard Worker // Upstream OpenSSL defines |CRYPTO_LOCK|, etc., in crypto.h rather than
26*8fb009dcSAndroid Build Coastguard Worker // thread.h.
27*8fb009dcSAndroid Build Coastguard Worker #include <openssl/thread.h>
28*8fb009dcSAndroid Build Coastguard Worker 
29*8fb009dcSAndroid Build Coastguard Worker 
30*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus)
31*8fb009dcSAndroid Build Coastguard Worker extern "C" {
32*8fb009dcSAndroid Build Coastguard Worker #endif
33*8fb009dcSAndroid Build Coastguard Worker 
34*8fb009dcSAndroid Build Coastguard Worker 
35*8fb009dcSAndroid Build Coastguard Worker // crypto.h contains functions for library-wide initialization and properties.
36*8fb009dcSAndroid Build Coastguard Worker 
37*8fb009dcSAndroid Build Coastguard Worker 
38*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_is_confidential_build returns one if the linked version of BoringSSL
39*8fb009dcSAndroid Build Coastguard Worker // has been built with the BORINGSSL_CONFIDENTIAL define and zero otherwise.
40*8fb009dcSAndroid Build Coastguard Worker //
41*8fb009dcSAndroid Build Coastguard Worker // This is used by some consumers to identify whether they are using an
42*8fb009dcSAndroid Build Coastguard Worker // internal version of BoringSSL.
43*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int CRYPTO_is_confidential_build(void);
44*8fb009dcSAndroid Build Coastguard Worker 
45*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_has_asm returns one unless BoringSSL was built with OPENSSL_NO_ASM,
46*8fb009dcSAndroid Build Coastguard Worker // in which case it returns zero.
47*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int CRYPTO_has_asm(void);
48*8fb009dcSAndroid Build Coastguard Worker 
49*8fb009dcSAndroid Build Coastguard Worker // BORINGSSL_self_test triggers the FIPS KAT-based self tests. It returns one on
50*8fb009dcSAndroid Build Coastguard Worker // success and zero on error.
51*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int BORINGSSL_self_test(void);
52*8fb009dcSAndroid Build Coastguard Worker 
53*8fb009dcSAndroid Build Coastguard Worker // BORINGSSL_integrity_test triggers the module's integrity test where the code
54*8fb009dcSAndroid Build Coastguard Worker // and data of the module is matched against a hash injected at build time. It
55*8fb009dcSAndroid Build Coastguard Worker // returns one on success or zero if there's a mismatch. This function only
56*8fb009dcSAndroid Build Coastguard Worker // exists if the module was built in FIPS mode without ASAN.
57*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int BORINGSSL_integrity_test(void);
58*8fb009dcSAndroid Build Coastguard Worker 
59*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_pre_sandbox_init initializes the crypto library, pre-acquiring some
60*8fb009dcSAndroid Build Coastguard Worker // unusual resources to aid running in sandboxed environments. It is safe to
61*8fb009dcSAndroid Build Coastguard Worker // call this function multiple times and concurrently from multiple threads.
62*8fb009dcSAndroid Build Coastguard Worker //
63*8fb009dcSAndroid Build Coastguard Worker // For more details on using BoringSSL in a sandboxed environment, see
64*8fb009dcSAndroid Build Coastguard Worker // SANDBOXING.md in the source tree.
65*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void CRYPTO_pre_sandbox_init(void);
66*8fb009dcSAndroid Build Coastguard Worker 
67*8fb009dcSAndroid Build Coastguard Worker #if defined(OPENSSL_ARM) && defined(OPENSSL_LINUX) && \
68*8fb009dcSAndroid Build Coastguard Worker     !defined(OPENSSL_STATIC_ARMCAP)
69*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_needs_hwcap2_workaround returns one if the ARMv8 AArch32 AT_HWCAP2
70*8fb009dcSAndroid Build Coastguard Worker // workaround was needed. See https://crbug.com/boringssl/46.
71*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int CRYPTO_needs_hwcap2_workaround(void);
72*8fb009dcSAndroid Build Coastguard Worker #endif  // OPENSSL_ARM && OPENSSL_LINUX && !OPENSSL_STATIC_ARMCAP
73*8fb009dcSAndroid Build Coastguard Worker 
74*8fb009dcSAndroid Build Coastguard Worker 
75*8fb009dcSAndroid Build Coastguard Worker // FIPS monitoring
76*8fb009dcSAndroid Build Coastguard Worker 
77*8fb009dcSAndroid Build Coastguard Worker // FIPS_mode returns zero unless BoringSSL is built with BORINGSSL_FIPS, in
78*8fb009dcSAndroid Build Coastguard Worker // which case it returns one.
79*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int FIPS_mode(void);
80*8fb009dcSAndroid Build Coastguard Worker 
81*8fb009dcSAndroid Build Coastguard Worker // fips_counter_t denotes specific APIs/algorithms. A counter is maintained for
82*8fb009dcSAndroid Build Coastguard Worker // each in FIPS mode so that tests can be written to assert that the expected,
83*8fb009dcSAndroid Build Coastguard Worker // FIPS functions are being called by a certain peice of code.
84*8fb009dcSAndroid Build Coastguard Worker enum fips_counter_t {
85*8fb009dcSAndroid Build Coastguard Worker   fips_counter_evp_aes_128_gcm = 0,
86*8fb009dcSAndroid Build Coastguard Worker   fips_counter_evp_aes_256_gcm = 1,
87*8fb009dcSAndroid Build Coastguard Worker   fips_counter_evp_aes_128_ctr = 2,
88*8fb009dcSAndroid Build Coastguard Worker   fips_counter_evp_aes_256_ctr = 3,
89*8fb009dcSAndroid Build Coastguard Worker 
90*8fb009dcSAndroid Build Coastguard Worker   fips_counter_max = 3,
91*8fb009dcSAndroid Build Coastguard Worker };
92*8fb009dcSAndroid Build Coastguard Worker 
93*8fb009dcSAndroid Build Coastguard Worker // FIPS_read_counter returns a counter of the number of times the specific
94*8fb009dcSAndroid Build Coastguard Worker // function denoted by |counter| has been used. This always returns zero unless
95*8fb009dcSAndroid Build Coastguard Worker // BoringSSL was built with BORINGSSL_FIPS_COUNTERS defined.
96*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT size_t FIPS_read_counter(enum fips_counter_t counter);
97*8fb009dcSAndroid Build Coastguard Worker 
98*8fb009dcSAndroid Build Coastguard Worker 
99*8fb009dcSAndroid Build Coastguard Worker // Deprecated functions.
100*8fb009dcSAndroid Build Coastguard Worker 
101*8fb009dcSAndroid Build Coastguard Worker // OPENSSL_VERSION_TEXT contains a string the identifies the version of
102*8fb009dcSAndroid Build Coastguard Worker // “OpenSSL”. node.js requires a version number in this text.
103*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1 (compatible; BoringSSL)"
104*8fb009dcSAndroid Build Coastguard Worker 
105*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_VERSION 0
106*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_CFLAGS 1
107*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_BUILT_ON 2
108*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_PLATFORM 3
109*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_DIR 4
110*8fb009dcSAndroid Build Coastguard Worker 
111*8fb009dcSAndroid Build Coastguard Worker // OpenSSL_version is a compatibility function that returns the string
112*8fb009dcSAndroid Build Coastguard Worker // "BoringSSL" if |which| is |OPENSSL_VERSION| and placeholder strings
113*8fb009dcSAndroid Build Coastguard Worker // otherwise.
114*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT const char *OpenSSL_version(int which);
115*8fb009dcSAndroid Build Coastguard Worker 
116*8fb009dcSAndroid Build Coastguard Worker #define SSLEAY_VERSION OPENSSL_VERSION
117*8fb009dcSAndroid Build Coastguard Worker #define SSLEAY_CFLAGS OPENSSL_CFLAGS
118*8fb009dcSAndroid Build Coastguard Worker #define SSLEAY_BUILT_ON OPENSSL_BUILT_ON
119*8fb009dcSAndroid Build Coastguard Worker #define SSLEAY_PLATFORM OPENSSL_PLATFORM
120*8fb009dcSAndroid Build Coastguard Worker #define SSLEAY_DIR OPENSSL_DIR
121*8fb009dcSAndroid Build Coastguard Worker 
122*8fb009dcSAndroid Build Coastguard Worker // SSLeay_version calls |OpenSSL_version|.
123*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT const char *SSLeay_version(int which);
124*8fb009dcSAndroid Build Coastguard Worker 
125*8fb009dcSAndroid Build Coastguard Worker // SSLeay is a compatibility function that returns OPENSSL_VERSION_NUMBER from
126*8fb009dcSAndroid Build Coastguard Worker // base.h.
127*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT unsigned long SSLeay(void);
128*8fb009dcSAndroid Build Coastguard Worker 
129*8fb009dcSAndroid Build Coastguard Worker // OpenSSL_version_num is a compatibility function that returns
130*8fb009dcSAndroid Build Coastguard Worker // OPENSSL_VERSION_NUMBER from base.h.
131*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT unsigned long OpenSSL_version_num(void);
132*8fb009dcSAndroid Build Coastguard Worker 
133*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_malloc_init returns one.
134*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int CRYPTO_malloc_init(void);
135*8fb009dcSAndroid Build Coastguard Worker 
136*8fb009dcSAndroid Build Coastguard Worker // OPENSSL_malloc_init returns one.
137*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int OPENSSL_malloc_init(void);
138*8fb009dcSAndroid Build Coastguard Worker 
139*8fb009dcSAndroid Build Coastguard Worker // ENGINE_load_builtin_engines does nothing.
140*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void ENGINE_load_builtin_engines(void);
141*8fb009dcSAndroid Build Coastguard Worker 
142*8fb009dcSAndroid Build Coastguard Worker // ENGINE_register_all_complete returns one.
143*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int ENGINE_register_all_complete(void);
144*8fb009dcSAndroid Build Coastguard Worker 
145*8fb009dcSAndroid Build Coastguard Worker // OPENSSL_load_builtin_modules does nothing.
146*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void OPENSSL_load_builtin_modules(void);
147*8fb009dcSAndroid Build Coastguard Worker 
148*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0
149*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0
150*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_ADD_ALL_CIPHERS 0
151*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_ADD_ALL_DIGESTS 0
152*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0
153*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0
154*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_LOAD_CONFIG 0
155*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_NO_LOAD_CONFIG 0
156*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_INIT_NO_ATEXIT 0
157*8fb009dcSAndroid Build Coastguard Worker 
158*8fb009dcSAndroid Build Coastguard Worker // OPENSSL_init_crypto returns one.
159*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int OPENSSL_init_crypto(uint64_t opts,
160*8fb009dcSAndroid Build Coastguard Worker                                        const OPENSSL_INIT_SETTINGS *settings);
161*8fb009dcSAndroid Build Coastguard Worker 
162*8fb009dcSAndroid Build Coastguard Worker // OPENSSL_cleanup does nothing.
163*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void OPENSSL_cleanup(void);
164*8fb009dcSAndroid Build Coastguard Worker 
165*8fb009dcSAndroid Build Coastguard Worker // FIPS_mode_set returns one if |on| matches whether BoringSSL was built with
166*8fb009dcSAndroid Build Coastguard Worker // |BORINGSSL_FIPS| and zero otherwise.
167*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int FIPS_mode_set(int on);
168*8fb009dcSAndroid Build Coastguard Worker 
169*8fb009dcSAndroid Build Coastguard Worker // FIPS_module_name returns the name of the FIPS module.
170*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT const char *FIPS_module_name(void);
171*8fb009dcSAndroid Build Coastguard Worker 
172*8fb009dcSAndroid Build Coastguard Worker // FIPS_module_hash returns the 32-byte hash of the FIPS module.
173*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT const uint8_t* FIPS_module_hash(void);
174*8fb009dcSAndroid Build Coastguard Worker 
175*8fb009dcSAndroid Build Coastguard Worker // FIPS_version returns the version of the FIPS module, or zero if the build
176*8fb009dcSAndroid Build Coastguard Worker // isn't exactly at a verified version. The version, expressed in base 10, will
177*8fb009dcSAndroid Build Coastguard Worker // be a date in the form yyyymmddXX where XX is often "00", but can be
178*8fb009dcSAndroid Build Coastguard Worker // incremented if multiple versions are defined on a single day.
179*8fb009dcSAndroid Build Coastguard Worker //
180*8fb009dcSAndroid Build Coastguard Worker // (This format exceeds a |uint32_t| in the year 4294.)
181*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT uint32_t FIPS_version(void);
182*8fb009dcSAndroid Build Coastguard Worker 
183*8fb009dcSAndroid Build Coastguard Worker // FIPS_query_algorithm_status returns one if |algorithm| is FIPS validated in
184*8fb009dcSAndroid Build Coastguard Worker // the current BoringSSL and zero otherwise.
185*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int FIPS_query_algorithm_status(const char *algorithm);
186*8fb009dcSAndroid Build Coastguard Worker 
187*8fb009dcSAndroid Build Coastguard Worker #if defined(OPENSSL_ARM) && defined(OPENSSL_LINUX) && \
188*8fb009dcSAndroid Build Coastguard Worker     !defined(OPENSSL_STATIC_ARMCAP)
189*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_has_broken_NEON returns zero.
190*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int CRYPTO_has_broken_NEON(void);
191*8fb009dcSAndroid Build Coastguard Worker #endif
192*8fb009dcSAndroid Build Coastguard Worker 
193*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_library_init does nothing. Historically, it was needed in some build
194*8fb009dcSAndroid Build Coastguard Worker // configurations to initialization the library. This is no longer necessary.
195*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void CRYPTO_library_init(void);
196*8fb009dcSAndroid Build Coastguard Worker 
197*8fb009dcSAndroid Build Coastguard Worker 
198*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus)
199*8fb009dcSAndroid Build Coastguard Worker }  // extern C
200*8fb009dcSAndroid Build Coastguard Worker #endif
201*8fb009dcSAndroid Build Coastguard Worker 
202*8fb009dcSAndroid Build Coastguard Worker #endif  // OPENSSL_HEADER_CRYPTO_H
203