diff options
Diffstat (limited to 'src/crypto.h')
-rw-r--r-- | src/crypto.h | 108 |
1 files changed, 48 insertions, 60 deletions
diff --git a/src/crypto.h b/src/crypto.h index 87c759f..ae260d2 100644 --- a/src/crypto.h +++ b/src/crypto.h @@ -9,18 +9,8 @@ #include <sys/param.h> #include <sys/mbuf.h> -#if __FreeBSD_version >= 1400036 || \ - (__FreeBSD_version < 1400000 && __FreeBSD_version >= 1300519) -#define OCF_CHACHA20_POLY1305 -#endif - -#if __FreeBSD_version >= 1400048 -#define KERNEL_CHACHA20_POLY1305 -#endif - -#if __FreeBSD_version >= 1400049 -#define KERNEL_CURVE25519 -#endif +int crypto_init(void); +void crypto_deinit(void); enum chacha20poly1305_lengths { XCHACHA20POLY1305_NONCE_SIZE = 24, @@ -28,37 +18,63 @@ enum chacha20poly1305_lengths { CHACHA20POLY1305_AUTHTAG_SIZE = 16 }; -#ifdef KERNEL_CHACHA20_POLY1305 +#ifdef COMPAT_NEED_CHACHA20POLY1305 +void +chacha20poly1305_encrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, + const uint8_t *ad, const size_t ad_len, + const uint64_t nonce, + const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); + +bool +chacha20poly1305_decrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, + const uint8_t *ad, const size_t ad_len, + const uint64_t nonce, + const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); + +void +xchacha20poly1305_encrypt(uint8_t *dst, const uint8_t *src, + const size_t src_len, const uint8_t *ad, + const size_t ad_len, + const uint8_t nonce[XCHACHA20POLY1305_NONCE_SIZE], + const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); + +bool +xchacha20poly1305_decrypt(uint8_t *dst, const uint8_t *src, + const size_t src_len, const uint8_t *ad, + const size_t ad_len, + const uint8_t nonce[XCHACHA20POLY1305_NONCE_SIZE], + const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); +#else #include <sys/endian.h> #include <crypto/chacha20_poly1305.h> -static __inline void +static inline void chacha20poly1305_encrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, - const uint8_t *ad, const size_t ad_len, - const uint64_t nonce, - const uint8_t key[CHACHA20POLY1305_KEY_SIZE]) + const uint8_t *ad, const size_t ad_len, + const uint64_t nonce, + const uint8_t key[CHACHA20POLY1305_KEY_SIZE]) { uint8_t nonce_bytes[8]; le64enc(nonce_bytes, nonce); - chacha20_poly1305_encrypt(dst, src, src_len, ad, ad_len, nonce_bytes, - sizeof(nonce_bytes), key); + chacha20_poly1305_encrypt(dst, src, src_len, ad, ad_len, + nonce_bytes, sizeof(nonce_bytes), key); } -static __inline bool +static inline bool chacha20poly1305_decrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, - const uint8_t *ad, const size_t ad_len, - const uint64_t nonce, - const uint8_t key[CHACHA20POLY1305_KEY_SIZE]) + const uint8_t *ad, const size_t ad_len, + const uint64_t nonce, + const uint8_t key[CHACHA20POLY1305_KEY_SIZE]) { uint8_t nonce_bytes[8]; le64enc(nonce_bytes, nonce); return (chacha20_poly1305_decrypt(dst, src, src_len, ad, ad_len, - nonce_bytes, sizeof(nonce_bytes), key)); + nonce_bytes, sizeof(nonce_bytes), key)); } -static __inline void +static inline void xchacha20poly1305_encrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, const uint8_t *ad, const size_t ad_len, @@ -68,42 +84,15 @@ xchacha20poly1305_encrypt(uint8_t *dst, const uint8_t *src, xchacha20_poly1305_encrypt(dst, src, src_len, ad, ad_len, nonce, key); } -static __inline bool +static inline bool xchacha20poly1305_decrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, const uint8_t *ad, const size_t ad_len, const uint8_t nonce[XCHACHA20POLY1305_NONCE_SIZE], const uint8_t key[CHACHA20POLY1305_KEY_SIZE]) { - return (xchacha20_poly1305_decrypt(dst, src, src_len, ad, ad_len, nonce, - key)); + return (xchacha20_poly1305_decrypt(dst, src, src_len, ad, ad_len, nonce, key)); } -#else -void -chacha20poly1305_encrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, - const uint8_t *ad, const size_t ad_len, - const uint64_t nonce, - const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); - -bool -chacha20poly1305_decrypt(uint8_t *dst, const uint8_t *src, const size_t src_len, - const uint8_t *ad, const size_t ad_len, - const uint64_t nonce, - const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); - -void -xchacha20poly1305_encrypt(uint8_t *dst, const uint8_t *src, - const size_t src_len, const uint8_t *ad, - const size_t ad_len, - const uint8_t nonce[XCHACHA20POLY1305_NONCE_SIZE], - const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); - -bool -xchacha20poly1305_decrypt(uint8_t *dst, const uint8_t *src, - const size_t src_len, const uint8_t *ad, - const size_t ad_len, - const uint8_t nonce[XCHACHA20POLY1305_NONCE_SIZE], - const uint8_t key[CHACHA20POLY1305_KEY_SIZE]); #endif int @@ -121,6 +110,7 @@ enum blake2s_lengths { BLAKE2S_KEY_SIZE = 32 }; +#ifdef COMPAT_NEED_BLAKE2S struct blake2s_state { uint32_t h[8]; uint32_t t[2]; @@ -144,10 +134,9 @@ void blake2s(uint8_t *out, const uint8_t *in, const uint8_t *key, void blake2s_hmac(uint8_t *out, const uint8_t *in, const uint8_t *key, const size_t outlen, const size_t inlen, const size_t keylen); +#endif -#ifdef KERNEL_CURVE25519 -#include <crypto/curve25519.h> -#else +#ifdef COMPAT_NEED_CURVE25519 enum curve25519_lengths { CURVE25519_KEY_SIZE = 32 }; @@ -176,9 +165,8 @@ static inline void curve25519_generate_secret(uint8_t secret[CURVE25519_KEY_SIZE arc4random_buf(secret, CURVE25519_KEY_SIZE); curve25519_clamp_secret(secret); } +#else +#include <crypto/curve25519.h> #endif -int crypto_init(void); -void crypto_deinit(void); - #endif |