Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.3-rc2 97 lines 3.2 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * The MORUS-640 Authenticated-Encryption Algorithm 4 * Common glue skeleton -- header file 5 * 6 * Copyright (c) 2016-2018 Ondrej Mosnacek <omosnacek@gmail.com> 7 * Copyright (C) 2017-2018 Red Hat, Inc. All rights reserved. 8 */ 9 10#ifndef _CRYPTO_MORUS640_GLUE_H 11#define _CRYPTO_MORUS640_GLUE_H 12 13#include <linux/module.h> 14#include <linux/types.h> 15#include <crypto/algapi.h> 16#include <crypto/aead.h> 17#include <crypto/morus_common.h> 18 19#define MORUS640_WORD_SIZE 4 20#define MORUS640_BLOCK_SIZE (MORUS_BLOCK_WORDS * MORUS640_WORD_SIZE) 21 22struct morus640_block { 23 u8 bytes[MORUS640_BLOCK_SIZE]; 24}; 25 26struct morus640_glue_ops { 27 void (*init)(void *state, const void *key, const void *iv); 28 void (*ad)(void *state, const void *data, unsigned int length); 29 void (*enc)(void *state, const void *src, void *dst, unsigned int length); 30 void (*dec)(void *state, const void *src, void *dst, unsigned int length); 31 void (*enc_tail)(void *state, const void *src, void *dst, unsigned int length); 32 void (*dec_tail)(void *state, const void *src, void *dst, unsigned int length); 33 void (*final)(void *state, void *tag_xor, u64 assoclen, u64 cryptlen); 34}; 35 36struct morus640_ctx { 37 const struct morus640_glue_ops *ops; 38 struct morus640_block key; 39}; 40 41void crypto_morus640_glue_init_ops(struct crypto_aead *aead, 42 const struct morus640_glue_ops *ops); 43int crypto_morus640_glue_setkey(struct crypto_aead *aead, const u8 *key, 44 unsigned int keylen); 45int crypto_morus640_glue_setauthsize(struct crypto_aead *tfm, 46 unsigned int authsize); 47int crypto_morus640_glue_encrypt(struct aead_request *req); 48int crypto_morus640_glue_decrypt(struct aead_request *req); 49 50#define MORUS640_DECLARE_ALG(id, driver_name, priority) \ 51 static const struct morus640_glue_ops crypto_morus640_##id##_ops = {\ 52 .init = crypto_morus640_##id##_init, \ 53 .ad = crypto_morus640_##id##_ad, \ 54 .enc = crypto_morus640_##id##_enc, \ 55 .enc_tail = crypto_morus640_##id##_enc_tail, \ 56 .dec = crypto_morus640_##id##_dec, \ 57 .dec_tail = crypto_morus640_##id##_dec_tail, \ 58 .final = crypto_morus640_##id##_final, \ 59 }; \ 60 \ 61 static int crypto_morus640_##id##_init_tfm(struct crypto_aead *tfm) \ 62 { \ 63 crypto_morus640_glue_init_ops(tfm, &crypto_morus640_##id##_ops); \ 64 return 0; \ 65 } \ 66 \ 67 static void crypto_morus640_##id##_exit_tfm(struct crypto_aead *tfm) \ 68 { \ 69 } \ 70 \ 71 static struct aead_alg crypto_morus640_##id##_alg = {\ 72 .setkey = crypto_morus640_glue_setkey, \ 73 .setauthsize = crypto_morus640_glue_setauthsize, \ 74 .encrypt = crypto_morus640_glue_encrypt, \ 75 .decrypt = crypto_morus640_glue_decrypt, \ 76 .init = crypto_morus640_##id##_init_tfm, \ 77 .exit = crypto_morus640_##id##_exit_tfm, \ 78 \ 79 .ivsize = MORUS_NONCE_SIZE, \ 80 .maxauthsize = MORUS_MAX_AUTH_SIZE, \ 81 .chunksize = MORUS640_BLOCK_SIZE, \ 82 \ 83 .base = { \ 84 .cra_flags = CRYPTO_ALG_INTERNAL, \ 85 .cra_blocksize = 1, \ 86 .cra_ctxsize = sizeof(struct morus640_ctx), \ 87 .cra_alignmask = 0, \ 88 .cra_priority = priority, \ 89 \ 90 .cra_name = "__morus640", \ 91 .cra_driver_name = "__"driver_name, \ 92 \ 93 .cra_module = THIS_MODULE, \ 94 } \ 95 } 96 97#endif /* _CRYPTO_MORUS640_GLUE_H */