xref: /kernel/linux/linux-5.10/include/crypto/gcm.h (revision 8c2ecf20)
18c2ecf20Sopenharmony_ci#ifndef _CRYPTO_GCM_H
28c2ecf20Sopenharmony_ci#define _CRYPTO_GCM_H
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#include <linux/errno.h>
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#define GCM_AES_IV_SIZE 12
78c2ecf20Sopenharmony_ci#define GCM_RFC4106_IV_SIZE 8
88c2ecf20Sopenharmony_ci#define GCM_RFC4543_IV_SIZE 8
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci/*
118c2ecf20Sopenharmony_ci * validate authentication tag for GCM
128c2ecf20Sopenharmony_ci */
138c2ecf20Sopenharmony_cistatic inline int crypto_gcm_check_authsize(unsigned int authsize)
148c2ecf20Sopenharmony_ci{
158c2ecf20Sopenharmony_ci	switch (authsize) {
168c2ecf20Sopenharmony_ci	case 4:
178c2ecf20Sopenharmony_ci	case 8:
188c2ecf20Sopenharmony_ci	case 12:
198c2ecf20Sopenharmony_ci	case 13:
208c2ecf20Sopenharmony_ci	case 14:
218c2ecf20Sopenharmony_ci	case 15:
228c2ecf20Sopenharmony_ci	case 16:
238c2ecf20Sopenharmony_ci		break;
248c2ecf20Sopenharmony_ci	default:
258c2ecf20Sopenharmony_ci		return -EINVAL;
268c2ecf20Sopenharmony_ci	}
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci	return 0;
298c2ecf20Sopenharmony_ci}
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci/*
328c2ecf20Sopenharmony_ci * validate authentication tag for RFC4106
338c2ecf20Sopenharmony_ci */
348c2ecf20Sopenharmony_cistatic inline int crypto_rfc4106_check_authsize(unsigned int authsize)
358c2ecf20Sopenharmony_ci{
368c2ecf20Sopenharmony_ci	switch (authsize) {
378c2ecf20Sopenharmony_ci	case 8:
388c2ecf20Sopenharmony_ci	case 12:
398c2ecf20Sopenharmony_ci	case 16:
408c2ecf20Sopenharmony_ci		break;
418c2ecf20Sopenharmony_ci	default:
428c2ecf20Sopenharmony_ci		return -EINVAL;
438c2ecf20Sopenharmony_ci	}
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci	return 0;
468c2ecf20Sopenharmony_ci}
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci/*
498c2ecf20Sopenharmony_ci * validate assoclen for RFC4106/RFC4543
508c2ecf20Sopenharmony_ci */
518c2ecf20Sopenharmony_cistatic inline int crypto_ipsec_check_assoclen(unsigned int assoclen)
528c2ecf20Sopenharmony_ci{
538c2ecf20Sopenharmony_ci	switch (assoclen) {
548c2ecf20Sopenharmony_ci	case 16:
558c2ecf20Sopenharmony_ci	case 20:
568c2ecf20Sopenharmony_ci		break;
578c2ecf20Sopenharmony_ci	default:
588c2ecf20Sopenharmony_ci		return -EINVAL;
598c2ecf20Sopenharmony_ci	}
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	return 0;
628c2ecf20Sopenharmony_ci}
638c2ecf20Sopenharmony_ci#endif
64