crypto.c File Reference

serval-dna plugin functionality for signing/verifying using Serval keys More...

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <serval.h>
#include <serval/overlay_address.h>
#include <serval/mdp_client.h>
#include <serval/crypto.h>
#include <serval/str.h>
#include "obj.h"
#include "list.h"
#include "cmd.h"
#include "debug.h"
#include "crypto.h"
#include "tree.h"
#include "serval-dna.h"

Functions

svl_crypto_ctxsvl_crypto_ctx_new (void)
 
void svl_crypto_ctx_free (svl_crypto_ctx *ctx)
 
int serval_open_keyring (svl_crypto_ctx *ctx)
 
int serval_init_keyring (svl_crypto_ctx *ctx)
 
int cmd_serval_sign (svl_crypto_ctx *ctx)
 
int cmd_serval_verify (svl_crypto_ctx *ctx)
 
int serval_verify_client (svl_crypto_ctx *ctx)
 
int serval_crypto_register (void)
 
int olsrd_mdp_register (void)
 
int olsrd_mdp_sign_register (void)
 
int serval_crypto_handler (co_obj_t *self, co_obj_t **output, co_obj_t *params)
 
int olsrd_mdp_init (co_obj_t *self, co_obj_t **output, co_obj_t *params)
 
int olsrd_mdp_sign (co_obj_t *self, co_obj_t **output, co_obj_t *params)
 

Variables

keyring_file * keyring
 
struct subscriber * my_subscriber
 
char * serval_path = NULL
 
co_obj_terr_msg = NULL
 

Detailed Description

serval-dna plugin functionality for signing/verifying using Serval keys

Author
Dan Staples (dismantl), danst.nosp@m.aple.nosp@m.s@ope.nosp@m.ntec.nosp@m.hinst.nosp@m.itut.nosp@m.e.org

Function Documentation

int olsrd_mdp_register ( void  )

name: mdp-init param[0] <required>: <keyring_path> (co_str16_t) param[1] <required>: <SID> (co_str8_t)

References name.

418 {
419  /**
420  * name: mdp-init
421  * param[0] <required>: <keyring_path> (co_str16_t)
422  * param[1] <required>: <SID> (co_str8_t)
423  */
424  const char name[] = "mdp-init";
425 
426  CHECK(co_cmd_register(name, sizeof(name), "", 1, "", 1, olsrd_mdp_init), "Failed to register command");
427 
428  return 1;
429 error:
430  return 0;
431 }
co_obj_t * name
Definition: cmd.h:60
int olsrd_mdp_sign ( co_obj_t self,
co_obj_t **  output,
co_obj_t params 
)

skipping some error checking for performance reasons

References co_list_element().

Referenced by olsrd_mdp_sign_register().

573 {
574  int ret = 0;
575  svl_crypto_ctx *ctx = svl_crypto_ctx_new();
576 
577  /** skipping some error checking for performance reasons */
578 
579 // CHECK(IS_LIST(params) && co_list_length(params) == 2, "Invalid params");
580 
581  ctx->msg_len = co_obj_data((char**)&ctx->msg, co_list_element(params, 1));
582 
583  memcpy(ctx->sas_private,_LIST_ELEMENT(params, 0),crypto_sign_SECRETKEYBYTES);
584 
585  CHECK(serval_create_signature(ctx), "Failed to sign OLSRd packet");
586 
587  CMD_OUTPUT("sig", co_bin8_create((char*)ctx->signature, SIGNATURE_BYTES, 0));
588 
589  ret = 1;
590 error:
591  svl_crypto_ctx_free(ctx);
592  return ret;
593 }
Definition: crypto.h:45
co_obj_t * co_list_element(co_obj_t *list, const unsigned int index)
return item at specified position in list
Definition: list.c:483
int olsrd_mdp_sign_register ( void  )

name: mdp-sign param[0] <required>: key (co_bin8_t) param[1] <required>: data (co_bin?_t)

References name, and olsrd_mdp_sign().

435 {
436  /**
437  * name: mdp-sign
438  * param[0] <required>: key (co_bin8_t)
439  * param[1] <required>: data (co_bin?_t)
440  */
441 
442  const char name[] = "mdp-sign";
443 
444  CHECK(co_cmd_register(name, sizeof(name), "", 1, "", 1, olsrd_mdp_sign), "Failed to register command");
445 
446  return 1;
447 error:
448  return 0;
449 }
co_obj_t * name
Definition: cmd.h:60
int olsrd_mdp_sign(co_obj_t *self, co_obj_t **output, co_obj_t *params)
Definition: crypto.c:572
int serval_crypto_register ( void  )

name: serval-crypto param[0] - param[3]: (co_str?_t)

References desc, name, and usage.

388 {
389  /** name: serval-crypto
390  * param[0] - param[3]: (co_str?_t)
391  */
392 
393  const char name[] = "serval-crypto",
394  usage[] = "serval-crypto sign [<SID>] <MESSAGE> [--keyring=<KEYRING_PATH>]\n"
395  "serval-crypto verify <SAS> <SIGNATURE> <MESSAGE>",
396  desc[] = "Serval-crypto utilizes Serval's crypto API to:\n"
397  " * Sign any arbitrary text using a Serval key. If no Serval key ID (SID) is given,\n"
398  " a new key will be created on the default Serval keyring.\n"
399  " * Verify any arbitrary text, a signature, and a Serval signing key (SAS), and will\n"
400  " determine if the signature is valid.";
401 
402  int reg_ret = co_cmd_register(name,
403  sizeof(name),
404  usage,
405  sizeof(usage),
406  desc,
407  sizeof(desc),
408  serval_crypto_handler);
409  CHECK(reg_ret, "Failed to register commands");
410 
411  return 1;
412 error:
413  return 0;
414 }
co_obj_t * usage
Definition: cmd.h:61
co_obj_t * desc
Definition: cmd.h:62
co_obj_t * name
Definition: cmd.h:60