blob: 9d7eff04f22441e08f7c748333e302f83887ebe8 [file] [log] [blame]
Corentin LABBEef780322017-08-22 10:08:08 +02001#ifndef _CRYPTO_GCM_H
2#define _CRYPTO_GCM_H
3
Iuliana Prodan65526f62019-07-31 16:05:54 +03004#include <linux/errno.h>
5
Corentin LABBEef780322017-08-22 10:08:08 +02006#define GCM_AES_IV_SIZE 12
7#define GCM_RFC4106_IV_SIZE 8
8#define GCM_RFC4543_IV_SIZE 8
9
Iuliana Prodan65526f62019-07-31 16:05:54 +030010/*
11 * validate authentication tag for GCM
12 */
13static inline int crypto_gcm_check_authsize(unsigned int authsize)
14{
15 switch (authsize) {
16 case 4:
17 case 8:
18 case 12:
19 case 13:
20 case 14:
21 case 15:
22 case 16:
23 break;
24 default:
25 return -EINVAL;
26 }
27
28 return 0;
29}
30
31/*
32 * validate authentication tag for RFC4106
33 */
34static inline int crypto_rfc4106_check_authsize(unsigned int authsize)
35{
36 switch (authsize) {
37 case 8:
38 case 12:
39 case 16:
40 break;
41 default:
42 return -EINVAL;
43 }
44
45 return 0;
46}
47
48/*
49 * validate assoclen for RFC4106/RFC4543
50 */
51static inline int crypto_ipsec_check_assoclen(unsigned int assoclen)
52{
53 switch (assoclen) {
54 case 16:
55 case 20:
56 break;
57 default:
58 return -EINVAL;
59 }
60
61 return 0;
62}
Corentin LABBEef780322017-08-22 10:08:08 +020063#endif