Eric Biggers | c8c3641 | 2018-02-14 10:42:20 -0800 | [diff] [blame] | 1 | // SPDX-License-Identifier: GPL-2.0 |
| 2 | /* |
| 3 | * Common values for the Speck algorithm |
| 4 | */ |
| 5 | |
| 6 | #ifndef _CRYPTO_SPECK_H |
| 7 | #define _CRYPTO_SPECK_H |
| 8 | |
| 9 | #include <linux/types.h> |
| 10 | |
| 11 | /* Speck128 */ |
| 12 | |
| 13 | #define SPECK128_BLOCK_SIZE 16 |
| 14 | |
| 15 | #define SPECK128_128_KEY_SIZE 16 |
| 16 | #define SPECK128_128_NROUNDS 32 |
| 17 | |
| 18 | #define SPECK128_192_KEY_SIZE 24 |
| 19 | #define SPECK128_192_NROUNDS 33 |
| 20 | |
| 21 | #define SPECK128_256_KEY_SIZE 32 |
| 22 | #define SPECK128_256_NROUNDS 34 |
| 23 | |
| 24 | struct speck128_tfm_ctx { |
| 25 | u64 round_keys[SPECK128_256_NROUNDS]; |
| 26 | int nrounds; |
| 27 | }; |
| 28 | |
| 29 | void crypto_speck128_encrypt(const struct speck128_tfm_ctx *ctx, |
| 30 | u8 *out, const u8 *in); |
| 31 | |
| 32 | void crypto_speck128_decrypt(const struct speck128_tfm_ctx *ctx, |
| 33 | u8 *out, const u8 *in); |
| 34 | |
| 35 | int crypto_speck128_setkey(struct speck128_tfm_ctx *ctx, const u8 *key, |
| 36 | unsigned int keysize); |
| 37 | |
| 38 | /* Speck64 */ |
| 39 | |
| 40 | #define SPECK64_BLOCK_SIZE 8 |
| 41 | |
| 42 | #define SPECK64_96_KEY_SIZE 12 |
| 43 | #define SPECK64_96_NROUNDS 26 |
| 44 | |
| 45 | #define SPECK64_128_KEY_SIZE 16 |
| 46 | #define SPECK64_128_NROUNDS 27 |
| 47 | |
| 48 | struct speck64_tfm_ctx { |
| 49 | u32 round_keys[SPECK64_128_NROUNDS]; |
| 50 | int nrounds; |
| 51 | }; |
| 52 | |
| 53 | void crypto_speck64_encrypt(const struct speck64_tfm_ctx *ctx, |
| 54 | u8 *out, const u8 *in); |
| 55 | |
| 56 | void crypto_speck64_decrypt(const struct speck64_tfm_ctx *ctx, |
| 57 | u8 *out, const u8 *in); |
| 58 | |
| 59 | int crypto_speck64_setkey(struct speck64_tfm_ctx *ctx, const u8 *key, |
| 60 | unsigned int keysize); |
| 61 | |
| 62 | #endif /* _CRYPTO_SPECK_H */ |