[Cryptech-Commits] [sw/libhal] 03/05: Code to convert between text and internal forms of UUIDs.

git at cryptech.is git at cryptech.is
Fri Sep 2 19:19:46 UTC 2016


This is an automated email from the git hooks/post-receive script.

sra at hactrn.net pushed a commit to branch ksng
in repository sw/libhal.

commit 5af178dee33b22cf189c085e41ca96423f809034
Author: Rob Austein <sra at hactrn.net>
AuthorDate: Fri Sep 2 01:31:17 2016 -0400

    Code to convert between text and internal forms of UUIDs.
    
    Includes a few cosmetic fixes to address gcc format string warnings
    and git trailing whitespace warnings.
---
 core.c             |  2 +-
 daemon.c           |  4 ++--
 hal_internal.h     |  6 ++++++
 slip.c             |  2 +-
 tests/test-bus.c   |  3 ++-
 tests/test-mkmif.c | 10 +++++-----
 tests/test-trng.c  |  4 ++--
 uuid.c             | 36 ++++++++++++++++++++++++++++++++++++
 8 files changed, 55 insertions(+), 12 deletions(-)

diff --git a/core.c b/core.c
index 378f085..fed4b66 100644
--- a/core.c
+++ b/core.c
@@ -208,7 +208,7 @@ hal_error_t hal_core_alloc(const char *name, hal_core_t **pcore)
 {
   hal_core_t *core;
   hal_error_t err = HAL_ERROR_CORE_NOT_FOUND;
-  
+
   if (name == NULL && (pcore == NULL || *pcore == NULL))
     return HAL_ERROR_BAD_ARGUMENTS;
 
diff --git a/daemon.c b/daemon.c
index b30d730..ff95353 100644
--- a/daemon.c
+++ b/daemon.c
@@ -74,7 +74,7 @@ static void poll_add(int fd)
 {
     /* add 4 entries at a time to avoid having to realloc too often */
 #define NNEW 4
-    
+
     /* expand the array if necessary */
     if (nfds == npollfds) {
         npollfds = nfds + NNEW;
@@ -247,7 +247,7 @@ int main(int argc, char *argv[])
             perror("poll");
             exit(EXIT_FAILURE);
         }
-        
+
         for (nfds_t i = 0; i < nfds; ++i) {
             if (pollfds[i].revents != 0) {
                 /* XXX POLLERR|POLLHUP|POLLNVAL */
diff --git a/hal_internal.h b/hal_internal.h
index 72f326c..ef00328 100644
--- a/hal_internal.h
+++ b/hal_internal.h
@@ -258,6 +258,8 @@ extern hal_error_t hal_rpc_pkcs1_construct_digestinfo(const hal_hash_handle_t ha
  * UUID stuff.  All UUIDs we use (or are likely to use) are type 4 "random" UUIDs
  */
 
+#define HAL_UUID_TEXT_SIZE	(sizeof("00112233-4455-6677-8899-aabbccddeeff"))
+
 static inline int hal_uuid_cmp(const hal_uuid_t * const a, const hal_uuid_t * const b)
 {
   return memcmp(a, b, sizeof(hal_uuid_t));
@@ -265,6 +267,10 @@ static inline int hal_uuid_cmp(const hal_uuid_t * const a, const hal_uuid_t * co
 
 extern hal_error_t hal_uuid_gen(hal_uuid_t *uuid);
 
+extern hal_error_t hal_uuid_parse(hal_uuid_t *uuid, const char * const string);
+
+extern hal_error_t hal_uuid_format(const hal_uuid_t * const uuid, char *buffer, const size_t buffer_len);
+
 /*
  * Keystore API.
  */
diff --git a/slip.c b/slip.c
index 889663a..6329afd 100644
--- a/slip.c
+++ b/slip.c
@@ -144,7 +144,7 @@ hal_error_t hal_slip_recv(uint8_t * const buf, size_t * const len, const size_t
 {
     int complete;
     hal_error_t ret;
-    
+
     while (1) {
 	ret = hal_slip_recv_char(buf, len, maxlen, &complete);
 	if ((ret != HAL_OK) || complete)
diff --git a/tests/test-bus.c b/tests/test-bus.c
index b4a3e1c..94d7a70 100644
--- a/tests/test-bus.c
+++ b/tests/test-bus.c
@@ -68,7 +68,8 @@ static int sanity(const hal_core_t *board_core)
     }
 
     if (data != rnd) {
-        printf("Data bus fail: expected %08x, got %08x, diff %08x\n", rnd, data, data ^ rnd);
+        printf("Data bus fail: expected %08lx, got %08lx, diff %08lx\n",
+	       (unsigned long) rnd, (unsigned long) data, (unsigned long) (data ^ rnd));
         return 1;
     }
 
diff --git a/tests/test-mkmif.c b/tests/test-mkmif.c
index ab5801e..3645577 100644
--- a/tests/test-mkmif.c
+++ b/tests/test-mkmif.c
@@ -61,12 +61,12 @@ static hal_error_t write_test(hal_core_t *core)
     uint32_t write_address;
     int i;
     hal_error_t err;
-    
+
     for (write_data = 0x01020304, write_address = 0, i = 0;
          i < 0x10;
          write_data += 0x01010101, write_address += 4, ++i) {
 
-        printf("Trying to write 0x%08x to memory address 0x%08x.\n", 
+        printf("Trying to write 0x%08x to memory address 0x%08x.\n",
                (unsigned int)write_data, (unsigned int)write_address);
 
         if ((err = hal_mkmif_write_word(core, write_address, write_data)) != HAL_OK) {
@@ -84,7 +84,7 @@ static hal_error_t read_test(hal_core_t *core)
     uint32_t read_address;
     int i;
     hal_error_t err;
-    
+
     for (read_address = 0, i = 0;
          i < 0x10;
          read_address += 4, ++i) {
@@ -115,7 +115,7 @@ static hal_error_t write_read_test(hal_core_t *core)
         printf("write error: %s\n", hal_error_string(err));
         return err;
     }
-      
+
     if ((err = hal_mkmif_read_word(core, 0x00000000, &readback)) != HAL_OK) {
         printf("read error: %s\n", hal_error_string(err));
         return err;
@@ -125,7 +125,7 @@ static hal_error_t write_read_test(hal_core_t *core)
         printf("read %08x, expected %08x\n", (unsigned int)readback, (unsigned int)data);
         return HAL_ERROR_IO_UNEXPECTED;
     }
-      
+
     return HAL_OK;
 }
 
diff --git a/tests/test-trng.c b/tests/test-trng.c
index ebfe701..f570752 100644
--- a/tests/test-trng.c
+++ b/tests/test-trng.c
@@ -84,7 +84,7 @@ static hal_error_t test_random(const char *name)
             return err;
         }
 
-        printf("%08x ", rnd);
+        printf("%08lx ", (unsigned long) rnd);
     }
     printf("\n");
 
@@ -106,7 +106,7 @@ int main(void)
     }
     else {
 	for (i = 0; i < 8; ++i) {
-	    printf("%08x ", rnd[i]);
+	    printf("%08lx ", (unsigned long) rnd[i]);
 	}
 	printf("\n");
     }
diff --git a/uuid.c b/uuid.c
index 04410c0..be13356 100644
--- a/uuid.c
+++ b/uuid.c
@@ -32,6 +32,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <stdio.h>
 #include <assert.h>
 
 #include "hal.h"
@@ -68,6 +69,41 @@ hal_error_t hal_uuid_gen(hal_uuid_t *uuid)
   return HAL_OK;
 }
 
+hal_error_t hal_uuid_parse(hal_uuid_t *uuid, const char * const string)
+{
+  static const char fmt[]
+    = "%2hhx%2hhx%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx";
+
+  if (uuid == NULL || string == NULL ||
+      sscanf(string, fmt,
+	     uuid->uuid +  0, uuid->uuid +  1, uuid->uuid +  2, uuid->uuid +  3,
+	     uuid->uuid +  4, uuid->uuid +  5, uuid->uuid +  6, uuid->uuid +  7,
+	     uuid->uuid +  8, uuid->uuid +  9, uuid->uuid + 10, uuid->uuid + 11,
+	     uuid->uuid + 12, uuid->uuid + 13, uuid->uuid + 14, uuid->uuid + 15) != 16)
+    return HAL_ERROR_BAD_ARGUMENTS;
+
+  return HAL_OK;
+}
+
+hal_error_t hal_uuid_format(const hal_uuid_t * const uuid, char *buffer, const size_t buffer_len)
+{
+  static const char fmt[]
+    = "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx";
+
+  if (uuid == NULL || buffer == NULL || buffer_len < HAL_UUID_TEXT_SIZE)
+    return HAL_ERROR_BAD_ARGUMENTS;
+
+  if (buffer_len != snprintf(buffer, buffer_len, fmt,
+			     uuid->uuid[ 0], uuid->uuid[ 1], uuid->uuid[ 2], uuid->uuid[ 3],
+			     uuid->uuid[ 4], uuid->uuid[ 5], uuid->uuid[ 6], uuid->uuid[ 7],
+			     uuid->uuid[ 8], uuid->uuid[ 9], uuid->uuid[10], uuid->uuid[11],
+			     uuid->uuid[12], uuid->uuid[13], uuid->uuid[14], uuid->uuid[15]))
+    return HAL_ERROR_RESULT_TOO_LONG;
+
+  return HAL_OK;
+}
+
+
 /*
  * Local variables:
  * indent-tabs-mode: nil



More information about the Commits mailing list