1143731Sdougb/*
2245163Serwin * Portions Copyright (C) 2004-2010, 2012  Internet Systems Consortium, Inc. ("ISC")
3143731Sdougb * Portions Copyright (C) 2000-2002  Internet Software Consortium.
4193149Sdougb *
5193149Sdougb * Permission to use, copy, modify, and/or distribute this software for any
6193149Sdougb * purpose with or without fee is hereby granted, provided that the above
7193149Sdougb * copyright notice and this permission notice appear in all copies.
8193149Sdougb *
9193149Sdougb * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
10193149Sdougb * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11193149Sdougb * WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE
12193149Sdougb * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13193149Sdougb * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14193149Sdougb * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15193149Sdougb * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16193149Sdougb *
17143731Sdougb * Portions Copyright (C) 1995-2000 by Network Associates, Inc.
18143731Sdougb *
19186462Sdougb * Permission to use, copy, modify, and/or distribute this software for any
20143731Sdougb * purpose with or without fee is hereby granted, provided that the above
21143731Sdougb * copyright notice and this permission notice appear in all copies.
22143731Sdougb *
23143731Sdougb * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
24143731Sdougb * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
25143731Sdougb * WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE
26143731Sdougb * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
27143731Sdougb * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
28143731Sdougb * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
29143731Sdougb * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30143731Sdougb */
31143731Sdougb
32234010Sdougb/* $Id: dst_parse.h,v 1.17 2010/12/23 23:47:08 tbox Exp $ */
33143731Sdougb
34170222Sdougb/*! \file */
35143731Sdougb#ifndef DST_DST_PARSE_H
36143731Sdougb#define DST_DST_PARSE_H 1
37143731Sdougb
38143731Sdougb#include <isc/lang.h>
39143731Sdougb
40143731Sdougb#include <dst/dst.h>
41143731Sdougb
42143731Sdougb#define MAXFIELDSIZE		512
43143731Sdougb
44224092Sdougb/*
45224092Sdougb * Maximum number of fields in a private file is 18 (12 algorithm-
46224092Sdougb * specific fields for RSA, plus 6 generic fields).
47224092Sdougb */
48224092Sdougb#define MAXFIELDS		12+6
49224092Sdougb
50143731Sdougb#define TAG_SHIFT		4
51143731Sdougb#define TAG_ALG(tag)		((unsigned int)(tag) >> TAG_SHIFT)
52143731Sdougb#define TAG(alg, off)		(((alg) << TAG_SHIFT) + (off))
53143731Sdougb
54143731Sdougb/* These are used by both RSA-MD5 and RSA-SHA1 */
55193149Sdougb#define RSA_NTAGS		11
56143731Sdougb#define TAG_RSA_MODULUS		((DST_ALG_RSAMD5 << TAG_SHIFT) + 0)
57143731Sdougb#define TAG_RSA_PUBLICEXPONENT	((DST_ALG_RSAMD5 << TAG_SHIFT) + 1)
58143731Sdougb#define TAG_RSA_PRIVATEEXPONENT	((DST_ALG_RSAMD5 << TAG_SHIFT) + 2)
59143731Sdougb#define TAG_RSA_PRIME1		((DST_ALG_RSAMD5 << TAG_SHIFT) + 3)
60143731Sdougb#define TAG_RSA_PRIME2		((DST_ALG_RSAMD5 << TAG_SHIFT) + 4)
61143731Sdougb#define TAG_RSA_EXPONENT1	((DST_ALG_RSAMD5 << TAG_SHIFT) + 5)
62143731Sdougb#define TAG_RSA_EXPONENT2	((DST_ALG_RSAMD5 << TAG_SHIFT) + 6)
63143731Sdougb#define TAG_RSA_COEFFICIENT	((DST_ALG_RSAMD5 << TAG_SHIFT) + 7)
64193149Sdougb#define TAG_RSA_ENGINE		((DST_ALG_RSAMD5 << TAG_SHIFT) + 8)
65193149Sdougb#define TAG_RSA_LABEL		((DST_ALG_RSAMD5 << TAG_SHIFT) + 9)
66193149Sdougb#define TAG_RSA_PIN		((DST_ALG_RSAMD5 << TAG_SHIFT) + 10)
67143731Sdougb
68143731Sdougb#define DH_NTAGS		4
69143731Sdougb#define TAG_DH_PRIME		((DST_ALG_DH << TAG_SHIFT) + 0)
70143731Sdougb#define TAG_DH_GENERATOR	((DST_ALG_DH << TAG_SHIFT) + 1)
71143731Sdougb#define TAG_DH_PRIVATE		((DST_ALG_DH << TAG_SHIFT) + 2)
72143731Sdougb#define TAG_DH_PUBLIC		((DST_ALG_DH << TAG_SHIFT) + 3)
73143731Sdougb
74143731Sdougb#define DSA_NTAGS		5
75143731Sdougb#define TAG_DSA_PRIME		((DST_ALG_DSA << TAG_SHIFT) + 0)
76143731Sdougb#define TAG_DSA_SUBPRIME	((DST_ALG_DSA << TAG_SHIFT) + 1)
77143731Sdougb#define TAG_DSA_BASE		((DST_ALG_DSA << TAG_SHIFT) + 2)
78143731Sdougb#define TAG_DSA_PRIVATE		((DST_ALG_DSA << TAG_SHIFT) + 3)
79143731Sdougb#define TAG_DSA_PUBLIC		((DST_ALG_DSA << TAG_SHIFT) + 4)
80143731Sdougb
81224092Sdougb#define GOST_NTAGS		1
82224092Sdougb#define TAG_GOST_PRIVASN1	((DST_ALG_ECCGOST << TAG_SHIFT) + 0)
83224092Sdougb
84245163Serwin#define ECDSA_NTAGS		1
85245163Serwin#define TAG_ECDSA_PRIVATEKEY	((DST_ALG_ECDSA256 << TAG_SHIFT) + 0)
86245163Serwin
87170222Sdougb#define OLD_HMACMD5_NTAGS	1
88170222Sdougb#define HMACMD5_NTAGS		2
89143731Sdougb#define TAG_HMACMD5_KEY		((DST_ALG_HMACMD5 << TAG_SHIFT) + 0)
90170222Sdougb#define TAG_HMACMD5_BITS	((DST_ALG_HMACMD5 << TAG_SHIFT) + 1)
91143731Sdougb
92170222Sdougb#define HMACSHA1_NTAGS		2
93170222Sdougb#define TAG_HMACSHA1_KEY	((DST_ALG_HMACSHA1 << TAG_SHIFT) + 0)
94170222Sdougb#define TAG_HMACSHA1_BITS	((DST_ALG_HMACSHA1 << TAG_SHIFT) + 1)
95170222Sdougb
96170222Sdougb#define HMACSHA224_NTAGS	2
97170222Sdougb#define TAG_HMACSHA224_KEY	((DST_ALG_HMACSHA224 << TAG_SHIFT) + 0)
98170222Sdougb#define TAG_HMACSHA224_BITS	((DST_ALG_HMACSHA224 << TAG_SHIFT) + 1)
99170222Sdougb
100170222Sdougb#define HMACSHA256_NTAGS	2
101170222Sdougb#define TAG_HMACSHA256_KEY	((DST_ALG_HMACSHA256 << TAG_SHIFT) + 0)
102186462Sdougb#define TAG_HMACSHA256_BITS	((DST_ALG_HMACSHA256 << TAG_SHIFT) + 1)
103170222Sdougb
104170222Sdougb#define HMACSHA384_NTAGS	2
105170222Sdougb#define TAG_HMACSHA384_KEY	((DST_ALG_HMACSHA384 << TAG_SHIFT) + 0)
106170222Sdougb#define TAG_HMACSHA384_BITS	((DST_ALG_HMACSHA384 << TAG_SHIFT) + 1)
107170222Sdougb
108170222Sdougb#define HMACSHA512_NTAGS	2
109170222Sdougb#define TAG_HMACSHA512_KEY	((DST_ALG_HMACSHA512 << TAG_SHIFT) + 0)
110170222Sdougb#define TAG_HMACSHA512_BITS	((DST_ALG_HMACSHA512 << TAG_SHIFT) + 1)
111170222Sdougb
112143731Sdougbstruct dst_private_element {
113143731Sdougb	unsigned short tag;
114143731Sdougb	unsigned short length;
115143731Sdougb	unsigned char *data;
116143731Sdougb};
117143731Sdougb
118143731Sdougbtypedef struct dst_private_element dst_private_element_t;
119143731Sdougb
120143731Sdougbstruct dst_private {
121143731Sdougb	unsigned short nelements;
122143731Sdougb	dst_private_element_t elements[MAXFIELDS];
123143731Sdougb};
124143731Sdougb
125143731Sdougbtypedef struct dst_private dst_private_t;
126143731Sdougb
127143731SdougbISC_LANG_BEGINDECLS
128143731Sdougb
129143731Sdougbvoid
130143731Sdougbdst__privstruct_free(dst_private_t *priv, isc_mem_t *mctx);
131143731Sdougb
132224092Sdougbisc_result_t
133143731Sdougbdst__privstruct_parse(dst_key_t *key, unsigned int alg, isc_lex_t *lex,
134143731Sdougb		      isc_mem_t *mctx, dst_private_t *priv);
135143731Sdougb
136224092Sdougbisc_result_t
137143731Sdougbdst__privstruct_writefile(const dst_key_t *key, const dst_private_t *priv,
138143731Sdougb			  const char *directory);
139143731Sdougb
140143731SdougbISC_LANG_ENDDECLS
141143731Sdougb
142143731Sdougb#endif /* DST_DST_PARSE_H */
143