xref: /linux/include/crypto/gcm.h (revision 87c9c16317882dd6dbbc07e349bc3223e14f3244)
1 #ifndef _CRYPTO_GCM_H
2 #define _CRYPTO_GCM_H
3 
4 #include <linux/errno.h>
5 
6 #define GCM_AES_IV_SIZE 12
7 #define GCM_RFC4106_IV_SIZE 8
8 #define GCM_RFC4543_IV_SIZE 8
9 
10 /*
11  * validate authentication tag for GCM
12  */
13 static 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  */
34 static 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  */
51 static 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 }
63 #endif
64