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) 22*25c60df3SLongpeng(Mike) #ifndef SOL_ALG 23*25c60df3SLongpeng(Mike) #define SOL_ALG 279 24*25c60df3SLongpeng(Mike) #endif 25*25c60df3SLongpeng(Mike) 26*25c60df3SLongpeng(Mike) #define AFALG_TYPE_CIPHER "skcipher" 27*25c60df3SLongpeng(Mike) 28*25c60df3SLongpeng(Mike) #define ALG_OPTYPE_LEN 4 29*25c60df3SLongpeng(Mike) #define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len)) 30*25c60df3SLongpeng(Mike) 31f0d92b56SLongpeng(Mike) typedef struct QCryptoAFAlg QCryptoAFAlg; 32f0d92b56SLongpeng(Mike) 33f0d92b56SLongpeng(Mike) struct QCryptoAFAlg { 34f0d92b56SLongpeng(Mike) int tfmfd; 35f0d92b56SLongpeng(Mike) int opfd; 36f0d92b56SLongpeng(Mike) struct msghdr *msg; 37f0d92b56SLongpeng(Mike) struct cmsghdr *cmsg; 38f0d92b56SLongpeng(Mike) }; 39f0d92b56SLongpeng(Mike) 40f0d92b56SLongpeng(Mike) /** 41f0d92b56SLongpeng(Mike) * qcrypto_afalg_comm_alloc: 42f0d92b56SLongpeng(Mike) * @type: the type of crypto operation 43f0d92b56SLongpeng(Mike) * @name: the name of crypto operation 44f0d92b56SLongpeng(Mike) * 45f0d92b56SLongpeng(Mike) * Allocate a QCryptoAFAlg object and bind itself to 46f0d92b56SLongpeng(Mike) * a AF_ALG socket. 47f0d92b56SLongpeng(Mike) * 48f0d92b56SLongpeng(Mike) * Returns: 49f0d92b56SLongpeng(Mike) * a new QCryptoAFAlg object, or NULL in error. 50f0d92b56SLongpeng(Mike) */ 51f0d92b56SLongpeng(Mike) QCryptoAFAlg * 52f0d92b56SLongpeng(Mike) qcrypto_afalg_comm_alloc(const char *type, const char *name, 53f0d92b56SLongpeng(Mike) Error **errp); 54f0d92b56SLongpeng(Mike) 55f0d92b56SLongpeng(Mike) /** 56f0d92b56SLongpeng(Mike) * afalg_comm_free: 57f0d92b56SLongpeng(Mike) * @afalg: the QCryptoAFAlg object 58f0d92b56SLongpeng(Mike) * 59f0d92b56SLongpeng(Mike) * Free the @afalg. 60f0d92b56SLongpeng(Mike) */ 61f0d92b56SLongpeng(Mike) void qcrypto_afalg_comm_free(QCryptoAFAlg *afalg); 62f0d92b56SLongpeng(Mike) 63f0d92b56SLongpeng(Mike) #endif 64