22
#include "qemu/osdep.h"
23
#include "crypto/akcipher.h"
24
#include "akcipherpriv.h"
28
#if defined(CONFIG_GCRYPT)
29
#include "akcipher-gcrypt.c.inc"
30
#elif defined(CONFIG_NETTLE) && defined(CONFIG_HOGWEED)
31
#include "akcipher-nettle.c.inc"
33
QCryptoAkCipher *qcrypto_akcipher_new(const QCryptoAkCipherOptions *opts,
34
QCryptoAkCipherKeyType type,
35
const uint8_t *key, size_t keylen,
38
QCryptoAkCipher *akcipher = NULL;
43
bool qcrypto_akcipher_supports(QCryptoAkCipherOptions *opts)
49
int qcrypto_akcipher_encrypt(QCryptoAkCipher *akcipher,
50
const void *in, size_t in_len,
51
void *out, size_t out_len, Error **errp)
53
const QCryptoAkCipherDriver *drv = akcipher->driver;
55
return drv->encrypt(akcipher, in, in_len, out, out_len, errp);
58
int qcrypto_akcipher_decrypt(QCryptoAkCipher *akcipher,
59
const void *in, size_t in_len,
60
void *out, size_t out_len, Error **errp)
62
const QCryptoAkCipherDriver *drv = akcipher->driver;
64
return drv->decrypt(akcipher, in, in_len, out, out_len, errp);
67
int qcrypto_akcipher_sign(QCryptoAkCipher *akcipher,
68
const void *in, size_t in_len,
69
void *out, size_t out_len, Error **errp)
71
const QCryptoAkCipherDriver *drv = akcipher->driver;
73
return drv->sign(akcipher, in, in_len, out, out_len, errp);
76
int qcrypto_akcipher_verify(QCryptoAkCipher *akcipher,
77
const void *in, size_t in_len,
78
const void *in2, size_t in2_len, Error **errp)
80
const QCryptoAkCipherDriver *drv = akcipher->driver;
82
return drv->verify(akcipher, in, in_len, in2, in2_len, errp);
85
int qcrypto_akcipher_max_plaintext_len(QCryptoAkCipher *akcipher)
87
return akcipher->max_plaintext_len;
90
int qcrypto_akcipher_max_ciphertext_len(QCryptoAkCipher *akcipher)
92
return akcipher->max_ciphertext_len;
95
int qcrypto_akcipher_max_signature_len(QCryptoAkCipher *akcipher)
97
return akcipher->max_signature_len;
100
int qcrypto_akcipher_max_dgst_len(QCryptoAkCipher *akcipher)
102
return akcipher->max_dgst_len;
105
void qcrypto_akcipher_free(QCryptoAkCipher *akcipher)
107
const QCryptoAkCipherDriver *drv = akcipher->driver;
112
int qcrypto_akcipher_export_p8info(const QCryptoAkCipherOptions *opts,
113
uint8_t *key, size_t keylen,
114
uint8_t **dst, size_t *dst_len,
118
case QCRYPTO_AKCIPHER_ALG_RSA:
119
qcrypto_akcipher_rsakey_export_p8info(key, keylen, dst, dst_len);
123
error_setg(errp, "Unsupported algorithm: %u", opts->alg);