diff --git a/ChangeLog b/ChangeLog index 3a14bb6..5b52e05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,6 +31,10 @@ without headers and comments and don't know what it is. + Moved all uthash (key lists) related code into + keyhash.c, so nowhere will be used any HASH* + macros directly. + 0.1.4 Changed key format (again), now the main secret is the ED25519 secret key, which will be encrypted. Everything else will be derived from that. Thanks diff --git a/autogen.sh b/autogen.sh index 23078ef..bf11bb9 100755 --- a/autogen.sh +++ b/autogen.sh @@ -8,12 +8,14 @@ find . -name Makefile.in -exec rm {} \; find . -name "*~" -exec rm {} \; find . -name config.h -exec rm {} \; find . -name stamp.h -exec rm {} \; +find . -name stamp-h1 -exec rm {} \; find . -name .deps -exec rm -rf {} \; find . -name .libs -exec rm -rf {} \; find . -name .o -exec rm -rf {} \; find . -name .lo -exec rm -rf {} \; -rm -rf configure config.* config autom4te.cache tests/test* tests/v* tests/stresstest/* +rm -rf configure config.* config autom4te.cache tests/test* tests/v* tests/stresstest/* \ + libpcp/libpcp1.pc set +x # generate the install include file diff --git a/include/Makefile.am b/include/Makefile.am index e347297..aff9543 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -6,6 +6,7 @@ PCPEXPORT = pcp.h \ pcp/getpass.h \ pcp/jenhash.h \ pcp/key.h \ + pcp/keyhash.h \ pcp/mac.h \ pcp/mem.h \ pcp/pad.h \ diff --git a/include/Makefile.in b/include/Makefile.in index ea89956..964d7b3 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -225,6 +225,7 @@ PCPEXPORT = pcp.h \ pcp/getpass.h \ pcp/jenhash.h \ pcp/key.h \ + pcp/keyhash.h \ pcp/mac.h \ pcp/mem.h \ pcp/pad.h \ diff --git a/include/pcp.h b/include/pcp.h index be43eb3..58cb3a9 100644 --- a/include/pcp.h +++ b/include/pcp.h @@ -12,6 +12,7 @@ extern "C" { #include "pcp/getpass.h" #include "pcp/jenhash.h" #include "pcp/key.h" +#include "pcp/keyhash.h" #include "pcp/mac.h" #include "pcp/mem.h" #include "pcp/pad.h" diff --git a/include/pcp/key.h b/include/pcp/key.h index 2c8a1a8..ad66890 100644 --- a/include/pcp/key.h +++ b/include/pcp/key.h @@ -110,9 +110,6 @@ struct _pcp_pubkey_t { typedef struct _pcp_key_t pcp_key_t; typedef struct _pcp_pubkey_t pcp_pubkey_t; -pcp_key_t *pcpkey_hash; -pcp_pubkey_t *pcppubkey_hash; - void pcp_cleanhashes(); pcp_key_t *pcpkey_new (); diff --git a/include/pcp/keyhash.h b/include/pcp/keyhash.h new file mode 100644 index 0000000..b46e702 --- /dev/null +++ b/include/pcp/keyhash.h @@ -0,0 +1,63 @@ +/* + This file is part of Pretty Curved Privacy (pcp1). + + Copyright (C) 2013 T.Linden. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + You can contact me by mail: . +*/ + +#ifndef _HAVE_KEYHASH_H +#define _HAVE_KEYHASH_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "uthash.h" +#include "key.h" + +pcp_key_t *pcpkey_hash; +pcp_pubkey_t *pcppubkey_hash; +pcp_key_t *__k; +pcp_pubkey_t *__p; + +// wrapper for HASH_ITER +#define pcphash_iterate(key) \ + __k = NULL; \ + HASH_ITER(hh, pcpkey_hash, key, __k) + +#define pcphash_iteratepub(key) \ + __p = NULL; \ + HASH_ITER(hh, pcppubkey_hash, key, __p) + + +void pcphash_init(); +void pcphash_del(void *key, int type); +void pcphash_clean(); + +pcp_key_t *pcphash_keyexists(char *id); +pcp_pubkey_t *pcphash_pubkeyexists(char *id); + + +void pcphash_add(void *key, int type); +int pcphash_count(); +int pcphash_countpub(); + +#ifdef __cplusplus +} +#endif + +#endif // _HAVE_KEYHASH_H diff --git a/libpcp/Makefile.am b/libpcp/Makefile.am index a9418f8..1b302a3 100644 --- a/libpcp/Makefile.am +++ b/libpcp/Makefile.am @@ -28,6 +28,6 @@ pkgconfig_DATA = libpcp1.pc libpcp1_la_SOURCES = mac.c mem.c pad.c version.c \ z85.c zmq_z85.c key.c randomart.c \ vault.c fatal.c jenhash.c digital_crc32.c \ - crypto.c ed.c + crypto.c ed.c keyhash.c include_HEADERS = ../include/pcp.h diff --git a/libpcp/Makefile.in b/libpcp/Makefile.in index 5d90fa8..d20e0aa 100644 --- a/libpcp/Makefile.in +++ b/libpcp/Makefile.in @@ -101,7 +101,7 @@ LTLIBRARIES = $(lib_LTLIBRARIES) libpcp1_la_LIBADD = am_libpcp1_la_OBJECTS = mac.lo mem.lo pad.lo version.lo z85.lo \ zmq_z85.lo key.lo randomart.lo vault.lo fatal.lo jenhash.lo \ - digital_crc32.lo crypto.lo ed.lo + digital_crc32.lo crypto.lo ed.lo keyhash.lo libpcp1_la_OBJECTS = $(am_libpcp1_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pcp depcomp = $(SHELL) $(top_srcdir)/config/depcomp @@ -269,7 +269,7 @@ pkgconfig_DATA = libpcp1.pc libpcp1_la_SOURCES = mac.c mem.c pad.c version.c \ z85.c zmq_z85.c key.c randomart.c \ vault.c fatal.c jenhash.c digital_crc32.c \ - crypto.c ed.c + crypto.c ed.c keyhash.c include_HEADERS = ../include/pcp.h all: all-am @@ -357,6 +357,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fatal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jenhash.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/key.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyhash.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pad.Plo@am__quote@ diff --git a/libpcp/key.c b/libpcp/key.c index 8bcc995..af56616 100644 --- a/libpcp/key.c +++ b/libpcp/key.c @@ -21,7 +21,7 @@ #include "key.h" - +#include "keyhash.h" unsigned char *pcp_derivekey(char *passphrase) { unsigned char *hash32 = ucmalloc(crypto_hash_sha256_BYTES); @@ -175,7 +175,6 @@ pcp_key_t *pcpkey_decrypt(pcp_key_t *key, char *passphrase) { if(es == 0) { // success byte secret[32] = { 0 }; - byte edsec[64] = { 0 }; pcp_ed_keypairs(secret, decrypted); memcpy(key->secret, secret, 32); memcpy(key->edsecret, decrypted, 64); @@ -226,45 +225,6 @@ unsigned char *pcpkey_getchecksum(pcp_key_t *k) { } - -void pcp_inithashes() { - pcpkey_hash = NULL; - pcppubkey_hash = NULL; -} - -void pcp_cleanhashes() { - if(pcpkey_hash != NULL) { - pcp_key_t *current_key, *tmp; - HASH_ITER(hh, pcpkey_hash, current_key, tmp) { - HASH_DEL(pcpkey_hash,current_key); - memset(current_key, 0, sizeof(pcp_key_t)); - free(current_key); // FIXME: coredumps here after n-th secret keys has been added - } - } - - if(pcppubkey_hash != NULL) { - pcp_pubkey_t *current_pub, *ptmp; - HASH_ITER(hh, pcppubkey_hash, current_pub, ptmp) { - HASH_DEL(pcppubkey_hash,current_pub); - memset(current_pub, 0, sizeof(pcp_pubkey_t)); - free(current_pub); - } - } - pcp_inithashes(); -} - -pcp_key_t *pcpkey_exists(char *id) { - pcp_key_t *key = NULL; - HASH_FIND_STR(pcpkey_hash, id, key); - return key; // maybe NULL! -} - -pcp_pubkey_t *pcppubkey_exists(char *id) { - pcp_pubkey_t *key = NULL; - HASH_FIND_STR(pcppubkey_hash, id, key); - return key; // maybe NULL! -} - pcp_key_t * key2be(pcp_key_t *k) { k->version = htobe32(k->version); k->serial = htobe32(k->serial); diff --git a/libpcp/keyhash.c b/libpcp/keyhash.c new file mode 100644 index 0000000..d422af9 --- /dev/null +++ b/libpcp/keyhash.c @@ -0,0 +1,90 @@ +/* + This file is part of Pretty Curved Privacy (pcp1). + + Copyright (C) 2013 T.Linden. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + You can contact me by mail: . +*/ + + +#include "keyhash.h" + +void pcphash_init() { + pcpkey_hash = NULL; + pcppubkey_hash = NULL; +} + +void pcphash_del(void *key, int type) { + if(type == PCP_KEY_TYPE_SECRET) { + HASH_DEL(pcpkey_hash, (pcp_key_t *)key); + memset(key, 0, sizeof(pcp_key_t)); + } + else { + HASH_DEL(pcppubkey_hash, (pcp_pubkey_t *)key); + memset(key, 0, sizeof(pcp_pubkey_t)); + } + free(key); +} + +void pcphash_clean() { + if(pcpkey_hash != NULL) { + pcp_key_t *current_key, *tmp; + HASH_ITER(hh, pcpkey_hash, current_key, tmp) { + pcphash_del(current_key, PCP_KEY_TYPE_SECRET); + } + } + + if(pcppubkey_hash != NULL) { + pcp_pubkey_t *current_pub, *ptmp; + HASH_ITER(hh, pcppubkey_hash, current_pub, ptmp) { + pcphash_del(current_pub, PCP_KEY_TYPE_PUBLIC); + } + } + pcphash_init(); +} + + +pcp_key_t *pcphash_keyexists(char *id) { + pcp_key_t *key = NULL; + HASH_FIND_STR(pcpkey_hash, id, key); + return key; // maybe NULL! +} + +pcp_pubkey_t *pcphash_pubkeyexists(char *id) { + pcp_pubkey_t *key = NULL; + HASH_FIND_STR(pcppubkey_hash, id, key); + return key; // maybe NULL! +} + +void pcphash_add(void *key, int type) { + if(type == PCP_KEY_TYPE_PUBLIC) { + pcp_pubkey_t *k = (pcp_pubkey_t *)key; + HASH_ADD_STR( pcppubkey_hash, id, k ); + } + else { + pcp_key_t *k = (pcp_key_t *)key; + HASH_ADD_STR( pcpkey_hash, id, k); + } +} + +int pcphash_count() { + return HASH_COUNT(pcpkey_hash); +} + +int pcphash_countpub() { + return HASH_COUNT(pcppubkey_hash); +} + diff --git a/libpcp/vault.c b/libpcp/vault.c index 9235b3f..236a723 100644 --- a/libpcp/vault.c +++ b/libpcp/vault.c @@ -21,6 +21,7 @@ #include "vault.h" +#include "keyhash.h" vault_t *pcpvault_init(char *filename) { vault_t *vault = pcpvault_new(filename, 0); @@ -151,14 +152,7 @@ int pcpvault_additem(vault_t *vault, void *item, size_t itemsize, uint8_t type, if(do_hash == 1) { // we don't re-hash if it's a full update - if(type == PCP_KEY_TYPE_PUBLIC) { - pcp_pubkey_t *p = (pcp_pubkey_t *)item; - HASH_ADD_STR( pcppubkey_hash, id, p ); - } - else { - pcp_key_t *s = (pcp_key_t *)item; - HASH_ADD_STR( pcpkey_hash, id, s ); - } + pcphash_add(item, type); pcpvault_update_checksum(vault); } @@ -204,13 +198,13 @@ int pcpvault_writeall(vault_t *vault) { vault_t *tmp = pcpvault_new(vault->filename, 1); if(tmp != NULL) { if(pcpvault_create(tmp) == 0) { - pcp_key_t *k, *kt = NULL; - HASH_ITER(hh, pcpkey_hash, k, kt) { + pcp_key_t *k = NULL; + pcphash_iterate(k) { if(pcpvault_additem(tmp, (void *)k, sizeof(pcp_key_t), PCP_KEY_TYPE_SECRET, 0) != 0) goto errwa; } - pcp_pubkey_t *p, *pt = NULL; - HASH_ITER(hh, pcppubkey_hash, p, pt) { + pcp_pubkey_t *p = NULL; + pcphash_iteratepub(p) { if(pcpvault_additem(tmp, (void *)p, sizeof(pcp_pubkey_t), PCP_KEY_TYPE_PUBLIC, 0) != 0) goto errwa; } @@ -253,24 +247,24 @@ unsigned char *pcpvault_create_checksum(vault_t *vault) { size_t skeysize = sizeof(pcp_key_t) - sizeof(UT_hash_handle); size_t pkeysize = sizeof(pcp_pubkey_t) - sizeof(UT_hash_handle); - int numskeys = HASH_COUNT(pcpkey_hash); - int numpkeys = HASH_COUNT(pcppubkey_hash); + int numskeys = pcphash_count(); + int numpkeys = pcphash_countpub(); size_t datasize = (skeysize * numskeys) + (pkeysize * numpkeys); unsigned char *data = ucmalloc(datasize); unsigned char *checksum = ucmalloc(32); size_t datapos = 0; - pcp_key_t *k, *kt = NULL; - HASH_ITER(hh, pcpkey_hash, k, kt) { + pcp_key_t *k = NULL; + pcphash_iterate(k) { key2be(k); memcpy(&data[datapos], k, skeysize); key2native(k); datapos += skeysize; } - pcp_pubkey_t *p, *pt = NULL; - HASH_ITER(hh, pcppubkey_hash, p, pt) { + pcp_pubkey_t *p = NULL; + pcphash_iteratepub(p) { pubkey2be(p); memcpy(&data[datapos], p, pkeysize); pubkey2native(p); @@ -374,14 +368,14 @@ int pcpvault_fetchall(vault_t *vault) { if(header->fileid == PCP_VAULT_ID && header->version == PCP_VAULT_VERSION) { // loop over the file and slurp everything in - pcpkey_hash = NULL; - pcppubkey_hash = NULL; int readpos = 0; pcp_key_t *key; pcp_pubkey_t *pubkey; int bytesleft = 0; int ksize = sizeof(pcp_pubkey_t); // smallest possbile item + pcphash_init(); + vault->version = header->version; memcpy(vault->checksum, header->checksum, 32); @@ -405,14 +399,14 @@ int pcpvault_fetchall(vault_t *vault) { fread(key, sizeof(pcp_key_t), 1, vault->fd); key2native(key); //pcp_dumpkey(key); - HASH_ADD_STR( pcpkey_hash, id, key ); + pcphash_add((void *)key, item->type); } else if(item->type == PCP_KEY_TYPE_PUBLIC) { // read a public key pubkey = ucmalloc(sizeof(pcp_pubkey_t)); fread(pubkey, sizeof(pcp_pubkey_t), 1, vault->fd); pubkey2native(pubkey); - HASH_ADD_STR( pcppubkey_hash, id, pubkey ); + pcphash_add((void *)pubkey, item->type); } else { fatal("Failed to read vault - invalid key type: %02X! at %d\n", item->type, readpos); @@ -443,7 +437,7 @@ int pcpvault_fetchall(vault_t *vault) { unsigned char *checksum = NULL; checksum = pcpvault_create_checksum(vault); - if(HASH_COUNT(pcpkey_hash) + HASH_COUNT(pcppubkey_hash) > 0) { + if(pcphash_count() + pcphash_countpub() > 0) { // only validate the checksum if there are keys if(memcmp(checksum, vault->checksum, 32) != 0) { fatal("Error: the checksum of the key vault doesn't match its contents!\n"); @@ -459,7 +453,7 @@ int pcpvault_fetchall(vault_t *vault) { err: free(item); free(header); - pcp_cleanhashes(); + //pcphash_clean(); return -1; } diff --git a/man/pcp1.1 b/man/pcp1.1 index 42e3571..8918445 100644 --- a/man/pcp1.1 +++ b/man/pcp1.1 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "PCP1 1" -.TH PCP1 1 "2013-11-12" "PCP 0.1.5" "USER CONTRIBUTED DOCUMENTATION" +.TH PCP1 1 "2013-11-13" "PCP 0.1.5" "USER CONTRIBUTED DOCUMENTATION" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/src/encryption.c b/src/encryption.c index bcd397f..555e30b 100644 --- a/src/encryption.c +++ b/src/encryption.c @@ -93,9 +93,7 @@ int pcpdecrypt(char *id, int useid, char *infile, char *outfile, char *passwd) { unsigned char *check = ucmalloc(crypto_hash_BYTES); memcpy(hash, combined, crypto_hash_BYTES); - for(public=pcppubkey_hash; - public != NULL; - public=(pcp_pubkey_t*)(public->hh.next)) { + pcphash_iteratepub(public) { crypto_hash(check, (unsigned char*)public->id, 16); if(memcmp(check, hash, crypto_hash_BYTES) == 0) { // found one @@ -105,7 +103,7 @@ int pcpdecrypt(char *id, int useid, char *infile, char *outfile, char *passwd) { if(public == NULL) { // maybe self encryption, try secrets pcp_key_t *s = NULL; - for(s=pcpkey_hash; s != NULL; s=(pcp_key_t*)(s->hh.next)) { + pcphash_iterate(s) { crypto_hash(check, (unsigned char*)s->id, 16); if(memcmp(check, hash, crypto_hash_BYTES) == 0) { // matching secret diff --git a/src/encryption.h b/src/encryption.h index 0dee0f4..a41446e 100644 --- a/src/encryption.h +++ b/src/encryption.h @@ -33,6 +33,7 @@ #include "uthash.h" #include "z85.h" #include "keyprint.h" +#include "keyhash.h" int pcpdecrypt(char *id, int useid, char *infile, char *outfile, char *passwd); int pcpencrypt(char *id, char *infile, char *outfile, char *passwd, char *recipient); diff --git a/src/keymgmt.c b/src/keymgmt.c index 1ecd1b7..7a06540 100644 --- a/src/keymgmt.c +++ b/src/keymgmt.c @@ -131,12 +131,12 @@ void pcp_listkeys() { if(nkeys > 0) { printf("Key ID Type Creation Time Owner\n"); - for(k=pcpkey_hash; k != NULL; k=(pcp_key_t*)(k->hh.next)) { + pcphash_iterate(k) { pcpkey_printlineinfo(k); } pcp_pubkey_t *p; - for(p=pcppubkey_hash; p != NULL; p=(pcp_pubkey_t*)(p->hh.next)) { + pcphash_iteratepub(p) { pcppubkey_printlineinfo(p); } } @@ -184,7 +184,7 @@ char *pcp_normalize_id(char *keyid) { pcp_key_t *pcp_find_primary_secret() { pcp_key_t *key = NULL; pcp_key_t *k; - for(k=pcpkey_hash; k != NULL; k=(pcp_key_t*)(k->hh.next)) { + pcphash_iterate(k) { if(k->type == PCP_KEY_TYPE_MAINSECRET) { key = ucmalloc(sizeof(pcp_key_t)); memcpy(key, k, sizeof(pcp_key_t)); @@ -195,7 +195,7 @@ pcp_key_t *pcp_find_primary_secret() { // no primary? whoops int nkeys = HASH_COUNT(pcpkey_hash); if(nkeys == 1) { - for(k=pcpkey_hash; k != NULL; k=(pcp_key_t*)(k->hh.next)) { + pcphash_iterate(k) { key = ucmalloc(sizeof(pcp_key_t)); memcpy(key, k, sizeof(pcp_key_t)); return key; @@ -474,7 +474,7 @@ int pcp_sanitycheck_pub(pcp_pubkey_t *key) { return 1; } - pcp_pubkey_t *maybe = pcppubkey_exists(key->id); + pcp_pubkey_t *maybe = pcphash_pubkeyexists(key->id); if(maybe != NULL) { fatal("Pubkey sanity check: there already exists a key with the id 0x%s\n", key->id); return 1; @@ -525,7 +525,7 @@ int pcp_sanitycheck_key(pcp_key_t *key) { return 1; } - pcp_key_t *maybe = pcpkey_exists(key->id); + pcp_key_t *maybe = pcphash_keyexists(key->id); if(maybe != NULL) { fatal("Secretkey sanity check: there already exists a key with the id 0x%s\n", key->id); return 1; @@ -535,7 +535,7 @@ int pcp_sanitycheck_key(pcp_key_t *key) { } void pcpdelete_key(char *keyid) { - pcp_pubkey_t *p = pcppubkey_exists(keyid); + pcp_pubkey_t *p = pcphash_pubkeyexists(keyid); if(p != NULL) { // delete public @@ -545,7 +545,7 @@ void pcpdelete_key(char *keyid) { fprintf(stderr, "Public key deleted.\n"); } else { - pcp_key_t *s = pcpkey_exists(keyid); + pcp_key_t *s = pcphash_keyexists(keyid); if(s != NULL) { // delete secret HASH_DEL(pcpkey_hash, s); @@ -560,7 +560,7 @@ void pcpdelete_key(char *keyid) { } void pcpedit_key(char *keyid) { - pcp_key_t *key = pcpkey_exists(keyid); + pcp_key_t *key = pcphash_keyexists(keyid); if(key != NULL) { if(key->secret[0] == 0) { @@ -599,7 +599,7 @@ char *pcp_find_id_byrec(char *recipient) { pcp_pubkey_t *p; char *id = NULL; _lc(recipient); - for(p=pcppubkey_hash; p != NULL; p=(pcp_pubkey_t*)(p->hh.next)) { + pcphash_iteratepub(p) { if(strncmp(p->owner, recipient, 255) == 0) { id = ucmalloc(17); strncpy(id, p->id, 17); diff --git a/src/keymgmt.h b/src/keymgmt.h index 56c93e4..4a0999c 100644 --- a/src/keymgmt.h +++ b/src/keymgmt.h @@ -37,6 +37,7 @@ #include "defines.h" #include "readpass.h" #include "keyprint.h" +#include "keyhash.h" #define _WITH_GETLINE diff --git a/src/keyprint.c b/src/keyprint.c index 5192b97..a6e451c 100644 --- a/src/keyprint.c +++ b/src/keyprint.c @@ -140,14 +140,14 @@ int pcptext_infile(char *infile) { void pcptext_key(char *keyid) { - pcp_key_t *s = pcpkey_exists(keyid); + pcp_key_t *s = pcphash_keyexists(keyid); if(s != NULL) { if(debug) pcp_dumpkey(s); pcpkey_print(s, stdout); } else { - pcp_pubkey_t *p = pcppubkey_exists(keyid); + pcp_pubkey_t *p = pcphash_pubkeyexists(keyid); if(p != NULL) { if(debug) pcp_dumppubkey(p); @@ -431,7 +431,7 @@ void pcpexport_yaml(char *outfile) { fprintf(out, "---\n"); fprintf(out, "secret-keys:\n"); - for(s=pcpkey_hash; s != NULL; s=(pcp_key_t*)(s->hh.next)) { + pcphash_iterate(s) { fprintf(out, " -\n"); fprintf(out, " id: %s\n", s->id); fprintf(out, " owner: %s\n", s->owner); @@ -456,7 +456,7 @@ void pcpexport_yaml(char *outfile) { } fprintf(out, "public-keys:\n"); - for(p=pcppubkey_hash; p != NULL; p=(pcp_pubkey_t*)(p->hh.next)) { + pcphash_iteratepub(p) { fprintf(out, " -\n"); fprintf(out, " id: %s\n", p->id); fprintf(out, " owner: %s\n", p->owner); diff --git a/src/keyprint.h b/src/keyprint.h index d886f56..f9a1437 100644 --- a/src/keyprint.h +++ b/src/keyprint.h @@ -28,6 +28,7 @@ #include "vault.h" #include "pcp.h" #include "keymgmt.h" +#include "keyhash.h" void pcp_dumpkey(pcp_key_t *k); void pcp_dumppubkey(pcp_pubkey_t *k); diff --git a/src/pcp.c b/src/pcp.c index 4702c5f..9424089 100644 --- a/src/pcp.c +++ b/src/pcp.c @@ -229,7 +229,7 @@ int main (int argc, char **argv) { } if(usevault == 1) { - pcp_inithashes(); + pcphash_init(); vault = pcpvault_init(vaultfile); if(vault != NULL) { switch (mode) { @@ -396,7 +396,7 @@ int main (int argc, char **argv) { } } pcpvault_close(vault); - pcp_cleanhashes(); + pcphash_clean(); ucfree(vaultfile); } else { diff --git a/src/pcp.h b/src/pcp.h index 18800cb..4ee6f3e 100644 --- a/src/pcp.h +++ b/src/pcp.h @@ -45,6 +45,7 @@ #include "usage.h" #include "encryption.h" #include "signature.h" +#include "keyhash.h" // operation modi // perl -e '$x=0; while ($x<100000) { $x++; $x *= 1.7; printf "0x%08X: %d\n", $x, $x }'