-/* $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.
*
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)
{
-/* $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.
*
*/
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.