Diff between b4f5d846add3f9b215e0b0ed4f48180af96a9d4a and c614aabd4191f7942e9abb8052ef3a4795496c8c

Changed Files

File Additions Deletions Status
tools/oobtest.c +34 -7 modified

Full Patch

diff --git a/tools/oobtest.c b/tools/oobtest.c
index f34722d..67aafc2 100644
--- a/tools/oobtest.c
+++ b/tools/oobtest.c
@@ -37,6 +37,8 @@
 
 static bool use_bredr = false;
 static bool use_le = false;
+static bool provide_p192 = false;
+static bool provide_p256 = false;
 
 static struct mgmt *mgmt;
 static uint16_t index1 = MGMT_INDEX_NONE;
@@ -155,12 +157,14 @@ static void add_remote_oob_data(uint16_t index, const bdaddr_t *bdaddr,
 
 	memset(&cp, 0, sizeof(cp));
 	bacpy(&cp.addr.bdaddr, bdaddr);
-	if (use_bredr) {
+	if (use_bredr)
 		cp.addr.type = BDADDR_BREDR;
+	else
+		cp.addr.type = BDADDR_LE_PUBLIC;
+	if (hash192 && rand192) {
 		memcpy(cp.hash192, hash192, 16);
 		memcpy(cp.rand192, rand192, 16);
 	} else {
-		cp.addr.type = BDADDR_LE_PUBLIC;
 		memset(cp.hash192, 0, 16);
 		memset(cp.rand192, 0, 16);
 	}
@@ -193,8 +197,13 @@ static void read_oob_data_complete(uint8_t status, uint16_t len,
 
 	printf("[Index %u]\n", index);
 
-	hash192 = rp->hash192;
-	rand192 = rp->randomizer192;
+	if (provide_p192) {
+		hash192 = rp->hash192;
+		rand192 = rp->randomizer192;
+	} else {
+		hash192 = NULL;
+		rand192 = NULL;
+	}
 
 	printf("  Hash C from P-192: ");
 	for (i = 0; i < 16; i++)
@@ -212,8 +221,13 @@ static void read_oob_data_complete(uint8_t status, uint16_t len,
 		goto done;
 	}
 
-	hash256 = rp->hash256;
-	rand256 = rp->randomizer256;
+	if (provide_p256) {
+		hash256 = rp->hash256;
+		rand256 = rp->randomizer256;
+	} else {
+		hash256 = NULL;
+		rand256 = NULL;
+	}
 
 	printf("  Hash C from P-256: ");
 	for (i = 0; i < 16; i++)
@@ -432,6 +446,8 @@ static void usage(void)
 static const struct option main_options[] = {
 	{ "bredr",   no_argument,       NULL, 'B' },
 	{ "le",      no_argument,       NULL, 'L' },
+	{ "p192",    no_argument,       NULL, '1' },
+	{ "p256",    no_argument,       NULL, '2' },
 	{ "version", no_argument,       NULL, 'v' },
 	{ "help",    no_argument,       NULL, 'h' },
 	{ }
@@ -445,7 +461,7 @@ int main(int argc ,char *argv[])
 	for (;;) {
 		int opt;
 
-		opt = getopt_long(argc, argv, "BLvh", main_options, NULL);
+		opt = getopt_long(argc, argv, "BL12vh", main_options, NULL);
 		if (opt < 0)
 			break;
 
@@ -456,6 +472,12 @@ int main(int argc ,char *argv[])
 		case 'L':
 			use_le = true;
 			break;
+		case '1':
+			provide_p192 = true;
+			break;
+		case '2':
+			provide_p256 = true;
+			break;
 		case 'v':
 			printf("%s\n", VERSION);
 			return EXIT_SUCCESS;
@@ -477,6 +499,11 @@ int main(int argc ,char *argv[])
 		return EXIT_FAILURE;
 	}
 
+	if (!provide_p192 && !provide_p256) {
+		provide_p192 = true;
+		provide_p256 = true;
+	}
+
 	mainloop_init();
 
 	sigemptyset(&mask);