aboutsummaryrefslogtreecommitdiff
path: root/crypto/akcipher.c
diff options
context:
space:
mode:
authorLei He <helei.sig11@bytedance.com>2022-10-08 16:50:29 +0800
committerMichael S. Tsirkin <mst@redhat.com>2022-11-02 06:56:32 -0400
commit58660863ba5ca4f74fa70671da2899b264dc5f34 (patch)
treed6907865e91667bf5457f1fba9869b9cd30f507b /crypto/akcipher.c
parent3b34ccad6695f3fd3e48555d895d450f750c00e6 (diff)
downloadqemu-58660863ba5ca4f74fa70671da2899b264dc5f34.zip
qemu-58660863ba5ca4f74fa70671da2899b264dc5f34.tar.gz
qemu-58660863ba5ca4f74fa70671da2899b264dc5f34.tar.bz2
crypto: Support export akcipher to pkcs8
crypto: support export RSA private keys with PKCS#8 standard. So that users can upload this private key to linux kernel. Signed-off-by: lei he <helei.sig11@bytedance.com> Message-Id: <20221008085030.70212-4-helei.sig11@bytedance.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'crypto/akcipher.c')
-rw-r--r--crypto/akcipher.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/crypto/akcipher.c b/crypto/akcipher.c
index ad88379..e4bbc6e 100644
--- a/crypto/akcipher.c
+++ b/crypto/akcipher.c
@@ -22,6 +22,8 @@
#include "qemu/osdep.h"
#include "crypto/akcipher.h"
#include "akcipherpriv.h"
+#include "der.h"
+#include "rsakey.h"
#if defined(CONFIG_GCRYPT)
#include "akcipher-gcrypt.c.inc"
@@ -106,3 +108,19 @@ void qcrypto_akcipher_free(QCryptoAkCipher *akcipher)
drv->free(akcipher);
}
+
+int qcrypto_akcipher_export_p8info(const QCryptoAkCipherOptions *opts,
+ uint8_t *key, size_t keylen,
+ uint8_t **dst, size_t *dst_len,
+ Error **errp)
+{
+ switch (opts->alg) {
+ case QCRYPTO_AKCIPHER_ALG_RSA:
+ qcrypto_akcipher_rsakey_export_p8info(key, keylen, dst, dst_len);
+ return 0;
+
+ default:
+ error_setg(errp, "Unsupported algorithm: %u", opts->alg);
+ return -1;
+ }
+}