diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-05-28 13:55:45 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-06-17 20:47:38 +0200 |
commit | c3695ab5f06af533deaf1de75cdd4631a9d77d00 (patch) | |
tree | 89a2c59d982accae5760d86fc5ae4dfa6b55c087 /ncr_int.h | |
parent | bda013fbafabd0d0826441cb40c93a46d4dc2301 (diff) | |
download | cryptodev-linux-c3695ab5f06af533deaf1de75cdd4631a9d77d00.tar.gz cryptodev-linux-c3695ab5f06af533deaf1de75cdd4631a9d77d00.tar.xz cryptodev-linux-c3695ab5f06af533deaf1de75cdd4631a9d77d00.zip |
Added some initial for of key. Added helper functions to enforce per user and per process limits.
Diffstat (limited to 'ncr_int.h')
-rw-r--r-- | ncr_int.h | 70 |
1 files changed, 59 insertions, 11 deletions
@@ -4,6 +4,8 @@ #include "ncr.h" #include <asm/atomic.h> +#define err() printk(KERN_DEBUG"ncr: %s: %d\n", __func__, __LINE__) + struct data_item { struct list_head list; /* This object is not protected from concurrent access. @@ -15,33 +17,79 @@ struct data_item { size_t max_data_size; unsigned int flags; atomic_t refcnt; - unsigned int uid; + struct file *filp; /* who has it */ ncr_data_t desc; }; +#define MAX_KEY_SIZE 32 /* in bytes */ + +struct key_item { + struct list_head list; + /* This object is also not protected from concurrent access. + */ + ncr_key_type_t type; + unsigned int flags; + ncr_algorithm_t algorithm; /* valid for public/private keys */ + uint8_t key_id[MAX_KEY_ID_SIZE]; + size_t key_id_size; + + union { + struct { + uint8_t data[MAX_KEY_SIZE]; + size_t size; + } secret; + } key; + + atomic_t refcnt; + + struct file *filp; /* who has it */ + ncr_key_t desc; +}; + +struct list_sem_st { + struct list_head list; + struct semaphore sem; +}; + /* all the data associated with the open descriptor * are here. */ struct ncr_lists { - struct list_head data_list; - struct semaphore data_sem; + struct list_sem_st data; + struct list_sem_st key; /* sessions */ - /* keys */ }; void* ncr_init_lists(void); void ncr_deinit_lists(struct ncr_lists *lst); -int -ncr_ioctl(unsigned int uid, struct ncr_lists* lst, +int ncr_ioctl(struct ncr_lists*, struct file *filp, unsigned int cmd, unsigned long arg); + +int ncr_data_set(struct list_sem_st*, void __user* arg); +int ncr_data_get(struct list_sem_st*, void __user* arg); +int ncr_data_deinit(struct list_sem_st*, void __user* arg); +int ncr_data_init(struct file* filp, struct list_sem_st*, void __user* arg); +void ncr_data_list_deinit(struct list_sem_st*); + +int ncr_key_init(struct file* filp, struct list_sem_st*, void __user* arg); +int ncr_key_generate(struct list_sem_st*, void __user* arg); +int ncr_key_generate_pair(struct list_sem_st* lst, void __user* arg); +int ncr_key_derive(struct list_sem_st*, void __user* arg); +int ncr_key_export(struct list_sem_st*, void __user* arg); +int ncr_key_import(struct list_sem_st*, void __user* arg); +int ncr_key_get_public(struct list_sem_st* lst, void __user* arg); +int ncr_key_deinit(struct list_sem_st*, void __user* arg); +void ncr_key_list_deinit(struct list_sem_st* lst); + +typedef enum { + LIMIT_TYPE_KEY, + LIMIT_TYPE_DATA +} limits_type_t; -int ncr_data_set(struct ncr_lists* lst, void __user* arg); -int ncr_data_get(struct ncr_lists* lst, void __user* arg); -int ncr_data_deinit(struct ncr_lists* lst, void __user* arg); -int ncr_data_new(unsigned int uid, struct ncr_lists* lst, void __user* arg); -void ncr_data_list_deinit(struct ncr_lists *lst); +void ncr_limits_remove(struct file *filp, limits_type_t type); +int ncr_limits_add_and_check(struct file *filp, limits_type_t type); #endif |