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> 183eedf5ccSRichard Henderson #include "crypto/cipher.h" 19f0d92b56SLongpeng(Mike) 20f0d92b56SLongpeng(Mike) #define SALG_TYPE_LEN_MAX 14 21f0d92b56SLongpeng(Mike) #define SALG_NAME_LEN_MAX 64 22f0d92b56SLongpeng(Mike) 2325c60df3SLongpeng(Mike) #ifndef SOL_ALG 2425c60df3SLongpeng(Mike) #define SOL_ALG 279 2525c60df3SLongpeng(Mike) #endif 2625c60df3SLongpeng(Mike) 2725c60df3SLongpeng(Mike) #define AFALG_TYPE_CIPHER "skcipher" 289a059773SLongpeng(Mike) #define AFALG_TYPE_HASH "hash" 2925c60df3SLongpeng(Mike) 3025c60df3SLongpeng(Mike) #define ALG_OPTYPE_LEN 4 3125c60df3SLongpeng(Mike) #define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len)) 3225c60df3SLongpeng(Mike) 33*8f525028SMarkus Armbruster typedef struct QCryptoAFAlgo QCryptoAFAlgo; 34f0d92b56SLongpeng(Mike) 35*8f525028SMarkus Armbruster struct QCryptoAFAlgo { 363eedf5ccSRichard Henderson QCryptoCipher base; 373eedf5ccSRichard Henderson 38f0d92b56SLongpeng(Mike) int tfmfd; 39f0d92b56SLongpeng(Mike) int opfd; 40f0d92b56SLongpeng(Mike) struct msghdr *msg; 41f0d92b56SLongpeng(Mike) struct cmsghdr *cmsg; 42f0d92b56SLongpeng(Mike) }; 43f0d92b56SLongpeng(Mike) 44f0d92b56SLongpeng(Mike) /** 45f0d92b56SLongpeng(Mike) * qcrypto_afalg_comm_alloc: 46f0d92b56SLongpeng(Mike) * @type: the type of crypto operation 47f0d92b56SLongpeng(Mike) * @name: the name of crypto operation 48f0d92b56SLongpeng(Mike) * 49*8f525028SMarkus Armbruster * Allocate a QCryptoAFAlgo object and bind itself to 50f0d92b56SLongpeng(Mike) * a AF_ALG socket. 51f0d92b56SLongpeng(Mike) * 52f0d92b56SLongpeng(Mike) * Returns: 53*8f525028SMarkus Armbruster * a new QCryptoAFAlgo object, or NULL in error. 54f0d92b56SLongpeng(Mike) */ 55*8f525028SMarkus Armbruster QCryptoAFAlgo * 56f0d92b56SLongpeng(Mike) qcrypto_afalg_comm_alloc(const char *type, const char *name, 57f0d92b56SLongpeng(Mike) Error **errp); 58f0d92b56SLongpeng(Mike) 59f0d92b56SLongpeng(Mike) /** 60f0d92b56SLongpeng(Mike) * afalg_comm_free: 61*8f525028SMarkus Armbruster * @afalg: the QCryptoAFAlgo object 62f0d92b56SLongpeng(Mike) * 63f0d92b56SLongpeng(Mike) * Free the @afalg. 64f0d92b56SLongpeng(Mike) */ 65*8f525028SMarkus Armbruster void qcrypto_afalg_comm_free(QCryptoAFAlgo *afalg); 66f0d92b56SLongpeng(Mike) 67f0d92b56SLongpeng(Mike) #endif 68