mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
crypto/secret: move main logic from 'secret' to 'secret_common'.
Create base class 'common secret'. Move common data and logic from 'secret' to 'common_secret' class. This allowed adding abstraction layer for easier adding new 'secret' objects in future. Convert 'secret' class to child from basic 'secret_common' with 'data' and 'file' properties. Signed-off-by: Alexey Krasikov <alex-krasikov@yandex-team.ru> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
b767d2578d
commit
4862bd3cd2
5 changed files with 482 additions and 357 deletions
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "qapi/qapi-types-crypto.h"
|
||||
#include "qom/object.h"
|
||||
#include "crypto/secret_common.h"
|
||||
|
||||
#define TYPE_QCRYPTO_SECRET "secret"
|
||||
#define QCRYPTO_SECRET(obj) \
|
||||
|
@ -119,29 +120,14 @@ typedef struct QCryptoSecretClass QCryptoSecretClass;
|
|||
*/
|
||||
|
||||
struct QCryptoSecret {
|
||||
Object parent_obj;
|
||||
uint8_t *rawdata;
|
||||
size_t rawlen;
|
||||
QCryptoSecretFormat format;
|
||||
QCryptoSecretCommon parent_obj;
|
||||
char *data;
|
||||
char *file;
|
||||
char *keyid;
|
||||
char *iv;
|
||||
};
|
||||
|
||||
|
||||
struct QCryptoSecretClass {
|
||||
ObjectClass parent_class;
|
||||
QCryptoSecretCommonClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
extern int qcrypto_secret_lookup(const char *secretid,
|
||||
uint8_t **data,
|
||||
size_t *datalen,
|
||||
Error **errp);
|
||||
extern char *qcrypto_secret_lookup_as_utf8(const char *secretid,
|
||||
Error **errp);
|
||||
extern char *qcrypto_secret_lookup_as_base64(const char *secretid,
|
||||
Error **errp);
|
||||
|
||||
#endif /* QCRYPTO_SECRET_H */
|
||||
|
|
68
include/crypto/secret_common.h
Normal file
68
include/crypto/secret_common.h
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* QEMU crypto secret support
|
||||
*
|
||||
* Copyright (c) 2015 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef QCRYPTO_SECRET_COMMON_H
|
||||
#define QCRYPTO_SECRET_COMMON_H
|
||||
|
||||
#include "qapi/qapi-types-crypto.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define TYPE_QCRYPTO_SECRET_COMMON "secret_common"
|
||||
#define QCRYPTO_SECRET_COMMON(obj) \
|
||||
OBJECT_CHECK(QCryptoSecretCommon, (obj), TYPE_QCRYPTO_SECRET_COMMON)
|
||||
#define QCRYPTO_SECRET_COMMON_CLASS(class) \
|
||||
OBJECT_CLASS_CHECK(QCryptoSecretCommonClass, \
|
||||
(class), TYPE_QCRYPTO_SECRET_COMMON)
|
||||
#define QCRYPTO_SECRET_COMMON_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(QCryptoSecretCommonClass, \
|
||||
(obj), TYPE_QCRYPTO_SECRET_COMMON)
|
||||
|
||||
typedef struct QCryptoSecretCommon QCryptoSecretCommon;
|
||||
typedef struct QCryptoSecretCommonClass QCryptoSecretCommonClass;
|
||||
|
||||
struct QCryptoSecretCommon {
|
||||
Object parent_obj;
|
||||
uint8_t *rawdata;
|
||||
size_t rawlen;
|
||||
QCryptoSecretFormat format;
|
||||
char *keyid;
|
||||
char *iv;
|
||||
};
|
||||
|
||||
|
||||
struct QCryptoSecretCommonClass {
|
||||
ObjectClass parent_class;
|
||||
void (*load_data)(QCryptoSecretCommon *secret,
|
||||
uint8_t **output,
|
||||
size_t *outputlen,
|
||||
Error **errp);
|
||||
};
|
||||
|
||||
|
||||
extern int qcrypto_secret_lookup(const char *secretid,
|
||||
uint8_t **data,
|
||||
size_t *datalen,
|
||||
Error **errp);
|
||||
extern char *qcrypto_secret_lookup_as_utf8(const char *secretid,
|
||||
Error **errp);
|
||||
extern char *qcrypto_secret_lookup_as_base64(const char *secretid,
|
||||
Error **errp);
|
||||
|
||||
#endif /* QCRYPTO_SECRET_COMMON_H */
|
Loading…
Add table
Add a link
Reference in a new issue