Provide CBS_get_last_u8().
authorjsing <jsing@openbsd.org>
Wed, 15 Dec 2021 17:23:34 +0000 (17:23 +0000)
committerjsing <jsing@openbsd.org>
Wed, 15 Dec 2021 17:23:34 +0000 (17:23 +0000)
This will be used in the TLSv1.3 record layer.

From BoringSSL.

ok tb@

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

index ab76b78..627c609 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bs_cbs.c,v 1.21 2021/10/31 06:48:54 jsing Exp $       */
+/*     $OpenBSD: bs_cbs.c,v 1.22 2021/12/15 17:23:34 jsing Exp $       */
 /*
  * Copyright (c) 2014, Google Inc.
  *
@@ -190,6 +190,17 @@ CBS_get_u32(CBS *cbs, uint32_t *out)
        return cbs_get_u(cbs, out, 4);
 }
 
+int
+CBS_get_last_u8(CBS *cbs, uint8_t *out)
+{
+       if (cbs->len == 0)
+               return 0;
+
+       *out = cbs->data[cbs->len - 1];
+       cbs->len--;
+       return 1;
+}
+
 int
 CBS_get_bytes(CBS *cbs, CBS *out, size_t len)
 {
index 9e55dd4..4ab2828 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bytestring.h,v 1.19 2021/05/16 10:58:27 jsing Exp $   */
+/*     $OpenBSD: bytestring.h,v 1.20 2021/12/15 17:23:34 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_last_u8 sets |*out| to the last uint8_t from |cbs| and shortens
+ * |cbs|. It returns one on success and zero on error.
+ */
+int CBS_get_last_u8(CBS *cbs, uint8_t *out);
+
 /*
  * CBS_get_bytes sets |*out| to the next |len| bytes from |cbs| and advances
  * |cbs|. It returns one on success and zero on error.