xref: /freebsd/sys/crypto/openssl/ossl_arm.c (revision 0eea265a58f942f7f189ba758f4cac4355d42221)
144f8e1e8SMark Johnston /*-
244f8e1e8SMark Johnston  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
344f8e1e8SMark Johnston  *
444f8e1e8SMark Johnston  * Copyright (c) 2023 Stormshield
544f8e1e8SMark Johnston  * Copyright (c) 2023 Semihalf
644f8e1e8SMark Johnston  *
744f8e1e8SMark Johnston  * Redistribution and use in source and binary forms, with or without
844f8e1e8SMark Johnston  * modification, are permitted provided that the following conditions
944f8e1e8SMark Johnston  * are met:
1044f8e1e8SMark Johnston  * 1. Redistributions of source code must retain the above copyright
1144f8e1e8SMark Johnston  *    notice, this list of conditions and the following disclaimer,
1244f8e1e8SMark Johnston  *    without modification.
1344f8e1e8SMark Johnston  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1444f8e1e8SMark Johnston  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
1544f8e1e8SMark Johnston  *    redistribution must be conditioned upon including a substantially
1644f8e1e8SMark Johnston  *    similar Disclaimer requirement for further binary redistribution.
1744f8e1e8SMark Johnston  *
1844f8e1e8SMark Johnston  * NO WARRANTY
1944f8e1e8SMark Johnston  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2044f8e1e8SMark Johnston  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2144f8e1e8SMark Johnston  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
2244f8e1e8SMark Johnston  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
2344f8e1e8SMark Johnston  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
2444f8e1e8SMark Johnston  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2544f8e1e8SMark Johnston  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2644f8e1e8SMark Johnston  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
2744f8e1e8SMark Johnston  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2844f8e1e8SMark Johnston  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2944f8e1e8SMark Johnston  * THE POSSIBILITY OF SUCH DAMAGES.
3044f8e1e8SMark Johnston  */
3144f8e1e8SMark Johnston 
3244f8e1e8SMark Johnston #include <sys/param.h>
3344f8e1e8SMark Johnston 
3444f8e1e8SMark Johnston #include <machine/elf.h>
3544f8e1e8SMark Johnston #include <machine/md_var.h>
3644f8e1e8SMark Johnston 
3744f8e1e8SMark Johnston #include <crypto/openssl/ossl.h>
3844f8e1e8SMark Johnston #include <crypto/openssl/ossl_cipher.h>
39*e655cc70SMark Johnston #include <crypto/openssl/arm_arch.h>
4044f8e1e8SMark Johnston 
4144f8e1e8SMark Johnston ossl_cipher_setkey_t AES_set_encrypt_key;
4244f8e1e8SMark Johnston ossl_cipher_setkey_t AES_set_decrypt_key;
4344f8e1e8SMark Johnston 
44629a7237SMark Johnston ossl_cipher_setkey_t ossl_aes_gcm_setkey;
45629a7237SMark Johnston 
4644f8e1e8SMark Johnston unsigned int OPENSSL_armcap_P;
4744f8e1e8SMark Johnston 
4844f8e1e8SMark Johnston void
ossl_cpuid(struct ossl_softc * sc)4944f8e1e8SMark Johnston ossl_cpuid(struct ossl_softc *sc)
5044f8e1e8SMark Johnston {
5144f8e1e8SMark Johnston 	if (elf_hwcap & HWCAP_NEON) {
5244f8e1e8SMark Johnston 		OPENSSL_armcap_P |= ARMV7_NEON;
5344f8e1e8SMark Johnston 
5444f8e1e8SMark Johnston 		sc->has_aes = true;
5544f8e1e8SMark Johnston 		ossl_cipher_aes_cbc.set_encrypt_key = AES_set_encrypt_key;
5644f8e1e8SMark Johnston 		ossl_cipher_aes_cbc.set_decrypt_key = AES_set_decrypt_key;
57629a7237SMark Johnston 
58629a7237SMark Johnston 		sc->has_aes_gcm = true;
59629a7237SMark Johnston 		ossl_cipher_aes_gcm.set_encrypt_key = ossl_aes_gcm_setkey;
60629a7237SMark Johnston 		ossl_cipher_aes_gcm.set_decrypt_key = ossl_aes_gcm_setkey;
6144f8e1e8SMark Johnston 	}
6244f8e1e8SMark Johnston }
63