1f0d92b56SLongpeng(Mike) /* 2f0d92b56SLongpeng(Mike) * QEMU Crypto af_alg support 3f0d92b56SLongpeng(Mike) * 4f0d92b56SLongpeng(Mike) * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD. 5f0d92b56SLongpeng(Mike) * 6f0d92b56SLongpeng(Mike) * Authors: 7f0d92b56SLongpeng(Mike) * Longpeng(Mike) <longpeng2@huawei.com> 8f0d92b56SLongpeng(Mike) * 9f0d92b56SLongpeng(Mike) * This work is licensed under the terms of the GNU GPL, version 2 or 10f0d92b56SLongpeng(Mike) * (at your option) any later version. See the COPYING file in the 11f0d92b56SLongpeng(Mike) * top-level directory. 12f0d92b56SLongpeng(Mike) */ 13f0d92b56SLongpeng(Mike) 14f0d92b56SLongpeng(Mike) #ifndef QCRYPTO_AFALGPRIV_H 15f0d92b56SLongpeng(Mike) #define QCRYPTO_AFALGPRIV_H 16f0d92b56SLongpeng(Mike) 17f0d92b56SLongpeng(Mike) #include <linux/if_alg.h> 18f0d92b56SLongpeng(Mike) 19f0d92b56SLongpeng(Mike) #define SALG_TYPE_LEN_MAX 14 20f0d92b56SLongpeng(Mike) #define SALG_NAME_LEN_MAX 64 21f0d92b56SLongpeng(Mike) 2225c60df3SLongpeng(Mike) #ifndef SOL_ALG 2325c60df3SLongpeng(Mike) #define SOL_ALG 279 2425c60df3SLongpeng(Mike) #endif 2525c60df3SLongpeng(Mike) 2625c60df3SLongpeng(Mike) #define AFALG_TYPE_CIPHER "skcipher" 27*9a059773SLongpeng(Mike) #define AFALG_TYPE_HASH "hash" 2825c60df3SLongpeng(Mike) 2925c60df3SLongpeng(Mike) #define ALG_OPTYPE_LEN 4 3025c60df3SLongpeng(Mike) #define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len)) 3125c60df3SLongpeng(Mike) 32f0d92b56SLongpeng(Mike) typedef struct QCryptoAFAlg QCryptoAFAlg; 33f0d92b56SLongpeng(Mike) 34f0d92b56SLongpeng(Mike) struct QCryptoAFAlg { 35f0d92b56SLongpeng(Mike) int tfmfd; 36f0d92b56SLongpeng(Mike) int opfd; 37f0d92b56SLongpeng(Mike) struct msghdr *msg; 38f0d92b56SLongpeng(Mike) struct cmsghdr *cmsg; 39f0d92b56SLongpeng(Mike) }; 40f0d92b56SLongpeng(Mike) 41f0d92b56SLongpeng(Mike) /** 42f0d92b56SLongpeng(Mike) * qcrypto_afalg_comm_alloc: 43f0d92b56SLongpeng(Mike) * @type: the type of crypto operation 44f0d92b56SLongpeng(Mike) * @name: the name of crypto operation 45f0d92b56SLongpeng(Mike) * 46f0d92b56SLongpeng(Mike) * Allocate a QCryptoAFAlg object and bind itself to 47f0d92b56SLongpeng(Mike) * a AF_ALG socket. 48f0d92b56SLongpeng(Mike) * 49f0d92b56SLongpeng(Mike) * Returns: 50f0d92b56SLongpeng(Mike) * a new QCryptoAFAlg object, or NULL in error. 51f0d92b56SLongpeng(Mike) */ 52f0d92b56SLongpeng(Mike) QCryptoAFAlg * 53f0d92b56SLongpeng(Mike) qcrypto_afalg_comm_alloc(const char *type, const char *name, 54f0d92b56SLongpeng(Mike) Error **errp); 55f0d92b56SLongpeng(Mike) 56f0d92b56SLongpeng(Mike) /** 57f0d92b56SLongpeng(Mike) * afalg_comm_free: 58f0d92b56SLongpeng(Mike) * @afalg: the QCryptoAFAlg object 59f0d92b56SLongpeng(Mike) * 60f0d92b56SLongpeng(Mike) * Free the @afalg. 61f0d92b56SLongpeng(Mike) */ 62f0d92b56SLongpeng(Mike) void qcrypto_afalg_comm_free(QCryptoAFAlg *afalg); 63f0d92b56SLongpeng(Mike) 64f0d92b56SLongpeng(Mike) #endif 65