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