blob: 6dd5f23f9cbd2a452b6ba381fa30a442f813fb15 [file] [log] [blame]
Adam Langleyfd499932017-04-04 14:21:43 -07001add_subdirectory(fipsmodule)
Adam Langley95c29f32014-06-20 12:00:00 -07002
Adam Langleyd72e47f2019-05-09 16:39:49 -07003if(FIPS_DELOCATE OR FIPS_SHARED)
Adam Langleyfd499932017-04-04 14:21:43 -07004 SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES EXTERNAL_OBJECT true)
5 SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES GENERATED true)
6
7 set(
8 CRYPTO_FIPS_OBJECTS
9
10 fipsmodule/bcm.o
11 )
12endif()
13
David Benjamin19676212023-01-25 10:03:53 -050014set(
15 CRYPTO_SOURCES_ASM
16 curve25519/asm/x25519-asm-arm.S
Adam Langley04b3a962023-02-08 21:08:49 +000017 hrss/asm/poly_rq_mul.S
David Benjamin19676212023-01-25 10:03:53 -050018 poly1305/poly1305_arm_asm.S
David Benjamin3f680b02023-06-07 17:43:52 -040019 ../third_party/fiat/asm/fiat_curve25519_adx_mul.S
20 ../third_party/fiat/asm/fiat_curve25519_adx_square.S
Andres Erbsen20c94062023-09-25 19:28:44 +000021 ../third_party/fiat/asm/fiat_p256_adx_mul.S
22 ../third_party/fiat/asm/fiat_p256_adx_sqr.S
David Benjamin19676212023-01-25 10:03:53 -050023)
24perlasm(CRYPTO_SOURCES aarch64 chacha/chacha-armv8 chacha/asm/chacha-armv8.pl)
25perlasm(CRYPTO_SOURCES aarch64 cipher_extra/chacha20_poly1305_armv8 cipher_extra/asm/chacha20_poly1305_armv8.pl)
26perlasm(CRYPTO_SOURCES aarch64 test/trampoline-armv8 test/asm/trampoline-armv8.pl)
27perlasm(CRYPTO_SOURCES arm chacha/chacha-armv4 chacha/asm/chacha-armv4.pl)
28perlasm(CRYPTO_SOURCES arm test/trampoline-armv4 test/asm/trampoline-armv4.pl)
David Benjamin19676212023-01-25 10:03:53 -050029perlasm(CRYPTO_SOURCES x86 chacha/chacha-x86 chacha/asm/chacha-x86.pl)
30perlasm(CRYPTO_SOURCES x86 test/trampoline-x86 test/asm/trampoline-x86.pl)
31perlasm(CRYPTO_SOURCES x86_64 chacha/chacha-x86_64 chacha/asm/chacha-x86_64.pl)
32perlasm(CRYPTO_SOURCES x86_64 cipher_extra/aes128gcmsiv-x86_64 cipher_extra/asm/aes128gcmsiv-x86_64.pl)
33perlasm(CRYPTO_SOURCES x86_64 cipher_extra/chacha20_poly1305_x86_64 cipher_extra/asm/chacha20_poly1305_x86_64.pl)
34perlasm(CRYPTO_SOURCES x86_64 test/trampoline-x86_64 test/asm/trampoline-x86_64.pl)
David Benjamin1fcae842018-09-05 15:31:48 -050035
David Benjamin681ff272018-09-05 16:40:13 -050036add_custom_command(
37 OUTPUT err_data.c
38 COMMAND ${GO_EXECUTABLE} run err_data_generate.go > ${CMAKE_CURRENT_BINARY_DIR}/err_data.c
39 DEPENDS
40 err/err_data_generate.go
41 err/asn1.errordata
42 err/bio.errordata
43 err/bn.errordata
44 err/cipher.errordata
45 err/conf.errordata
46 err/dh.errordata
47 err/digest.errordata
48 err/dsa.errordata
49 err/ecdh.errordata
50 err/ecdsa.errordata
51 err/ec.errordata
52 err/engine.errordata
53 err/evp.errordata
54 err/hkdf.errordata
55 err/obj.errordata
56 err/pem.errordata
57 err/pkcs7.errordata
58 err/pkcs8.errordata
59 err/rsa.errordata
60 err/ssl.errordata
Steven Valdez0b710a32020-02-14 10:34:53 -050061 err/trust_token.errordata
David Benjamin681ff272018-09-05 16:40:13 -050062 err/x509.errordata
63 err/x509v3.errordata
64 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/err
65)
66
Adam Langleyfd499932017-04-04 14:21:43 -070067add_library(
68 crypto
69
David Benjamin681ff272018-09-05 16:40:13 -050070 asn1/a_bitstr.c
71 asn1/a_bool.c
72 asn1/a_d2i_fp.c
73 asn1/a_dup.c
David Benjamin681ff272018-09-05 16:40:13 -050074 asn1/a_gentm.c
75 asn1/a_i2d_fp.c
76 asn1/a_int.c
77 asn1/a_mbstr.c
78 asn1/a_object.c
79 asn1/a_octet.c
David Benjamin0dcbc6e2021-08-08 17:33:57 -040080 asn1/a_strex.c
David Benjamin681ff272018-09-05 16:40:13 -050081 asn1/a_strnid.c
82 asn1/a_time.c
83 asn1/a_type.c
84 asn1/a_utctm.c
David Benjamin681ff272018-09-05 16:40:13 -050085 asn1/asn1_lib.c
86 asn1/asn1_par.c
87 asn1/asn_pack.c
David Benjamin681ff272018-09-05 16:40:13 -050088 asn1/f_int.c
89 asn1/f_string.c
90 asn1/tasn_dec.c
91 asn1/tasn_enc.c
92 asn1/tasn_fre.c
93 asn1/tasn_new.c
94 asn1/tasn_typ.c
95 asn1/tasn_utl.c
Bob Beckccd665d2022-07-29 15:57:00 -060096 asn1/posix_time.c
David Benjamin681ff272018-09-05 16:40:13 -050097 base64/base64.c
98 bio/bio.c
99 bio/bio_mem.c
100 bio/connect.c
David Benjamindf136912023-07-14 17:04:13 -0400101 bio/errno.c
David Benjamin681ff272018-09-05 16:40:13 -0500102 bio/fd.c
103 bio/file.c
104 bio/hexdump.c
105 bio/pair.c
106 bio/printf.c
107 bio/socket.c
108 bio/socket_helper.c
Adam Langleye1333452021-01-21 11:56:52 -0800109 blake2/blake2.c
David Benjamin681ff272018-09-05 16:40:13 -0500110 bn_extra/bn_asn1.c
111 bn_extra/convert.c
112 buf/buf.c
113 bytestring/asn1_compat.c
114 bytestring/ber.c
115 bytestring/cbb.c
116 bytestring/cbs.c
117 bytestring/unicode.c
118 chacha/chacha.c
119 cipher_extra/cipher_extra.c
120 cipher_extra/derive_key.c
David Benjamin681ff272018-09-05 16:40:13 -0500121 cipher_extra/e_aesctrhmac.c
122 cipher_extra/e_aesgcmsiv.c
123 cipher_extra/e_chacha20poly1305.c
Adam Langleya9195392022-02-04 11:43:59 -0800124 cipher_extra/e_des.c
David Benjamin681ff272018-09-05 16:40:13 -0500125 cipher_extra/e_null.c
126 cipher_extra/e_rc2.c
127 cipher_extra/e_rc4.c
128 cipher_extra/e_tls.c
129 cipher_extra/tls_cbc.c
David Benjamin681ff272018-09-05 16:40:13 -0500130 conf/conf.c
David Benjamin295b3132021-12-21 18:54:15 -0500131 cpu_aarch64_apple.c
Bob Beck4540c3c2023-03-08 12:40:29 -0700132 cpu_aarch64_openbsd.c
David Benjamin295b3132021-12-21 18:54:15 -0500133 cpu_aarch64_fuchsia.c
134 cpu_aarch64_linux.c
Pierre-Clément Tosic49cb592023-04-05 12:34:30 +0100135 cpu_aarch64_sysreg.c
David Benjamin295b3132021-12-21 18:54:15 -0500136 cpu_aarch64_win.c
Sergey A. Osokind66bba92022-10-12 08:24:45 -0400137 cpu_arm_freebsd.c
David Benjamin295b3132021-12-21 18:54:15 -0500138 cpu_arm_linux.c
David Benjamin295b3132021-12-21 18:54:15 -0500139 cpu_intel.c
David Benjamin681ff272018-09-05 16:40:13 -0500140 crypto.c
David Benjamin47b1e392020-04-23 11:51:56 -0400141 curve25519/curve25519.c
Andres Erbsen43f88912023-05-22 20:51:15 +0000142 curve25519/curve25519_64_adx.c
David Benjamin681ff272018-09-05 16:40:13 -0500143 curve25519/spake25519.c
Adam Langleya9195392022-02-04 11:43:59 -0800144 des/des.c
Adam Langleyce7f0882020-12-10 13:13:44 -0800145 dh_extra/params.c
146 dh_extra/dh_asn1.c
David Benjamin681ff272018-09-05 16:40:13 -0500147 digest_extra/digest_extra.c
148 dsa/dsa.c
149 dsa/dsa_asn1.c
150 ecdh_extra/ecdh_extra.c
151 ecdsa_extra/ecdsa_asn1.c
152 ec_extra/ec_asn1.c
David Benjaminbc4c09d2019-10-11 11:54:37 -0400153 ec_extra/ec_derive.c
David Benjamina49c6172020-04-06 16:28:36 -0400154 ec_extra/hash_to_curve.c
David Benjamin681ff272018-09-05 16:40:13 -0500155 err/err.c
156 err_data.c
157 engine/engine.c
David Benjamin681ff272018-09-05 16:40:13 -0500158 evp/evp.c
159 evp/evp_asn1.c
160 evp/evp_ctx.c
161 evp/p_dsa_asn1.c
162 evp/p_ec.c
163 evp/p_ec_asn1.c
164 evp/p_ed25519.c
165 evp/p_ed25519_asn1.c
David Benjamin44872e12022-06-05 00:31:29 -0400166 evp/p_hkdf.c
David Benjamin681ff272018-09-05 16:40:13 -0500167 evp/p_rsa.c
168 evp/p_rsa_asn1.c
David Benjamin2c657072019-07-20 18:54:57 -0400169 evp/p_x25519.c
170 evp/p_x25519_asn1.c
David Benjamin681ff272018-09-05 16:40:13 -0500171 evp/pbkdf.c
172 evp/print.c
173 evp/scrypt.c
174 evp/sign.c
175 ex_data.c
Daniel McArdle8b601c82020-07-16 14:10:52 -0400176 hpke/hpke.c
Adam Langley7b935932018-11-12 13:53:42 -0800177 hrss/hrss.c
Guillaume Endignoux4df6f972023-10-19 16:21:47 +0200178 keccak/keccak.c
Sophie Schmieg58472cc2023-03-07 00:39:31 +0000179 kyber/kyber.c
David Benjamin681ff272018-09-05 16:40:13 -0500180 lhash/lhash.c
181 mem.c
182 obj/obj.c
183 obj/obj_xref.c
184 pem/pem_all.c
185 pem/pem_info.c
186 pem/pem_lib.c
187 pem/pem_oth.c
188 pem/pem_pk8.c
189 pem/pem_pkey.c
190 pem/pem_x509.c
191 pem/pem_xaux.c
192 pkcs7/pkcs7.c
193 pkcs7/pkcs7_x509.c
194 pkcs8/pkcs8.c
195 pkcs8/pkcs8_x509.c
196 pkcs8/p5_pbev2.c
197 poly1305/poly1305.c
198 poly1305/poly1305_arm.c
199 poly1305/poly1305_vec.c
200 pool/pool.c
201 rand_extra/deterministic.c
202 rand_extra/forkunsafe.c
Bob Beck53f09ad2023-07-04 07:48:12 +0000203 rand_extra/getentropy.c
204 rand_extra/ios.c
Adam Langleya3a98942020-12-01 10:38:15 -0800205 rand_extra/passive.c
David Benjamin681ff272018-09-05 16:40:13 -0500206 rand_extra/rand_extra.c
Bob Beck2b8a0572023-07-10 13:17:59 -0600207 rand_extra/trusty.c
David Benjamin681ff272018-09-05 16:40:13 -0500208 rand_extra/windows.c
209 rc4/rc4.c
David Benjamina05691d2023-01-08 16:43:23 -0800210 refcount.c
David Benjamin681ff272018-09-05 16:40:13 -0500211 rsa_extra/rsa_asn1.c
Adam Langley89de6e12023-03-31 14:33:48 -0700212 rsa_extra/rsa_crypt.c
David Benjamin681ff272018-09-05 16:40:13 -0500213 rsa_extra/rsa_print.c
Stefan Koelblf714cb22023-06-21 12:20:20 +0000214 spx/address.c
215 spx/fors.c
216 spx/merkle.c
217 spx/spx.c
218 spx/thash.c
219 spx/spx_util.c
220 spx/wots.c
David Benjamin681ff272018-09-05 16:40:13 -0500221 stack/stack.c
Adam Langley09050cb2019-07-10 11:12:24 -0700222 siphash/siphash.c
David Benjamin681ff272018-09-05 16:40:13 -0500223 thread.c
224 thread_none.c
225 thread_pthread.c
226 thread_win.c
Steven Valdez538a1242019-12-16 12:12:31 -0500227 trust_token/pmbtoken.c
228 trust_token/trust_token.c
Steven Valdezf2b2ef82020-09-21 11:39:22 -0400229 trust_token/voprf.c
David Benjamin681ff272018-09-05 16:40:13 -0500230 x509/a_digest.c
231 x509/a_sign.c
David Benjamin681ff272018-09-05 16:40:13 -0500232 x509/a_verify.c
233 x509/algorithm.c
234 x509/asn1_gen.c
235 x509/by_dir.c
236 x509/by_file.c
237 x509/i2d_pr.c
David Benjamin0dcbc6e2021-08-08 17:33:57 -0400238 x509/name_print.c
David Benjamin029d0e72022-12-26 19:38:40 -0500239 x509/policy.c
David Benjamin681ff272018-09-05 16:40:13 -0500240 x509/rsa_pss.c
241 x509/t_crl.c
242 x509/t_req.c
243 x509/t_x509.c
244 x509/t_x509a.c
David Benjamin861cb312023-11-20 23:41:55 -0500245 x509/v3_akey.c
246 x509/v3_akeya.c
247 x509/v3_alt.c
248 x509/v3_bcons.c
249 x509/v3_bitst.c
250 x509/v3_conf.c
251 x509/v3_cpols.c
252 x509/v3_crld.c
253 x509/v3_enum.c
254 x509/v3_extku.c
255 x509/v3_genn.c
256 x509/v3_ia5.c
257 x509/v3_info.c
258 x509/v3_int.c
259 x509/v3_lib.c
260 x509/v3_ncons.c
261 x509/v3_ocsp.c
262 x509/v3_pcons.c
263 x509/v3_pmaps.c
264 x509/v3_prn.c
265 x509/v3_purp.c
266 x509/v3_skey.c
267 x509/v3_utl.c
268 x509/x_algor.c
269 x509/x_all.c
270 x509/x_attrib.c
271 x509/x_crl.c
272 x509/x_exten.c
273 x509/x_name.c
274 x509/x_pubkey.c
275 x509/x_req.c
276 x509/x_sig.c
277 x509/x_spki.c
278 x509/x_val.c
279 x509/x_x509.c
280 x509/x_x509a.c
David Benjamin681ff272018-09-05 16:40:13 -0500281 x509/x509_att.c
282 x509/x509_cmp.c
283 x509/x509_d2.c
284 x509/x509_def.c
285 x509/x509_ext.c
286 x509/x509_lu.c
287 x509/x509_obj.c
David Benjamin681ff272018-09-05 16:40:13 -0500288 x509/x509_req.c
289 x509/x509_set.c
290 x509/x509_trs.c
291 x509/x509_txt.c
292 x509/x509_v3.c
293 x509/x509_vfy.c
294 x509/x509_vpm.c
David Benjamin861cb312023-11-20 23:41:55 -0500295 x509/x509.c
David Benjamin681ff272018-09-05 16:40:13 -0500296 x509/x509cset.c
297 x509/x509name.c
298 x509/x509rset.c
299 x509/x509spki.c
David Benjamin681ff272018-09-05 16:40:13 -0500300
Adam Langleyfd499932017-04-04 14:21:43 -0700301 $<TARGET_OBJECTS:fipsmodule>
Adam Langleyfd499932017-04-04 14:21:43 -0700302 ${CRYPTO_FIPS_OBJECTS}
Adam Langley95c29f32014-06-20 12:00:00 -0700303)
David Benjamin19676212023-01-25 10:03:53 -0500304if(OPENSSL_ASM)
305 target_sources(crypto PRIVATE ${CRYPTO_SOURCES_ASM})
306endif()
307if(OPENSSL_NASM)
308 target_sources(crypto PRIVATE ${CRYPTO_SOURCES_NASM})
309endif()
David Benjamin0e685202023-02-04 20:06:30 -0500310target_include_directories(crypto PUBLIC
David Benjamin8c4ec3b2023-02-27 12:46:12 -0500311 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
David Benjamin19676212023-01-25 10:03:53 -0500312 $<INSTALL_INTERFACE:include>
Daniel Thornburgh2fc6d382022-04-04 11:23:56 -0700313)
David Benjamine5f72662023-01-29 18:59:45 -0500314install_if_enabled(TARGETS crypto EXPORT OpenSSLTargets ${INSTALL_DESTINATION_DEFAULT})
Daniel Thornburgh2fc6d382022-04-04 11:23:56 -0700315set_property(TARGET crypto PROPERTY EXPORT_NAME Crypto)
Adam Langley95c29f32014-06-20 12:00:00 -0700316
Adam Langleyd72e47f2019-05-09 16:39:49 -0700317if(FIPS_SHARED)
318 # Rewrite libcrypto.so to inject the correct module hash value. This assumes
319 # UNIX-style library naming, but we only support FIPS mode on Linux anyway.
320 add_custom_command(
321 TARGET crypto POST_BUILD
322 COMMAND ${GO_EXECUTABLE} run
323 ${CMAKE_CURRENT_SOURCE_DIR}/../util/fipstools/inject_hash/inject_hash.go
Adam Langley27ffcc62022-04-01 05:34:52 -0700324 -o libcrypto.so -in-object libcrypto.so
Adam Langleyd72e47f2019-05-09 16:39:49 -0700325 # The DEPENDS argument to a POST_BUILD rule appears to be ignored. Thus
326 # go_executable isn't used (as it doesn't get built), but we list this
327 # dependency anyway in case it starts working in some CMake version.
328 DEPENDS ../util/fipstools/inject_hash/inject_hash.go
329 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
330 )
331endif()
332
David Benjamin8c75ed02023-02-05 13:44:26 -0500333add_dependencies(crypto boringssl_prefix_symbols)
Joshua Liebow-Feeser8c7c6352018-08-26 18:53:36 -0700334
Adam Langleyd72e47f2019-05-09 16:39:49 -0700335if(FIPS_DELOCATE OR FIPS_SHARED)
Adam Langleyfd499932017-04-04 14:21:43 -0700336 add_dependencies(crypto bcm_o_target)
337endif()
338
David Benjamin05866182023-01-29 18:25:06 -0500339set_target_properties(crypto PROPERTIES LINKER_LANGUAGE C)
Adam Langleyfd499932017-04-04 14:21:43 -0700340
Biswapriyo Nathb819f7e2022-10-14 23:30:14 +0530341if(WIN32)
342 target_link_libraries(crypto ws2_32)
343endif()
344
Don8a3b2692022-08-29 11:27:42 -0700345if(NOT ANDROID)
346 find_package(Threads REQUIRED)
347 target_link_libraries(crypto Threads::Threads)
David Benjamin72f59112015-04-02 16:47:15 -0400348endif()
349
David Benjamine9ae99b2018-08-09 15:33:07 -0500350# Every target depends on crypto, so we add libcxx as a dependency here to
351# simplify injecting it everywhere.
352if(USE_CUSTOM_LIBCXX)
353 target_link_libraries(crypto libcxx)
354endif()