Home | History | Annotate | Download | only in linux
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 /*
      3  * Crypto user configuration API.
      4  *
      5  * Copyright (C) 2011 secunet Security Networks AG
      6  * Copyright (C) 2011 Steffen Klassert <steffen.klassert (at) secunet.com>
      7  *
      8  * This program is free software; you can redistribute it and/or modify it
      9  * under the terms and conditions of the GNU General Public License,
     10  * version 2, as published by the Free Software Foundation.
     11  *
     12  * This program is distributed in the hope it will be useful, but WITHOUT
     13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
     15  * more details.
     16  *
     17  * You should have received a copy of the GNU General Public License along with
     18  * this program; if not, write to the Free Software Foundation, Inc.,
     19  * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
     20  */
     21 
     22 #include <linux/types.h>
     23 
     24 /* Netlink configuration messages.  */
     25 enum {
     26 	CRYPTO_MSG_BASE = 0x10,
     27 	CRYPTO_MSG_NEWALG = 0x10,
     28 	CRYPTO_MSG_DELALG,
     29 	CRYPTO_MSG_UPDATEALG,
     30 	CRYPTO_MSG_GETALG,
     31 	CRYPTO_MSG_DELRNG,
     32 	__CRYPTO_MSG_MAX
     33 };
     34 #define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
     35 #define CRYPTO_NR_MSGTYPES (CRYPTO_MSG_MAX + 1 - CRYPTO_MSG_BASE)
     36 
     37 #define CRYPTO_MAX_NAME 64
     38 
     39 /* Netlink message attributes.  */
     40 enum crypto_attr_type_t {
     41 	CRYPTOCFGA_UNSPEC,
     42 	CRYPTOCFGA_PRIORITY_VAL,	/* __u32 */
     43 	CRYPTOCFGA_REPORT_LARVAL,	/* struct crypto_report_larval */
     44 	CRYPTOCFGA_REPORT_HASH,		/* struct crypto_report_hash */
     45 	CRYPTOCFGA_REPORT_BLKCIPHER,	/* struct crypto_report_blkcipher */
     46 	CRYPTOCFGA_REPORT_AEAD,		/* struct crypto_report_aead */
     47 	CRYPTOCFGA_REPORT_COMPRESS,	/* struct crypto_report_comp */
     48 	CRYPTOCFGA_REPORT_RNG,		/* struct crypto_report_rng */
     49 	CRYPTOCFGA_REPORT_CIPHER,	/* struct crypto_report_cipher */
     50 	CRYPTOCFGA_REPORT_AKCIPHER,	/* struct crypto_report_akcipher */
     51 	CRYPTOCFGA_REPORT_KPP,		/* struct crypto_report_kpp */
     52 	CRYPTOCFGA_REPORT_ACOMP,	/* struct crypto_report_acomp */
     53 	__CRYPTOCFGA_MAX
     54 
     55 #define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
     56 };
     57 
     58 struct crypto_user_alg {
     59 	char cru_name[CRYPTO_MAX_NAME];
     60 	char cru_driver_name[CRYPTO_MAX_NAME];
     61 	char cru_module_name[CRYPTO_MAX_NAME];
     62 	__u32 cru_type;
     63 	__u32 cru_mask;
     64 	__u32 cru_refcnt;
     65 	__u32 cru_flags;
     66 };
     67 
     68 struct crypto_report_larval {
     69 	char type[CRYPTO_MAX_NAME];
     70 };
     71 
     72 struct crypto_report_hash {
     73 	char type[CRYPTO_MAX_NAME];
     74 	unsigned int blocksize;
     75 	unsigned int digestsize;
     76 };
     77 
     78 struct crypto_report_cipher {
     79 	char type[CRYPTO_MAX_NAME];
     80 	unsigned int blocksize;
     81 	unsigned int min_keysize;
     82 	unsigned int max_keysize;
     83 };
     84 
     85 struct crypto_report_blkcipher {
     86 	char type[CRYPTO_MAX_NAME];
     87 	char geniv[CRYPTO_MAX_NAME];
     88 	unsigned int blocksize;
     89 	unsigned int min_keysize;
     90 	unsigned int max_keysize;
     91 	unsigned int ivsize;
     92 };
     93 
     94 struct crypto_report_aead {
     95 	char type[CRYPTO_MAX_NAME];
     96 	char geniv[CRYPTO_MAX_NAME];
     97 	unsigned int blocksize;
     98 	unsigned int maxauthsize;
     99 	unsigned int ivsize;
    100 };
    101 
    102 struct crypto_report_comp {
    103 	char type[CRYPTO_MAX_NAME];
    104 };
    105 
    106 struct crypto_report_rng {
    107 	char type[CRYPTO_MAX_NAME];
    108 	unsigned int seedsize;
    109 };
    110 
    111 struct crypto_report_akcipher {
    112 	char type[CRYPTO_MAX_NAME];
    113 };
    114 
    115 struct crypto_report_kpp {
    116 	char type[CRYPTO_MAX_NAME];
    117 };
    118 
    119 struct crypto_report_acomp {
    120 	char type[CRYPTO_MAX_NAME];
    121 };
    122 
    123 #define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + \
    124 			       sizeof(struct crypto_report_blkcipher))
    125