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