summaryrefslogtreecommitdiff
path: root/src/libstrongswan/credentials/keys/public_key.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/credentials/keys/public_key.c')
-rw-r--r--src/libstrongswan/credentials/keys/public_key.c56
1 files changed, 51 insertions, 5 deletions
diff --git a/src/libstrongswan/credentials/keys/public_key.c b/src/libstrongswan/credentials/keys/public_key.c
index a5f547038..ba3036793 100644
--- a/src/libstrongswan/credentials/keys/public_key.c
+++ b/src/libstrongswan/credentials/keys/public_key.c
@@ -32,13 +32,59 @@ ENUM(signature_scheme_names, SIGN_UNKNOWN, SIGN_ECDSA_521,
"RSA_EMSA_PKCS1_SHA256",
"RSA_EMSA_PKCS1_SHA384",
"RSA_EMSA_PKCS1_SHA512",
+ "ECDSA_WITH_SHA1_DER",
+ "ECDSA_WITH_SHA256_DER",
+ "ECDSA_WITH_SHA384_DER",
+ "ECDSA_WITH_SHA512_DER",
"ECDSA_WITH_NULL",
- "ECDSA_WITH_SHA1",
"ECDSA-256",
"ECDSA-384",
"ECDSA-521",
);
+/**
+ * See header.
+ */
+bool public_key_equals(public_key_t *this, public_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 public_key_has_fingerprint(public_key_t *public, chunk_t fingerprint)
+{
+ key_encoding_type_t type;
+ chunk_t current;
+
+ for (type = 0; type < KEY_ID_MAX; type++)
+ {
+ if (public->get_fingerprint(public, type, &current) &&
+ chunk_equals(current, fingerprint))
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
/*
* Defined in header.
*/
@@ -66,13 +112,13 @@ signature_scheme_t signature_scheme_from_oid(int oid)
return SIGN_RSA_EMSA_PKCS1_SHA512;
case OID_ECDSA_WITH_SHA1:
case OID_EC_PUBLICKEY:
- return SIGN_ECDSA_WITH_SHA1;
+ return SIGN_ECDSA_WITH_SHA1_DER;
case OID_ECDSA_WITH_SHA256:
- return SIGN_ECDSA_256;
+ return SIGN_ECDSA_WITH_SHA256_DER;
case OID_ECDSA_WITH_SHA384:
- return SIGN_ECDSA_384;
+ return SIGN_ECDSA_WITH_SHA384_DER;
case OID_ECDSA_WITH_SHA512:
- return SIGN_ECDSA_521;
+ return SIGN_ECDSA_WITH_SHA512_DER;
default:
return SIGN_UNKNOWN;
}