@ -138,36 +138,44 @@ static void qcrypto_secret_decode(const uint8_t *input,
static void
qcrypto_secret_prop_set_loaded ( Object * obj ,
bool value ,
Error * * errp )
qcrypto_secret_complete ( UserCreatable * uc , Error * * errp )
{
QCryptoSecretCommon * secret = QCRYPTO_SECRET_COMMON ( obj ) ;
QCryptoSecretCommon * secret = QCRYPTO_SECRET_COMMON ( uc ) ;
QCryptoSecretCommonClass * sec_class
= QCRYPTO_SECRET_COMMON_GET_CLASS ( obj ) ;
if ( value ) {
Error * local_err = NULL ;
uint8_t * input = NULL ;
size_t inputlen = 0 ;
uint8_t * output = NULL ;
size_t outputlen = 0 ;
if ( sec_class - > load_data ) {
sec_class - > load_data ( secret , & input , & inputlen , & local_err ) ;
if ( local_err ) {
error_propagate ( errp , local_err ) ;
return ;
}
} else {
error_setg ( errp , " %s provides no 'load_data' method' " ,
object_get_typename ( obj ) ) ;
= QCRYPTO_SECRET_COMMON_GET_CLASS ( uc ) ;
Error * local_err = NULL ;
uint8_t * input = NULL ;
size_t inputlen = 0 ;
uint8_t * output = NULL ;
size_t outputlen = 0 ;
if ( sec_class - > load_data ) {
sec_class - > load_data ( secret , & input , & inputlen , & local_err ) ;
if ( local_err ) {
error_propagate ( errp , local_err ) ;
return ;
}
} else {
error_setg ( errp , " %s provides no 'load_data' method' " ,
object_get_typename ( OBJECT ( uc ) ) ) ;
return ;
}
if ( secret - > keyid ) {
qcrypto_secret_decrypt ( secret , input , inputlen ,
& output , & outputlen , & local_err ) ;
if ( secret - > keyid ) {
qcrypto_secret_decrypt ( secret , input , inputlen ,
& output , & outputlen , & local_err ) ;
g_free ( input ) ;
if ( local_err ) {
error_propagate ( errp , local_err ) ;
return ;
}
input = output ;
inputlen = outputlen ;
} else {
if ( secret - > format = = QCRYPTO_SECRET_FORMAT_BASE64 ) {
qcrypto_secret_decode ( input , inputlen ,
& output , & outputlen , & local_err ) ;
g_free ( input ) ;
if ( local_err ) {
error_propagate ( errp , local_err ) ;
@ -175,26 +183,11 @@ qcrypto_secret_prop_set_loaded(Object *obj,
}
input = output ;
inputlen = outputlen ;
} else {
if ( secret - > format = = QCRYPTO_SECRET_FORMAT_BASE64 ) {
qcrypto_secret_decode ( input , inputlen ,
& output , & outputlen , & local_err ) ;
g_free ( input ) ;
if ( local_err ) {
error_propagate ( errp , local_err ) ;
return ;
}
input = output ;
inputlen = outputlen ;
}
}
secret - > rawdata = input ;
secret - > rawlen = inputlen ;
} else if ( secret - > rawdata ) {
error_setg ( errp , " Cannot unload secret " ) ;
return ;
}
secret - > rawdata = input ;
secret - > rawlen = inputlen ;
}
@ -268,13 +261,6 @@ qcrypto_secret_prop_get_keyid(Object *obj,
}
static void
qcrypto_secret_complete ( UserCreatable * uc , Error * * errp )
{
object_property_set_bool ( OBJECT ( uc ) , " loaded " , true , errp ) ;
}
static void
qcrypto_secret_finalize ( Object * obj )
{
@ -294,7 +280,7 @@ qcrypto_secret_class_init(ObjectClass *oc, void *data)
object_class_property_add_bool ( oc , " loaded " ,
qcrypto_secret_prop_get_loaded ,
qcrypto_secret_prop_set_loaded ) ;
NULL ) ;
object_class_property_add_enum ( oc , " format " ,
" QCryptoSecretFormat " ,
& QCryptoSecretFormat_lookup ,