move key IO routines into aptly named files

This commit is contained in:
Christian Grothoff 2015-01-28 15:03:47 +01:00
parent b6154af448
commit 9cbc31afc4
7 changed files with 156 additions and 107 deletions

View File

@ -4,7 +4,7 @@ lib_LTLIBRARIES = \
libtalermint_common.la libtalermint_common.la
libtalermint_common_la_SOURCES = \ libtalermint_common_la_SOURCES = \
mint_common.c \ key_io.c key_io.h \
mint_db.c mint_db.c
libtalermint_common_la_LIBADD = \ libtalermint_common_la_LIBADD = \

View File

@ -15,15 +15,17 @@
*/ */
/** /**
* @file mint_common.c * @file key_io.c
* @brief Common functionality for the mint * @brief I/O operations for the Mint's private keys
* @author Florian Dold * @author Florian Dold
* @author Benedikt Mueller * @author Benedikt Mueller
* @author Sree Harsha Totakura * @author Sree Harsha Totakura
* @author Christian Grothoff
*/ */
#include "platform.h" #include "platform.h"
#include "mint.h" #include "mint.h"
#include "key_io.h"
struct SignkeysIterateContext struct SignkeysIterateContext
{ {
@ -201,8 +203,8 @@ static int
denomkeys_iterate_topdir_iter (void *cls, denomkeys_iterate_topdir_iter (void *cls,
const char *filename) const char *filename)
{ {
struct DenomkeysIterateContext *dic = cls; struct DenomkeysIterateContext *dic = cls;
dic->alias = GNUNET_STRINGS_get_short_name (filename); dic->alias = GNUNET_STRINGS_get_short_name (filename);
// FIXME: differentiate between error case and normal iteration abortion // FIXME: differentiate between error case and normal iteration abortion
@ -219,7 +221,9 @@ TALER_MINT_denomkeys_iterate (const char *mint_base_dir,
char *dir; char *dir;
size_t len; size_t len;
struct DenomkeysIterateContext dic; 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); mint_base_dir);
GNUNET_assert (len > 0); GNUNET_assert (len > 0);
@ -227,7 +231,9 @@ TALER_MINT_denomkeys_iterate (const char *mint_base_dir,
dic.it_cls = cls; dic.it_cls = cls;
// scan over alias dirs // 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);
} }

137
src/mint/key_io.h Normal file
View File

@ -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 <http://www.gnu.org/licenses/>
*/
/**
* @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 <gnunet/gnunet_util_lib.h>
#include <gnunet/gnunet_common.h>
#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

View File

@ -20,20 +20,18 @@
* @author Benedikt Mueller * @author Benedikt Mueller
* *
* TODO: * TODO:
* - revisit and document `struct Deposit` members. * - move DB functions to mint_db.h
*/ */
#ifndef _MINT_H #ifndef _MINT_H
#define _MINT_H #define _MINT_H
#include <gnunet/gnunet_util_lib.h> #include <gnunet/gnunet_util_lib.h>
#include <gnunet/gnunet_common.h> #include <gnunet/gnunet_common.h>
#include <libpq-fe.h>
#include <jansson.h> #include <jansson.h>
#include <libpq-fe.h>
#include "taler_util.h" #include "taler_util.h"
#include "taler_signatures.h" #include "taler_signatures.h"
#define DIR_SIGNKEYS "signkeys"
#define DIR_DENOMKEYS "denomkeys"
/** /**
* For now, we just do EUR. Should become configurable * For now, we just do EUR. Should become configurable
@ -41,31 +39,6 @@
*/ */
#define MINT_CURRENCY "EUR" #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 * 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 int
TALER_TALER_DB_extract_amount (PGresult *result, TALER_TALER_DB_extract_amount (PGresult *result,
unsigned int row, unsigned int row,

View File

@ -28,6 +28,8 @@
#include <jansson.h> #include <jansson.h>
#include "taler-mint-httpd.h" #include "taler-mint-httpd.h"
#include "mint.h" #include "mint.h"
#include "key_io.h"
/** /**
* Snapshot of the (coin and signing) * Snapshot of the (coin and signing)

View File

@ -25,6 +25,7 @@
#include <gnunet/gnunet_util_lib.h> #include <gnunet/gnunet_util_lib.h>
#include "mint.h" #include "mint.h"
#include "taler_signatures.h" #include "taler_signatures.h"
#include "key_io.h"
static char *mintdir; static char *mintdir;

View File

@ -27,6 +27,7 @@
#include "taler_util.h" #include "taler_util.h"
#include "taler_signatures.h" #include "taler_signatures.h"
#include "mint.h" #include "mint.h"
#include "key_io.h"
/** /**
* FIXME: allow user to specify (within reason). * FIXME: allow user to specify (within reason).