Big commit of fixes for tags
diff --git a/inc/qcbor/qcbor_decode.h b/inc/qcbor/qcbor_decode.h
index be6bc1a..e24add4 100644
--- a/inc/qcbor/qcbor_decode.h
+++ b/inc/qcbor/qcbor_decode.h
@@ -148,9 +148,9 @@
 
 /*
  The maximum number of tags that may occur on an individual nested
- item.
+ item. Typically 4.
  */
-#define QCBOR_MAX_TAGS_PER_ITEM 4
+#define QCBOR_MAX_TAGS_PER_ITEM QCBOR_MAX_TAGS_PER_ITEM1
 
 
 
@@ -278,7 +278,9 @@
     in @c val.string. */
 #define QCBOR_TYPE_BINARY_MIME   76
 
-#define QCBOR_TYPE_OPTTAG        254 // Used internally; never returned
+#define QCBOR_TYPE_TAG        254 // Used internally; never returned
+
+#define QCBOR_TYPE_OPTTAG   QCBOR_TYPE_TAG // Depricated in favor of QCBOR_TYPE_TAG
 
 
 
@@ -286,7 +288,7 @@
  The largest value in @c utags that is unmapped and can be used without
  mapping it through QCBORDecode_GetNthTag().
  */
-#define QCBOR_LAST_UNMAPPED_TAG (CBOR_TAG_INVALID16 - QCBOR_NUM_MAPPED_TAGS)
+#define QCBOR_LAST_UNMAPPED_TAG (CBOR_TAG_INVALID16 - QCBOR_NUM_MAPPED_TAGS - 1)
 
 
 /**
@@ -912,28 +914,26 @@
 
  @retval QCBOR_ERR_TOO_MANY_TAGS  The size of @c pTagList is too small.
 
- TODO: revise his documentation
+ This is retained for backwards compatibility. It is replaced by
+ QCBORDecode_GetNthTag() which can also return all the
+ tags that have been decoded.
+
+ This is not backwards compatibile in two ways. First, it is limited to
+ \ref QCBOR_MAX_TAGS_PER_ITEM items whereas previously
+ it was unlimited. Second, it will not inlucde the tags that QCBOR
+ decodes internally.
 
  This works the same as QCBORDecode_GetNext() except that it also
- returns the full list of tags for the data item. This function should
- only be needed when parsing CBOR to print it out or convert it to
- some other format. It should not be needed to implement a CBOR-based
- protocol.  See QCBORDecode_GetNext() for the main description of tag
- decoding.
+ returns the list of tags for the data item in \c pTagList.
 
- Tags will be returned here whether or not they are in the built-in or
- caller-configured tag lists.
+ The 0th tag returned here is the one furthest from the data item. This
+ is opposite the order for QCBORDecode_GetNthTag().
 
- CBOR has no upper bound of limit on the number of tags that can be
- associated with a data item though in practice the number of tags on
- an item will usually be small, perhaps less than five. This will
+ CBOR has no upper bound or limit on the number of tags that can be
+ associated with a data item but in practice the number of tags on
+ an item will usually be small. This will
  return @ref QCBOR_ERR_TOO_MANY_TAGS if the array in @c pTagList is
  too small to hold all the tags for the item.
-
- (This function is separate from QCBORDecode_GetNext() so as to not
- have to make @ref QCBORItem large enough to be able to hold a full
- list of tags. Even a list of five tags would nearly double its size
- because tags can be a @c uint64_t ).
  */
 QCBORError QCBORDecode_GetNextWithTags(QCBORDecodeContext *pCtx, QCBORItem *pDecodedItem, QCBORTagListOut *pTagList);
 
@@ -986,13 +986,15 @@
  To reduce memory used by a QCBORItem, this implementation maps
  all tags larger than UINT16_MAX. This function does the unmapping.
 
- This returns @ref CBOR_TAG_INVALID16 on all errors or if the nth tag is requested and
+ This returns @ref CBOR_TAG_INVALID64 on all errors or if the nth tag is requested and
  there is no nth tag. If there are no tags on the item, then
- requesting the 0th tag will return @ref CBOR_TAG_INVALID16.
+ requesting the 0th tag will return @ref CBOR_TAG_INVALID64.
  */
-uint64_t QCBORDecode_GetNthTag(QCBORDecodeContext *pCtx, const QCBORItem *pItem, unsigned int uIndex);
+uint64_t QCBORDecode_GetNthTag(QCBORDecodeContext *pCtx, const QCBORItem *pItem, uint32_t uIndex);
 
 
+uint64_t QCBORDecode_GetNthTagOfLast(const QCBORDecodeContext *pCtx, uint32_t uIndex);
+
 /**
  @brief Check whether all the bytes have been decoded and maps and arrays closed.
 
diff --git a/inc/qcbor/qcbor_encode.h b/inc/qcbor/qcbor_encode.h
index 19dc22b..b5492be 100644
--- a/inc/qcbor/qcbor_encode.h
+++ b/inc/qcbor/qcbor_encode.h
@@ -219,6 +219,11 @@
  array, map or other.
 
  @anchor Tags-Overview
+
+
+
+
+
  Any CBOR data item can be tagged to add semantics, define a new data
  type or such. Some tags are fully standardized and some are just
  registered. Others are not registered and used in a proprietary way.
@@ -346,6 +351,16 @@
 #define QCBOR_HEAD_BUFFER_SIZE  (sizeof(uint64_t) + 2)
 
 
+/**
+ Output the full CBOR tag. See @Tags-Overview.
+ */
+#define QCBOR_ENCODE_AS_TAG      0
+
+/**
+  Output only the 'borrowed' content format for the relevant tag. See @Tags-Overview.
+ */
+#define QCBOR_ENCODE_AS_BORROWED 1
+
 
 /**
  QCBOREncodeContext is the data type that holds context for all the
@@ -634,6 +649,7 @@
  @brief  Add an epoch-based date.
 
  @param[in] pCtx  The encoding context to add the date to.
+ @param[in] uTag  Either @ref QCBOR_ENCODE_AS_TAG or @ref QCBOR_ENCODE_AS_BORROWED.
  @param[in] date  Number of seconds since 1970-01-01T00:00Z in UTC time.
 
  As per RFC 7049 this is similar to UNIX/Linux/POSIX dates. This is
@@ -659,6 +675,13 @@
 
  Error handling is the same as QCBOREncode_AddInt64().
  */
