aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/credentials/keys
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2008-03-14 15:11:29 +0000
committerMartin Willi <martin@strongswan.org>2008-03-14 15:11:29 +0000
commit8d04f78d0762f5d4ff0f2b0a5e6386bea2289c21 (patch)
tree85e5c837fa9aae1bb887d1332ae91dd813525877 /src/libstrongswan/credentials/keys
parent39ea88f694a782d82f1e2c803fee4a44a2aeff51 (diff)
downloadstrongswan-8d04f78d0762f5d4ff0f2b0a5e6386bea2289c21.tar.bz2
strongswan-8d04f78d0762f5d4ff0f2b0a5e6386bea2289c21.tar.xz
removed X509_PEER flag; flags are meant to read cert, not to store additional state in cert
removed x509_t.set_flags for the reason above implemented a simple, generic shared_key_t
Diffstat (limited to 'src/libstrongswan/credentials/keys')
-rw-r--r--src/libstrongswan/credentials/keys/shared_key.c84
-rw-r--r--src/libstrongswan/credentials/keys/shared_key.h9
2 files changed, 93 insertions, 0 deletions
diff --git a/src/libstrongswan/credentials/keys/shared_key.c b/src/libstrongswan/credentials/keys/shared_key.c
index 66b45a003..1ca848b20 100644
--- a/src/libstrongswan/credentials/keys/shared_key.c
+++ b/src/libstrongswan/credentials/keys/shared_key.c
@@ -25,3 +25,87 @@ ENUM(shared_key_type_names, SHARED_ANY, SHARED_PIN,
"PIN",
);
+typedef struct private_shared_key_t private_shared_key_t;
+
+/**
+ * private data of shared_key
+ */
+struct private_shared_key_t {
+
+ /**
+ * public functions
+ */
+ shared_key_t public;
+
+ /**
+ * type of this shared key
+ */
+ shared_key_type_t type;
+
+ /**
+ * associated shared key data
+ */
+ chunk_t key;
+
+ /**
+ * reference counter
+ */
+ refcount_t ref;
+};
+
+/**
+ * Implements shared_key_t.get_type
+ */
+static shared_key_type_t get_type(private_shared_key_t *this)
+{
+ return this->type;
+}
+
+/**
+ * Implements shared_key_t.get_key
+ */
+static chunk_t get_key(private_shared_key_t *this)
+{
+ return this->key;
+}
+
+/**
+ * Implements shared_key_t.get_ref
+ */
+static shared_key_t* get_ref(private_shared_key_t *this)
+{
+ ref_get(&this->ref);
+ return &this->public;
+}
+
+/**
+ * Implementation of shared_key_t.destroy
+ */
+static void destroy(private_shared_key_t *this)
+{
+ if (ref_put(&this->ref))
+ {
+ free(this->key.ptr);
+ free(this);
+ }
+}
+
+/*
+ * see header file
+ */
+shared_key_t *shared_key_create(shared_key_type_t type, chunk_t key)
+{
+ private_shared_key_t *this = malloc_thing(private_shared_key_t);
+
+ this->public.get_type = (shared_key_type_t (*)(shared_key_t *this))get_type;
+ this->public.get_key = (chunk_t (*)(shared_key_t *this))get_key;
+ this->public.get_ref = (shared_key_t* (*)(shared_key_t *this))get_ref;
+ this->public.destroy = (void(*)(shared_key_t*))destroy;
+
+ this->type = type;
+ this->key = key;
+ this->ref = 1;
+
+ return &this->public;
+}
+
diff --git a/src/libstrongswan/credentials/keys/shared_key.h b/src/libstrongswan/credentials/keys/shared_key.h
index 86586a7c7..ceb1309b7 100644
--- a/src/libstrongswan/credentials/keys/shared_key.h
+++ b/src/libstrongswan/credentials/keys/shared_key.h
@@ -83,4 +83,13 @@ struct shared_key_t {
void (*destroy)(shared_key_t *this);
};
+/**
+ * A simple private key implementation
+ *
+ * @param type type of the shared key
+ * @param key key data, gets owned by instance
+ * @return simple shared key instance
+ */
+shared_key_t *shared_key_create(shared_key_type_t type, chunk_t key);
+
#endif /** SHARED_KEY_H_ @} */