Attest: Get option flags from challenge object
Special option flags (for test purpose) can be passed in for
attestation service. These flags are encoded in the challenge object.
Previously a 36 bytes long challenge object was used to carry these
4 extra bytes, but attestation API requires the challenge object to be
only 32, 48 or 64 bytes long.
With this change the option flags are packed in a 64 bytes long
challenge object which has a predefined value. If the challenge object
is 64 byte long and the bytes from 4 to 63 have 0 value in this case
the first 4 bytes are handled as the option flags.
Change-Id: I2a4d0bf417905d74cca0fbdb5070cdef085fe308
Signed-off-by: Laurence Lundblade <lgl@securitytheory.com>
Co-authored-by: Tamas Ban <tamas.ban@arm.com>
diff --git a/lib/ext/qcbor/src/UsefulBuf.c b/lib/ext/qcbor/src/UsefulBuf.c
index 5a7d37b..d27c146 100644
--- a/lib/ext/qcbor/src/UsefulBuf.c
+++ b/lib/ext/qcbor/src/UsefulBuf.c
@@ -1,7 +1,6 @@
/*==============================================================================
Copyright (c) 2016-2018, The Linux Foundation.
Copyright (c) 2018-2019, Laurence Lundblade.
- All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -42,6 +41,7 @@
when who what, where, why
-------- ---- ---------------------------------------------------
+ 3/6/2019 llundblade Add UsefulBuf_IsValue()
09/07/17 llundbla Fix critical bug in UsefulBuf_Find() -- a read off
the end of memory when the bytes to find is longer
than the bytes to search.
@@ -91,6 +91,28 @@
}
+/*
+ Public function -- see UsefulBuf.h
+ */
+size_t UsefulBuf_IsValue(const UsefulBufC UB, uint8_t uValue)
+{
+ if(UsefulBuf_IsNULLOrEmptyC(UB)) {
+ /* Not a match */
+ return 0;
+ }
+
+ const uint8_t * const pEnd = (uint8_t *)UB.ptr + UB.len;
+ for(const uint8_t *p = UB.ptr; p < pEnd; p++) {
+ if(*p != uValue) {
+ /* Byte didn't match */
+ return p - (uint8_t *)UB.ptr;
+ }
+ }
+
+ /* Success. All bytes matched */
+ return SIZE_MAX;
+}
+
/*
Public function -- see UsefulBuf.h