drm/nouveau: fix kernel-doc comments
[drm/drm-misc.git] / include / crypto / gcm.h
blobfd9df607a8364f72d907b90596e7ed5657b7c8cf
1 #ifndef _CRYPTO_GCM_H
2 #define _CRYPTO_GCM_H
4 #include <linux/errno.h>
6 #include <crypto/aes.h>
7 #include <crypto/gf128mul.h>
9 #define GCM_AES_IV_SIZE 12
10 #define GCM_RFC4106_IV_SIZE 8
11 #define GCM_RFC4543_IV_SIZE 8
14 * validate authentication tag for GCM
16 static inline int crypto_gcm_check_authsize(unsigned int authsize)
18 switch (authsize) {
19 case 4:
20 case 8:
21 case 12:
22 case 13:
23 case 14:
24 case 15:
25 case 16:
26 break;
27 default:
28 return -EINVAL;
31 return 0;
35 * validate authentication tag for RFC4106
37 static inline int crypto_rfc4106_check_authsize(unsigned int authsize)
39 switch (authsize) {
40 case 8:
41 case 12:
42 case 16:
43 break;
44 default:
45 return -EINVAL;
48 return 0;
52 * validate assoclen for RFC4106/RFC4543
54 static inline int crypto_ipsec_check_assoclen(unsigned int assoclen)
56 switch (assoclen) {
57 case 16:
58 case 20:
59 break;
60 default:
61 return -EINVAL;
64 return 0;
67 struct aesgcm_ctx {
68 be128 ghash_key;
69 struct crypto_aes_ctx aes_ctx;
70 unsigned int authsize;
73 int aesgcm_expandkey(struct aesgcm_ctx *ctx, const u8 *key,
74 unsigned int keysize, unsigned int authsize);
76 void aesgcm_encrypt(const struct aesgcm_ctx *ctx, u8 *dst, const u8 *src,
77 int crypt_len, const u8 *assoc, int assoc_len,
78 const u8 iv[GCM_AES_IV_SIZE], u8 *authtag);
80 bool __must_check aesgcm_decrypt(const struct aesgcm_ctx *ctx, u8 *dst,
81 const u8 *src, int crypt_len, const u8 *assoc,
82 int assoc_len, const u8 iv[GCM_AES_IV_SIZE],
83 const u8 *authtag);
85 #endif