+static void QCBOREncode_AddTDateEpoch(QCBOREncodeContext *pCtx, uint8_t uTag, int64_t date);
+
+static void QCBOREncode_AddTDateEpochToMap(QCBOREncodeContext *pCtx, const char *szLabel, uint8_t uTag, int64_t date);
+
+static  void QCBOREncode_AddTDateEpochToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, uint8_t uTag, int64_t date);
+
+
 static void QCBOREncode_AddDateEpoch(QCBOREncodeContext *pCtx, int64_t date);
 
 static void QCBOREncode_AddDateEpochToMap(QCBOREncodeContext *pCtx, const char *szLabel, int64_t date);
@@ -1746,27 +1769,46 @@
 }
 
 
+
+static inline void QCBOREncode_AddTDateEpoch(QCBOREncodeContext *pCtx, uint8_t uTag, int64_t date)
+{
+   if(uTag == QCBOR_ENCODE_AS_TAG) {
+      QCBOREncode_AddTag(pCtx, CBOR_TAG_DATE_EPOCH);
+   }
+   QCBOREncode_AddInt64(pCtx, date);
+}
+
+static inline void QCBOREncode_AddTDateEpochToMap(QCBOREncodeContext *pCtx, const char *szLabel, uint8_t uTag, int64_t date)
+{
+   QCBOREncode_AddSZString(pCtx, szLabel);
+   QCBOREncode_AddTDateEpoch(pCtx, uTag, date);
+}
+
+static inline void QCBOREncode_AddTDateEpochToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, uint8_t uTag, int64_t date)
+{
+   QCBOREncode_AddInt64(pCtx, nLabel);
+   QCBOREncode_AddTDateEpoch(pCtx, uTag, date);
+}
+
 static inline void QCBOREncode_AddDateEpoch(QCBOREncodeContext *pCtx, int64_t date)
 {
-   QCBOREncode_AddTag(pCtx, CBOR_TAG_DATE_EPOCH);
-   QCBOREncode_AddInt64(pCtx, date);
+   QCBOREncode_AddTDateEpoch(pCtx, QCBOR_ENCODE_AS_TAG, date);
 }
 
 static inline void QCBOREncode_AddDateEpochToMap(QCBOREncodeContext *pCtx, const char *szLabel, int64_t date)
 {
    QCBOREncode_AddSZString(pCtx, szLabel);
-   QCBOREncode_AddTag(pCtx, CBOR_TAG_DATE_EPOCH);
-   QCBOREncode_AddInt64(pCtx, date);
+   QCBOREncode_AddDateEpoch(pCtx, date);
 }
 
 static inline void QCBOREncode_AddDateEpochToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, int64_t date)
 {
    QCBOREncode_AddInt64(pCtx, nLabel);
-   QCBOREncode_AddTag(pCtx, CBOR_TAG_DATE_EPOCH);
-   QCBOREncode_AddInt64(pCtx, date);
+   QCBOREncode_AddDateEpoch(pCtx, date);
 }
 
 
