-commenting on code

This commit is contained in:
Christian Grothoff 2015-06-09 13:55:05 +02:00
parent d5f6b064f5
commit 4544a21cfb
7 changed files with 131 additions and 98 deletions

View File

@ -21,6 +21,14 @@
#ifndef TALER_AMOUNT_LIB_H
#define TALER_AMOUNT_LIB_H
#ifdef __cplusplus
extern "C"
{
#if 0 /* keep Emacsens' auto-indent happy */
}
#endif
#endif
/**
* @brief Number of characters (plus 1 for 0-termination) we use to
@ -249,5 +257,12 @@ TALER_amount_normalize (struct TALER_Amount *amount);
char *
TALER_amount_to_string (const struct TALER_Amount *amount);
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -25,6 +25,14 @@
#include "taler_crypto_lib.h"
#ifdef __cplusplus
extern "C"
{
#if 0 /* keep Emacsens' auto-indent happy */
}
#endif
#endif
/* Define logging functions */
#define TALER_LOG_DEBUG(...) \
@ -86,4 +94,12 @@ TALER_config_get_denom (struct GNUNET_CONFIGURATION_Handle *cfg,
struct TALER_Amount *denom);
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -59,7 +59,7 @@ test_mintdb_deposits_LDADD = \
$(top_srcdir)/src/pq/libtalerpq.la \
-lgnunetutil \
-ljansson \
-lpq
-lpq
test_mintdb_keyio_SOURCES = \
test_mintdb_keyio.c
@ -67,7 +67,7 @@ test_mintdb_keyio_LDADD = \
libtalermintdb.la \
$(top_srcdir)/src/util/libtalerutil.la \
$(top_srcdir)/src/pq/libtalerpq.la \
-lgnunetutil
-lgnunetutil
test_mintdb_postgres_SOURCES = \
test_mintdb.c

View File

