1 /* 2 * Copyright (c) 2020 Netflix, Inc 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer, 9 * without modification. 10 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 11 * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 12 * redistribution must be conditioned upon including a substantially 13 * similar Disclaimer requirement for further binary redistribution. 14 * 15 * NO WARRANTY 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 19 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 20 * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 21 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 24 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 26 * THE POSSIBILITY OF SUCH DAMAGES. 27 * 28 * $FreeBSD$ 29 */ 30 31 #ifndef __OSSL_H__ 32 #define __OSSL_H__ 33 34 /* Compatibility shims. */ 35 #define OPENSSL_cleanse explicit_bzero 36 37 struct cryptop; 38 struct crypto_session_params; 39 struct ossl_softc; 40 struct ossl_session; 41 42 int ossl_chacha20_poly1305_decrypt(struct cryptop *crp, 43 const struct crypto_session_params *csp); 44 int ossl_chacha20_poly1305_encrypt(struct cryptop *crp, 45 const struct crypto_session_params *csp); 46 void ossl_cpuid(struct ossl_softc *sc); 47 48 struct ossl_softc { 49 int32_t sc_cid; 50 bool has_aes; 51 bool has_aes_gcm; 52 }; 53 54 /* Needs to be big enough to hold any hash context. */ 55 struct ossl_hash_context { 56 uint32_t dummy[196]; 57 } __aligned(32); 58 59 struct ossl_cipher_context { 60 uint32_t dummy[196]; 61 } __aligned(32); 62 63 struct ossl_session_hash { 64 struct ossl_hash_context ictx; 65 struct ossl_hash_context octx; 66 struct auth_hash *axf; 67 u_int mlen; 68 }; 69 70 struct ossl_session_cipher { 71 struct ossl_cipher_context dec_ctx; 72 struct ossl_cipher_context enc_ctx; 73 struct ossl_cipher *cipher; 74 }; 75 76 struct ossl_session { 77 struct ossl_session_cipher cipher; 78 struct ossl_session_hash hash; 79 }; 80 81 extern struct auth_hash ossl_hash_poly1305; 82 extern struct auth_hash ossl_hash_sha1; 83 extern struct auth_hash ossl_hash_sha224; 84 extern struct auth_hash ossl_hash_sha256; 85 extern struct auth_hash ossl_hash_sha384; 86 extern struct auth_hash ossl_hash_sha512; 87 88 extern struct ossl_cipher ossl_cipher_aes_cbc; 89 extern struct ossl_cipher ossl_cipher_aes_gcm; 90 extern struct ossl_cipher ossl_cipher_chacha20; 91 92 #endif /* !__OSSL_H__ */ 93