summaryrefslogtreecommitdiffstats
path: root/ncr_int.h
diff options
context:
space:
mode:
Diffstat (limited to 'ncr_int.h')
-rw-r--r--ncr_int.h70
1 files changed, 59 insertions, 11 deletions
diff --git a/ncr_int.h b/ncr_int.h
index 7d78ac8a1e9..82141ac6112 100644
--- a/ncr_int.h
+++ b/ncr_int.h
@@ -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