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