summaryrefslogtreecommitdiff
path: root/src/libstrongswan/credentials/keys/private_key.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/credentials/keys/private_key.c')
-rw-r--r--src/libstrongswan/credentials/keys/private_key.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/libstrongswan/credentials/keys/private_key.c b/src/libstrongswan/credentials/keys/private_key.c
index 0a01d0385..c3b5ac55b 100644
--- a/src/libstrongswan/credentials/keys/private_key.c
+++ b/src/libstrongswan/credentials/keys/private_key.c
@@ -15,3 +15,65 @@
#include "private_key.h"
+/**
+ * See header.
+ */
+bool private_key_equals(private_key_t *this, private_key_t *other)
+{
+ key_encoding_type_t type;
+ chunk_t a, b;
+
+ if (this == other)
+ {
+ return TRUE;
+ }
+
+ for (type = 0; type < KEY_ENCODING_MAX; type++)
+ {
+ if (this->get_fingerprint(this, type, &a) &&
+ other->get_fingerprint(other, type, &b))
+ {
+ return chunk_equals(a, b);
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * See header.
+ */
+bool private_key_belongs_to(private_key_t *private, public_key_t *public)
+{
+ key_encoding_type_t type;
+ chunk_t a, b;
+
+ for (type = 0; type < KEY_ENCODING_MAX; type++)
+ {
+ if (private->get_fingerprint(private, type, &a) &&
+ public->get_fingerprint(public, type, &b))
+ {
+ return chunk_equals(a, b);
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * See header.
+ */
+bool private_key_has_fingerprint(private_key_t *private, chunk_t fingerprint)
+{
+ key_encoding_type_t type;
+ chunk_t current;
+
+ for (type = 0; type < KEY_ID_MAX; type++)
+ {
+ if (private->get_fingerprint(private, type, &current) &&
+ chunk_equals(current, fingerprint))
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+