tlv.h

00001 /*
00002  * Handle TLV encoded data
00003  *
00004  * Copyright (C) 2003, Olaf Kirch <okir@suse.de>
00005  */
00006 
00007 #ifndef OPENCT_TLV_H
00008 #define OPENCT_TLV_H
00009 
00010 #ifdef __cplusplus
00011 extern "C" {
00012 #endif
00013 
00014 #include <openct/protocol.h>
00015 #include <openct/buffer.h>
00016 
00017 typedef unsigned char   ifd_tag_t;
00018 
00019 typedef struct ct_tlv_parser {
00020         unsigned char   use_large_tags;
00021         unsigned char * val[256];
00022         unsigned int    len[256];
00023 } ct_tlv_parser_t;
00024 
00025 typedef struct ct_tlv_builder {
00026         int             error;
00027         unsigned char   use_large_tags;
00028         ct_buf_t *      buf;
00029         unsigned int    len;
00030         unsigned char * lenp;
00031 } ct_tlv_builder_t;
00032 
00033 extern int      ct_tlv_parse(ct_tlv_parser_t *, ct_buf_t *);
00034 /* ct_tlv_get return 0 == not there, 1 == there */
00035 extern int      ct_tlv_get_int(ct_tlv_parser_t *,
00036                                 ifd_tag_t, unsigned int *);
00037 extern int      ct_tlv_get_string(ct_tlv_parser_t *,
00038                                 ifd_tag_t, char *, size_t);
00039 extern int      ct_tlv_get_opaque(ct_tlv_parser_t *,
00040                                 ifd_tag_t, unsigned char **, size_t *);
00041 /* or number of bytes */
00042 extern int      ct_tlv_get_bytes(ct_tlv_parser_t *,
00043                                 ifd_tag_t, void *, size_t);
00044 
00045 extern void     ct_tlv_builder_init(ct_tlv_builder_t *, ct_buf_t *, int);
00046 extern void     ct_tlv_put_int(ct_tlv_builder_t *,
00047                                 ifd_tag_t, unsigned int);
00048 extern void     ct_tlv_put_string(ct_tlv_builder_t *,
00049                                 ifd_tag_t, const char *);
00050 extern void     ct_tlv_put_opaque(ct_tlv_builder_t *, ifd_tag_t,
00051                                 const unsigned char *, size_t);
00052 extern void     ct_tlv_put_tag(ct_tlv_builder_t *, ifd_tag_t);
00053 extern void     ct_tlv_add_byte(ct_tlv_builder_t *, unsigned char);
00054 extern void     ct_tlv_add_bytes(ct_tlv_builder_t *,
00055                                 const unsigned char *, size_t);
00056 
00057 #ifdef __cplusplus
00058 }
00059 #endif
00060 
00061 #endif /* OPENCT_TLV_H */

libp11, Copyright (C) 2005 Olaf Kirch <okir@lst.de>OpenSC-Project.org Logo