libblade_la_SOURCES += src/blade_identity.c src/blade_module.c src/blade_connection.c
libblade_la_SOURCES += src/blade_session.c src/blade_protocol.c src/blade_space.c src/blade_method.c
libblade_la_SOURCES += src/blade_module_wss.c src/blade_module_chat.c
+libblade_la_SOURCES += src/dht/ks_dht.c src/dht/ks_dht_datagram.c src/dht/ks_dht_endpoint.c src/dht/ks_dht_message.c src/dht/ks_dht_transaction.c
+libblade_la_SOURCES += src/dht/ks_dht_job.c src/dht/ks_dht_search.c src/dht/ks_dht_publish.c src/dht/ks_dht_distribute.c src/dht/ks_dht_storageitem.c
+libblade_la_SOURCES += src/dht/ks_dht_bucket.c src/ks_bencode.c
+
libblade_la_CFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
libblade_la_LDFLAGS = -version-info 0:1:0 -lncurses -lpthread -lm -lconfig $(AM_LDFLAGS)
libblade_la_LIBADD = libunqlite.la
+
library_includedir = $(prefix)/include
library_include_HEADERS = src/include/blade.h src/include/blade_types.h src/include/blade_stack.h
library_include_HEADERS += src/include/blade_datastore.h
library_include_HEADERS += src/include/blade_identity.h src/include/blade_module.h src/include/blade_connection.h
library_include_HEADERS += src/include/blade_session.h src/include/blade_protocol.h src/include/blade_space.h src/include/blade_method.h
library_include_HEADERS += src/include/unqlite.h test/tap.h
+library_include_HEADERS += src/include/ks_dht.h src/include/ks_bencode.h
tests: libblade.la
$(MAKE) -C test tests
#include "blade_datastore.h"
#include "blade_space.h"
#include "blade_method.h"
+#include "ks_dht.h"
+#include "ks_bencode.h"
KS_BEGIN_EXTERN_C
*/
-#include <ks.h>
+#include <blade.h>
#include <stdlib.h>
#include <stdio.h>
return clone_str(ben_str_const_cast(b));
default:
die("Invalid type %c\n", b->type);
- }
+ }
}
struct bencode *ben_shared_clone(const struct bencode *b)
assert(x >= newalloc);
newalloc = x;
if (newalloc > DICT_MAX_ALLOC)
- return -1;
+ return -1;
}
/* size must be a power of two */
return ben_str_hash(b);
default:
die("hash: Invalid type: %d\n", b->type);
- }
+ }
}
static struct bencode *decode_dict(struct ben_decode_ctx *ctx)
struct bencode *b;
int bval = -1;
- if (try_match(ctx, "True")) {
+ if (try_match(ctx, "True")) {
if (ben_need_bytes(ctx, 4))
return ben_insufficient_ptr(ctx);
} else {
}
/* Remove node from the linked list, if found */
-static struct bencode *dict_pop(struct bencode_dict *d,
+static struct bencode *dict_pop(struct bencode_dict *d,
const struct bencode *key, long long hash)
{
struct bencode *value;
blades_CFLAGS = $(AM_CFLAGS)
blades_LDADD = $(TEST_LDADD)
+check_PROGRAMS += testdht2
+testdht2_SOURCES = testdht2.c tap.c
+testdht2_CFLAGS = $(AM_CFLAGS)
+testdht2_LDADD = $(TEST_LDADD)
+
+check_PROGRAMS += testbuckets
+testbuckets_SOURCES = testbuckets.c tap.c
+testbuckets_CFLAGS = $(AM_CFLAGS)
+testbuckets_LDADD = $(TEST_LDADD)
+
+check_PROGRAMS += nodeidgen
+nodeidgen_SOURCES = nodeidgen.c tap.c
+nodeidgen_CFLAGS = $(AM_CFLAGS)
+nodeidgen_LDADD = $(TEST_LDADD)
+
TESTS=$(check_PROGRAMS)
lib_LTLIBRARIES = libks.la
libks_la_SOURCES = src/ks.c src/ks_string.c src/ks_json.c src/cJSON.c src/cJSON_Utils.c src/ks_thread.c src/ks_thread_pool.c src/ks_mutex.c src/ks_config.c
libks_la_SOURCES += src/ks_log.c src/ks_socket.c src/ks_buffer.c src/ks_pool.c src/simclist.c
-libks_la_SOURCES += src/ks_time.c src/ks_printf.c src/ks_hash.c src/ks_q.c src/ks_dso.c # src/ks_dht.c
+libks_la_SOURCES += src/ks_time.c src/ks_printf.c src/ks_hash.c src/ks_q.c src/ks_dso.c
libks_la_SOURCES += src/ks_ssl.c src/kws.c src/ks_rng.c src/ks_base64.c
libks_la_SOURCES += src/utp/utp_api.cpp src/utp/utp_callbacks.cpp src/utp/utp_hash.cpp src/utp/utp_internal.cpp
-libks_la_SOURCES += src/utp/utp_packedsockaddr.cpp src/utp/utp_utils.cpp src/ks_bencode.c
-libks_la_SOURCES += src/dht/ks_dht.c src/dht/ks_dht_datagram.c src/dht/ks_dht_endpoint.c src/dht/ks_dht_message.c src/dht/ks_dht_transaction.c
-libks_la_SOURCES += src/dht/ks_dht_job.c src/dht/ks_dht_search.c src/dht/ks_dht_publish.c src/dht/ks_dht_distribute.c src/dht/ks_dht_storageitem.c
-libks_la_SOURCES += src/dht/ks_dht_bucket.c
+libks_la_SOURCES += src/utp/utp_packedsockaddr.cpp src/utp/utp_utils.cpp
libks_la_SOURCES += crypt/aeskey.c crypt/aestab.c crypt/sha2.c crypt/twofish.c crypt/aes_modes.c crypt/aescrypt.c crypt/twofish_cfb.c
#aes.h aescpp.h brg_endian.h aesopt.h aestab.h brg_types.h sha2.h twofish.h
libks_la_SOURCES += src/ks_acl.c
library_include_HEADERS = src/include/ks_config.h src/include/ks.h src/include/ks_threadmutex.h src/include/ks_json.h src/include/ks_buffer.h
library_include_HEADERS += src/include/ks_thread_pool.h src/include/ks_cJSON.h src/include/ks_cJSON_Utils.h
library_include_HEADERS += src/include/ks_pool.h src/include/simclist.h src/include/ks_time.h src/include/ks_q.h src/include/ks_socket.h
-library_include_HEADERS += src/include/ks_dso.h src/include/ks_platform.h src/include/ks_types.h # src/include/ks_rng.h src/include/ks_dht.h
+library_include_HEADERS += src/include/ks_dso.h src/include/ks_platform.h src/include/ks_types.h src/include/ks_rng.h
library_include_HEADERS += src/include/ks_printf.h src/include/ks_hash.h src/include/ks_ssl.h src/include/kws.h
library_include_HEADERS += src/include/ks_base64.h
library_include_HEADERS += src/utp/utp_internal.h src/utp/utp.h src/utp/utp_types.h src/utp/utp_callbacks.h src/utp/utp_templates.h
AM_LDFLAGS="${AM_LDFLAGS} -fsanitize=address"
fi
-PKG_CHECK_MODULES([SODIUM], [libsodium >= 1.0.0],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([libsodium is required])])
PKG_CHECK_MODULES([UUID], [uuid >= 1.0.0],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([libuuid is required])])
AM_CFLAGS="${AM_CFLAGS} -Werror ${SODIUM_CFLAGS} ${UUID_CFLAGS}"
#include "ks_time.h"
#include "ks_socket.h"
#include "ks_dso.h"
-//#include "ks_dht.h"
#include "ks_utp.h"
#include "simclist.h"
#include "ks_ssl.h"
#include "kws.h"
-#include "ks_bencode.h"
#include "ks_rng.h"
#include "ks_acl.h"
#include "ks_base64.h"
*/
#include "ks.h"
-#include "sodium.h"
#include <aes.h>
#include <sha2.h>
* memset(buf, val, len), but the use of a volatile pointer
* guarantees that the compiler will not optimise the call away.
*/
-//static void * (*volatile memset_volatile)(void *, int, size_t) = memset;
+static void * (*volatile memset_volatile)(void *, int, size_t) = memset;
KS_DECLARE(uuid_t *) ks_uuid(uuid_t *uuid)
{
KS_DECLARE(ks_status_t) ks_rng_init(void)
{
if (!initialized) {
- if (sodium_init() == -1) {
- abort();
- }
-
- randombytes_random();
+
ks_aes_init();
ks_mutex_create(&rng_mutex, KS_MUTEX_FLAG_DEFAULT, ks_global_pool());
#ifdef __WINDOWS__
- if (!crypt_provider) {
+ if (!crypt_provider) {
if (CryptAcquireContext(&crypt_provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) == TRUE) {
initialized = KS_TRUE;
} else {
return length;
}
-KS_DECLARE(size_t) ks_rng_get_data(uint8_t* buffer, size_t length) {
- randombytes_buf(buffer, length);
- return length;
-}
-
-
-#if 0
-
KS_DECLARE(size_t) ks_rng_get_data(uint8_t* buffer, size_t length) {
aes_encrypt_ctx cx[1];
return generated;
}
-#endif
-
/* For Emacs:
* Local Variables:
* mode:c
EXTRA_DIST = tap.h
-check_PROGRAMS += testbuckets
-testbuckets_SOURCES = testbuckets.c tap.c
-testbuckets_CFLAGS = $(AM_CFLAGS)
-testbuckets_LDADD = $(TEST_LDADD)
-
check_PROGRAMS += testpools
testpools_SOURCES = testpools.c tap.c
testpools_CFLAGS = $(AM_CFLAGS)
#testdht_CFLAGS = $(AM_CFLAGS)
#testdht_LDADD = $(TEST_LDADD)
-check_PROGRAMS += testdht2
-testdht2_SOURCES = testdht2.c tap.c
-testdht2_CFLAGS = $(AM_CFLAGS)
-testdht2_LDADD = $(TEST_LDADD)
-
-check_PROGRAMS += nodeidgen
-nodeidgen_SOURCES = nodeidgen.c tap.c
-nodeidgen_CFLAGS = $(AM_CFLAGS)
-nodeidgen_LDADD = $(TEST_LDADD)
-
#check_PROGRAMS += testdht_net
#testdht_net_SOURCES = testdht-net.c tap.c
#testdht_net_CFLAGS = $(AM_CFLAGS)
}
-
+
ks_hash_iterator_t *itt;
ks_hash_write_lock(hash);
for (itt = ks_hash_first(hash, KS_READLOCKED); itt; itt = ks_hash_next(&itt)) {
const void *key;
void *val;
-
+
ks_hash_this(itt, &key, NULL, &val);
-
+
printf("%p ITT %s=%s\n", (void *)(intptr_t)ks_thread_self(), (char *)key, (char *)val);
}
ks_sleep(100000);
for (i = 0; i < ttl; i++) {
ks_thread_create(&threads[i], test2_thread, hash, pool);
}
-
+
for(i = 0; i < runs; i++) {
int x = rand() % 5;
int j;
}
ks_sleep(x * 1000000);
-
+
ks_hash_write_lock(hash);
for (itt = ks_hash_first(hash, KS_UNLOCKED); itt; itt = ks_hash_next(&itt)) {
const void *key;
void *val;
-
+
ks_hash_this(itt, &key, NULL, &val);
-
+
printf("DEL %s=%s\n", (char *)key, (char *)val);
ks_hash_remove(hash, (char *)key);
}
ks_hash_write_unlock(hash);
}
-
+
for (i = 0; i < ttl; i++) {
threads[i]->running = 0;
ks_thread_join(threads[i]);
ks_hash_create(&hash, KS_HASH_MODE_ARBITRARY, KS_HASH_FLAG_NOLOCK, pool);
ks_hash_set_keysize(hash, TEST3_SIZE);
- randombytes_buf(data, sizeof(data));
- randombytes_buf(data2, sizeof(data2));
+ ks_rng_get_data(data, sizeof(data));
+ ks_rng_get_data(data2, sizeof(data));
+ //randombytes_buf(data, sizeof(data));
+ //randombytes_buf(data2, sizeof(data2));
ks_hash_insert(hash, data, "FOO");
ks_hash_insert(hash, data2, "BAR");
ks_pool_close(&pool);
return !strcmp(A, "FOO") && !strcmp(B, "BAR") && !strcmp(C, "BAZ");
-
+
}