This is an automated email from the ASF dual-hosted git repository.

andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit 84f50834807d61b382070420cdc732af63f053ee
Author: Andrzej Kaczmarek <andrzej.kaczma...@codecoup.pl>
AuthorDate: Fri Jan 27 20:39:23 2023 +0100

    nimble/ll/test: Add crypto unit tests
---
 nimble/controller/test/src/ble_ll_crypto_test.c | 147 ++++++++++++++++++++++++
 nimble/controller/test/src/ble_ll_test.c        |   2 +
 2 files changed, 149 insertions(+)

diff --git a/nimble/controller/test/src/ble_ll_crypto_test.c 
b/nimble/controller/test/src/ble_ll_crypto_test.c
new file mode 100644
index 00000000..a2e727a0
--- /dev/null
+++ b/nimble/controller/test/src/ble_ll_crypto_test.c
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <stdint.h>
+#include <controller/ble_ll_crypto.h>
+#include <testutil/testutil.h>
+
+TEST_CASE_SELF(ble_ll_crypto_test_h6) {
+    const uint8_t w[] = {
+        0xec, 0x02, 0x34, 0xa3, 0x57, 0xc8, 0xad, 0x05,
+        0x34, 0x10, 0x10, 0xa6, 0x0a, 0x39, 0x7d, 0x9b
+    };
+    const uint8_t key_id[] = { 0x6c, 0x65, 0x62, 0x72 };
+    const uint8_t ok[] = {
+        0x2d, 0x9a, 0xe1, 0x02, 0xe7, 0x6d, 0xc9, 0x1c,
+        0xe8, 0xd3, 0xa9, 0xe2, 0x80, 0xb1, 0x63, 0x99
+    };
+    uint8_t out[16];
+    int rc;
+
+    rc = ble_ll_crypto_h6(w, key_id, out);
+    TEST_ASSERT(rc == 0);
+
+    rc = memcmp(out, ok, 16);
+    TEST_ASSERT(rc == 0);
+}
+
+TEST_CASE_SELF(ble_ll_crypto_test_h7) {
+    const uint8_t salt[] = {
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x74, 0x6D, 0x70, 0x31
+    };
+    const uint8_t w[] = {
+        0xec, 0x02, 0x34, 0xa3, 0x57, 0xc8, 0xad, 0x05,
+        0x34, 0x10, 0x10, 0xa6, 0x0a, 0x39, 0x7d, 0x9b
+    };
+    const uint8_t ok[] = {
+        0xfb, 0x17, 0x35, 0x97, 0xc6, 0xa3, 0xc0, 0xec,
+        0xd2, 0x99, 0x8c, 0x2a, 0x75, 0xa5, 0x70, 0x11
+    };
+    uint8_t out[16];
+    int rc;
+
+    rc = ble_ll_crypto_h7(salt, w, out);
+    TEST_ASSERT(rc == 0);
+
+    rc = memcmp(out, ok, 16);
+    TEST_ASSERT(rc == 0);
+}
+
+TEST_CASE_SELF(ble_ll_crypto_test_h8) {
+    const uint8_t k[] = {
+        0xec, 0x02, 0x34, 0xa3, 0x57, 0xc8, 0xad, 0x05,
+        0x34, 0x10, 0x10, 0xa6, 0x0a, 0x39, 0x7d, 0x9b
+    };
+    const uint8_t s[] = {
+        0x15, 0x36, 0xd1, 0x8d, 0xe3, 0xd2, 0x0d, 0xf9,
+        0x9b, 0x70, 0x44, 0xc1, 0x2f, 0x9e, 0xd5, 0xba
+    };
+    const uint8_t key_id[] = { 0xcc, 0x03, 0x01, 0x48 };
+    const uint8_t ok[] = {
+        0xe5, 0xe5, 0xbe, 0xba, 0xae, 0x72, 0x28, 0xe7,
+        0x22, 0xa3, 0x89, 0x04, 0xed, 0x35, 0x0f, 0x6d
+    };
+    uint8_t out[16];
+    int rc;
+
+    rc = ble_ll_crypto_h8(k, s, key_id, out);
+    TEST_ASSERT(rc == 0);
+
+    rc = memcmp(out, ok, 16);
+    TEST_ASSERT(rc == 0);
+}
+
+TEST_CASE_SELF(ble_ll_crypto_test_gskd) {
+    const uint8_t broadcast_code[] = {
+        0x00, 0x00, 0x00, 0x00, 0x65, 0x73, 0x75, 0x6f,
+        0x48, 0x20, 0x65, 0x6e, 0x72, 0xb8, 0xc3, 0x42
+    };
+    const uint8_t gskd[] = {
+        0x55, 0x18, 0x8b, 0x3d, 0x32, 0xf6, 0xbb, 0x9a,
+        0x90, 0x0a, 0xfc, 0xfb, 0xee, 0xd4, 0xe7, 0x2a
+    };
+    const uint8_t big1[] = {
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x42, 0x49, 0x47, 0x31
+    };
+    const uint8_t big2[] = { 0x42, 0x49, 0x47, 0x32 };
+    const uint8_t big3[] = { 0x42, 0x49, 0x47, 0x33 };
+    const uint8_t ok_igltk[] = {
+        0x4c, 0x0d, 0xd7, 0x4c, 0x2b, 0x19, 0xaa, 0x95,
+        0xd8, 0x98, 0x23, 0x85, 0x5f, 0x10, 0x01, 0xb8
+    };
+    const uint8_t ok_gltk[] = {
+        0xc4, 0xcd, 0x4b, 0x83, 0x49, 0xb5, 0xa1, 0x8a,
+        0x02, 0xde, 0x66, 0x20, 0x90, 0x17, 0xae, 0xd3
+    };
+    const uint8_t ok_gsk[] = {
+        0xbe, 0x2a, 0x16, 0xfc, 0x7a, 0xc4, 0x64, 0xe7,
+        0x52, 0x30, 0x1b, 0xcc, 0xc8, 0x18, 0x81, 0x2c
+    };
+    uint8_t igltk[16];
+    uint8_t gltk[16];
+    uint8_t gsk[16];
+    int rc;
+
+    rc = ble_ll_crypto_h7(big1, broadcast_code, igltk);
+    TEST_ASSERT(rc == 0);
+
+    rc = memcmp(igltk, ok_igltk, 16);
+    TEST_ASSERT(rc == 0);
+
+    rc = ble_ll_crypto_h6(igltk, big2, gltk);
+    TEST_ASSERT(rc == 0);
+
+    rc = memcmp(gltk, ok_gltk, 16);
+    TEST_ASSERT(rc == 0);
+
+    rc = ble_ll_crypto_h8(gltk, gskd, big3, gsk);
+    TEST_ASSERT(rc == 0);
+
+    rc = memcmp(gsk, ok_gsk, 16);
+    TEST_ASSERT(rc == 0);
+}
+
+TEST_SUITE(ble_ll_crypto_test_suite) {
+    ble_ll_crypto_test_h6();
+    ble_ll_crypto_test_h7();
+    ble_ll_crypto_test_h8();
+    ble_ll_crypto_test_gskd();
+}
diff --git a/nimble/controller/test/src/ble_ll_test.c 
b/nimble/controller/test/src/ble_ll_test.c
index efb9bf00..e496e15f 100644
--- a/nimble/controller/test/src/ble_ll_test.c
+++ b/nimble/controller/test/src/ble_ll_test.c
@@ -27,11 +27,13 @@
 #if MYNEWT_VAL(SELFTEST)
 
 TEST_SUITE_DECL(ble_ll_aa_test_suite);
+TEST_SUITE_DECL(ble_ll_crypto_test_suite);
 
 int
 main(int argc, char **argv)
 {
     ble_ll_aa_test_suite();
+    ble_ll_crypto_test_suite();
     ble_ll_csa2_test_suite();
     return tu_any_failed;
 }

Reply via email to