summary refs log tree commit diff stats
path: root/libotr/libotr-4.1.1/tests/unit/test_auth.c
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2021-04-09 07:19:03 -0300
committerSoniEx2 <endermoneymod@gmail.com>2021-04-09 07:19:03 -0300
commit0e752a6e215aee21dc73da097c3225495d54a5b6 (patch)
treeb81be02cbf2f06aebf322ac4a5d014b44176bba5 /libotr/libotr-4.1.1/tests/unit/test_auth.c
parent7754076c715285173311a1b6811ce377950e18a6 (diff)
Add libotr/etc sources
Diffstat (limited to 'libotr/libotr-4.1.1/tests/unit/test_auth.c')
-rw-r--r--libotr/libotr-4.1.1/tests/unit/test_auth.c181
1 files changed, 181 insertions, 0 deletions
diff --git a/libotr/libotr-4.1.1/tests/unit/test_auth.c b/libotr/libotr-4.1.1/tests/unit/test_auth.c
new file mode 100644
index 0000000..06b5908
--- /dev/null
+++ b/libotr/libotr-4.1.1/tests/unit/test_auth.c
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2014 - David Goulet <dgoulet@ev0ke.net>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License, version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <auth.h>
+#include <context.h>
+#include <gcrypt.h>
+#include <pthread.h>
+
+#include <tap/tap.h>
+#include <utils.h>
+#include <proto.h>
+
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+
+#define NUM_TESTS 5
+
+static void test_auth_new(void)
+{
+	struct context ctx;
+	OtrlAuthInfo *auth = &ctx.auth;
+
+	/* API call. */
+	otrl_auth_new(&ctx);
+
+	ok(auth->authstate == OTRL_AUTHSTATE_NONE &&
+		auth->our_keyid == 0 &&
+		auth->encgx == NULL &&
+		auth->encgx_len == 0 &&
+		utils_is_zeroed(auth->r, 16) &&
+		utils_is_zeroed(auth->hashgx, 32) &&
+		auth->their_pub == NULL &&
+		auth->their_keyid == 0 &&
+		auth->enc_c == NULL &&
+		auth->enc_cp == NULL &&
+		auth->mac_m1 == NULL &&
+		auth->mac_m1p == NULL &&
+		auth->mac_m2 == NULL &&
+		auth->mac_m2p == NULL &&
+		utils_is_zeroed(auth->their_fingerprint, 20) &&
+		auth->initiated == 0 &&
+		auth->protocol_version == 0 &&
+		utils_is_zeroed(auth->secure_session_id, 20) &&
+		auth->secure_session_id_len == 0 &&
+		auth->lastauthmsg == NULL &&
+		auth->commit_sent_time == 0 &&
+		auth->context == &ctx,
+		"OTR auth info init is valid");
+}
+
+static void test_auth_clear(void)
+{
+	struct context ctx;
+	OtrlAuthInfo *auth = &ctx.auth;
+
+	/* API call. */
+	otrl_auth_clear(auth);
+
+	ok(auth->authstate == OTRL_AUTHSTATE_NONE &&
+		auth->our_keyid == 0 &&
+		auth->encgx == NULL &&
+		auth->encgx_len == 0 &&
+		utils_is_zeroed(auth->r, 16) &&
+		utils_is_zeroed(auth->hashgx, 32) &&
+		auth->their_pub == NULL &&
+		auth->their_keyid == 0 &&
+		auth->enc_c == NULL &&
+		auth->enc_cp == NULL &&
+		auth->mac_m1 == NULL &&
+		auth->mac_m1p == NULL &&
+		auth->mac_m2 == NULL &&
+		auth->mac_m2p == NULL &&
+		utils_is_zeroed(auth->their_fingerprint, 20) &&
+		auth->initiated == 0 &&
+		auth->protocol_version == 0 &&
+		utils_is_zeroed(auth->secure_session_id, 20) &&
+		auth->secure_session_id_len == 0 &&
+		auth->lastauthmsg == NULL &&
+		auth->commit_sent_time == 0 &&
+		auth->context == &ctx,
+		"OTR auth info clear is valid");
+}
+
+static void test_auth_start_v23(void)
+{
+	unsigned int version = 3;
+	gcry_error_t err;
+	struct context ctx;
+	OtrlAuthInfo *auth = &ctx.auth;
+
+	/* API call. */
+	otrl_auth_new(&ctx);
+	err = otrl_auth_start_v23(auth, version);
+
+	ok(err == gcry_error(GPG_ERR_NO_ERROR) &&
+		auth->initiated == 1 &&
+		auth->protocol_version == version &&
+		auth->context->protocol_version == version &&
+		auth->our_keyid == 1 &&
+		!utils_is_zeroed(auth->r, sizeof(auth->r)) &&
+		auth->encgx != NULL &&
+		auth->encgx_len > 0 &&
+		!utils_is_zeroed(auth->hashgx, sizeof(auth->hashgx)) &&
+		auth->lastauthmsg != NULL &&
+		auth->authstate == OTRL_AUTHSTATE_AWAITING_DHKEY,
+		"OTR auth start v23 is valid");
+}
+
+static void test_otrl_auth_copy_on_key()
+{
+	struct context m_ctx, ctx;
+	OtrlAuthInfo *auth = &ctx.auth;
+	OtrlAuthInfo *m_auth = &m_ctx.auth;
+
+	otrl_auth_new(&ctx);
+	otrl_auth_new(&m_ctx);
+
+	otrl_auth_start_v23(auth, 3);
+	otrl_auth_start_v23(m_auth, 3);
+
+	m_auth->authstate = OTRL_AUTHSTATE_NONE;
+	auth->authstate = OTRL_AUTHSTATE_AWAITING_REVEALSIG,
+	otrl_auth_copy_on_key(m_auth, auth);
+
+	ok(gcry_mpi_cmp((m_auth->our_dh.priv), (auth->our_dh.priv)) != 0 &&
+		gcry_mpi_cmp((m_auth->our_dh.pub), (auth->our_dh.pub)) != 0 &&
+		m_auth->our_keyid == auth->our_keyid &&
+		memcmp(m_auth->r, auth->r, 16) != 0 &&
+		memcmp(m_auth->encgx, auth->encgx, 16) != 0 &&
+		memcmp(m_auth->hashgx, auth->hashgx, 16) != 0 &&
+		auth->authstate == OTRL_AUTHSTATE_AWAITING_REVEALSIG,
+		"Copy not done");
+
+	auth->authstate = OTRL_AUTHSTATE_AWAITING_DHKEY;
+	m_auth->authstate = OTRL_AUTHSTATE_AWAITING_DHKEY;
+	otrl_auth_copy_on_key(m_auth, auth);
+
+	ok(m_auth->initiated == auth->initiated &&
+		m_auth->our_keyid == auth->our_keyid &&
+		m_auth->our_dh.groupid == auth->our_dh.groupid &&
+		gcry_mpi_cmp((m_auth->our_dh.priv), (auth->our_dh.priv)) == 0 &&
+		gcry_mpi_cmp((m_auth->our_dh.pub), (auth->our_dh.pub)) == 0 &&
+		m_auth->our_keyid == auth->our_keyid &&
+		memcmp(m_auth->r, auth->r, 16) == 0 &&
+		memcmp(m_auth->encgx, auth->encgx, 16) == 0 &&
+		memcmp(m_auth->hashgx, auth->hashgx, 16) == 0 &&
+		auth->authstate == OTRL_AUTHSTATE_AWAITING_DHKEY,
+		"Copy OK");
+}
+
+int main(int argc, char **argv)
+{
+	/* Libtap call for the number of tests planned. */
+	plan_tests(NUM_TESTS);
+
+	gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+	OTRL_INIT;
+
+	/* Initialize libotr. */
+	otrl_dh_init();
+
+	test_auth_new();
+	test_auth_clear();
+	test_auth_start_v23();
+	test_otrl_auth_copy_on_key();
+
+	return 0;
+}