Initial implementation of record/record
This commit is contained in:
parent
7e7a4e0712
commit
3b301f823a
4 changed files with 82 additions and 1 deletions
4
Makefile
4
Makefile
|
@ -2,13 +2,14 @@
|
||||||
DEBUG = true
|
DEBUG = true
|
||||||
export DEBUG
|
export DEBUG
|
||||||
|
|
||||||
OBJS = crypto/*.o crypto/encoding/*.o thirdparty/mbedtls/*.o hashmap/hashmap.o
|
OBJS = crypto/*.o crypto/encoding/*.o thirdparty/mbedtls/*.o hashmap/hashmap.o record/*.o
|
||||||
|
|
||||||
|
|
||||||
compile:
|
compile:
|
||||||
cd crypto; make all;
|
cd crypto; make all;
|
||||||
cd thirdparty; make all;
|
cd thirdparty; make all;
|
||||||
cd hashmap; make all;
|
cd hashmap; make all;
|
||||||
|
cd record; make all;
|
||||||
ar rcs libp2p.a $(OBJS)
|
ar rcs libp2p.a $(OBJS)
|
||||||
|
|
||||||
test: compile
|
test: compile
|
||||||
|
@ -21,5 +22,6 @@ clean:
|
||||||
cd hashmap; make clean;
|
cd hashmap; make clean;
|
||||||
cd thirdparty; make clean
|
cd thirdparty; make clean
|
||||||
cd test; make clean;
|
cd test; make clean;
|
||||||
|
cd record; make clean;
|
||||||
rm -rf libp2p.a
|
rm -rf libp2p.a
|
||||||
|
|
||||||
|
|
7
include/libp2p/record/record.h
Normal file
7
include/libp2p/record/record.h
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef LIBP2P_RECORD_H
|
||||||
|
#define LIBP2P_RECORD_H
|
||||||
|
|
||||||
|
#define RECORD_BUFSIZE 1024
|
||||||
|
|
||||||
|
int libp2p_record_make_put_record (char* record, struct RsaPrivateKey* sk, char* key, char* value, size_t vlen, int sign);
|
||||||
|
#endif // LIBP2P_RECORD_H
|
14
record/Makefile
Normal file
14
record/Makefile
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
CC = gcc
|
||||||
|
CFLAGS = -O0 -I../include -I../../c-protobuf -I../../c-multihash/include -g3
|
||||||
|
LFLAGS =
|
||||||
|
DEPS =
|
||||||
|
OBJS = record.o
|
||||||
|
|
||||||
|
%.o: %.c $(DEPS)
|
||||||
|
$(CC) -c -o $@ $< $(CFLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
all: $(OBJS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJS)
|
58
record/record.c
Normal file
58
record/record.c
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "libp2p/crypto/rsa.h"
|
||||||
|
#include "libp2p/record/record.h"
|
||||||
|
#include "protobuf.h"
|
||||||
|
#include "mh/hashes.h"
|
||||||
|
#include "mh/multihash.h"
|
||||||
|
|
||||||
|
// libp2p_record_make_put_record creates and signs a dht record for the given key/value pair
|
||||||
|
int libp2p_record_make_put_record (char* record, struct RsaPrivateKey* sk, char* key, char* value, size_t vlen, int sign)
|
||||||
|
{
|
||||||
|
char *pkh;
|
||||||
|
int pkh_len;
|
||||||
|
size_t len = 0, l;
|
||||||
|
|
||||||
|
record = malloc(RECORD_BUFSIZE);
|
||||||
|
|
||||||
|
if (record) {
|
||||||
|
memset (record, '\0', len);
|
||||||
|
if (!protobuf_encode_string (1, WIRETYPE_LENGTH_DELIMITED, key, record, RECORD_BUFSIZE, &l)) {
|
||||||
|
free (record);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
len += l;
|
||||||
|
if (!protobuf_encode_length_delimited (2, WIRETYPE_LENGTH_DELIMITED, value, vlen, record+len, RECORD_BUFSIZE-len, &l)) {
|
||||||
|
free (record);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
len += l;
|
||||||
|
pkh_len = mh_new_length(MH_H_SHA2_256, sk->public_key_length);
|
||||||
|
pkh = malloc(pkh_len);
|
||||||
|
if (!pkh) {
|
||||||
|
free (record);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (mh_new(pkh, MH_H_SHA2_256, sk->public_key_der, sk->public_key_length)) {
|
||||||
|
free (pkh);
|
||||||
|
free (record);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (!protobuf_encode_length_delimited (3, WIRETYPE_LENGTH_DELIMITED, pkh, pkh_len, record+len, RECORD_BUFSIZE-len, &l)) {
|
||||||
|
free (pkh);
|
||||||
|
free (record);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
len += l;
|
||||||
|
if (sign) {
|
||||||
|
//TODO: missing signature function at libp2p-crypto ?
|
||||||
|
//sign(sk, signature, record, len);
|
||||||
|
//proto encode signature.
|
||||||
|
free (pkh);
|
||||||
|
free (record);
|
||||||
|
return -1; // not implemented.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0; // sucess.
|
||||||
|
}
|
Loading…
Reference in a new issue