]> git.meshlink.io Git - meshlink/commitdiff
Add meshlink_get_fingerprint().
authorGuus Sliepen <guus@sliepen.org>
Wed, 30 Jul 2014 16:18:09 +0000 (18:18 +0200)
committerGuus Sliepen <guus@sliepen.org>
Wed, 30 Jul 2014 16:19:44 +0000 (18:19 +0200)
This function returns a (fingerprint of a) node's public key in
printable ASCII.

src/meshlink.c
src/meshlink.h

index 84bf4e1042c0b6e81618d133a777e2fa634ddf07..9fc80153d48210b0cbb60f7c7793b673c4e090cd 100644 (file)
@@ -1013,6 +1013,27 @@ ssize_t meshlink_get_pmtu(meshlink_handle_t *mesh, meshlink_node_t *destination)
                return MTU;
 }
 
+char *meshlink_get_fingerprint(meshlink_handle_t *mesh, meshlink_node_t *node) {
+       if(!mesh || !node) {
+               meshlink_errno = MESHLINK_EINVAL;
+               return NULL;
+       }
+
+       node_t *n = (node_t *)node;
+
+       if(!node_read_ecdsa_public_key(mesh, n) || !n->ecdsa) {
+               meshlink_errno = MESHLINK_EINTERNAL;
+               return false;
+       }
+
+       char *fingerprint = ecdsa_get_base64_public_key(n->ecdsa);
+
+       if(!fingerprint)
+               meshlink_errno = MESHLINK_EINTERNAL;
+
+       return fingerprint;
+}
+
 meshlink_node_t *meshlink_get_node(meshlink_handle_t *mesh, const char *name) {
        if(!mesh || !name) {
                meshlink_errno = MESHLINK_EINVAL;
index 6672b67d459bbc2e41d28dafde00b91e1933328d..ee2c3f0ae41e556932c875259750972d9b513719 100644 (file)
@@ -277,6 +277,18 @@ extern ssize_t meshlink_get_pmtu(meshlink_handle_t *mesh, meshlink_node_t *desti
  */
 extern meshlink_node_t *meshlink_get_node(meshlink_handle_t *mesh, const char *name);
 
+/// Get the fingerprint of a node's public key.
+/** This function returns a fingerprint of the node's public key.
+ *  It should be treated as an opaque blob.
+ *
+ *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param node         A pointer to a meshlink_node_t describing the node.
+ *
+ *  @return            A nul-terminated C string containing the fingerprint of the node's public key in a printable ASCII format.
+ *                      The application should call free() after it is done using this string.
+ */
+extern char *meshlink_get_fingerprint(meshlink_handle_t *mesh, meshlink_node_t *node);
+
 /// Get a list of all nodes.
 /** This function returns a list with handles for all known nodes.
  *