cbor: Fix implicit conversion

Fix implicit conversion checks that are happened on the following
compilation options.
    -Wsign-conversion
    -Wimplicit-int-conversion

Bug: 342974524
Change-Id: Ie037dfd40d2d91f5f6c254f24452125644aa1752
Signed-off-by: Tommy Chiu <tommychiu@google.com>
Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/233451
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
Reviewed-by: Andrew Scull <ascull@google.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
diff --git a/src/cbor_reader.c b/src/cbor_reader.c
index 7f33b2f..1270206 100644
--- a/src/cbor_reader.c
+++ b/src/cbor_reader.c
@@ -54,13 +54,13 @@
     if (bytes == 2) {
       value |= in->buffer[in->cursor + 1];
     } else if (bytes == 3) {
-      value |= (uint16_t)in->buffer[in->cursor + 1] << 8;
-      value |= (uint16_t)in->buffer[in->cursor + 2];
+      value |= (uint64_t)in->buffer[in->cursor + 1] << 8;
+      value |= (uint64_t)in->buffer[in->cursor + 2];
     } else if (bytes == 5) {
-      value |= (uint32_t)in->buffer[in->cursor + 1] << 24;
-      value |= (uint32_t)in->buffer[in->cursor + 2] << 16;
-      value |= (uint32_t)in->buffer[in->cursor + 3] << 8;
-      value |= (uint32_t)in->buffer[in->cursor + 4];
+      value |= (uint64_t)in->buffer[in->cursor + 1] << 24;
+      value |= (uint64_t)in->buffer[in->cursor + 2] << 16;
+      value |= (uint64_t)in->buffer[in->cursor + 3] << 8;
+      value |= (uint64_t)in->buffer[in->cursor + 4];
     } else if (bytes == 9) {
       value |= (uint64_t)in->buffer[in->cursor + 1] << 56;
       value |= (uint64_t)in->buffer[in->cursor + 2] << 48;
@@ -96,7 +96,7 @@
   if (raw > SIZE_MAX) {
     return CBOR_READ_RESULT_MALFORMED;
   }
-  *size = raw;
+  *size = (size_t)raw;
   in->cursor += bytes;
   return CBOR_READ_RESULT_OK;
 }
@@ -250,7 +250,7 @@
         continue;
       case CBOR_TYPE_BSTR:
       case CBOR_TYPE_TSTR:
-        if (CborReadWouldOverflow(val, &peeker)) {
+        if (val > SIZE_MAX || CborReadWouldOverflow((size_t)val, &peeker)) {
           return CBOR_READ_RESULT_END;
         }
         peeker.cursor += val;
@@ -277,7 +277,10 @@
     if (stack_size == CBOR_READ_SKIP_STACK_SIZE) {
       return CBOR_READ_RESULT_MALFORMED;
     }
-    size_stack[stack_size++] = val;
+    if (val > SIZE_MAX) {
+      return CBOR_READ_RESULT_END;
+    }
+    size_stack[stack_size++] = (size_t)val;
   }
 
   in->cursor = peeker.cursor;
diff --git a/src/cbor_writer.c b/src/cbor_writer.c
index e512931..6c70129 100644
--- a/src/cbor_writer.c
+++ b/src/cbor_writer.c
@@ -59,22 +59,22 @@
   }
   if (CborWriteFitsInBuffer(size, out)) {
     if (size == 1) {
-      out->buffer[out->cursor] = (type << 5) | val;
+      out->buffer[out->cursor] = (uint8_t)((type << 5) | val);
     } else if (size == 2) {
-      out->buffer[out->cursor] = (type << 5) | 24;
+      out->buffer[out->cursor] = (uint8_t)((type << 5) | 24);
       out->buffer[out->cursor + 1] = val & 0xff;
     } else if (size == 3) {
-      out->buffer[out->cursor] = (type << 5) | 25;
+      out->buffer[out->cursor] = (uint8_t)((type << 5) | 25);
       out->buffer[out->cursor + 1] = (val >> 8) & 0xff;
       out->buffer[out->cursor + 2] = val & 0xff;
     } else if (size == 5) {
-      out->buffer[out->cursor] = (type << 5) | 26;
+      out->buffer[out->cursor] = (uint8_t)((type << 5) | 26);
       out->buffer[out->cursor + 1] = (val >> 24) & 0xff;
       out->buffer[out->cursor + 2] = (val >> 16) & 0xff;
       out->buffer[out->cursor + 3] = (val >> 8) & 0xff;
       out->buffer[out->cursor + 4] = val & 0xff;
     } else if (size == 9) {
-      out->buffer[out->cursor] = (type << 5) | 27;
+      out->buffer[out->cursor] = (uint8_t)((type << 5) | 27);
       out->buffer[out->cursor + 1] = (val >> 56) & 0xff;
       out->buffer[out->cursor + 2] = (val >> 48) & 0xff;
       out->buffer[out->cursor + 3] = (val >> 40) & 0xff;
@@ -108,9 +108,9 @@
 
 void CborWriteInt(int64_t val, struct CborOut* out) {
   if (val < 0) {
-    CborWriteType(CBOR_TYPE_NINT, (-1 - val), out);
+    CborWriteType(CBOR_TYPE_NINT, (uint64_t)(-1 - val), out);
   } else {
-    CborWriteType(CBOR_TYPE_UINT, val, out);
+    CborWriteType(CBOR_TYPE_UINT, (uint64_t)val, out);
   }
 }