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