summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
Diffstat (limited to 'lib/util')
-rw-r--r--lib/util/asn1.c16
-rw-r--r--lib/util/asn1.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/util/asn1.c b/lib/util/asn1.c
index aadaf8643a..08c4060fd1 100644
--- a/lib/util/asn1.c
+++ b/lib/util/asn1.c
@@ -764,6 +764,22 @@ bool asn1_write_enumerated(struct asn1_data *data, uint8_t v)
}
/*
+ Get us the data just written without copying
+*/
+bool asn1_blob(const struct asn1_data *asn1, DATA_BLOB *blob)
+{
+ if (asn1->has_error) {
+ return false;
+ }
+ if (asn1->nesting != NULL) {
+ return false;
+ }
+ blob->data = asn1->data;
+ blob->length = asn1->length;
+ return true;
+}
+
+/*
check if a ASN.1 blob is a full tag
*/
NTSTATUS asn1_full_tag(DATA_BLOB blob, uint8_t tag, size_t *packet_size)
diff --git a/lib/util/asn1.h b/lib/util/asn1.h
index 0f41ae33e5..b46494b2ea 100644
--- a/lib/util/asn1.h
+++ b/lib/util/asn1.h
@@ -93,6 +93,7 @@ bool asn1_read_Integer(struct asn1_data *data, int *i);
bool asn1_read_enumerated(struct asn1_data *data, int *v);
bool asn1_check_enumerated(struct asn1_data *data, int v);
bool asn1_write_enumerated(struct asn1_data *data, uint8_t v);
+bool asn1_blob(const struct asn1_data *asn1, DATA_BLOB *blob);
NTSTATUS asn1_full_tag(DATA_BLOB blob, uint8_t tag, size_t *packet_size);
#endif /* _ASN_1_H */