summaryrefslogtreecommitdiffstats
path: root/ncr_int.h
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-06-14 16:08:16 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-06-17 20:48:18 +0200
commite9f738aa05a2dbf94fdf05de01d06d2ebf62529d (patch)
treeb07b75913153014c0019ed78cfdd3e7e2ccc5596 /ncr_int.h
parent0b2ab77de147d60ca44de978a36e90e1138a5551 (diff)
downloadcryptodev-linux-e9f738aa05a2dbf94fdf05de01d06d2ebf62529d.tar.gz
cryptodev-linux-e9f738aa05a2dbf94fdf05de01d06d2ebf62529d.tar.xz
cryptodev-linux-e9f738aa05a2dbf94fdf05de01d06d2ebf62529d.zip
Added initial wrapping and unwrapping key API. Adds an implementation of the AES-WRAP (untested yet).
Diffstat (limited to 'ncr_int.h')
-rw-r--r--ncr_int.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/ncr_int.h b/ncr_int.h
index 66f2c9a..e96e498 100644
--- a/ncr_int.h
+++ b/ncr_int.h
@@ -3,15 +3,26 @@
#include "ncr.h"
#include <asm/atomic.h>
+#include "cryptodev_int.h"
#define err() printk(KERN_DEBUG"ncr: %s: %s: %d\n", __FILE__, __func__, __LINE__)
+struct session_item_st {
+ struct list_head list;
+
+ struct cipher_data ctx;
+
+ atomic_t refcnt;
+ ncr_session_t desc;
+};
+
struct data_item_st {
struct list_head list;
/* This object is not protected from concurrent access.
* I see no reason to allow concurrent writes (reads are
* not an issue).
*/
+
uint8_t* data;
size_t data_size;
size_t max_data_size;
@@ -60,6 +71,7 @@ struct ncr_lists {
struct list_sem_st key;
/* sessions */
+ struct list_sem_st sessions;
};
void* ncr_init_lists(void);
@@ -105,5 +117,35 @@ void ncr_limits_deinit(void);
ncr_key_type_t ncr_algorithm_to_key_type(ncr_algorithm_t algo);
+int ncr_key_wrap(struct list_sem_st* keys, struct list_sem_st* data, struct list_sem_st* sess_lst, void __user* arg);
+int ncr_key_unwrap(struct list_sem_st*, struct list_sem_st* data, struct list_sem_st* sess_lst, void __user* arg);
+
+/* sessions */
+struct session_item_st* ncr_session_new(struct list_sem_st* lst);
+void _ncr_sessions_item_put( struct session_item_st* item);
+struct session_item_st* ncr_sessions_item_get( struct list_sem_st* lst, ncr_session_t desc);
+void ncr_sessions_list_deinit(struct list_sem_st* lst);
+void ncr_session_deinit(struct list_sem_st* lst, ncr_session_t desc);
+
+/* misc helper macros */
+inline static unsigned int key_flags_to_data(unsigned int key_flags)
+{
+ unsigned int flags = 0;
+
+ if (key_flags & NCR_KEY_FLAG_EXPORTABLE)
+ flags |= NCR_DATA_FLAG_EXPORTABLE;
+
+ return flags;
+}
+
+inline static unsigned int data_flags_to_key(unsigned int data_flags)
+{
+ unsigned int flags = 0;
+
+ if (data_flags & NCR_DATA_FLAG_EXPORTABLE)
+ flags |= NCR_KEY_FLAG_EXPORTABLE;
+
+ return flags;
+}
#endif