Provide CBS_get_u64().
authorjsing <jsing@openbsd.org>
Wed, 15 Dec 2021 17:30:20 +0000 (17:30 +0000)
committerjsing <jsing@openbsd.org>
Wed, 15 Dec 2021 17:30:20 +0000 (17:30 +0000)
This will be used in the libcrypto certificate transparency code.

ok tb@

lib/libssl/bs_cbs.c
lib/libssl/bytestring.h

index 627c609..97b0163 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bs_cbs.c,v 1.22 2021/12/15 17:23:34 jsing Exp $       */
+/*     $OpenBSD: bs_cbs.c,v 1.23 2021/12/15 17:30:20 jsing Exp $       */
 /*
  * Copyright (c) 2014, Google Inc.
  *
@@ -190,6 +190,23 @@ CBS_get_u32(CBS *cbs, uint32_t *out)
        return cbs_get_u(cbs, out, 4);
 }
 
+int
+CBS_get_u64(CBS *cbs, uint64_t *out)
+{
+       uint32_t a, b;
+
+       if (cbs->len < 8)
+               return 0;
+
+       if (!CBS_get_u32(cbs, &a))
+               return 0;
+       if (!CBS_get_u32(cbs, &b))
+               return 0;
+
+       *out = (uint64_t)a << 32 | b;
+       return 1;
+}
+
 int
 CBS_get_last_u8(CBS *cbs, uint8_t *out)
 {
index 4ab2828..fa5e05f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bytestring.h,v 1.20 2021/12/15 17:23:34 jsing Exp $   */
+/*     $OpenBSD: bytestring.h,v 1.21 2021/12/15 17:30:20 jsing Exp $   */
 /*
  * Copyright (c) 2014, Google Inc.
  *
@@ -133,6 +133,12 @@ int CBS_get_u24(CBS *cbs, uint32_t *out);
  */
 int CBS_get_u32(CBS *cbs, uint32_t *out);
 
+/*
+ * CBS_get_u64 sets |*out| to the next, big-endian uint64_t value from |cbs|
+ * and advances |cbs|. It returns one on success and zero on error.
+ */
+int CBS_get_u64(CBS *cbs, uint64_t *out);
+
 /*
  * CBS_get_last_u8 sets |*out| to the last uint8_t from |cbs| and shortens
  * |cbs|. It returns one on success and zero on error.