]> CyberLeo.Net >> Repos - FreeBSD/releng/7.2.git/blob - contrib/bind9/lib/dns/dst_parse.h
Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.
[FreeBSD/releng/7.2.git] / contrib / bind9 / lib / dns / dst_parse.h
1 /*
2  * Portions Copyright (C) 2004-2006, 2008  Internet Systems Consortium, Inc. ("ISC")
3  * Portions Copyright (C) 2000-2002  Internet Software Consortium.
4  * Portions Copyright (C) 1995-2000 by Network Associates, Inc.
5  *
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
11  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE
13  * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
16  * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18
19 /* $Id: dst_parse.h,v 1.1.6.7 2008/05/15 23:46:06 tbox Exp $ */
20
21 /*! \file */
22 #ifndef DST_DST_PARSE_H
23 #define DST_DST_PARSE_H 1
24
25 #include <isc/lang.h>
26
27 #include <dst/dst.h>
28
29 #define MAJOR_VERSION           1
30 #define MINOR_VERSION           2
31
32 #define MAXFIELDSIZE            512
33 #define MAXFIELDS               12
34
35 #define TAG_SHIFT               4
36 #define TAG_ALG(tag)            ((unsigned int)(tag) >> TAG_SHIFT)
37 #define TAG(alg, off)           (((alg) << TAG_SHIFT) + (off))
38
39 /* These are used by both RSA-MD5 and RSA-SHA1 */
40 #define RSA_NTAGS               8
41 #define TAG_RSA_MODULUS         ((DST_ALG_RSAMD5 << TAG_SHIFT) + 0)
42 #define TAG_RSA_PUBLICEXPONENT  ((DST_ALG_RSAMD5 << TAG_SHIFT) + 1)
43 #define TAG_RSA_PRIVATEEXPONENT ((DST_ALG_RSAMD5 << TAG_SHIFT) + 2)
44 #define TAG_RSA_PRIME1          ((DST_ALG_RSAMD5 << TAG_SHIFT) + 3)
45 #define TAG_RSA_PRIME2          ((DST_ALG_RSAMD5 << TAG_SHIFT) + 4)
46 #define TAG_RSA_EXPONENT1       ((DST_ALG_RSAMD5 << TAG_SHIFT) + 5)
47 #define TAG_RSA_EXPONENT2       ((DST_ALG_RSAMD5 << TAG_SHIFT) + 6)
48 #define TAG_RSA_COEFFICIENT     ((DST_ALG_RSAMD5 << TAG_SHIFT) + 7)
49
50 #define DH_NTAGS                4
51 #define TAG_DH_PRIME            ((DST_ALG_DH << TAG_SHIFT) + 0)
52 #define TAG_DH_GENERATOR        ((DST_ALG_DH << TAG_SHIFT) + 1)
53 #define TAG_DH_PRIVATE          ((DST_ALG_DH << TAG_SHIFT) + 2)
54 #define TAG_DH_PUBLIC           ((DST_ALG_DH << TAG_SHIFT) + 3)
55
56 #define DSA_NTAGS               5
57 #define TAG_DSA_PRIME           ((DST_ALG_DSA << TAG_SHIFT) + 0)
58 #define TAG_DSA_SUBPRIME        ((DST_ALG_DSA << TAG_SHIFT) + 1)
59 #define TAG_DSA_BASE            ((DST_ALG_DSA << TAG_SHIFT) + 2)
60 #define TAG_DSA_PRIVATE         ((DST_ALG_DSA << TAG_SHIFT) + 3)
61 #define TAG_DSA_PUBLIC          ((DST_ALG_DSA << TAG_SHIFT) + 4)
62
63 #define OLD_HMACMD5_NTAGS       1
64 #define HMACMD5_NTAGS           2
65 #define TAG_HMACMD5_KEY         ((DST_ALG_HMACMD5 << TAG_SHIFT) + 0)
66 #define TAG_HMACMD5_BITS        ((DST_ALG_HMACMD5 << TAG_SHIFT) + 1)
67
68 #define HMACSHA1_NTAGS          2
69 #define TAG_HMACSHA1_KEY        ((DST_ALG_HMACSHA1 << TAG_SHIFT) + 0)
70 #define TAG_HMACSHA1_BITS       ((DST_ALG_HMACSHA1 << TAG_SHIFT) + 1)
71
72 #define HMACSHA224_NTAGS        2
73 #define TAG_HMACSHA224_KEY      ((DST_ALG_HMACSHA224 << TAG_SHIFT) + 0)
74 #define TAG_HMACSHA224_BITS     ((DST_ALG_HMACSHA224 << TAG_SHIFT) + 1)
75
76 #define HMACSHA256_NTAGS        2
77 #define TAG_HMACSHA256_KEY      ((DST_ALG_HMACSHA256 << TAG_SHIFT) + 0)
78 #define TAG_HMACSHA256_BITS     ((DST_ALG_HMACSHA256 << TAG_SHIFT) + 1)
79
80 #define HMACSHA384_NTAGS        2
81 #define TAG_HMACSHA384_KEY      ((DST_ALG_HMACSHA384 << TAG_SHIFT) + 0)
82 #define TAG_HMACSHA384_BITS     ((DST_ALG_HMACSHA384 << TAG_SHIFT) + 1)
83
84 #define HMACSHA512_NTAGS        2
85 #define TAG_HMACSHA512_KEY      ((DST_ALG_HMACSHA512 << TAG_SHIFT) + 0)
86 #define TAG_HMACSHA512_BITS     ((DST_ALG_HMACSHA512 << TAG_SHIFT) + 1)
87
88 struct dst_private_element {
89         unsigned short tag;
90         unsigned short length;
91         unsigned char *data;
92 };
93
94 typedef struct dst_private_element dst_private_element_t;
95
96 struct dst_private {
97         unsigned short nelements;
98         dst_private_element_t elements[MAXFIELDS];
99 };
100
101 typedef struct dst_private dst_private_t;
102
103 ISC_LANG_BEGINDECLS
104
105 void
106 dst__privstruct_free(dst_private_t *priv, isc_mem_t *mctx);
107
108 int
109 dst__privstruct_parse(dst_key_t *key, unsigned int alg, isc_lex_t *lex,
110                       isc_mem_t *mctx, dst_private_t *priv);
111
112 int
113 dst__privstruct_writefile(const dst_key_t *key, const dst_private_t *priv,
114                           const char *directory);
115
116 ISC_LANG_ENDDECLS
117
118 #endif /* DST_DST_PARSE_H */