diff options
Diffstat (limited to 'contrib/zkt/dki.h')
-rw-r--r-- | contrib/zkt/dki.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/contrib/zkt/dki.h b/contrib/zkt/dki.h new file mode 100644 index 0000000..548ce68 --- /dev/null +++ b/contrib/zkt/dki.h @@ -0,0 +1,185 @@ +/***************************************************************** +** +** @(#) dki.h -- Header file for DNSsec Key info/manipulation +** +** Copyright (c) July 2004 - Jan 2005, Holger Zuleger HZnet. All rights reserved. +** +** This software is open source. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** +** Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** +** Neither the name of Holger Zuleger HZnet nor the names of its contributors may +** be used to endorse or promote products derived from this software without +** specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +** POSSIBILITY OF SUCH DAMAGE. +** +*****************************************************************/ +#ifndef DKI_H +# define DKI_H + +# ifndef TYPES_H +# include <sys/types.h> +# include <stdio.h> +# include <time.h> +# endif + +# define MAX_LABELSIZE (255) +# define MAX_FNAMESIZE (1+255+2+3+1+5+1+11) + /* Kdomain.+ALG+KEYID.type */ + /* domain == FQDN (max 255) */ + /* ALG == 3; KEYID == 5 chars */ + /* type == key||published|private|depreciated == 11 chars */ +//# define MAX_DNAMESIZE (254) +# define MAX_DNAMESIZE (1023) + /* /path/name / filename */ +# define MAX_PATHSIZE (MAX_DNAMESIZE + 1 + MAX_FNAMESIZE) + +/* algorithm types */ +# define DK_ALGO_RSA 1 /* RFC2537 */ +# define DK_ALGO_DH 2 /* RFC2539 */ +# define DK_ALGO_DSA 3 /* RFC2536 (mandatory) */ +# define DK_ALGO_EC 4 /* */ +# define DK_ALGO_RSASHA1 5 /* RFC3110 */ + +/* protocol types */ +# define DK_PROTO_DNS 3 + +/* flag bits */ +typedef enum { /* 11 1111 */ + /* 0123 4567 8901 2345 */ + DK_FLAG_KSK= 01, /* 0000 0000 0000 0001 Bit 15 RFC4034/RFC3757 */ + DK_FLAG_REVOKE= 0200, /* 0000 0000 1000 0000 Bit 8 RFC5011 */ + DK_FLAG_ZONE= 0400, /* 0000 0001 0000 0000 Bit 7 RFC4034 */ +} dk_flag_t; + +/* status types */ +typedef enum { + DKI_SEP= 'e', + DKI_SECUREENTRYPOINT= 'e', + DKI_PUB= 'p', + DKI_PUBLISHED= 'p', + DKI_ACT= 'a', + DKI_ACTIVE= 'a', + DKI_DEP= 'd', + DKI_DEPRECIATED= 'd', + DKI_REV= 'r', + DKI_REVOKED= 'r', +} dk_status_t; + +# define DKI_KEY_FILEEXT ".key" +# define DKI_PUB_FILEEXT ".published" +# define DKI_ACT_FILEEXT ".private" +# define DKI_DEP_FILEEXT ".depreciated" + +# define DKI_KSK 1 +# define DKI_ZSK 0 + +typedef struct dki { + char dname[MAX_DNAMESIZE+1]; /* directory */ + char fname[MAX_FNAMESIZE+1]; /* file name without extension */ + char name[MAX_LABELSIZE+1]; /* domain name or label */ + ushort algo; /* key algorithm */ + ushort proto; /* must be 3 (DNSSEC) */ + dk_flag_t flags; /* ZONE, optional SEP or REVOKE flag */ + time_t time; /* key file time */ + time_t gentime; /* key generation time (will be set on key generation and never changed) */ + time_t exptime; /* time the key was expired (0L if not) */ + ulong lifetime; /* proposed key life time at time of generation */ + uint tag; /* key id */ + dk_status_t status; /* key exist (".key") and name of private */ + /* key file is ".published", ".private" */ + /* or ".depreciated" */ + char *pubkey; /* base64 public key */ + struct dki *next; /* ptr to next entry in list */ +} dki_t; + +#if defined(USE_TREE) && USE_TREE +/* + * Instead of including <search.h>, which contains horrible false function + * declarations, we declared it for our usage (Yes, these functions return + * the adress of a pointer variable) + */ +typedef enum +{ + /* we change the naming to the new, and more predictive one, used by Knuth */ + PREORDER, /* preorder, */ + INORDER, /* postorder, */ + POSTORDER, /* endorder, */ + LEAF /* leaf */ +} +VISIT; + +dki_t **tsearch (const dki_t *dkp, dki_t **tree, int(*compar)(const dki_t *, const dki_t *)); +dki_t **tfind (const dki_t *dkp, const dki_t **tree, int(*compar)(const dki_t *, const dki_t *)); +dki_t **tdelete (const dki_t *dkp, dki_t **tree, int(*compar)(const dki_t *, const dki_t *)); +void twalk (const dki_t *root, void (*action)(const dki_t **nodep, VISIT which, int depth)); + +extern void dki_tfree (dki_t **tree); +extern dki_t *dki_tadd (dki_t **tree, dki_t *new); +extern int dki_tagcmp (const dki_t *a, const dki_t *b); +extern int dki_namecmp (const dki_t *a, const dki_t *b); +extern int dki_allcmp (const dki_t *a, const dki_t *b); +#endif + +extern dki_t *dki_read (const char *dir, const char *fname); +extern int dki_readdir (const char *dir, dki_t **listp, int recursive); +extern int dki_prt_trustedkey (const dki_t *dkp, FILE *fp); +extern int dki_prt_dnskey (const dki_t *dkp, FILE *fp); +extern int dki_prt_dnskeyttl (const dki_t *dkp, FILE *fp, int ttl); +extern int dki_prt_dnskey_raw (const dki_t *dkp, FILE *fp); +extern int dki_prt_comment (const dki_t *dkp, FILE *fp); +extern int dki_cmp (const dki_t *a, const dki_t *b); +extern int dki_timecmp (const dki_t *a, const dki_t *b); +extern int dki_age (const dki_t *dkp, time_t curr); +extern dk_flag_t dki_getflag (const dki_t *dkp, time_t curr); +extern dk_flag_t dki_setflag (dki_t *dkp, dk_flag_t flag); +extern dk_flag_t dki_unsetflag (dki_t *dkp, dk_flag_t flag); +extern dk_status_t dki_status (const dki_t *dkp); +extern const char *dki_statusstr (const dki_t *dkp); +extern int dki_isksk (const dki_t *dkp); +extern int dki_isdepreciated (const dki_t *dkp); +extern int dki_isrevoked (const dki_t *dkp); +extern int dki_isactive (const dki_t *dkp); +extern int dki_ispublished (const dki_t *dkp); +extern time_t dki_time (const dki_t *dkp); +extern time_t dki_exptime (const dki_t *dkp); +extern time_t dki_gentime (const dki_t *dkp); +extern time_t dki_lifetime (const dki_t *dkp); +extern ushort dki_lifetimedays (const dki_t *dkp); +extern ushort dki_setlifetime (dki_t *dkp, int days); +extern time_t dki_setexptime (dki_t *dkp, time_t sec); +extern dki_t *dki_new (const char *dir, const char *name, int ksk, int algo, int bitsize, const char *rfile, int lf_days); +extern dki_t *dki_remove (dki_t *dkp); +extern dki_t *dki_destroy (dki_t *dkp); +extern int dki_setstatus (dki_t *dkp, int status); +extern int dki_setstatus_preservetime (dki_t *dkp, int status); +extern dki_t *dki_add (dki_t **dkp, dki_t *new); +extern const dki_t *dki_tsearch (const dki_t *tree, int tag, const char *name); +extern const dki_t *dki_search (const dki_t *list, int tag, const char *name); +extern const dki_t *dki_find (const dki_t *list, int ksk, int status, int first); +extern void dki_free (dki_t *dkp); +extern void dki_freelist (dki_t **listp); +extern char *dki_algo2str (int algo); +extern const char *dki_geterrstr (void); + +#endif |