• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * coap_asn1_internal.h -- ASN.1 functions for libcoap
3  *
4  * Copyright (C) 2020-2023 Jon Shallow <supjps-libcoap@jpshallow.com>
5  *
6  * SPDX-License-Identifier: BSD-2-Clause
7  *
8  * This file is part of the CoAP library libcoap. Please see README for terms
9  * of use.
10  */
11 
12 /**
13  * @file coap_asn1_internal.h
14  * @brief CoAP ASN.1 internal information
15  */
16 
17 #ifndef COAP_ASN1_INTERNAL_H_
18 #define COAP_ASN1_INTERNAL_H_
19 
20 #include "coap_internal.h"
21 
22 /**
23  * @ingroup internal_api
24  * @defgroup asn1 ASN.1 Support
25  * Internal API for CoAP ASN.1 handling
26  * @{
27  */
28 
29 typedef enum {
30   COAP_ASN1_NONE = 0,
31   COAP_ASN1_INTEGER = 2,
32   COAP_ASN1_BITSTRING = 3,
33   COAP_ASN1_OCTETSTRING = 4,
34   COAP_ASN1_IDENTIFIER = 6,
35 } coap_asn1_tag_t;
36 
37 /**
38  * Callback to validate the asn1 tag and data.
39  *
40  * Internal function.
41  *
42  * @param data  The start of the tag and data
43  * @param size  The size of the tag and data
44  *
45  * @return @c 1 if pass, else @c 0 if fail
46  */
47 typedef int (*asn1_validate)(const uint8_t *data, size_t size);
48 
49 /**
50  * Get the asn1 length from the current @p ptr.
51  *
52  * Internal function.
53  *
54  * @param ptr  The current asn.1 object length pointer
55  *
56  * @return The length of the asn.1 object. @p ptr is updated to be after the length.
57  */
58 size_t asn1_len(const uint8_t **ptr);
59 
60 /**
61  * Get the asn1 tag from the current @p ptr.
62  *
63  * Internal function.
64  *
65  * @param ptr  The current asn.1 object tag pointer
66  * @param constructed  1 if current tag is constructed
67  * @param cls  The current class of the tag
68  *
69  * @return The tag value.@p ptr is updated to be after the tag.
70  */
71 coap_asn1_tag_t asn1_tag_c(const uint8_t **ptr, int *constructed, int *cls);
72 
73 /**
74  * Get the asn1 tag and data from the current @p ptr.
75  *
76  * Internal function.
77  *
78  * @param ltag The tag to look for
79  * @param ptr  The current asn.1 object pointer
80  * @param tlen The remaining size oof the asn.1 data
81  * @param validate Call validate to verify tag data or @c NULL
82  *
83  * @return The asn.1 tag and data (to be freed off by caller)
84  *         or @c NULL if not found
85  */
86 coap_binary_t *get_asn1_tag(coap_asn1_tag_t ltag, const uint8_t *ptr,
87                             size_t tlen, asn1_validate validate);
88 
89 /** @} */
90 
91 #endif /* COAP_ASN1_INTERNAL_H_ */
92