diff options
Diffstat (limited to 'src/lib/libcrypto/crypto_internal.h')
| -rw-r--r-- | src/lib/libcrypto/crypto_internal.h | 305 |
1 files changed, 0 insertions, 305 deletions
diff --git a/src/lib/libcrypto/crypto_internal.h b/src/lib/libcrypto/crypto_internal.h deleted file mode 100644 index 09ae7fa466..0000000000 --- a/src/lib/libcrypto/crypto_internal.h +++ /dev/null | |||
| @@ -1,305 +0,0 @@ | |||
| 1 | /* $OpenBSD: crypto_internal.h,v 1.15 2025/01/19 07:51:41 jsing Exp $ */ | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> | ||
| 4 | * | ||
| 5 | * Permission to use, copy, modify, and distribute this software for any | ||
| 6 | * purpose with or without fee is hereby granted, provided that the above | ||
| 7 | * copyright notice and this permission notice appear in all copies. | ||
| 8 | * | ||
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #include <endian.h> | ||
| 19 | #include <stddef.h> | ||
| 20 | #include <stdint.h> | ||
| 21 | #include <string.h> | ||
| 22 | |||
| 23 | #include "crypto_arch.h" | ||
| 24 | |||
| 25 | #ifndef HEADER_CRYPTO_INTERNAL_H | ||
| 26 | #define HEADER_CRYPTO_INTERNAL_H | ||
| 27 | |||
| 28 | #define CTASSERT(x) \ | ||
| 29 | extern char _ctassert[(x) ? 1 : -1] __attribute__((__unused__)) | ||
| 30 | |||
| 31 | /* | ||
| 32 | * Constant time functions for size_t. | ||
| 33 | */ | ||
| 34 | #ifndef HAVE_CRYPTO_CT_NE_ZERO | ||
| 35 | static inline int | ||
| 36 | crypto_ct_ne_zero(size_t v) | ||
| 37 | { | ||
| 38 | return (v | ~(v - 1)) >> ((sizeof(v) * 8) - 1); | ||
| 39 | } | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #ifndef HAVE_CRYPTO_CT_NE_ZERO_MASK | ||
| 43 | static inline size_t | ||
| 44 | crypto_ct_ne_zero_mask(size_t v) | ||
| 45 | { | ||
| 46 | return 0 - crypto_ct_ne_zero(v); | ||
| 47 | } | ||
| 48 | #endif | ||
| 49 | |||
| 50 | #ifndef HAVE_CRYPTO_CT_EQ_ZERO | ||
| 51 | static inline int | ||
| 52 | crypto_ct_eq_zero(size_t v) | ||
| 53 | { | ||
| 54 | return 1 - crypto_ct_ne_zero(v); | ||
| 55 | } | ||
| 56 | #endif | ||
| 57 | |||
| 58 | #ifndef HAVE_CRYPTO_CT_EQ_ZERO_MASK_U8 | ||
| 59 | static inline size_t | ||
| 60 | crypto_ct_eq_zero_mask(size_t v) | ||
| 61 | { | ||
| 62 | return 0 - crypto_ct_eq_zero(v); | ||
| 63 | } | ||
| 64 | #endif | ||
| 65 | |||
| 66 | #ifndef HAVE_CRYPTO_CT_LT | ||
| 67 | static inline int | ||
| 68 | crypto_ct_lt(size_t a, size_t b) | ||
| 69 | { | ||
| 70 | return (((a - b) | (b & ~a)) & (b | ~a)) >> | ||
| 71 | (sizeof(size_t) * 8 - 1); | ||
| 72 | } | ||
| 73 | #endif | ||
| 74 | |||
| 75 | #ifndef HAVE_CRYPTO_CT_LT_MASK | ||
| 76 | static inline size_t | ||
| 77 | crypto_ct_lt_mask(size_t a, size_t b) | ||
| 78 | { | ||
| 79 | return 0 - crypto_ct_lt(a, b); | ||
| 80 | } | ||
| 81 | #endif | ||
| 82 | |||
| 83 | #ifndef HAVE_CRYPTO_CT_GT | ||
| 84 | static inline int | ||
| 85 | crypto_ct_gt(size_t a, size_t b) | ||
| 86 | { | ||
| 87 | return crypto_ct_lt(b, a); | ||
| 88 | } | ||
| 89 | #endif | ||
| 90 | |||
| 91 | #ifndef HAVE_CRYPTO_CT_GT_MASK | ||
| 92 | static inline size_t | ||
| 93 | crypto_ct_gt_mask(size_t a, size_t b) | ||
| 94 | { | ||
| 95 | return 0 - crypto_ct_gt(a, b); | ||
| 96 | } | ||
| 97 | #endif | ||
| 98 | |||
| 99 | /* | ||
| 100 | * Constant time operations for uint8_t. | ||
| 101 | */ | ||
| 102 | #ifndef HAVE_CRYPTO_CT_NE_ZERO_U8 | ||
| 103 | static inline int | ||
| 104 | crypto_ct_ne_zero_u8(uint8_t v) | ||
| 105 | { | ||
| 106 | return (uint8_t)(v | ~(v - 1)) >> ((sizeof(v) * 8) - 1); | ||
| 107 | } | ||
| 108 | #endif | ||
| 109 | |||
| 110 | #ifndef HAVE_CRYPTO_CT_NE_ZERO_MASK_U8 | ||
| 111 | static inline uint8_t | ||
| 112 | crypto_ct_ne_zero_mask_u8(uint8_t v) | ||
| 113 | { | ||
| 114 | return 0 - crypto_ct_ne_zero_u8(v); | ||
| 115 | } | ||
| 116 | #endif | ||
| 117 | |||
| 118 | #ifndef HAVE_CRYPTO_CT_EQ_ZERO_U8 | ||
| 119 | static inline int | ||
| 120 | crypto_ct_eq_zero_u8(uint8_t v) | ||
| 121 | { | ||
| 122 | return 1 - crypto_ct_ne_zero_u8(v); | ||
| 123 | } | ||
| 124 | #endif | ||
| 125 | |||
| 126 | #ifndef HAVE_CRYPTO_CT_EQ_ZERO_MASK_U8 | ||
| 127 | static inline uint8_t | ||
| 128 | crypto_ct_eq_zero_mask_u8(uint8_t v) | ||
| 129 | { | ||
| 130 | return 0 - crypto_ct_eq_zero_u8(v); | ||
| 131 | } | ||
| 132 | #endif | ||
| 133 | |||
| 134 | #ifndef HAVE_CRYPTO_CT_NE_U8 | ||
| 135 | static inline int | ||
| 136 | crypto_ct_ne_u8(uint8_t a, uint8_t b) | ||
| 137 | { | ||
| 138 | return crypto_ct_ne_zero_u8(a - b); | ||
| 139 | } | ||
| 140 | #endif | ||
| 141 | |||
| 142 | #ifndef HAVE_CRYPTO_CT_NE_MASK_U8 | ||
| 143 | static inline uint8_t | ||
| 144 | crypto_ct_ne_mask_u8(uint8_t a, uint8_t b) | ||
| 145 | { | ||
| 146 | return 0 - crypto_ct_ne_u8(a, b); | ||
| 147 | } | ||
| 148 | #endif | ||
| 149 | |||
| 150 | #ifndef HAVE_CRYPTO_CT_EQ_U8 | ||
| 151 | static inline int | ||
| 152 | crypto_ct_eq_u8(uint8_t a, uint8_t b) | ||
| 153 | { | ||
| 154 | return crypto_ct_eq_zero_u8(a - b); | ||
| 155 | } | ||
| 156 | #endif | ||
| 157 | |||
| 158 | #ifndef HAVE_CRYPTO_CT_EQ_MASK_U8 | ||
| 159 | static inline uint8_t | ||
| 160 | crypto_ct_eq_mask_u8(uint8_t a, uint8_t b) | ||
| 161 | { | ||
| 162 | return 0 - crypto_ct_eq_u8(a, b); | ||
| 163 | } | ||
| 164 | #endif | ||
| 165 | |||
| 166 | /* | ||
| 167 | * crypto_load_be32toh() loads a 32 bit unsigned big endian value as a 32 bit | ||
| 168 | * unsigned host endian value, from the specified address in memory. The memory | ||
| 169 | * address may have any alignment. | ||
| 170 | */ | ||
| 171 | #ifndef HAVE_CRYPTO_LOAD_BE32TOH | ||
| 172 | static inline uint32_t | ||
| 173 | crypto_load_be32toh(const uint8_t *src) | ||
| 174 | { | ||
| 175 | uint32_t v; | ||
| 176 | |||
| 177 | memcpy(&v, src, sizeof(v)); | ||
| 178 | |||
| 179 | return be32toh(v); | ||
| 180 | } | ||
| 181 | #endif | ||
| 182 | |||
| 183 | /* | ||
| 184 | * crypto_store_htobe32() stores a 32 bit unsigned host endian value as a 32 bit | ||
| 185 | * unsigned big endian value, at the specified address in memory. The memory | ||
| 186 | * address may have any alignment. | ||
| 187 | */ | ||
| 188 | #ifndef HAVE_CRYPTO_STORE_HTOBE32 | ||
| 189 | static inline void | ||
| 190 | crypto_store_htobe32(uint8_t *dst, uint32_t v) | ||
| 191 | { | ||
| 192 | v = htobe32(v); | ||
| 193 | memcpy(dst, &v, sizeof(v)); | ||
| 194 | } | ||
| 195 | #endif | ||
| 196 | |||
| 197 | /* | ||
| 198 | * crypto_load_be64toh() loads a 64 bit unsigned big endian value as a 64 bit | ||
| 199 | * unsigned host endian value, from the specified address in memory. The memory | ||
| 200 | * address may have any alignment. | ||
| 201 | */ | ||
| 202 | #ifndef HAVE_CRYPTO_LOAD_BE64TOH | ||
| 203 | static inline uint64_t | ||
| 204 | crypto_load_be64toh(const uint8_t *src) | ||
| 205 | { | ||
| 206 | uint64_t v; | ||
| 207 | |||
| 208 | memcpy(&v, src, sizeof(v)); | ||
| 209 | |||
| 210 | return be64toh(v); | ||
| 211 | } | ||
| 212 | #endif | ||
| 213 | |||
| 214 | /* | ||
| 215 | * crypto_store_htobe64() stores a 64 bit unsigned host endian value as a 64 bit | ||
| 216 | * unsigned big endian value, at the specified address in memory. The memory | ||
| 217 | * address may have any alignment. | ||
| 218 | */ | ||
| 219 | #ifndef HAVE_CRYPTO_STORE_HTOBE64 | ||
| 220 | static inline void | ||
| 221 | crypto_store_htobe64(uint8_t *dst, uint64_t v) | ||
| 222 | { | ||
| 223 | v = htobe64(v); | ||
| 224 | memcpy(dst, &v, sizeof(v)); | ||
| 225 | } | ||
| 226 | #endif | ||
| 227 | |||
| 228 | /* | ||
| 229 | * crypto_load_le32toh() loads a 32 bit unsigned little endian value as a 32 bit | ||
| 230 | * unsigned host endian value, from the specified address in memory. The memory | ||
| 231 | * address may have any alignment. | ||
| 232 | */ | ||
| 233 | #ifndef HAVE_CRYPTO_LOAD_LE32TOH | ||
| 234 | static inline uint32_t | ||
| 235 | crypto_load_le32toh(const uint8_t *src) | ||
| 236 | { | ||
| 237 | uint32_t v; | ||
| 238 | |||
| 239 | memcpy(&v, src, sizeof(v)); | ||
| 240 | |||
| 241 | return le32toh(v); | ||
| 242 | } | ||
| 243 | #endif | ||
| 244 | |||
| 245 | /* | ||
| 246 | * crypto_store_htole32() stores a 32 bit unsigned host endian value as a 32 bit | ||
| 247 | * unsigned little endian value, at the specified address in memory. The memory | ||
| 248 | * address may have any alignment. | ||
| 249 | */ | ||
| 250 | #ifndef HAVE_CRYPTO_STORE_HTOLE32 | ||
| 251 | static inline void | ||
| 252 | crypto_store_htole32(uint8_t *dst, uint32_t v) | ||
| 253 | { | ||
| 254 | v = htole32(v); | ||
| 255 | memcpy(dst, &v, sizeof(v)); | ||
| 256 | } | ||
| 257 | #endif | ||
| 258 | |||
| 259 | #ifndef HAVE_CRYPTO_ADD_U32DW_U64 | ||
| 260 | static inline void | ||
| 261 | crypto_add_u32dw_u64(uint32_t *h, uint32_t *l, uint64_t v) | ||
| 262 | { | ||
| 263 | v += ((uint64_t)*h << 32) | *l; | ||
| 264 | *h = v >> 32; | ||
| 265 | *l = v; | ||
| 266 | } | ||
| 267 | #endif | ||
| 268 | |||
| 269 | #ifndef HAVE_CRYPTO_ROL_U32 | ||
| 270 | static inline uint32_t | ||
| 271 | crypto_rol_u32(uint32_t v, size_t shift) | ||
| 272 | { | ||
| 273 | return (v << shift) | (v >> (32 - shift)); | ||
| 274 | } | ||
| 275 | #endif | ||
| 276 | |||
| 277 | #ifndef HAVE_CRYPTO_ROR_U32 | ||
| 278 | static inline uint32_t | ||
| 279 | crypto_ror_u32(uint32_t v, size_t shift) | ||
| 280 | { | ||
| 281 | return (v << (32 - shift)) | (v >> shift); | ||
| 282 | } | ||
| 283 | #endif | ||
| 284 | |||
| 285 | #ifndef HAVE_CRYPTO_ROL_U64 | ||
| 286 | static inline uint64_t | ||
| 287 | crypto_rol_u64(uint64_t v, size_t shift) | ||
| 288 | { | ||
| 289 | return (v << shift) | (v >> (64 - shift)); | ||
| 290 | } | ||
| 291 | #endif | ||
| 292 | |||
| 293 | #ifndef HAVE_CRYPTO_ROR_U64 | ||
| 294 | static inline uint64_t | ||
| 295 | crypto_ror_u64(uint64_t v, size_t shift) | ||
| 296 | { | ||
| 297 | return (v << (64 - shift)) | (v >> shift); | ||
| 298 | } | ||
| 299 | #endif | ||
| 300 | |||
| 301 | void crypto_cpu_caps_init(void); | ||
| 302 | |||
| 303 | uint64_t crypto_cpu_caps_ia32(void); | ||
| 304 | |||
| 305 | #endif | ||
