[openssh-commits] [openssh] 04/05: upstream: unit tests for sshbuf_equals and sshbuf_dtourlb64; ok
git+noreply at mindrot.org
git+noreply at mindrot.org
Thu Sep 4 13:06:41 AEST 2025
This is an automated email from the git hooks/post-receive script.
djm pushed a commit to branch master
in repository openssh.
commit 45698669d49949868b1f3d13dfda1b7cb70060ad
Author: djm at openbsd.org <djm at openbsd.org>
AuthorDate: Thu Sep 4 00:37:10 2025 +0000
upstream: unit tests for sshbuf_equals and sshbuf_dtourlb64; ok
deraadt@
OpenBSD-Regress-ID: bab54e2d4caa813036a63ee67e92c93e6712a5b9
---
regress/unittests/sshbuf/test_sshbuf_misc.c | 217 +++++++++++++++++++++++++++-
1 file changed, 213 insertions(+), 4 deletions(-)
diff --git a/regress/unittests/sshbuf/test_sshbuf_misc.c b/regress/unittests/sshbuf/test_sshbuf_misc.c
index 249ecf235..80081c519 100644
--- a/regress/unittests/sshbuf/test_sshbuf_misc.c
+++ b/regress/unittests/sshbuf/test_sshbuf_misc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: test_sshbuf_misc.c,v 1.5 2021/12/14 21:25:27 deraadt Exp $ */
+/* $OpenBSD: test_sshbuf_misc.c,v 1.6 2025/09/04 00:37:10 djm Exp $ */
/*
* Regress test for sshbuf.h buffer API
*
@@ -22,11 +22,11 @@
void sshbuf_misc_tests(void);
-void
-sshbuf_misc_tests(void)
+static void
+test_sshbuf_dump(void)
{
struct sshbuf *p1;
- char tmp[512], msg[] = "imploring ping silence ping over", *p;
+ char tmp[512];
FILE *out;
size_t sz;
@@ -48,6 +48,13 @@ sshbuf_misc_tests(void)
fclose(out);
sshbuf_free(p1);
TEST_DONE();
+}
+
+static void
+test_sshbuf_dtob16(void)
+{
+ struct sshbuf *p1;
+ char *p;
TEST_START("sshbuf_dtob16");
p1 = sshbuf_new();
@@ -59,6 +66,13 @@ sshbuf_misc_tests(void)
free(p);
sshbuf_free(p1);
TEST_DONE();
+}
+
+static void
+test_sshbuf_dtob64_string(void)
+{
+ struct sshbuf *p1;
+ char *p;
TEST_START("sshbuf_dtob64_string len 1");
p1 = sshbuf_new();
@@ -107,6 +121,12 @@ sshbuf_misc_tests(void)
free(p);
sshbuf_free(p1);
TEST_DONE();
+}
+
+static void
+test_sshbuf_b64tod(void)
+{
+ struct sshbuf *p1;
TEST_START("sshbuf_b64tod len 1");
p1 = sshbuf_new();
@@ -134,6 +154,13 @@ sshbuf_misc_tests(void)
ASSERT_U32_EQ(PEEK_U32(sshbuf_ptr(p1)), 0xd00fd00f);
sshbuf_free(p1);
TEST_DONE();
+}
+
+static void
+test_sshbuf_dup_string(void)
+{
+ struct sshbuf *p1;
+ char *p;
TEST_START("sshbuf_dup_string");
p1 = sshbuf_new();
@@ -163,6 +190,13 @@ sshbuf_misc_tests(void)
ASSERT_PTR_EQ(p, NULL);
sshbuf_free(p1);
TEST_DONE();
+}
+
+static void
+test_sshbuf_cmp(void)
+{
+ struct sshbuf *p1;
+ char msg[] = "imploring ping silence ping over";
TEST_START("sshbuf_cmp");
p1 = sshbuf_from(msg, sizeof(msg) - 1);
@@ -183,6 +217,14 @@ sshbuf_misc_tests(void)
SSH_ERR_MESSAGE_INCOMPLETE);
ASSERT_INT_EQ(sshbuf_cmp(p1, 0, msg, sizeof(msg) - 1), 0);
TEST_DONE();
+}
+
+static void
+test_sshbuf_find(void)
+{
+ struct sshbuf *p1;
+ char msg[] = "imploring ping silence ping over";
+ size_t sz;
TEST_START("sshbuf_find");
p1 = sshbuf_from(msg, sizeof(msg) - 1);
@@ -215,3 +257,170 @@ sshbuf_misc_tests(void)
TEST_DONE();
}
+static void
+test_sshbuf_equals(void)
+{
+ struct sshbuf *b1, *b2;
+
+ TEST_START("sshbuf_equals identical");
+ b1 = sshbuf_new();
+ b2 = sshbuf_new();
+ ASSERT_PTR_NE(b1, NULL);
+ ASSERT_PTR_NE(b2, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b1, "hello", 5), 0);
+ ASSERT_INT_EQ(sshbuf_put(b2, "hello", 5), 0);
+ ASSERT_INT_EQ(sshbuf_equals(b1, b2), 0);
+ sshbuf_free(b1);
+ sshbuf_free(b2);
+ TEST_DONE();
+
+ TEST_START("sshbuf_equals different content");
+ b1 = sshbuf_new();
+ b2 = sshbuf_new();
+ ASSERT_PTR_NE(b1, NULL);
+ ASSERT_PTR_NE(b2, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b1, "hello", 5), 0);
+ ASSERT_INT_EQ(sshbuf_put(b2, "world", 5), 0);
+ ASSERT_INT_EQ(sshbuf_equals(b1, b2), SSH_ERR_INVALID_FORMAT);
+ sshbuf_free(b1);
+ sshbuf_free(b2);
+ TEST_DONE();
+
+ TEST_START("sshbuf_equals different length");
+ b1 = sshbuf_new();
+ b2 = sshbuf_new();
+ ASSERT_PTR_NE(b1, NULL);
+ ASSERT_PTR_NE(b2, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b1, "hello", 5), 0);
+ ASSERT_INT_EQ(sshbuf_put(b2, "hell", 4), 0);
+ ASSERT_INT_EQ(sshbuf_equals(b1, b2), SSH_ERR_MESSAGE_INCOMPLETE);
+ sshbuf_free(b1);
+ sshbuf_free(b2);
+ TEST_DONE();
+
+ TEST_START("sshbuf_equals empty buffers");
+ b1 = sshbuf_new();
+ b2 = sshbuf_new();
+ ASSERT_PTR_NE(b1, NULL);
+ ASSERT_PTR_NE(b2, NULL);
+ ASSERT_INT_EQ(sshbuf_equals(b1, b2), 0);
+ sshbuf_free(b1);
+ sshbuf_free(b2);
+ TEST_DONE();
+
+ TEST_START("sshbuf_equals one empty buffer");
+ b1 = sshbuf_new();
+ b2 = sshbuf_new();
+ ASSERT_PTR_NE(b1, NULL);
+ ASSERT_PTR_NE(b2, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b1, "hello", 5), 0);
+ ASSERT_INT_EQ(sshbuf_equals(b1, b2), SSH_ERR_MESSAGE_INCOMPLETE);
+ sshbuf_free(b1);
+ sshbuf_free(b2);
+ TEST_DONE();
+
+ TEST_START("sshbuf_equals buffer to self");
+ b1 = sshbuf_new();
+ ASSERT_PTR_NE(b1, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b1, "hello", 5), 0);
+ ASSERT_INT_EQ(sshbuf_equals(b1, b1), 0);
+ sshbuf_free(b1);
+ TEST_DONE();
+}
+
+static void
+test_sshbuf_dtourlb64(void)
+{
+ struct sshbuf *b, *b64;
+ char *s;
+ /* From RFC4648 */
+ const u_char test_vec1[] = {0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e};
+ const u_char test_vec2[] = {0xff, 0xff, 0xff};
+ const u_char test_vec3[] = {0xfb};
+
+ TEST_START("sshbuf_dtourlb64 empty");
+ b = sshbuf_new();
+ b64 = sshbuf_new();
+ ASSERT_PTR_NE(b, NULL);
+ ASSERT_PTR_NE(b64, NULL);
+ ASSERT_INT_EQ(sshbuf_dtourlb64(b, b64, 0), 0);
+ ASSERT_SIZE_T_EQ(sshbuf_len(b64), 0);
+ sshbuf_free(b);
+ sshbuf_free(b64);
+ TEST_DONE();
+
+ TEST_START("sshbuf_dtourlb64 no special chars");
+ b = sshbuf_new();
+ b64 = sshbuf_new();
+ ASSERT_PTR_NE(b, NULL);
+ ASSERT_PTR_NE(b64, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b, "hello", 5), 0);
+ ASSERT_INT_EQ(sshbuf_dtourlb64(b, b64, 0), 0);
+ s = sshbuf_dup_string(b64);
+ ASSERT_PTR_NE(s, NULL);
+ ASSERT_STRING_EQ(s, "aGVsbG8");
+ free(s);
+ sshbuf_free(b);
+ sshbuf_free(b64);
+ TEST_DONE();
+
+ TEST_START("sshbuf_dtourlb64 with '+' char");
+ b = sshbuf_new();
+ b64 = sshbuf_new();
+ ASSERT_PTR_NE(b, NULL);
+ ASSERT_PTR_NE(b64, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b, test_vec1, sizeof(test_vec1)), 0);
+ ASSERT_INT_EQ(sshbuf_dtourlb64(b, b64, 0), 0);
+ s = sshbuf_dup_string(b64);
+ ASSERT_PTR_NE(s, NULL);
+ ASSERT_STRING_EQ(s, "FPucA9l-");
+ free(s);
+ sshbuf_free(b);
+ sshbuf_free(b64);
+ TEST_DONE();
+
+ TEST_START("sshbuf_dtourlb64 with '/' char");
+ b = sshbuf_new();
+ b64 = sshbuf_new();
+ ASSERT_PTR_NE(b, NULL);
+ ASSERT_PTR_NE(b64, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b, test_vec2, sizeof(test_vec2)), 0);
+ ASSERT_INT_EQ(sshbuf_dtourlb64(b, b64, 0), 0);
+ s = sshbuf_dup_string(b64);
+ ASSERT_PTR_NE(s, NULL);
+ ASSERT_STRING_EQ(s, "____");
+ free(s);
+ sshbuf_free(b);
+ sshbuf_free(b64);
+ TEST_DONE();
+
+ TEST_START("sshbuf_dtourlb64 with padding removed");
+ b = sshbuf_new();
+ b64 = sshbuf_new();
+ ASSERT_PTR_NE(b, NULL);
+ ASSERT_PTR_NE(b64, NULL);
+ ASSERT_INT_EQ(sshbuf_put(b, test_vec3, sizeof(test_vec3)), 0);
+ ASSERT_INT_EQ(sshbuf_dtourlb64(b, b64, 0), 0);
+ s = sshbuf_dup_string(b64);
+ ASSERT_PTR_NE(s, NULL);
+ ASSERT_STRING_EQ(s, "-w");
+ free(s);
+ sshbuf_free(b);
+ sshbuf_free(b64);
+ TEST_DONE();
+}
+
+void
+sshbuf_misc_tests(void)
+{
+ test_sshbuf_dump();
+ test_sshbuf_dtob16();
+ test_sshbuf_dtob64_string();
+ test_sshbuf_b64tod();
+ test_sshbuf_dup_string();
+ test_sshbuf_cmp();
+ test_sshbuf_find();
+ test_sshbuf_equals();
+ test_sshbuf_dtourlb64();
+}
+
--
To stop receiving notification emails like this one, please contact
djm at mindrot.org.
More information about the openssh-commits
mailing list