@ -10,28 +10,35 @@
#define CURRENCY "EUR\0\0\0\0\0\0\0\0"
struct TALER_MINTDB_CollectableBlindcoin *
init_CollectableBlindcoin(){
struct TALER_MINTDB_CollectableBlindcoin *coin = GNUNET_malloc(sizeof(*coin));
struct GNUNET_CRYPTO_EddsaPrivateKey *reserve_sig_key = GNUNET_CRYPTO_eddsa_key_create();
struct GNUNET_CRYPTO_rsa_PrivateKey *denomination_key = GNUNET_CRYPTO_rsa_private_key_create(512);
init_CollectableBlindcoin ()
{
// indent by 2 spaces
struct TALER_MINTDB_CollectableBlindcoin *coin = GNUNET_new (*coin);
struct GNUNET_CRYPTO_EddsaPrivateKey *reserve_sig_key = GNUNET_CRYPTO_eddsa_key_create ();
struct GNUNET_CRYPTO_rsa_PrivateKey *denomination_key = GNUNET_CRYPTO_rsa_private_key_create (512);
coin->denom_pub.rsa_public_key = GNUNET_CRYPTO_rsa_private_key_get_public (denomination_key);
GNUNET_CRYPTO_eddsa_key_get_public (reserve_sig_key,
&coin->reserve_pub.eddsa_pub);
coin->denom_pub.rsa_public_key = GNUNET_CRYPTO_rsa_private_key_get_public(denomination_key);
GNUNET_CRYPTO_eddsa_key_get_public(reserve_sig_key, &(coin->reserve_pub.eddsa_pub));
//TODO Randomise the amount that is deposited and apply a fee subsequently
// GNUNET_assert (GNUNET_OK ==
// TALER_string_to_amount (CURRENCY ":1.1",
// &coin->amount_with_fee));
coin->amount_with_fee = (struct TALER_Amount) {1, 1, CURRENCY};
coin->withdraw_fee = (struct TALER_Amount) {0, 1, CURRENCY};
int random_int = rand();
int random_int = rand(); // GNUNET_CRYPTO_random_u32
coin->sig.rsa_signature = GNUNET_CRYPTO_rsa_sign(denomination_key, &random_int, sizeof(random_int));
GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK , &(coin->h_coin_envelope));
GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, &coin->h_coin_envelope);
void *purpose = GNUNET_malloc(sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose) + sizeof(int));
void *purpose = GNUNET_malloc (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose) + sizeof(int));
((struct GNUNET_CRYPTO_EccSignaturePurpose *)purpose)->size = sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose) + sizeof(int);
((struct GNUNET_CRYPTO_EccSignaturePurpose *)purpose)->purpose = GNUNET_SIGNATURE_PURPOSE_TEST;
*((int *)(purpose + sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose))) = random_int;
@ -39,7 +46,7 @@ init_CollectableBlindcoin(){
GNUNET_CRYPTO_eddsa_sign(reserve_sig_key, purpose, &coin->reserve_sig.eddsa_signature);
GNUNET_free(reserve_sig_key);
GNUNET_CRYPTO_rsa_private_key_free(denomination_key);
return coin;
@ -52,11 +59,11 @@ init_Reserve(){
struct GNUNET_CRYPTO_EddsaPrivateKey *reserve_priv = GNUNET_CRYPTO_eddsa_key_create();
GNUNET_CRYPTO_eddsa_key_get_public(reserve_priv , &(reserve->pub.eddsa_pub));
reserve->balance = (struct TALER_Amount){1, 1, CURRENCY};
reserve->expiry = GNUNET_TIME_absolute_get_forever_();
GNUNET_free(reserve_priv);
return reserve;
}
@ -82,7 +89,7 @@ init_Deposit(){
deposit-> transaction_id = transaction_id;
transaction_id++;
//TODO Randomize the amount that is deposited
@ -94,11 +101,11 @@ init_Deposit(){
GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, &deposit->h_contract);
GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, &deposit->h_wire);
// Coin Spend Signature
{
struct GNUNET_CRYPTO_EddsaSignature sig;
struct GNUNET_CRYPTO_EddsaPrivateKey *p_eddsa_prvt = GNUNET_CRYPTO_eddsa_key_create();
void *prp = GNUNET_malloc(sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose)+sizeof(int));
*((struct GNUNET_CRYPTO_EccSignaturePurpose *)prp) =(struct GNUNET_CRYPTO_EccSignaturePurpose) {sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose)+sizeof(int), GNUNET_SIGNATURE_PURPOSE_TEST};
@ -117,45 +124,45 @@ init_Deposit(){
struct GNUNET_CRYPTO_EddsaPrivateKey *p_eddsa_prv = GNUNET_CRYPTO_eddsa_key_create();
GNUNET_CRYPTO_eddsa_key_get_public(p_eddsa_prv, &eddsa_pub);
deposit->merchant_pub.eddsa_pub = eddsa_pub;
GNUNET_free(p_eddsa_prv);
}
// Coin
// Coin
{
{
struct GNUNET_CRYPTO_EddsaPublicKey eddsa_pub;
struct GNUNET_CRYPTO_EddsaPrivateKey *p_eddsa_prvt = GNUNET_CRYPTO_eddsa_key_create();
GNUNET_CRYPTO_eddsa_key_get_public(p_eddsa_prvt, &eddsa_pub);
deposit->coin.coin_pub.eddsa_pub = eddsa_pub;
GNUNET_free(p_eddsa_prvt);
}
{
struct GNUNET_CRYPTO_rsa_PrivateKey *p_rsa_prv = GNUNET_CRYPTO_rsa_private_key_create(128);
struct GNUNET_CRYPTO_rsa_PublicKey *p_rsa_pub = GNUNET_CRYPTO_rsa_private_key_get_public(p_rsa_prv);
deposit->coin.denom_pub.rsa_public_key = p_rsa_pub;
deposit->coin.denom_sig.rsa_signature = GNUNET_CRYPTO_rsa_sign(p_rsa_prv,
(void *) &(deposit->coin.coin_pub.eddsa_pub),
deposit->coin.denom_pub.rsa_public_key = p_rsa_pub;
deposit->coin.denom_sig.rsa_signature = GNUNET_CRYPTO_rsa_sign(p_rsa_prv,
(void *) &(deposit->coin.coin_pub.eddsa_pub),
sizeof(&(deposit->coin.coin_pub.eddsa_pub)));
GNUNET_CRYPTO_rsa_private_key_free(p_rsa_prv);
}
}
}
return deposit;
}
@ -173,7 +180,7 @@ init_denomination(){
GNUNET_CRYPTO_rsa_public_key_hash (dki->denom_pub.rsa_public_key,
&dki->issue.denom_hash);
struct GNUNET_CRYPTO_EddsaPrivateKey *master_prvt =
struct GNUNET_CRYPTO_EddsaPrivateKey *master_prvt =
GNUNET_CRYPTO_eddsa_key_create();
struct GNUNET_CRYPTO_EddsaPublicKey master_pub;
@ -225,7 +232,7 @@ int
free_deposit(struct TALER_MINTDB_Deposit *deposit){
GNUNET_free(deposit->coin.denom_pub.rsa_public_key);
GNUNET_free(deposit->coin.denom_sig.rsa_signature);
GNUNET_free(deposit);
return GNUNET_OK;
@ -249,10 +256,6 @@ free_denomination(struct TALER_MINTDB_DenominationKeyIssueInformation *dki){
GNUNET_free(dki->denom_pub.rsa_public_key);
GNUNET_free(dki);
return GNUNET_OK;
}

View File

@ -8,20 +8,20 @@
#include <taler/taler_mintdb_plugin.h>
#define CURRENCY "EUR\0\0\0\0\0\0\0\0"
#define CURRENCY "EUR"
struct TALER_MINTDB_CollectableBlindcoin *
init_collectableBlindcoin();
init_collectable_blindcoin(void);
struct TALER_MINTDB_RefreshSession *
init_refresh_session();
init_refresh_session(void);
struct TALER_MINTDB_Deposit *
init_deposit(int transaction_id);
struct TALER_MINTDB_DenominationKeyIssueInformation *
init_denomination();
init_denomination(void);
@ -29,9 +29,9 @@ int
free_deposit(struct TALER_MINTDB_Deposit *deposit);
int
free_collectableBlindcoin(struct TALER_MINTDB_CollectableBlindcoin);
free_collectable_blindcoin(struct TALER_MINTDB_CollectableBlindcoin *NAME);
int
int
free_denomination(struct TALER_MINTDB_DenominationKeyIssueInformation *dki);

View File

@ -8,26 +8,18 @@
/**
* Finds the first command in cmd with the name search
*
* \return the index of the first command with name search
* \return the index of the first command with name search
* GNUNET_SYSERR if none found
*/
static int
cmd_find(const struct PERF_TALER_MINTDB_CMD *cmd, const char *search)
{
int i = 0;
while (0)
{
if (cmd[i].command == CMD_END)
{
return GNUNET_SYSERR;
}
int i;
if (0 != strcmp(cmd[i].name, search))
{
for (i=0; CMD_END != cmd[i].command; i++)
if (0 == strcmp (cmd[i].name, search))
return i;
}
i++;
}
return GNUNET_SYSERR;
}
@ -36,22 +28,21 @@ cmd_find(const struct PERF_TALER_MINTDB_CMD *cmd, const char *search)
cmd_init(struct PERF_TALER_MINTDB_CMD cmd[])
{
int i = 0;
while (cmd[i].command != CMD_END)
while (CMD_END != cmd[i].command)
{
switch (cmd[i].command)
{
case CMD_SAVE_ARRAY:
// Initialization is done differently depending of the type saved
switch (cmd[i].details.save_array.saved_type)
switch (cmd[i].details.save_array.saved_type)
{
case DEPOSIT:
cmd[i].details.save_array.saved_data.deposit =
case DEPOSIT:
cmd[i].details.save_array.saved_data.deposit =
GNUNET_malloc(cmd[i].details.save_array.nb*
sizeof(*cmd[i].details.save_array.saved_data.deposit));
break;
case TIME:
cmd[i].details.save_array.saved_data.time =
cmd[i].details.save_array.saved_data.time =
GNUNET_malloc(cmd[i].details.save_array.nb*
sizeof(*cmd[i].details.save_array.saved_data.time));
@ -61,9 +52,9 @@ cmd_init(struct PERF_TALER_MINTDB_CMD cmd[])
break;
case CMD_LOAD_ARRAY:
cmd[i].details.load_array.permutation =
cmd[i].details.load_array.permutation =
GNUNET_CRYPTO_random_permute(
GNUNET_CRYPTO_QUALITY_WEAK,
GNUNET_CRYPTO_QUALITY_WEAK,
cmd[i].details.load_array.nb);
break;
default:
@ -129,7 +120,7 @@ cmd_clean(struct PERF_TALER_MINTDB_CMD cmd[])
/**
*
*
*/
static int
interprete(struct TALER_MINTDB_Plugin *db_plugin,
@ -142,7 +133,6 @@ interprete(struct TALER_MINTDB_Plugin *db_plugin,
{
case CMD_END:
return GNUNET_YES;
break;
case CMD_LOOP:
cmd[i].details.loop.curr_iteration++;
@ -171,7 +161,7 @@ interprete(struct TALER_MINTDB_Plugin *db_plugin,
default:
break;
}
}
}
}
}
@ -210,7 +200,7 @@ interprete(struct TALER_MINTDB_Plugin *db_plugin,
case CMD_INSERT_DEPOSIT:
{
struct TALER_MINTDB_Deposit *deposit = init_deposit(0);
db_plugin->insert_deposit(db_plugin->cls, session, deposit);
db_plugin->insert_deposit(db_plugin->cls, session, deposit);
cmd[i].exposed.deposit = deposit;
}
@ -238,8 +228,8 @@ interprete(struct TALER_MINTDB_Plugin *db_plugin,
int proba = cmd[loop_index].details.loop.max_iterations / cmd[i].details.save_array.nb;
int rnd = GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, proba);
// If there is a lesser or equal number of iteration next than room remain in the array
if ((cmd[loop_index].details.loop.max_iterations - cmd[loop_index].details.loop.curr_iteration <=
// If there is a lesser or equal number of iteration next than room remain in the array
if ((cmd[loop_index].details.loop.max_iterations - cmd[loop_index].details.loop.curr_iteration <=
cmd[i].details.save_array.nb - cmd[i].details.save_array.index) ||
(rnd == 0 && cmd[i].details.save_array.index < cmd[i].details.save_array.nb))
{
@ -247,11 +237,11 @@ interprete(struct TALER_MINTDB_Plugin *db_plugin,
// We automaticly save the whatever we need to
switch (cmd[i].details.save_array.saved_type){
case DEPOSIT:
cmd[i].details.save_array.saved_data.deposit[cmd[i].details.save_array.index] =
cmd[i].details.save_array.saved_data.deposit[cmd[i].details.save_array.index] =
cmd[cmd_find(cmd, cmd[i].details.save_array.saved)].exposed.deposit;
break;
case TIME:
cmd[i].details.save_array.saved_data.deposit[cmd[i].details.save_array.index] =
cmd[i].details.save_array.saved_data.deposit[cmd[i].details.save_array.index] =
cmd[cmd_find(cmd, cmd[i].details.save_array.saved)].exposed.deposit;
break;
}
@ -264,8 +254,8 @@ interprete(struct TALER_MINTDB_Plugin *db_plugin,
case CMD_LOAD_ARRAY:
{
int loop_index = cmd_find(cmd, cmd[i].details.load_array.loop);
int save_index = cmd_find(cmd, cmd[i].details.load_array.saved);
int loop_index = cmd_find(cmd, cmd[i].details.load_array.loop);
int save_index = cmd_find(cmd, cmd[i].details.load_array.saved);
switch (cmd[i].details.load_array.loaded_type){
case DEPOSIT:
cmd[i].exposed.deposit = cmd[save_index].details.save_array.saved_data.deposit[
@ -294,11 +284,11 @@ interprete(struct TALER_MINTDB_Plugin *db_plugin,
}
/**
* Runs the commands given in cmd, working with
* the database referenced by db_plugin
* Runs the commands given in @a cmd, working with
* the database referenced by @a db_plugin
*/
int
PERF_TALER_MINTDB_interprete(struct TALER_MINTDB_Plugin *db_plugin,
PERF_TALER_MINTDB_interprete(struct TALER_MINTDB_Plugin *db_plugin,
struct TALER_MINTDB_Session *session,
struct PERF_TALER_MINTDB_CMD cmd[])
{

View File

@ -8,12 +8,18 @@
#include <taler/taler_mintdb_plugin.h>
#define INIT_CMD_END(label) {.command = CMD_END, .name = label}
#define INIT_CMD_LOOP(label, _iter) {.command = CMD_LOOP, .name = label, .details.loop = {.max_iterations = _iter, .curr_iteration = -1} }
#define INIT_CMD_LOOP(label, _iter) { \
.command = CMD_LOOP, \
.name = label, \
.details.loop = { \
.max_iterations = _iter, \
.curr_iteration = -1} \
}
#define INIT_CMD_END_LOOP(label, _loopname) {.command = CMD_END_LOOP, .name = label, .details.end_loop.loop_start = _loopname}
#define INIT_CMD_END(label) {.command = CMD_END, .name = label}
#define INIT_CMD_GET_TIME(label) {.command = CMD_GET_TIME, .name = label}
@ -82,7 +88,7 @@ struct PERF_TALER_MINTDB_CMD{
} command;
char name[40];
const char *name; // label!
// Contains command specific data.
union {
@ -100,25 +106,28 @@ struct PERF_TALER_MINTDB_CMD{
char stop_time[40];
char description[40];
} gauger;
} gauger;
struct {
int nb; // Number of deposits to save
int index; // The number of deposits already saved
/**
* Comment!
*/
unsigned int nb; // Number of deposits to save
unsigned int index; // The number of deposits already saved
char loop[40]; // The loop from which the data will be extracted
char saved[40]; // The deposit saved
enum PERF_TALER_MINTDB_TYPE saved_type;
union {
struct TALER_MINTDB_Deposit **deposit;
struct timespec *time;
} saved_data;
union NAME_IT_TOP_LEVEL {
struct TALER_MINTDB_Deposit *deposit;
struct timespec time;
} *samples;
} save_array;
struct {
int nb; //the number of deposits to save
char loop[40];
char saved[40]; // The command where the deposit were saved
enum PERF_TALER_MINTDB_TYPE loaded_type;
enum PERF_TALER_MINTDB_TYPE loaded_type;
unsigned int *permutation; // A permutation array to randomize the order the deposits are loaded in
} load_array;
@ -128,10 +137,10 @@ struct PERF_TALER_MINTDB_CMD{
} details;
union {
union NAME_IT_TOP_LEVEL {
struct TALER_MINTDB_Deposit *deposit;
struct timespec time;
} exposed;
} exposed;
int exposed_used;
};
@ -140,7 +149,7 @@ struct PERF_TALER_MINTDB_CMD{
int
PERF_TALER_MINTDB_interprete(
struct TALER_MINTDB_Plugin *db_plugin,
struct TALER_MINTDB_Session *session,
struct TALER_MINTDB_Session *session, // add START_SESSION CMD
struct PERF_TALER_MINTDB_CMD cmd[]);