summaryrefslogtreecommitdiff
path: root/curvetun_mgmt_users.h
diff options
context:
space:
mode:
Diffstat (limited to 'curvetun_mgmt_users.h')
-rw-r--r--curvetun_mgmt_users.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/curvetun_mgmt_users.h b/curvetun_mgmt_users.h
new file mode 100644
index 0000000..ff9d601
--- /dev/null
+++ b/curvetun_mgmt_users.h
@@ -0,0 +1,43 @@
+#ifndef CT_USERMGMT_H
+#define CT_USERMGMT_H
+
+#include <stdint.h>
+
+#include "curve.h"
+#include "crypto_hash_sha512.h"
+
+enum is_user_enum {
+ USERNAMES_OK = 0, /* Usernames match, valid 'token' */
+ USERNAMES_NE, /* Usernames do not match */
+ USERNAMES_TS, /* Usernames match, but 'token' invalid,
+ Drop connection here */
+ USERNAMES_ERR,
+};
+
+struct username_struct {
+ uint32_t salt;
+ uint8_t hash[crypto_hash_sha512_BYTES];
+};
+
+extern int username_msg(char *username, size_t len, char *dst, size_t dlen);
+extern enum is_user_enum username_msg_is_user(char *src, size_t slen,
+ char *username, size_t len);
+extern void parse_userfile_and_generate_user_store_or_die(char *homedir);
+extern void dump_user_store(void);
+extern void destroy_user_store(void);
+
+extern int get_user_by_socket(int sock, struct curve25519_proto **proto);
+extern int get_user_by_sockaddr(struct sockaddr_storage *sa, size_t sa_len,
+ struct curve25519_proto **proto);
+extern int try_register_user_by_socket(struct curve25519_struct *c,
+ char *src, size_t slen, int sock,
+ int log);
+extern int try_register_user_by_sockaddr(struct curve25519_struct *c,
+ char *src, size_t slen,
+ struct sockaddr_storage *sa,
+ size_t sa_len, int log);
+extern void remove_user_by_socket(int sock);
+extern void remove_user_by_sockaddr(struct sockaddr_storage *sa,
+ size_t sa_len);
+
+#endif /* CT_USERMGMT_H */