+
 static inline void QCBOREncode_AddBytes(QCBOREncodeContext *pCtx, UsefulBufC Bytes)
 {
    QCBOREncode_AddBuffer(pCtx, CBOR_MAJOR_TYPE_BYTE_STRING, Bytes);
diff --git a/inc/qcbor/qcbor_private.h b/inc/qcbor/qcbor_private.h
index bcf1044..3146a60 100644
--- a/inc/qcbor/qcbor_private.h
+++ b/inc/qcbor/qcbor_private.h
@@ -70,6 +70,9 @@
  */
 #define QCBOR_NUM_MAPPED_TAGS 4
 
+/* The number of tags (of any size) recorded for an individual item. */
+#define QCBOR_MAX_TAGS_PER_ITEM1 4
+
 
 
 /*
@@ -253,6 +256,9 @@
    uint8_t  uLastError;  // QCBORError stuffed into a uint8_t
 
    uint64_t auMappedTags[QCBOR_NUM_MAPPED_TAGS];
+
+   uint16_t uLastTags[QCBOR_MAX_TAGS_PER_ITEM1];
+
 };
 
 // Used internally in the impementation here
diff --git a/inc/qcbor/qcbor_spiffy_decode.h b/inc/qcbor/qcbor_spiffy_decode.h
index 449a28e..2f73770 100644
--- a/inc/qcbor/qcbor_spiffy_decode.h
+++ b/inc/qcbor/qcbor_spiffy_decode.h
@@ -124,51 +124,50 @@
 
  ----
 
- @anchor Tag-Matcing
+ @anchor Tag-Usage
 
  Data types beyond the basic CBOR types of numbers, strings, maps and
- arrays can be defined and tagged. The main registry of these new
- types is in in the IANA registry. These new types may be simple such
- as indicating an number is actually a date, or they of moderate
- complexity such as defining a decimal fraction that is an array of
- several items, or they may be very complex such as format for signing
- and encryption.
+ arrays are called tags. The main registry of these new types is in in
+ the IANA CBOR tags registry. These new types may be simple such a
+ number that is to be interpreted as a date, or of moderate complexity
+ such as defining a decimal fraction that is an array containing a
+ mantissa and exponent, or complex such as format for signing and
+ encryption.
 
- When these new types occur in a protocol they may be tagged to
- explicitly identify them or they may not be tagged, with there type
- being determined implicitly. A common means of implicit tagging is
- that the type of the value of a map entry is implied by the label of
- the map entry. For example a data item labeled "birth date" is always
- to be of type epoch date.
+ When a tag occurs in a protocol it is encoded as an integer tag
+ number plus the content of the tag.
+
+ The content format of a tag may also be "borrowed". For example, a
+ protocol definition may say that a particular data item is an epoch
+ date just like tag 1, but not actually tag 1. In practice the
+ difference is the presence or absence of the integer tag number in
+ the encoded CBOR.
 
  The decoding functions for these new types takes a tag requirement
- parameter to say whether the tag must be present, must be absent or
- whether either is OK.
+ parameter to say whether the item is a tag, is just borrowing the
+ content format and is not a tag, or whether either is OK.
 
- If the parameter indicates the tag is required (@ref
- QCBOR_TAG_REQUIREMENT_MATCH_TAG), then
- @ref QCBOR_ERR_UNEXPECTED_TYPE
- is set if a tag with one of the expected values is absent. To decode
- correctly the contents of the tag must also be of the correct
- type. For example, to decode an epoch date the tag with value 1 must
- be resent and the content must be an integer or floating-point value.
+ If the parameter indicates the item must be a tag (@ref
+ QCBOR_TAG_REQUIREMENT_TAG), then @ref QCBOR_ERR_UNEXPECTED_TYPE is
+ set if it is not one of the expected tag types. To decode correctly
+ the contents of the tag must also be of the correct type. For
+ example, to decode an epoch date tag the content must be an integer
+ or floating-point value.
 
- If the parameter indicates no tag is required (@ref
- QCBOR_TAG_REQUIREMENT_NO_TAG), then
- @ref QCBOR_ERR_UNEXPECTED_TYPE is
- set if type of the content is not what is expected. In the example of
- an epoch date, the data type must be an integer or floating-point
- value. The tag value of 1 must not be present.
+ If the parameter indicates it should not be a tag(@ref
+ QCBOR_TAG_REQUIREMENT_NOT_A_TAG), then @ref QCBOR_ERR_UNEXPECTED_TYPE
+ set if it is a tag or the type of the encoded CBOR is not what is
+ expected.  In the example of an epoch date, the data type must be an
+ integer or floating-point value. This is the case where the content
+ format of a tag is borrowed.
 
- If the parameter indicated either the tags presence or absence is OK
- ( @ref QCBOR_TAG_REQUIREMENT_OPTIONAL_TAG ), then the data item(s)
- will be decoded as long as they are of the correct type whether there
- is a tag or not.  Use of this option is however highly
- discouraged. It is a violation of the CBOR specification for tags to
- be optional this way. A CBOR protocol must say whether a tag is
- always to be present or always to be absent. (A protocol might say
- that tags are never used or always used in a general statement, or
- might say it on an item-by-item basis).
+ The parameter can also indicate that either a tag or no tag is
+ allowed ( @ref QCBOR_TAG_REQUIREMENT_OPTIONAL_TAG ).  A good protocol
+ design should however be clear and choose one or the other and not
+ need this option. This is a way to implement "be liberal in what you
+ accept", however these days that is less in favor. See
+ https://tools.ietf.org/id/draft-thomson-postel-was-wrong-03.html.
+
 */
 
 
@@ -189,18 +188,28 @@
 #define QCBOR_CONVERT_TYPE_BIGFLOAT         0x10
 
 
-/** The data item must have the correct tag data type being
-    fetched. It is an error if it does not. For example, an epoch date
-    must have tag 1. */
-#define QCBOR_TAG_REQUIREMENT_MATCH_TAG     0
+/** The data item must be a tag of the expected type. It is an error
+    if it is not. For example when calling QCBORDecode_GetEpochDate(),
+    the data item must be an @ref CBOR_TAG_DATE_EPOCH tag.
+    See @ref Tag-Usage. */
+#define QCBOR_TAG_REQUIREMENT_TAG 0
+
 /** The data item must be of the type expected for content data type
-    being fetched. It is an error if it does. For example, an epoch
-    date must be either an integer or a floating-point number. */
-#define QCBOR_TAG_REQUIREMENT_NO_TAG        1
-/** Either of the above two are allowed. This is highly discourged by
-    the CBOR specification. One of the above to should be used
-    instead. */
-#define QCBOR_TAG_REQUIREMENT_OPTIONAL_TAG  2
+    being fetched. It is an error if it is not. For example, when
+    calling QCBORDecode_GetEpochDate() and it must not be an @ref
+    CBOR_TAG_DATE_EPOCH tag. See @ref Tag-Usage. */
+#define QCBOR_TAG_REQUIREMENT_NOT_A_TAG  1
+
+/** Either of the above two are allowed. This allows implementation of
+    being liberal in what you receive, but it is better if CBOR-based
+    protocols pick one and stick to and not required the reciever to
+    take either. See @ref Tag-Usage. */
+#define QCBOR_TAG_REQUIREMENT_OPTIONAL_TAG 2
+
+/** Add this into the above value if other tags not processed by QCBOR
+    are to be allowed to surround the data item. See @ref Tag-Usage. */
+#define QCBOR_TAG_REQUIREMENT_ALLOW_ADDITIONAL_TAGS 0x80
+
 
 
 /**
@@ -615,12 +624,19 @@
  @brief Decode the next item as a date string.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pDateString            The decoded URI.
 
+ This decodes the standard CBOR date/time string tag, integer tag
+ number of 0, or encoded CBOR that is not a tag, but borrows the
+ date string content format.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
+
+ See also @ref CBOR_TAG_DATE_STRING, QCBOREncode_AddDateString() and
+ @ref QCBOR_TYPE_DATE_STRING.
 */
 static void QCBORDecode_GetDateString(QCBORDecodeContext *pCtx,
                                       uint8_t             uTagRequirement,
@@ -628,12 +644,12 @@
 
 static void QCBORDecode_GetDateStringInMapN(QCBORDecodeContext *pCtx,
                                             int64_t             nLabel,
-                                            uint8_t             uTagRequired,
+                                            uint8_t             uTagRequirement,
                                             UsefulBufC         *pDateString);
 
 static void QCBORDecode_GetDateStringInMapSZ(QCBORDecodeContext *pCtx,
                                              const char         *szLabel,
-                                             uint8_t             uTagRequired,
+                                             uint8_t             uTagRequirement,
                                              UsefulBufC         *pDateString);
 
 
@@ -645,21 +661,27 @@
  @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pnTime            The decoded epoch date.
 
- This will handle floating-point dates, but always returns them as an @c int64_t
- discarding the fractional part. Use QCBORDecode_GetNext() instead of this to get the
- fractional part.
+ This decodes the standard CBOR epoch date/time tag, integer tag
+ number of 1, or encoded CBOR that is not a tag, but borrows the
+ content format.
 
- Floating-point dates that are plus infinity, minus infinity or NaN (not-a-number) will
- result in the @ref QCBOR_ERR_DATE_OVERFLOW error. If the QCBOR library
- is compiled with floating-point disabled, @ref QCBOR_ERR_HW_FLOAT_DISABLED
- is set. If compiled with preferred float disabled, half-precision dates will result
- in the @ref QCBOR_ERR_HALF_PRECISION_DISABLED error.
+ This will handle floating-point dates, but always returns them as an
+ @c int64_t discarding the fractional part. Use QCBORDecode_GetNext()
+ instead of this to get the fractional part.
+
+ Floating-point dates that are plus infinity, minus infinity or NaN
+ (not-a-number) will result in the @ref QCBOR_ERR_DATE_OVERFLOW
+ error. If the QCBOR library is compiled with floating-point disabled,
+ @ref QCBOR_ERR_HW_FLOAT_DISABLED is set. If compiled with preferred
+ float disabled, half-precision dates will result in the @ref
+ QCBOR_ERR_HALF_PRECISION_DISABLED error.
 
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
 
- See also QCBOREncode_AddDateEpoch() and @ref QCBORItem.
+ See also @ref CBOR_TAG_DATE_EPOCH, QCBOREncode_AddDateEpoch() and
+ @ref QCBOR_TYPE_DATE_EPOCH.
 */
 void QCBORDecode_GetEpochDate(QCBORDecodeContext *pCtx,
                              uint8_t              uTagRequirement,
@@ -680,11 +702,14 @@
  @brief Decode the next item as a big number.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pValue          The returned big number.
  @param[out] pbIsNegative    Is @c true if the big number is negative. This
                              is only valid when @c uTagRequirement is
-                             @ref QCBOR_TAG_REQUIREMENT_MATCH_TAG.
+                             @ref QCBOR_TAG_REQUIREMENT_TAG.
+
+ This decodes a standard CBOR big number, integer tag number of 2 or
+ 3, or encoded CBOR that is not a tag, but borrows the content format.
 
  See @ref Decode-Errors for discussion on how error handling works.
 
@@ -692,23 +717,30 @@
  is the most significant byte. There may be leading zeros.
 
  The negative value is computed as -1 - n, where n is the postive big
- number in @C pValue.
+ number in @C pValue. There is no standard representation for
+ big numbers, positive or negative in C, so this implementation leaves
+ it up to the caller to apply this computation for negative big numbers.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
 
  Determination of the sign of the big number depends on the tag
  requirement of the protocol using the big number. If the protocol
- requires tagging, @ref QCBOR_TAG_REQUIREMENT_MATCH_TAG, then the sign
+ requires tagging, @ref QCBOR_TAG_REQUIREMENT_TAG, then the sign
  indication is in the protocol and @c pbIsNegative indicates the
- sign. If the protocol prohibits tagging, @ref
- QCBOR_TAG_REQUIREMENT_NO_TAG, then the protocol design must have some
+ sign. If the protocol doesn't use a tag, @ref
+ QCBOR_TAG_REQUIREMENT_NOT_A_TAG, then the protocol design must have some
  way of indicating the sign.
 
  See also QCBORDecode_GetInt64ConvertAll(),
  QCBORDecode_GetUInt64ConvertAll() and
  QCBORDecode_GetDoubleConvertAll() which can convert big numbers.
+
+ See also @ref CBOR_TAG_POS_BIGNUM, @ref CBOR_TAG_NEG_BIGNUM,
+ QCBOREncode_AddPositiveBignum(), QCBOREncode_AddNegativeBignum(),
+ @ref QCBOR_TYPE_POSBIGNUM and @ref QCBOR_TYPE_NEGBIGNUM.
+
 */
-// Improvement: Add function that at least convert integers to big nums
+// Improvement: Add function that converts integers and other to big nums
 void QCBORDecode_GetBignum(QCBORDecodeContext *pCtx,
                            uint8_t             uTagRequirement,
                            UsefulBufC         *pValue,
@@ -732,10 +764,13 @@
  @brief Decode the next item as a decimal fraction.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pnMantissa      The mantissa.
  @param[out] pnExponent      The base 10 exponent.
 
+ This decodes a standard CBOR decimal fraction, integer tag number of
+ 4, or encoded CBOR that is not a tag, but borrows the content format.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
  The  value of this is computed by:
@@ -757,11 +792,15 @@
  Various format and type issues will result in @ref
  QCBOR_ERR_BAD_EXP_AND_MANTISSA being set.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
 
  See also QCBORDecode_GetInt64ConvertAll(),
  QCBORDecode_GetUInt64ConvertAll() and
  QCBORDecode_GetDoubleConvertAll() which can convert big numbers.
+
+ See also @ref CBOR_TAG_DECIMAL_FRACTION,
+ QCBOREncode_AddDecimalFraction(), @ref QCBOR_TYPE_DECIMAL_FRACTION
+ and QCBORDecode_GetDecimalFractionBig().
 */
 void QCBORDecode_GetDecimalFraction(QCBORDecodeContext *pCtx,
                                     uint8_t             uTagRequirement,
@@ -785,7 +824,7 @@
  @brief Decode the next item as a decimal fraction with a big number mantissa.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[in] MantissaBuffer The buffer in which to put the mantissa.
  @param[out] pMantissa      The big num mantissa.
  @param[out] pbMantissaIsNegative  Is @c true if @c pMantissa is negative.
@@ -804,6 +843,10 @@
  QCBORDecode_GetUInt64ConvertAll() and
  QCBORDecode_GetDoubleConvertAll() which can convert decimal
  fractions.
+
+ See also @ref CBOR_TAG_DECIMAL_FRACTION,
+ QCBOREncode_AddDecimalFraction(), @ref QCBOR_TYPE_DECIMAL_FRACTION
+ and QCBORDecode_GetDecimalFraction().
 */
 void QCBORDecode_GetDecimalFractionBig(QCBORDecodeContext *pCtx,
                                        uint8_t             uTagRequirement,
@@ -833,10 +876,13 @@
  @brief Decode the next item as a big float.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pnMantissa      The mantissa.
  @param[out] pnExponent      The base 2 exponent.
 
+ This decodes a standard CBOR big float, integer tag number of 5, or
+ encoded CBOR that is not a tag, but borrows the content format.
+
  This is the same as QCBORDecode_GetDecimalFraction() with the
  important distinction that the value is computed by:
 
@@ -845,6 +891,9 @@
  See also QCBORDecode_GetInt64ConvertAll(),
  QCBORDecode_GetUInt64ConvertAll() and
  QCBORDecode_GetDoubleConvertAll() which can convert big floats.
+
+ See also @ref CBOR_TAG_BIGFLOAT, QCBOREncode_AddBigFloat(), @ref
+ QCBOR_TYPE_BIGFLOAT and QCBORDecode_GetBigFloatBig().
  */
 void QCBORDecode_GetBigFloat(QCBORDecodeContext *pCtx,
                              uint8_t             uTagRequirement,
@@ -868,7 +917,7 @@
  @brief Decode the next item as a big float with a big number mantissa.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[in] MantissaBuffer The buffer in which to put the mantissa.
  @param[out] pMantissa      The big num mantissa.
  @param[out] pbMantissaIsNegative  Is @c true if @c pMantissa is negative.
@@ -882,6 +931,9 @@
  See also QCBORDecode_GetInt64ConvertAll(),
  QCBORDecode_GetUInt64ConvertAll() and
  QCBORDecode_GetDoubleConvertAll() which can convert big floats.
+
+ See also @ref CBOR_TAG_BIGFLOAT, QCBOREncode_AddBigFloat(),
+ @ref QCBOR_TYPE_BIGFLOAT and QCBORDecode_GetBigFloat().
  */
 void QCBORDecode_GetBigFloatBig(QCBORDecodeContext *pCtx,
                                 uint8_t             uTagRequirement,
@@ -912,12 +964,18 @@
  @brief Decode the next item as a URI.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pURI            The decoded URI.
 
+ This decodes a standard CBOR URI tag, integer tag number of 32,
+ or encoded CBOR that is not a tag, that is a URI encoded in a text string.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
+
+ See also @ref CBOR_TAG_URI, QCBOREncode_AddURI() and
+ @ref QCBOR_TYPE_URI.
  */
 static void QCBORDecode_GetURI(QCBORDecodeContext *pCtx,
                                uint8_t             uTagRequirement,
@@ -938,14 +996,21 @@
  @brief Decode the next item as base64 encoded text.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pB64Text          The decoded base64 text.
 
+ This decodes a standard CBOR base64 tag, integer tag number of 34, or
+ encoded CBOR that is not a tag, that is base64 encoded bytes encoded
+ in a text string.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
 
- Note that this doesn not actually remove the base64 encoding.
+ Note that this does not actually remove the base64 encoding.
+
+ See also @ref CBOR_TAG_B64, QCBOREncode_AddB64Text() and
+ @ref QCBOR_TYPE_BASE64.
 */
 static void QCBORDecode_GetB64(QCBORDecodeContext *pCtx,
                                uint8_t             uTagRequirement,
@@ -965,14 +1030,21 @@
  @brief Decode the next item as base64URL encoded text.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pB64Text          The decoded base64 text.
 
+ This decodes a standard CBOR base64url tag, integer tag number of 33,
+ or encoded CBOR that is not a tag, that is base64url encoded bytes
+ encoded in a text string.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
 
- Note that this doesn not actually remove the base64 encoding.
+ Note that this does not actually remove the base64url encoding.
+
+ See also @ref CBOR_TAG_B64URL, QCBOREncode_AddB64URLText() and
+ @ref QCBOR_TYPE_BASE64URL.
 */
 static void QCBORDecode_GetB64URL(QCBORDecodeContext *pCtx,
                                   uint8_t             uTagRequirement,
@@ -992,12 +1064,19 @@
  @brief Decode the next item as a regular expression.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pRegex          The decoded regular expression.
 
+ This decodes a standard CBOR regex tag, integer tag number of 35, or
+ encoded CBOR that is not a tag, that is a PERL-compatible regular
+ expression encoded in a text string.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
+
+ See also @ref CBOR_TAG_REGEX, QCBOREncode_AddRegex() and
+ @ref QCBOR_TYPE_REGEX.
  */
 static void QCBORDecode_GetRegex(QCBORDecodeContext *pCtx,
                                  uint8_t             uTagRequirement,
@@ -1015,16 +1094,21 @@
 
 
 /**
- @brief Decode the next item as a MIME message
+ @brief Decode the next item as a MIME message.
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pMessage        The decoded regular expression.
  @param[out] pbIsNot7Bit     @c true if MIME is binary or 8-bit.
 
+
+ This decodes the standard CBOR MIME and binary MIME tags, integer tag
+ numbers of 36 or 257, or encoded CBOR that is not a tag, that is a
+ MIME message encoded in a text or binary string.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
 
  The MIME message itself is not parsed.
 
@@ -1034,6 +1118,10 @@
  to contain 7-bit MIME. Hopefully in most uses the
  Content-Transfer-Encoding header is present and the
  contents of pbIsNot7Bit can be ignored. It may be NULL.
+
+ See also @ref CBOR_TAG_MIME, @ref CBOR_TAG_BINARY_MIME,
+ QCBOREncode_AddMIMEData(), @ref QCBOR_TYPE_MIME and
+ @ref QCBOR_TYPE_BINARY_MIME.
 */
 static void QCBORDecode_GetMIMEMessage(QCBORDecodeContext *pCtx,
                                        uint8_t             uTagRequirement,
@@ -1057,12 +1145,19 @@
  @brief Decode the next item as a UUID
 
  @param[in] pCtx             The decode context.
- @param[in] uTagRequirement  One of @c QCBOR_TAGSPEC_MATCH_XXX.
+ @param[in] uTagRequirement  One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pUUID            The decoded UUID
 
+ This decodes a standard CBOR UUID tag, integer tag number of 37, or
+ encoded CBOR that is not a tag, that is a UUID encoded in a byte
+ string.
+
  See @ref Decode-Errors for discussion on how error handling works.
 
- See @ref Tag-Matcing for discussion on tag requirements.
+ See @ref Tag-Usage for discussion on tag requirements.
+
+ See also @ref CBOR_TAG_BIN_UUID, QCBOREncode_AddBinaryUUID() and 
+ @ref QCBOR_TYPE_UUID.
  */
 static inline void QCBORDecode_GetBinaryUUID(QCBORDecodeContext *pCtx,
                                              uint8_t             uTagRequirement,
@@ -1152,23 +1247,26 @@
 
  @param[in] pCtx   The decode context.
 
- This enters an array for decodig in bounded mode. The items in array are decoded
- in order the same as when not in bounded mode, but the decoding will not
- proceed past the end or the array. The error @ref  QCBOR_ERR_NO_MORE_ITEMS
- will be set when the end of the array is encountered. To decode past the
- end of the array, QCBORDecode_ExitArray() must be called. Also, QCBORDecode_Finish()
- will return an error if all arrays that were  enetered are not exited.
+ This enters an array for decoding in bounded mode. The items in array
+ are decoded in order the same as when not in bounded mode, but the
+ decoding will not proceed past the end or the array. The error @ref
+ QCBOR_ERR_NO_MORE_ITEMS will be set when the end of the array is
+ encountered. To decode past the end of the array,
+ QCBORDecode_ExitArray() must be called. Also, QCBORDecode_Finish()
+ will return an error if all arrays that were enetered are not exited.
 
  This works the same for definite and indefinite length arrays.
 
  See @ref Decode-Errors for discussion on how error handling works.
 
- If attempting to enter a data item that is not an array @ref QCBOR_ERR_UNEXPECTED_TYPE
- wil be set.
+ If attempting to enter a data item that is not an array @ref
+ QCBOR_ERR_UNEXPECTED_TYPE wil be set.
 
- Nested arrays and maps may be entered to a depth of @ref QCBOR_MAX_ARRAY_NESTING.
+ Nested arrays and maps may be entered to a depth of @ref
+ QCBOR_MAX_ARRAY_NESTING.
 
- See also QCBORDecode_ExitArray(), QCBORDecode_EnterMap() and QCBORDecode_EnterBstrWrapped().
+ See also QCBORDecode_ExitArray(), QCBORDecode_EnterMap() and
+ QCBORDecode_EnterBstrWrapped().
 */
 static void QCBORDecode_EnterArray(QCBORDecodeContext *pCtx);
 
@@ -1187,8 +1285,8 @@
  The items in the array that was entered do not have to have been
  consumed for this to succeed.
 
- This sets thepre-order traversal cursor to the item after
- the array that was exited.
+ This sets the pre-order traversal cursor to the item after the array
+ that was exited.
 */
 static void QCBORDecode_ExitArray(QCBORDecodeContext *pCtx);
 
@@ -1199,42 +1297,38 @@
  @brief Decode some byte-string wrapped CBOR.
 
  @param[in] pCtx   The decode context.
- @param[in] uTagRequirement Whether or not the byte string must be tagged.
+ @param[in] uTagRequirement One of @c QCBOR_TAG_REQUIREMENT_XXX.
  @param[out] pBstr  Pointer and length of byte-string wrapped CBOR (optional).
 
- This is for use on some CBOR that has been wrapped in a
- byte string. There are several ways that this can occur.
+ This is for use on some CBOR that has been wrapped in a byte
+ string. There are several ways that this can occur.
 
- First is tag 24 and tag 63. Tag 24
- wraps a single CBOR data item and 63 a CBOR sequence.
- This implementation doesn't distinguish between the two
- (it would be more code and doesn't seem important).
+ First is tag 24 and tag 63. Tag 24 wraps a single CBOR data item and
+ 63 a CBOR sequence.  This implementation doesn't distinguish between
+ the two (it would be more code and doesn't seem important).
 
- The @ref Tag-Matcing discussion on the tag requirement applies here
+ The @ref Tag-Usage discussion on the tag requirement applies here
  just the same as any other tag.
 
- In other cases, CBOR is wrapped in a byte string, but
- it is identified as CBOR by other means. The contents
- of a COSE payload are one example of that. They can
- be identified by the COSE content type, or they can
- be identified as CBOR indirectly by the protocol that
- uses COSE. for example, if a blob of CBOR is identified
- as a CWT, then the COSE payload is CBOR.
- To enter into CBOR of this type use the
- @ref QCBOR_TAG_REQUIREMENT_NO_TAG as the \c uTagRequirement argument.
+ In other cases, CBOR is wrapped in a byte string, but it is
+ identified as CBOR by other means. The contents of a COSE payload are
+ one example of that. They can be identified by the COSE content type,
+ or they can be identified as CBOR indirectly by the protocol that
+ uses COSE. for example, if a blob of CBOR is identified as a CWT,
+ then the COSE payload is CBOR.  To enter into CBOR of this type use
+ the @ref QCBOR_TAG_REQUIREMENT_NOT_A_TAG as the \c uTagRequirement
+ argument.
 
- Note that byte string wrapped CBOR can also be
- decoded by getting the byte string with QCBORDecode_GetItem() or
- QCBORDecode_GetByteString() and feeding it into another
- instance of QCBORDecode. Doing it with this function
- has the advantage of using less memory as another
+ Note that byte string wrapped CBOR can also be decoded by getting the
+ byte string with QCBORDecode_GetItem() or QCBORDecode_GetByteString()
+ and feeding it into another instance of QCBORDecode. Doing it with
+ this function has the advantage of using less memory as another
  instance of QCBORDecode is not necessary.
 
- When the wrapped CBOR is entered with this function,
- the pre-order traversal and such are bounded to
- the wrapped CBOR. QCBORDecode_ExitBstrWrapped()
- must be called resume processing CBOR outside
- the wrapped CBOR.
+ When the wrapped CBOR is entered with this function, the pre-order
+ traversal and such are bounded to the wrapped
+ CBOR. QCBORDecode_ExitBstrWrapped() must be called resume processing
+ CBOR outside the wrapped CBOR.
 
  If @c pBstr is not @c NULL the pointer and length of the wrapped
  CBOR will be returned. This is usually not needed, but sometimes
@@ -1244,7 +1338,8 @@
 
  See @ref Decode-Errors for discussion on how error handling works.
 
- See also QCBORDecode_ExitBstrWrapped(), QCBORDecode_EnterMap() and QCBORDecode_EnterArray().
+ See also QCBORDecode_ExitBstrWrapped(), QCBORDecode_EnterMap() and
+ QCBORDecode_EnterArray().
 
  */
 void QCBORDecode_EnterBstrWrapped(QCBORDecodeContext *pCtx,
@@ -1282,10 +1377,9 @@
  @brief Indicate if decoder is in bound mode.
  @param[in] pCtx   The decode context.
 
- @return true is returned if a map, array or bstr wrapped
- CBOR has been entered. This only returns false
- if all maps, arrays and bstr wrapped CBOR levels
- have been exited.
+ @return true is returned if a map, array or bstr wrapped CBOR has
+ been entered. This only returns false if all maps, arrays and bstr
+ wrapped CBOR levels have been exited.
  */
 bool QCBORDecode_InBoundedMode(QCBORDecodeContext *pCtx);
 
@@ -1298,24 +1392,24 @@
  @param[in] uQcborType  The QCBOR type. One of @c QCBOR_TYPE_XXX.
  @param[out] pItem  The returned item.
 
- A map must have been entered to use this. If not @ref xxx is set. TODO: which error?
+ A map must have been entered to use this. If not @ref xxx is
+ set. TODO: which error?
 
  The map is searched for an item of the requested label and type.
  @ref QCBOR_TYPE_ANY can be given to search for the label without
  matching the type.
 
  This will always search the entire map. This will always perform
-  duplicate label detection, setting @ref QCBOR_ERR_DUPLICATE_LABEL if there is more than
- one occurance of the label being searched for.
+ duplicate label detection, setting @ref QCBOR_ERR_DUPLICATE_LABEL if
+ there is more than one occurance of the label being searched for.
 
- Duplicate label detection is performed for the item being sought, but only
- for the item being sought.
+ Duplicate label detection is performed for the item being sought, but
+ only for the item being sought.
 
- This performs a full decode of every item in the map
- being searched, which involves a full traversal
- of every item. For  maps with little nesting, this
- is of little consequence, but may be of consequence for large deeply nested
- CBOR structures on slow CPUs.
+ This performs a full decode of every item in the map being searched,
+ which involves a full traversal of every item. For maps with little
+ nesting, this is of little consequence, but may be of consequence for
+ large deeply nested CBOR structures on slow CPUs.
 
  See @ref Decode-Errors for discussion on how error handling works.
 
@@ -1340,28 +1434,29 @@
 
  This gets several labeled items out of a map.
 
- @c pItemList is an array of items terminated by an item
- with @c uLabelType @ref QCBOR_TYPE_NONE.
+ @c pItemList is an array of items terminated by an item with @c
+ uLabelType @ref QCBOR_TYPE_NONE.
 
- On input the labels to search for are in the @c uLabelType and
- label fields in the items in @c pItemList.
+ On input the labels to search for are in the @c uLabelType and label
+ fields in the items in @c pItemList.
 
- Also on input are the requested QCBOR types in the field @c uDataType.
- To match any type, searching just by label, @c uDataType
+ Also on input are the requested QCBOR types in the field @c
+ uDataType.  To match any type, searching just by label, @c uDataType
  can be @ref QCBOR_TYPE_ANY.
 
  This is a CPU-efficient way to decode a bunch of items in a map. It
  is more efficient than scanning each individually because the map
  only needs to be traversed once.
 
- If any duplicate labels are detected, this returns @ref QCBOR_ERR_DUPLICATE_LABEL.
+ If any duplicate labels are detected, this returns @ref
+ QCBOR_ERR_DUPLICATE_LABEL.
 
  See @ref Decode-Errors for discussion on how error handling works.
 
- This will return maps and arrays that are in the map, but
- provides no way to descend into and decode them. Use
- QCBORDecode_EnterMapinMapN(), QCBORDecode_EnterArrayInMapN()
- and such to descend into and process maps and arrays.
+ This will return maps and arrays that are in the map, but provides no
+ way to descend into and decode them. Use
+ QCBORDecode_EnterMapinMapN(), QCBORDecode_EnterArrayInMapN() and such
+ to descend into and process maps and arrays.
 
  See also QCBORDecode_GetItemInMapN().
  */
@@ -1774,7 +1869,7 @@
    // Complier should make this just 64-bit integer parameter
    const TagSpecification TagSpec =
       {
-         QCBOR_TAG_REQUIREMENT_NO_TAG,
+         QCBOR_TAG_REQUIREMENT_NOT_A_TAG,
          {QCBOR_TYPE_BYTE_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE},
          {QCBOR_TYPE_BYTE_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE}
       };
@@ -1789,7 +1884,7 @@
 {
    const TagSpecification TagSpec =
       {
-         QCBOR_TAG_REQUIREMENT_NO_TAG,
+         QCBOR_TAG_REQUIREMENT_NOT_A_TAG,
          {QCBOR_TYPE_BYTE_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE},
          {QCBOR_TYPE_BYTE_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE}
       };
@@ -1803,7 +1898,7 @@
 {
    const TagSpecification TagSpec =
       {
-         QCBOR_TAG_REQUIREMENT_NO_TAG,
+         QCBOR_TAG_REQUIREMENT_NOT_A_TAG,
          {QCBOR_TYPE_BYTE_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE},
          {QCBOR_TYPE_BYTE_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE}
       };
@@ -1811,13 +1906,14 @@
    QCBORDecode_GetTaggedStringInMapSZ(pMe, szLabel, TagSpec, pBstr);
 }
 
+
 static inline void
 QCBORDecode_GetText(QCBORDecodeContext *pMe,  UsefulBufC *pValue)
 {
    // Complier should make this just 64-bit integer parameter
    const TagSpecification TagSpec =
       {
-         QCBOR_TAG_REQUIREMENT_NO_TAG,
+         QCBOR_TAG_REQUIREMENT_NOT_A_TAG,
          {QCBOR_TYPE_TEXT_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE},
          {QCBOR_TYPE_TEXT_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE}
       };
@@ -1834,7 +1930,7 @@
    // to passing a 64-bit integer
    const TagSpecification TagSpec =
       {
-         QCBOR_TAG_REQUIREMENT_NO_TAG,
+         QCBOR_TAG_REQUIREMENT_NOT_A_TAG,
          {QCBOR_TYPE_TEXT_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE},
          {QCBOR_TYPE_TEXT_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE}
       };
@@ -1842,7 +1938,6 @@
    QCBORDecode_GetTaggedStringInMapN(pMe, nLabel, TagSpec, pText);
 }
 
-
 inline static void
 QCBORDecode_GetTextInMapSZ(QCBORDecodeContext *pMe,
                            const               char *szLabel,
@@ -1850,7 +1945,7 @@
 {
    const TagSpecification TagSpec =
       {
-         QCBOR_TAG_REQUIREMENT_NO_TAG,
+         QCBOR_TAG_REQUIREMENT_NOT_A_TAG,
          {QCBOR_TYPE_TEXT_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE},
          {QCBOR_TYPE_TEXT_STRING, QCBOR_TYPE_NONE, QCBOR_TYPE_NONE}
       };
@@ -1874,7 +1969,6 @@
    QCBORDecode_GetTaggedStringInternal(pMe, TagSpec, pValue);
 }
 
-
 inline static void
 QCBORDecode_GetDateStringInMapN(QCBORDecodeContext *pMe,
                                 int64_t             nLabel,
@@ -1922,8 +2016,7 @@
    QCBORDecode_GetTaggedStringInternal(pMe, TagSpec, pUUID);
 }
 
-
-inline static void \
+inline static void
 QCBORDecode_GetURIInMapN(QCBORDecodeContext *pMe,
                          int64_t             nLabel,
                          uint8_t             uTagRequirement,
@@ -1939,7 +2032,6 @@
    QCBORDecode_GetTaggedStringInMapN(pMe, nLabel, TagSpec, pUUID);
 }
 
-
 inline static void
 QCBORDecode_GetURIInMapSZ(QCBORDecodeContext *pMe,
                           const char         *szLabel,
@@ -1972,7 +2064,6 @@
    QCBORDecode_GetTaggedStringInternal(pMe, TagSpec, pB64Text);
 }
 
-
 inline static void QCBORDecode_GetB64InMapN(QCBORDecodeContext *pMe,
                                             int64_t             nLabel,
                                             uint8_t             uTagRequirement,
@@ -2019,7 +2110,6 @@
    QCBORDecode_GetTaggedStringInternal(pMe, TagSpec, pB64Text);
 }
 
-
 inline static void
 QCBORDecode_GetB64URLInMapN(QCBORDecodeContext *pMe,
                             int64_t             nLabel,
@@ -2036,7 +2126,6 @@
    QCBORDecode_GetTaggedStringInMapN(pMe, nLabel, TagSpec, pB64Text);
 }
 
-
 inline static void
 QCBORDecode_GetB64URLInMapSZ(QCBORDecodeContext *pMe,
                              const char         *szLabel,
@@ -2068,7 +2157,6 @@
    QCBORDecode_GetTaggedStringInternal(pMe, TagSpec, pRegex);
 }
 
-
 static inline void
 QCBORDecode_GetRegexInMapN(QCBORDecodeContext *pMe,
                            int64_t             nLabel,
@@ -2085,7 +2173,6 @@
    QCBORDecode_GetTaggedStringInMapN(pMe, nLabel, TagSpec, pRegex);
 }
 
-
 static inline void
 QCBORDecode_GetRegexInMapSZ(QCBORDecodeContext *pMe,
                             const char *        szLabel,
@@ -2127,7 +2214,6 @@
                                                           pbIsNot7Bit);
 }
 
-
 static inline void
 QCBORDecode_GetMIMEMessageInMapN(QCBORDecodeContext *pMe,
                                  int64_t             nLabel,
@@ -2146,7 +2232,6 @@
    }
 }
 
-
 static inline void
 QCBORDecode_GetMIMEMessageInMapSZ(QCBORDecodeContext *pMe,
                                   const char         *szLabel,
@@ -2166,7 +2251,6 @@
 }
 
 
-
 static inline void
 QCBORDecode_GetBinaryUUID(QCBORDecodeContext *pMe,
                           uint8_t             uTagRequirement,
@@ -2182,7 +2266,6 @@
    QCBORDecode_GetTaggedStringInternal(pMe, TagSpec, pUUID);
 }
 
-
 inline static void
 QCBORDecode_GetBinaryUUIDInMapN(QCBORDecodeContext *pMe,
                                 int64_t             nLabel,