diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-19 11:26:59 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-19 11:26:59 +0200 |
commit | 27baa5af767d50deab36a8845d058f54849cc35c (patch) | |
tree | 0fe30ad971bb95cb2a44d144558dfab754a5a838 /ncr-sessions.c | |
parent | d4dc626658726f9c09619924dd6808f47f411db1 (diff) | |
download | cryptodev-linux-27baa5af767d50deab36a8845d058f54849cc35c.tar.gz cryptodev-linux-27baa5af767d50deab36a8845d058f54849cc35c.tar.xz cryptodev-linux-27baa5af767d50deab36a8845d058f54849cc35c.zip |
Fixed RSA encryption and decryption.
Diffstat (limited to 'ncr-sessions.c')
-rw-r--r-- | ncr-sessions.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/ncr-sessions.c b/ncr-sessions.c index 53073af..c177a65 100644 --- a/ncr-sessions.c +++ b/ncr-sessions.c @@ -315,7 +315,6 @@ static int _ncr_session_init(struct ncr_lists* lists, struct ncr_session_st* ses err(); goto fail; } - if (ns->key->type == NCR_KEY_TYPE_SECRET) { int keysize = ns->key->key.secret.size; @@ -576,13 +575,26 @@ static int _ncr_session_update(struct ncr_lists* lists, struct ncr_session_op_st } /* read key */ - ret = _cryptodev_cipher_decrypt(&sess->cipher, data->data, data->data_size, odata->data, data->data_size); - if (ret < 0) { - err(); - goto fail; + if (algo_is_symmetric(sess->algorithm)) { + ret = _cryptodev_cipher_decrypt(&sess->cipher, data->data, data->data_size, odata->data, data->data_size); + if (ret < 0) { + err(); + goto fail; + } + /* FIXME: handle ciphers that do not require that */ + odata->data_size = data->data_size; + } else { /* public key */ + size_t new_size = odata->max_data_size; + ret = ncr_pk_cipher_decrypt(&sess->pk, data->data, data->data_size, + odata->data, &new_size); + + odata->data_size = new_size; + + if (ret < 0) { + err(); + goto fail; + } } - /* FIXME: handle ciphers that do not require that */ - odata->data_size = data->data_size; break; |