linux/include/crypto/aead.h
<<
>>
Prefs
   1/*
   2 * AEAD: Authenticated Encryption with Associated Data
   3 * 
   4 * Copyright (c) 2007 Herbert Xu <herbert@gondor.apana.org.au>
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of the GNU General Public License as published by the Free
   8 * Software Foundation; either version 2 of the License, or (at your option) 
   9 * any later version.
  10 *
  11 */
  12
  13#ifndef _CRYPTO_AEAD_H
  14#define _CRYPTO_AEAD_H
  15
  16#include <linux/crypto.h>
  17#include <linux/kernel.h>
  18#include <linux/slab.h>
  19
  20/**
  21 *      struct aead_givcrypt_request - AEAD request with IV generation
  22 *      @seq: Sequence number for IV generation
  23 *      @giv: Space for generated IV
  24 *      @areq: The AEAD request itself
  25 */
  26struct aead_givcrypt_request {
  27        u64 seq;
  28        u8 *giv;
  29
  30        struct aead_request areq;
  31};
  32
  33static inline struct crypto_aead *aead_givcrypt_reqtfm(
  34        struct aead_givcrypt_request *req)
  35{
  36        return crypto_aead_reqtfm(&req->areq);
  37}
  38
  39static inline int crypto_aead_givencrypt(struct aead_givcrypt_request *req)
  40{
  41        struct aead_tfm *crt = crypto_aead_crt(aead_givcrypt_reqtfm(req));
  42        return crt->givencrypt(req);
  43};
  44
  45static inline int crypto_aead_givdecrypt(struct aead_givcrypt_request *req)
  46{
  47        struct aead_tfm *crt = crypto_aead_crt(aead_givcrypt_reqtfm(req));
  48        return crt->givdecrypt(req);
  49};
  50
  51static inline void aead_givcrypt_set_tfm(struct aead_givcrypt_request *req,
  52                                         struct crypto_aead *tfm)
  53{
  54        req->areq.base.tfm = crypto_aead_tfm(tfm);
  55}
  56
  57static inline struct aead_givcrypt_request *aead_givcrypt_alloc(
  58        struct crypto_aead *tfm, gfp_t gfp)
  59{
  60        struct aead_givcrypt_request *req;
  61
  62        req = kmalloc(sizeof(struct aead_givcrypt_request) +
  63                      crypto_aead_reqsize(tfm), gfp);
  64
  65        if (likely(req))
  66                aead_givcrypt_set_tfm(req, tfm);
  67
  68        return req;
  69}
  70
  71static inline void aead_givcrypt_free(struct aead_givcrypt_request *req)
  72{
  73        kfree(req);
  74}
  75
  76static inline void aead_givcrypt_set_callback(
  77        struct aead_givcrypt_request *req, u32 flags,
  78        crypto_completion_t complete, void *data)
  79{
  80        aead_request_set_callback(&req->areq, flags, complete, data);
  81}
  82
  83static inline void aead_givcrypt_set_crypt(struct aead_givcrypt_request *req,
  84                                           struct scatterlist *src,
  85                                           struct scatterlist *dst,
  86                                           unsigned int nbytes, void *iv)
  87{
  88        aead_request_set_crypt(&req->areq, src, dst, nbytes, iv);
  89}
  90
  91static inline void aead_givcrypt_set_assoc(struct aead_givcrypt_request *req,
  92                                           struct scatterlist *assoc,
  93                                           unsigned int assoclen)
  94{
  95        aead_request_set_assoc(&req->areq, assoc, assoclen);
  96}
  97
  98static inline void aead_givcrypt_set_giv(struct aead_givcrypt_request *req,
  99                                         u8 *giv, u64 seq)
 100{
 101        req->giv = giv;
 102        req->seq = seq;
 103}
 104
 105#endif  /* _CRYPTO_AEAD_H */
 106
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.