aboutsummaryrefslogtreecommitdiffstats
path: root/skeletons/der_encoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'skeletons/der_encoder.h')
-rw-r--r--skeletons/der_encoder.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/skeletons/der_encoder.h b/skeletons/der_encoder.h
new file mode 100644
index 00000000..052d9f4c
--- /dev/null
+++ b/skeletons/der_encoder.h
@@ -0,0 +1,73 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _DER_ENCODER_H_
+#define _DER_ENCODER_H_
+
+#include <constr_TYPE.h>
+
+struct asn1_TYPE_descriptor_s; /* Forward declaration */
+
+/*
+ * Type of the return value of the der_encode function.
+ */
+typedef struct der_enc_rval_s {
+ /*
+ * Number of bytes encoded.
+ * -1 indicates failure to encode the structure.
+ * In this case, the members below this one are meaningful.
+ */
+ ssize_t encoded;
+
+ /*
+ * Members meaningful when (encoded == -1), for post-mortem analysis.
+ */
+
+ /* Type which cannot be encoded */
+ struct asn1_TYPE_descriptor_s *failed_type;
+
+ /* Pointer to the structure of that type */
+ void *structure_ptr;
+} der_enc_rval_t;
+
+
+/*
+ * The DER encoder of any type. May be invoked by the application.
+ */
+der_enc_rval_t der_encode(struct asn1_TYPE_descriptor_s *type_descriptor,
+ void *struct_ptr, /* Structure to be encoded */
+ asn_app_consume_bytes_f *consume_bytes_cb,
+ void *app_key /* Arbitrary callback argument */
+ );
+
+/*
+ * Type of the generic DER encoder.
+ */
+typedef der_enc_rval_t (der_type_encoder_f)(
+ struct asn1_TYPE_descriptor_s *type_descriptor,
+ void *struct_ptr, /* Structure to be encoded */
+ int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+ ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
+ void *app_key /* Arbitrary callback argument */
+ );
+
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+/*
+ * Write out leading TL[v] sequence according to the type definition.
+ */
+ssize_t der_write_tags(
+ struct asn1_TYPE_descriptor_s *type_descriptor,
+ size_t struct_length,
+ int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+ ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *consume_bytes_cb,
+ void *app_key
+ );
+
+#endif /* _DER_ENCODER_H_ */