diff --git a/src/mint/Makefile.am b/src/mint/Makefile.am index c0fd6949b..17b82dc51 100644 --- a/src/mint/Makefile.am +++ b/src/mint/Makefile.am @@ -4,7 +4,7 @@ lib_LTLIBRARIES = \ libtalermint_common.la libtalermint_common_la_SOURCES = \ - mint_common.c \ + key_io.c key_io.h \ mint_db.c libtalermint_common_la_LIBADD = \ diff --git a/src/mint/mint_common.c b/src/mint/key_io.c similarity index 94% rename from src/mint/mint_common.c rename to src/mint/key_io.c index 41b9d6ed5..f401a1268 100644 --- a/src/mint/mint_common.c +++ b/src/mint/key_io.c @@ -15,15 +15,17 @@ */ /** - * @file mint_common.c - * @brief Common functionality for the mint + * @file key_io.c + * @brief I/O operations for the Mint's private keys * @author Florian Dold * @author Benedikt Mueller * @author Sree Harsha Totakura + * @author Christian Grothoff */ - #include "platform.h" #include "mint.h" +#include "key_io.h" + struct SignkeysIterateContext { @@ -201,8 +203,8 @@ static int denomkeys_iterate_topdir_iter (void *cls, const char *filename) { - struct DenomkeysIterateContext *dic = cls; + dic->alias = GNUNET_STRINGS_get_short_name (filename); // FIXME: differentiate between error case and normal iteration abortion @@ -219,7 +221,9 @@ TALER_MINT_denomkeys_iterate (const char *mint_base_dir, char *dir; size_t len; struct DenomkeysIterateContext dic; - len = GNUNET_asprintf (&dir, ("%s" DIR_SEPARATOR_STR DIR_DENOMKEYS), + + len = GNUNET_asprintf (&dir, + "%s" DIR_SEPARATOR_STR DIR_DENOMKEYS, mint_base_dir); GNUNET_assert (len > 0); @@ -227,7 +231,9 @@ TALER_MINT_denomkeys_iterate (const char *mint_base_dir, dic.it_cls = cls; // scan over alias dirs - return GNUNET_DISK_directory_scan (dir, &denomkeys_iterate_topdir_iter, &dic); + return GNUNET_DISK_directory_scan (dir, + &denomkeys_iterate_topdir_iter, + &dic); } diff --git a/src/mint/key_io.h b/src/mint/key_io.h new file mode 100644 index 000000000..44665e379 --- /dev/null +++ b/src/mint/key_io.h @@ -0,0 +1,137 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER 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, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file key_io.h + * @brief IO operations for the mint's private keys + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + * + * TODO: + * - document better + */ +#ifndef KEY_IO_H +#define KEY_IO_H + +#include +#include +#include "taler_util.h" +#include "taler_signatures.h" + +#define DIR_SIGNKEYS "signkeys" +#define DIR_DENOMKEYS "denomkeys" + +/** + * On disk format used for a mint signing key. + * Includes the private key followed by the signed + * issue message. + */ +struct TALER_MINT_SignKeyIssuePriv +{ + struct GNUNET_CRYPTO_EddsaPrivateKey signkey_priv; + struct TALER_MINT_SignKeyIssue issue; +}; + + + +struct TALER_MINT_DenomKeyIssuePriv +{ + /** + * The private key of the denomination. Will be NULL if the private key is + * not available. + */ + struct GNUNET_CRYPTO_rsa_PrivateKey *denom_priv; + + struct TALER_MINT_DenomKeyIssue issue; +}; + + + + +/** + * Iterator for sign keys. + * + * @param cls closure + * @param ski the sign key issue + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_NO to stop iteration with no error, + * #GNUNET_SYSERR to abort iteration with error! + */ +typedef int +(*TALER_MINT_SignkeyIterator)(void *cls, + const struct TALER_MINT_SignKeyIssuePriv *ski); + +/** + * Iterator for denomination keys. + * + * @param cls closure + * @param dki the denomination key issue + * @param alias coin alias + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_NO to stop iteration with no error, + * #GNUNET_SYSERR to abort iteration with error! + */ +typedef int +(*TALER_MINT_DenomkeyIterator)(void *cls, + const char *alias, + const struct TALER_MINT_DenomKeyIssuePriv *dki); + + + +/** + * FIXME + */ +int +TALER_MINT_signkeys_iterate (const char *mint_base_dir, + TALER_MINT_SignkeyIterator it, void *cls); + + +/** + * FIXME + */ +int +TALER_MINT_denomkeys_iterate (const char *mint_base_dir, + TALER_MINT_DenomkeyIterator it, void *cls); + + +/** + * Exports a denomination key to the given file + * + * @param filename the file where to write the denomination key + * @param dki the denomination key + * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure. + */ +int +TALER_MINT_write_denom_key (const char *filename, + const struct TALER_MINT_DenomKeyIssuePriv *dki); + + +/** + * Import a denomination key from the given file + * + * @param filename the file to import the key from + * @param dki pointer to return the imported denomination key + * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure + */ +int +TALER_MINT_read_denom_key (const char *filename, + struct TALER_MINT_DenomKeyIssuePriv *dki); + + + + + +#endif diff --git a/src/mint/mint.h b/src/mint/mint.h index 0a0e00d04..1c5e9802e 100644 --- a/src/mint/mint.h +++ b/src/mint/mint.h @@ -20,20 +20,18 @@ * @author Benedikt Mueller * * TODO: - * - revisit and document `struct Deposit` members. + * - move DB functions to mint_db.h */ #ifndef _MINT_H #define _MINT_H #include #include -#include #include +#include #include "taler_util.h" #include "taler_signatures.h" -#define DIR_SIGNKEYS "signkeys" -#define DIR_DENOMKEYS "denomkeys" /** * For now, we just do EUR. Should become configurable @@ -41,31 +39,6 @@ */ #define MINT_CURRENCY "EUR" -/** - * On disk format used for a mint signing key. - * Includes the private key followed by the signed - * issue message. - */ -struct TALER_MINT_SignKeyIssuePriv -{ - struct GNUNET_CRYPTO_EddsaPrivateKey signkey_priv; - struct TALER_MINT_SignKeyIssue issue; -}; - - - -struct TALER_MINT_DenomKeyIssuePriv -{ - /** - * The private key of the denomination. Will be NULL if the private key is - * not available. - */ - struct GNUNET_CRYPTO_rsa_PrivateKey *denom_priv; - - struct TALER_MINT_DenomKeyIssue issue; -}; - - /** * Public information about a coin (including the public key @@ -357,77 +330,6 @@ struct Reserve -/** - * Iterator for sign keys. - * - * @param cls closure - * @param ski the sign key issue - * @return #GNUNET_OK to continue to iterate, - * #GNUNET_NO to stop iteration with no error, - * #GNUNET_SYSERR to abort iteration with error! - */ -typedef int -(*TALER_MINT_SignkeyIterator)(void *cls, - const struct TALER_MINT_SignKeyIssuePriv *ski); - -/** - * Iterator for denomination keys. - * - * @param cls closure - * @param dki the denomination key issue - * @param alias coin alias - * @return #GNUNET_OK to continue to iterate, - * #GNUNET_NO to stop iteration with no error, - * #GNUNET_SYSERR to abort iteration with error! - */ -typedef int -(*TALER_MINT_DenomkeyIterator)(void *cls, - const char *alias, - const struct TALER_MINT_DenomKeyIssuePriv *dki); - - - -/** - * FIXME - */ -int -TALER_MINT_signkeys_iterate (const char *mint_base_dir, - TALER_MINT_SignkeyIterator it, void *cls); - - -/** - * FIXME - */ -int -TALER_MINT_denomkeys_iterate (const char *mint_base_dir, - TALER_MINT_DenomkeyIterator it, void *cls); - - -/** - * Exports a denomination key to the given file - * - * @param filename the file where to write the denomination key - * @param dki the denomination key - * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure. - */ -int -TALER_MINT_write_denom_key (const char *filename, - const struct TALER_MINT_DenomKeyIssuePriv *dki); - - -/** - * Import a denomination key from the given file - * - * @param filename the file to import the key from - * @param dki pointer to return the imported denomination key - * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure - */ -int -TALER_MINT_read_denom_key (const char *filename, - struct TALER_MINT_DenomKeyIssuePriv *dki); - - - int TALER_TALER_DB_extract_amount (PGresult *result, unsigned int row, diff --git a/src/mint/taler-mint-httpd_keys.h b/src/mint/taler-mint-httpd_keys.h index 4182c25ea..eeeb21ef3 100644 --- a/src/mint/taler-mint-httpd_keys.h +++ b/src/mint/taler-mint-httpd_keys.h @@ -28,6 +28,8 @@ #include #include "taler-mint-httpd.h" #include "mint.h" +#include "key_io.h" + /** * Snapshot of the (coin and signing) diff --git a/src/mint/taler-mint-keycheck.c b/src/mint/taler-mint-keycheck.c index 09f59ab2f..c2deec0c2 100644 --- a/src/mint/taler-mint-keycheck.c +++ b/src/mint/taler-mint-keycheck.c @@ -25,6 +25,7 @@ #include #include "mint.h" #include "taler_signatures.h" +#include "key_io.h" static char *mintdir; diff --git a/src/mint/taler-mint-keyup.c b/src/mint/taler-mint-keyup.c index f8670eb97..03c66216b 100644 --- a/src/mint/taler-mint-keyup.c +++ b/src/mint/taler-mint-keyup.c @@ -27,6 +27,7 @@ #include "taler_util.h" #include "taler_signatures.h" #include "mint.h" +#include "key_io.h" /** * FIXME: allow user to specify (within reason).