Message ID | 1492392806-53720-5-git-send-email-longpeng2@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> -----Original Message----- > From: longpeng > Sent: Monday, April 17, 2017 9:33 AM > To: berrange@redhat.com > Cc: Gonglei (Arei); Huangweidong (C); armbru@redhat.com; > eblake@redhat.com; mst@redhat.com; qemu-devel@nongnu.org; longpeng > Subject: [PATCH v2 for-2.10 04/18] crypto: cipher: introduce > qcrypto_cipher_ctx_new for builtin-backend > > Extracts qcrypto_cipher_ctx_new() from qcrypto_cipher_new() for > builtin-backend impls. > > Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> > --- > crypto/cipher-builtin.c | 101 ++++++++++++++++++++++++++---------------------- > 1 file changed, 55 insertions(+), 46 deletions(-) > Reviewed-by: Gonglei <arei.gonglei@huawei.com> > diff --git a/crypto/cipher-builtin.c b/crypto/cipher-builtin.c > index b4bc2b9..8cf47d1 100644 > --- a/crypto/cipher-builtin.c > +++ b/crypto/cipher-builtin.c > @@ -235,23 +235,24 @@ static int qcrypto_cipher_setiv_aes(QCryptoCipher > *cipher, > > > > -static int qcrypto_cipher_init_aes(QCryptoCipher *cipher, > - const uint8_t *key, size_t nkey, > - Error **errp) > +static QCryptoCipherBuiltin * > +qcrypto_cipher_init_aes(QCryptoCipherMode mode, > + const uint8_t *key, size_t nkey, > + Error **errp) > { > QCryptoCipherBuiltin *ctxt; > > - if (cipher->mode != QCRYPTO_CIPHER_MODE_CBC && > - cipher->mode != QCRYPTO_CIPHER_MODE_ECB && > - cipher->mode != QCRYPTO_CIPHER_MODE_XTS) { > + if (mode != QCRYPTO_CIPHER_MODE_CBC && > + mode != QCRYPTO_CIPHER_MODE_ECB && > + mode != QCRYPTO_CIPHER_MODE_XTS) { > error_setg(errp, "Unsupported cipher mode %s", > - QCryptoCipherMode_lookup[cipher->mode]); > - return -1; > + QCryptoCipherMode_lookup[mode]); > + return NULL; > } > > ctxt = g_new0(QCryptoCipherBuiltin, 1); > > - if (cipher->mode == QCRYPTO_CIPHER_MODE_XTS) { > + if (mode == QCRYPTO_CIPHER_MODE_XTS) { > if (AES_set_encrypt_key(key, nkey * 4, &ctxt->state.aes.key.enc) != > 0) { > error_setg(errp, "Failed to set encryption key"); > goto error; > @@ -291,13 +292,11 @@ static int qcrypto_cipher_init_aes(QCryptoCipher > *cipher, > ctxt->encrypt = qcrypto_cipher_encrypt_aes; > ctxt->decrypt = qcrypto_cipher_decrypt_aes; > > - cipher->opaque = ctxt; > - > - return 0; > + return ctxt; > > error: > g_free(ctxt); > - return -1; > + return NULL; > } > > > @@ -370,16 +369,17 @@ static int > qcrypto_cipher_setiv_des_rfb(QCryptoCipher *cipher, > } > > > -static int qcrypto_cipher_init_des_rfb(QCryptoCipher *cipher, > - const uint8_t *key, size_t > nkey, > - Error **errp) > +static QCryptoCipherBuiltin * > +qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode, > + const uint8_t *key, size_t nkey, > + Error **errp) > { > QCryptoCipherBuiltin *ctxt; > > - if (cipher->mode != QCRYPTO_CIPHER_MODE_ECB) { > + if (mode != QCRYPTO_CIPHER_MODE_ECB) { > error_setg(errp, "Unsupported cipher mode %s", > - QCryptoCipherMode_lookup[cipher->mode]); > - return -1; > + QCryptoCipherMode_lookup[mode]); > + return NULL; > } > > ctxt = g_new0(QCryptoCipherBuiltin, 1); > @@ -394,9 +394,7 @@ static int qcrypto_cipher_init_des_rfb(QCryptoCipher > *cipher, > ctxt->encrypt = qcrypto_cipher_encrypt_des_rfb; > ctxt->decrypt = qcrypto_cipher_decrypt_des_rfb; > > - cipher->opaque = ctxt; > - > - return 0; > + return ctxt; > } > > > @@ -426,12 +424,13 @@ bool > qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, > } > > > -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, > - QCryptoCipherMode mode, > - const uint8_t *key, size_t nkey, > - Error **errp) > +static QCryptoCipherBuiltin > *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, > + > QCryptoCipherMode mode, > + const uint8_t > *key, > + size_t nkey, > + Error **errp) > { > - QCryptoCipher *cipher; > + QCryptoCipherBuiltin *ctxt; > > switch (mode) { > case QCRYPTO_CIPHER_MODE_ECB: > @@ -444,39 +443,27 @@ QCryptoCipher > *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, > return NULL; > } > > - cipher = g_new0(QCryptoCipher, 1); > - cipher->alg = alg; > - cipher->mode = mode; > - > if (!qcrypto_cipher_validate_key_length(alg, mode, nkey, errp)) { > - goto error; > + return NULL; > } > > - switch (cipher->alg) { > + switch (alg) { > case QCRYPTO_CIPHER_ALG_DES_RFB: > - if (qcrypto_cipher_init_des_rfb(cipher, key, nkey, errp) < 0) { > - goto error; > - } > + ctxt = qcrypto_cipher_init_des_rfb(mode, key, nkey, errp); > break; > case QCRYPTO_CIPHER_ALG_AES_128: > case QCRYPTO_CIPHER_ALG_AES_192: > case QCRYPTO_CIPHER_ALG_AES_256: > - if (qcrypto_cipher_init_aes(cipher, key, nkey, errp) < 0) { > - goto error; > - } > + ctxt = qcrypto_cipher_init_aes(mode, key, nkey, errp); > break; > default: > error_setg(errp, > "Unsupported cipher algorithm %s", > - QCryptoCipherAlgorithm_lookup[cipher->alg]); > - goto error; > + QCryptoCipherAlgorithm_lookup[alg]); > + return NULL; > } > > - return cipher; > - > - error: > - g_free(cipher); > - return NULL; > + return ctxt; > } > > void qcrypto_cipher_free(QCryptoCipher *cipher) > @@ -537,3 +524,25 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, > > return ctxt->setiv(cipher, iv, niv, errp); > } > + > + > +QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, > + QCryptoCipherMode mode, > + const uint8_t *key, size_t nkey, > + Error **errp) > +{ > + QCryptoCipher *cipher; > + QCryptoCipherBuiltin *ctxt; > + > + ctxt = qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); > + if (ctxt == NULL) { > + return NULL; > + } > + > + cipher = g_new0(QCryptoCipher, 1); > + cipher->alg = alg; > + cipher->mode = mode; > + cipher->opaque = ctxt; > + > + return cipher; > +} > -- > 1.8.3.1 >
diff --git a/crypto/cipher-builtin.c b/crypto/cipher-builtin.c index b4bc2b9..8cf47d1 100644 --- a/crypto/cipher-builtin.c +++ b/crypto/cipher-builtin.c @@ -235,23 +235,24 @@ static int qcrypto_cipher_setiv_aes(QCryptoCipher *cipher, -static int qcrypto_cipher_init_aes(QCryptoCipher *cipher, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherBuiltin * +qcrypto_cipher_init_aes(QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) { QCryptoCipherBuiltin *ctxt; - if (cipher->mode != QCRYPTO_CIPHER_MODE_CBC && - cipher->mode != QCRYPTO_CIPHER_MODE_ECB && - cipher->mode != QCRYPTO_CIPHER_MODE_XTS) { + if (mode != QCRYPTO_CIPHER_MODE_CBC && + mode != QCRYPTO_CIPHER_MODE_ECB && + mode != QCRYPTO_CIPHER_MODE_XTS) { error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_lookup[cipher->mode]); - return -1; + QCryptoCipherMode_lookup[mode]); + return NULL; } ctxt = g_new0(QCryptoCipherBuiltin, 1); - if (cipher->mode == QCRYPTO_CIPHER_MODE_XTS) { + if (mode == QCRYPTO_CIPHER_MODE_XTS) { if (AES_set_encrypt_key(key, nkey * 4, &ctxt->state.aes.key.enc) != 0) { error_setg(errp, "Failed to set encryption key"); goto error; @@ -291,13 +292,11 @@ static int qcrypto_cipher_init_aes(QCryptoCipher *cipher, ctxt->encrypt = qcrypto_cipher_encrypt_aes; ctxt->decrypt = qcrypto_cipher_decrypt_aes; - cipher->opaque = ctxt; - - return 0; + return ctxt; error: g_free(ctxt); - return -1; + return NULL; } @@ -370,16 +369,17 @@ static int qcrypto_cipher_setiv_des_rfb(QCryptoCipher *cipher, } -static int qcrypto_cipher_init_des_rfb(QCryptoCipher *cipher, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherBuiltin * +qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) { QCryptoCipherBuiltin *ctxt; - if (cipher->mode != QCRYPTO_CIPHER_MODE_ECB) { + if (mode != QCRYPTO_CIPHER_MODE_ECB) { error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_lookup[cipher->mode]); - return -1; + QCryptoCipherMode_lookup[mode]); + return NULL; } ctxt = g_new0(QCryptoCipherBuiltin, 1); @@ -394,9 +394,7 @@ static int qcrypto_cipher_init_des_rfb(QCryptoCipher *cipher, ctxt->encrypt = qcrypto_cipher_encrypt_des_rfb; ctxt->decrypt = qcrypto_cipher_decrypt_des_rfb; - cipher->opaque = ctxt; - - return 0; + return ctxt; } @@ -426,12 +424,13 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, } -QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, - QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) +static QCryptoCipherBuiltin *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, + Error **errp) { - QCryptoCipher *cipher; + QCryptoCipherBuiltin *ctxt; switch (mode) { case QCRYPTO_CIPHER_MODE_ECB: @@ -444,39 +443,27 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, return NULL; } - cipher = g_new0(QCryptoCipher, 1); - cipher->alg = alg; - cipher->mode = mode; - if (!qcrypto_cipher_validate_key_length(alg, mode, nkey, errp)) { - goto error; + return NULL; } - switch (cipher->alg) { + switch (alg) { case QCRYPTO_CIPHER_ALG_DES_RFB: - if (qcrypto_cipher_init_des_rfb(cipher, key, nkey, errp) < 0) { - goto error; - } + ctxt = qcrypto_cipher_init_des_rfb(mode, key, nkey, errp); break; case QCRYPTO_CIPHER_ALG_AES_128: case QCRYPTO_CIPHER_ALG_AES_192: case QCRYPTO_CIPHER_ALG_AES_256: - if (qcrypto_cipher_init_aes(cipher, key, nkey, errp) < 0) { - goto error; - } + ctxt = qcrypto_cipher_init_aes(mode, key, nkey, errp); break; default: error_setg(errp, "Unsupported cipher algorithm %s", - QCryptoCipherAlgorithm_lookup[cipher->alg]); - goto error; + QCryptoCipherAlgorithm_lookup[alg]); + return NULL; } - return cipher; - - error: - g_free(cipher); - return NULL; + return ctxt; } void qcrypto_cipher_free(QCryptoCipher *cipher) @@ -537,3 +524,25 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, return ctxt->setiv(cipher, iv, niv, errp); } + + +QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, size_t nkey, + Error **errp) +{ + QCryptoCipher *cipher; + QCryptoCipherBuiltin *ctxt; + + ctxt = qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (ctxt == NULL) { + return NULL; + } + + cipher = g_new0(QCryptoCipher, 1); + cipher->alg = alg; + cipher->mode = mode; + cipher->opaque = ctxt; + + return cipher; +}
Extracts qcrypto_cipher_ctx_new() from qcrypto_cipher_new() for builtin-backend impls. Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> --- crypto/cipher-builtin.c | 101 ++++++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 46 deletions(-)