linux/include/crypto/internal/chacha.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2
   3#ifndef _CRYPTO_INTERNAL_CHACHA_H
   4#define _CRYPTO_INTERNAL_CHACHA_H
   5
   6#include <crypto/chacha.h>
   7#include <crypto/internal/skcipher.h>
   8#include <linux/crypto.h>
   9
  10struct chacha_ctx {
  11        u32 key[8];
  12        int nrounds;
  13};
  14
  15static inline int chacha_setkey(struct crypto_skcipher *tfm, const u8 *key,
  16                                unsigned int keysize, int nrounds)
  17{
  18        struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
  19        int i;
  20
  21        if (keysize != CHACHA_KEY_SIZE)
  22                return -EINVAL;
  23
  24        for (i = 0; i < ARRAY_SIZE(ctx->key); i++)
  25                ctx->key[i] = get_unaligned_le32(key + i * sizeof(u32));
  26
  27        ctx->nrounds = nrounds;
  28        return 0;
  29}
  30
  31static inline int chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
  32                                  unsigned int keysize)
  33{
  34        return chacha_setkey(tfm, key, keysize, 20);
  35}
  36
  37static inline int chacha12_setkey(struct crypto_skcipher *tfm, const u8 *key,
  38                                  unsigned int keysize)
  39{
  40        return chacha_setkey(tfm, key, keysize, 12);
  41}
  42
  43#endif /* _CRYPTO_CHACHA_H */
  44