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