diff options
Diffstat (limited to 'skeletons/der_encoder.h')
-rw-r--r-- | skeletons/der_encoder.h | 73 |
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_ */ |