/*
ecdsa.c -- ECDSA key handling
- Copyright (C) 2014 Guus Sliepen <guus@meshlink.io>
+ Copyright (C) 2014-2017 Guus Sliepen <guus@meshlink.io>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return 0;
}
- ecdsa_t *ecdsa = xzalloc(sizeof *ecdsa);
+ ecdsa_t *ecdsa = xzalloc(sizeof * ecdsa);
len = b64decode(p, ecdsa->public, len);
+
if(len != 32) {
logger(NULL, MESHLINK_ERROR, "Invalid format of public key! len = %d", len);
free(ecdsa);
return ecdsa;
}
+ecdsa_t *ecdsa_set_public_key(const void *p) {
+ ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa));
+ memcpy(ecdsa->public, p, sizeof ecdsa->public);
+ return ecdsa;
+}
+
char *ecdsa_get_base64_public_key(ecdsa_t *ecdsa) {
char *base64 = xmalloc(44);
b64encode(ecdsa->public, base64, sizeof ecdsa->public);
return base64;
}
+const void *ecdsa_get_public_key(ecdsa_t *ecdsa) {
+ return ecdsa->public;
+}
+
+ecdsa_t *ecdsa_set_private_key(const void *p) {
+ ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa));
+ memcpy(ecdsa->private, p, sizeof(*ecdsa));
+ return ecdsa;
+}
+
+const void *ecdsa_get_private_key(ecdsa_t *ecdsa) {
+ return ecdsa->private;
+}
+
// Read PEM ECDSA keys
ecdsa_t *ecdsa_read_pem_public_key(FILE *fp) {
- ecdsa_t *ecdsa = xzalloc(sizeof *ecdsa);
- if(fread(ecdsa->public, sizeof ecdsa->public, 1, fp) == 1)
+ ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa));
+
+ if(fread(ecdsa->public, sizeof ecdsa->public, 1, fp) == 1) {
return ecdsa;
+ }
+
free(ecdsa);
return 0;
}
ecdsa_t *ecdsa_read_pem_private_key(FILE *fp) {
- ecdsa_t *ecdsa = xmalloc(sizeof *ecdsa);
- if(fread(ecdsa, sizeof *ecdsa, 1, fp) == 1)
+ ecdsa_t *ecdsa = xmalloc(sizeof * ecdsa);
+
+ if(fread(ecdsa, sizeof * ecdsa, 1, fp) == 1) {
return ecdsa;
+ }
+
free(ecdsa);
return 0;
}
size_t ecdsa_size(ecdsa_t *ecdsa) {
+ (void)ecdsa;
return 64;
}