OpenCT  0.6.20
tlv.h
1 /*
2  * Handle TLV encoded data
3  *
4  * Copyright (C) 2003, Olaf Kirch <okir@suse.de>
5  */
6 
7 #ifndef OPENCT_TLV_H
8 #define OPENCT_TLV_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include <openct/protocol.h>
15 #include <openct/buffer.h>
16 
17 typedef unsigned char ifd_tag_t;
18 
19 typedef struct ct_tlv_parser {
20  unsigned char use_large_tags;
21  unsigned char * val[256];
22  unsigned int len[256];
24 
25 typedef struct ct_tlv_builder {
26  int error;
27  unsigned char use_large_tags;
28  ct_buf_t * buf;
29  unsigned int len;
30  unsigned char * lenp;
32 
33 extern int ct_tlv_parse(ct_tlv_parser_t *, ct_buf_t *);
34 /* ct_tlv_get return 0 == not there, 1 == there */
35 extern int ct_tlv_get_int(ct_tlv_parser_t *,
36  ifd_tag_t, unsigned int *);
37 extern int ct_tlv_get_string(ct_tlv_parser_t *,
38  ifd_tag_t, char *, size_t);
39 extern int ct_tlv_get_opaque(ct_tlv_parser_t *,
40  ifd_tag_t, unsigned char **, size_t *);
41 /* or number of bytes */
42 extern int ct_tlv_get_bytes(ct_tlv_parser_t *,
43  ifd_tag_t, void *, size_t);
44 
45 extern void ct_tlv_builder_init(ct_tlv_builder_t *, ct_buf_t *, int);
46 extern void ct_tlv_put_int(ct_tlv_builder_t *,
47  ifd_tag_t, unsigned int);
48 extern void ct_tlv_put_string(ct_tlv_builder_t *,
49  ifd_tag_t, const char *);
50 extern void ct_tlv_put_opaque(ct_tlv_builder_t *, ifd_tag_t,
51  const unsigned char *, size_t);
52 extern void ct_tlv_put_tag(ct_tlv_builder_t *, ifd_tag_t);
53 extern void ct_tlv_add_byte(ct_tlv_builder_t *, unsigned char);
54 extern void ct_tlv_add_bytes(ct_tlv_builder_t *,
55  const unsigned char *, size_t);
56 
57 #ifdef __cplusplus
58 }
59 #endif
60 
61 #endif /* OPENCT_TLV_H */
ct_tlv_builder
Definition: tlv.h:25
ct_buf
Definition: buffer.h:16
ct_tlv_parser
Definition: tlv.h:19

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