summaryrefslogtreecommitdiffstats
path: root/ncr-sessions.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-19 11:26:59 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-19 11:26:59 +0200
commit27baa5af767d50deab36a8845d058f54849cc35c (patch)
tree0fe30ad971bb95cb2a44d144558dfab754a5a838 /ncr-sessions.c
parentd4dc626658726f9c09619924dd6808f47f411db1 (diff)
downloadcryptodev-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.c26
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;