^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) #ifndef _CRYPTO_GCM_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #define _CRYPTO_GCM_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #include <linux/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #define GCM_AES_IV_SIZE 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define GCM_RFC4106_IV_SIZE 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define GCM_RFC4543_IV_SIZE 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * validate authentication tag for GCM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) static inline int crypto_gcm_check_authsize(unsigned int authsize)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) switch (authsize) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) case 4:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) case 8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) case 12:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) case 13:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) case 14:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) case 15:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) case 16:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * validate authentication tag for RFC4106
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) static inline int crypto_rfc4106_check_authsize(unsigned int authsize)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) switch (authsize) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) case 8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) case 12:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) case 16:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) * validate assoclen for RFC4106/RFC4543
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) static inline int crypto_ipsec_check_assoclen(unsigned int assoclen)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) switch (assoclen) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) case 16:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) case 20:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #endif