remove testing API, we use gnunet-crypto-tvg instead
This commit is contained in:
parent
6d12045f8d
commit
d23dca7ceb
@ -81,12 +81,6 @@ taler_exchange_httpd_LDADD = \
|
|||||||
-lz \
|
-lz \
|
||||||
-lpthread
|
-lpthread
|
||||||
|
|
||||||
if HAVE_DEVELOPER
|
|
||||||
taler_exchange_httpd_SOURCES += \
|
|
||||||
taler-exchange-httpd_test.c taler-exchange-httpd_test.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# Testcases
|
# Testcases
|
||||||
|
|
||||||
AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export PATH=$${TALER_PREFIX:-@prefix@}/bin:$$PATH;
|
AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export PATH=$${TALER_PREFIX:-@prefix@}/bin:$$PATH;
|
||||||
|
@ -41,9 +41,6 @@
|
|||||||
#include "taler-exchange-httpd_track_transaction.h"
|
#include "taler-exchange-httpd_track_transaction.h"
|
||||||
#include "taler-exchange-httpd_keystate.h"
|
#include "taler-exchange-httpd_keystate.h"
|
||||||
#include "taler-exchange-httpd_wire.h"
|
#include "taler-exchange-httpd_wire.h"
|
||||||
#if HAVE_DEVELOPER
|
|
||||||
#include "taler-exchange-httpd_test.h"
|
|
||||||
#endif
|
|
||||||
#include "taler_exchangedb_plugin.h"
|
#include "taler_exchangedb_plugin.h"
|
||||||
#include "taler-exchange-httpd_validation.h"
|
#include "taler-exchange-httpd_validation.h"
|
||||||
|
|
||||||
@ -356,71 +353,6 @@ handle_mhd_request (void *cls,
|
|||||||
"Only GET is allowed", 0,
|
"Only GET is allowed", 0,
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
||||||
|
|
||||||
#if HAVE_DEVELOPER
|
|
||||||
/* Client crypto-interoperability test functions */
|
|
||||||
{ "/test", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test, MHD_HTTP_OK },
|
|
||||||
{ "/test", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/base32", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_base32, MHD_HTTP_OK },
|
|
||||||
{ "/test/base32", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/encrypt", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_encrypt, MHD_HTTP_OK },
|
|
||||||
{ "/test/encrypt", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/hkdf", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_hkdf, MHD_HTTP_OK },
|
|
||||||
{ "/test/hkdf", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/ecdhe", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_ecdhe, MHD_HTTP_OK },
|
|
||||||
{ "/test/ecdhe", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/eddsa", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_eddsa, MHD_HTTP_OK },
|
|
||||||
{ "/test/eddsa", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/rsa/get", MHD_HTTP_METHOD_GET, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_rsa_get, MHD_HTTP_OK },
|
|
||||||
{ "/test/rsa/get", NULL, "text/plain",
|
|
||||||
"Only GET is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/rsa/sign", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_rsa_sign, MHD_HTTP_OK },
|
|
||||||
{ "/test/rsa/sign", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
|
|
||||||
{ "/test/transfer", MHD_HTTP_METHOD_POST, "application/json",
|
|
||||||
NULL, 0,
|
|
||||||
&TEH_TEST_handler_test_transfer, MHD_HTTP_OK },
|
|
||||||
{ "/test/transfer", NULL, "text/plain",
|
|
||||||
"Only POST is allowed", 0,
|
|
||||||
&TEH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
|
||||||
#endif
|
|
||||||
{ NULL, NULL, NULL, NULL, 0, NULL, 0 }
|
{ NULL, NULL, NULL, NULL, 0, NULL, 0 }
|
||||||
};
|
};
|
||||||
static struct TEH_RequestHandler h404 = {
|
static struct TEH_RequestHandler h404 = {
|
||||||
|
@ -1,626 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of TALER
|
|
||||||
Copyright (C) 2015 GNUnet e.V.
|
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU Affero 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 Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License along with
|
|
||||||
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* @file taler-exchange-httpd_test.c
|
|
||||||
* @brief Handle /test requests; parses the POST and JSON and
|
|
||||||
* checks that the client is binary-compatible
|
|
||||||
* @author Christian Grothoff
|
|
||||||
*/
|
|
||||||
#include "platform.h"
|
|
||||||
#include <gnunet/gnunet_util_lib.h>
|
|
||||||
#include <gnunet/gnunet_json_lib.h>
|
|
||||||
#include <jansson.h>
|
|
||||||
#include <microhttpd.h>
|
|
||||||
#include "taler_mhd_lib.h"
|
|
||||||
#include "taler_signatures.h"
|
|
||||||
#include "taler-exchange-httpd_test.h"
|
|
||||||
#include "taler-exchange-httpd_responses.h"
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private key the test module uses for signing.
|
|
||||||
*/
|
|
||||||
static struct GNUNET_CRYPTO_RsaPrivateKey *rsa_pk;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/base32" request. Parses the JSON in the post, runs
|
|
||||||
* the Crockford Base32 decoder on the "input" field in the JSON,
|
|
||||||
* hashes the result and sends the hashed value back as a JSON
|
|
||||||
* string with in Base32 Crockford encoding. Thus, this API
|
|
||||||
* allows testing the hashing and Crockford encoding/decoding
|
|
||||||
* functions.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_base32 (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
void *in_ptr;
|
|
||||||
size_t in_ptr_size;
|
|
||||||
struct GNUNET_HashCode hc;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
|
||||||
GNUNET_JSON_spec_varsize ("input", &in_ptr, &in_ptr_size),
|
|
||||||
GNUNET_JSON_spec_end ()
|
|
||||||
};
|
|
||||||
|
|
||||||
(void) rh;
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
res = TALER_MHD_parse_json_data (connection,
|
|
||||||
json,
|
|
||||||
spec);
|
|
||||||
if (GNUNET_YES != res)
|
|
||||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
|
||||||
GNUNET_CRYPTO_hash (in_ptr,
|
|
||||||
in_ptr_size,
|
|
||||||
&hc);
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
json_decref (json);
|
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o}",
|
|
||||||
"output",
|
|
||||||
GNUNET_JSON_from_data_auto (&hc));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/encrypt" request. Parses the JSON in the post,
|
|
||||||
* runs the Crockford Base32 decoder on the "input" field in the JSON,
|
|
||||||
* and encrypts the result with a shared secret derived using the HKDF
|
|
||||||
* function with salt "skey" and IV derived with salt "iv" of the
|
|
||||||
* Crockford Base32-encoded "key_hash" field in the JSON. The
|
|
||||||
* symmetric encryption is the AES/Twofish double-encryption used in
|
|
||||||
* Taler/GNUnet. The resulting ciphertext is returned as a Crockford
|
|
||||||
* Base32 encoded JSON string.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_encrypt (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
struct GNUNET_HashCode key;
|
|
||||||
struct GNUNET_CRYPTO_SymmetricInitializationVector iv;
|
|
||||||
struct GNUNET_CRYPTO_SymmetricSessionKey skey;
|
|
||||||
void *in_ptr;
|
|
||||||
size_t in_ptr_size;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
|
||||||
GNUNET_JSON_spec_varsize ("input", &in_ptr, &in_ptr_size),
|
|
||||||
GNUNET_JSON_spec_fixed_auto ("key_hash", &key),
|
|
||||||
GNUNET_JSON_spec_end ()
|
|
||||||
};
|
|
||||||
char *out;
|
|
||||||
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
res = TALER_MHD_parse_json_data (connection,
|
|
||||||
json,
|
|
||||||
spec);
|
|
||||||
json_decref (json);
|
|
||||||
if (GNUNET_YES != res)
|
|
||||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
GNUNET_CRYPTO_kdf (&skey, sizeof (struct
|
|
||||||
GNUNET_CRYPTO_SymmetricSessionKey),
|
|
||||||
"skey", strlen ("skey"),
|
|
||||||
&key, sizeof (key),
|
|
||||||
NULL, 0));
|
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
GNUNET_CRYPTO_kdf (&iv, sizeof (struct
|
|
||||||
GNUNET_CRYPTO_SymmetricInitializationVector),
|
|
||||||
"iv", strlen ("iv"),
|
|
||||||
&key, sizeof (key),
|
|
||||||
NULL, 0));
|
|
||||||
out = GNUNET_malloc (in_ptr_size);
|
|
||||||
GNUNET_break (in_ptr_size ==
|
|
||||||
GNUNET_CRYPTO_symmetric_encrypt (in_ptr,
|
|
||||||
in_ptr_size,
|
|
||||||
&skey,
|
|
||||||
&iv,
|
|
||||||
out));
|
|
||||||
json = GNUNET_JSON_from_data (out,
|
|
||||||
in_ptr_size);
|
|
||||||
GNUNET_free (out);
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o}",
|
|
||||||
"output",
|
|
||||||
json);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/hkdf" request. Parses the JSON in the post, runs
|
|
||||||
* the Crockford Base32 decoder on the "input" field in the JSON,
|
|
||||||
* computes `HKDF(input, "salty")` and sends the result back as a JSON
|
|
||||||
* string with in Base32 Crockford encoding. Thus, this API allows
|
|
||||||
* testing the use of the (H)KDF. Note that the test fixes the
|
|
||||||
* input and output sizes and the salt (and the hash functions used
|
|
||||||
* by the HKDF), so this is only useful to test the HKDF in the
|
|
||||||
* same way it will be used within Taler/GNUnet.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_hkdf (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
struct GNUNET_HashCode hc;
|
|
||||||
void *in_ptr;
|
|
||||||
size_t in_ptr_size;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
|
||||||
GNUNET_JSON_spec_varsize ("input", &in_ptr, &in_ptr_size),
|
|
||||||
GNUNET_JSON_spec_end ()
|
|
||||||
};
|
|
||||||
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
res = TALER_MHD_parse_json_data (connection,
|
|
||||||
json,
|
|
||||||
spec);
|
|
||||||
json_decref (json);
|
|
||||||
if (GNUNET_YES != res)
|
|
||||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
GNUNET_CRYPTO_kdf (&hc, sizeof (hc),
|
|
||||||
"salty", strlen ("salty"),
|
|
||||||
in_ptr,
|
|
||||||
in_ptr_size,
|
|
||||||
NULL, 0));
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
json = GNUNET_JSON_from_data_auto (&hc);
|
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o}",
|
|
||||||
"output",
|
|
||||||
json);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/ecdhe" request. Parses the JSON in the post, which
|
|
||||||
* must contain a "ecdhe_pub" with a public key and an "ecdhe_priv"
|
|
||||||
* with a private key. The reply is the resulting JSON is an object
|
|
||||||
* with the field "ecdh_hash" containing a Crockford Base32-encoded
|
|
||||||
* string representing the hash derived via ECDH of the two keys.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_ecdhe (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
struct GNUNET_CRYPTO_EcdhePublicKey pub;
|
|
||||||
struct GNUNET_CRYPTO_EcdhePrivateKey priv;
|
|
||||||
struct GNUNET_HashCode hc;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
|
||||||
GNUNET_JSON_spec_fixed_auto ("ecdhe_pub", &pub),
|
|
||||||
GNUNET_JSON_spec_fixed_auto ("ecdhe_priv", &priv),
|
|
||||||
GNUNET_JSON_spec_end ()
|
|
||||||
};
|
|
||||||
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
res = TALER_MHD_parse_json_data (connection,
|
|
||||||
json,
|
|
||||||
spec);
|
|
||||||
json_decref (json);
|
|
||||||
if (GNUNET_YES != res)
|
|
||||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
|
||||||
if (GNUNET_OK !=
|
|
||||||
GNUNET_CRYPTO_ecc_ecdh (&priv,
|
|
||||||
&pub,
|
|
||||||
&hc))
|
|
||||||
{
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
return TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
|
||||||
TALER_EC_TEST_ECDH_ERROR,
|
|
||||||
"Failed to perform ECDH");
|
|
||||||
}
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o}",
|
|
||||||
"ecdh_hash",
|
|
||||||
GNUNET_JSON_from_data_auto (&hc));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/eddsa" request. Parses the JSON in the post,
|
|
||||||
* which must contain a "eddsa_pub" with a public key and an
|
|
||||||
*"eddsa_sig" with the corresponding signature for a purpose
|
|
||||||
* of #TALER_SIGNATURE_CLIENT_TEST_EDDSA. If the signature is
|
|
||||||
* valid, a reply with a #TALER_SIGNATURE_EXCHANGE_TEST_EDDSA is
|
|
||||||
* returned using the same JSON format.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_eddsa (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
struct GNUNET_CRYPTO_EddsaPublicKey pub;
|
|
||||||
struct GNUNET_CRYPTO_EddsaSignature sig;
|
|
||||||
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
|
||||||
GNUNET_JSON_spec_fixed_auto ("eddsa_pub", &pub),
|
|
||||||
GNUNET_JSON_spec_fixed_auto ("eddsa_sig", &sig),
|
|
||||||
GNUNET_JSON_spec_end ()
|
|
||||||
};
|
|
||||||
struct GNUNET_CRYPTO_EddsaPrivateKey *pk;
|
|
||||||
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
res = TALER_MHD_parse_json_data (connection,
|
|
||||||
json,
|
|
||||||
spec);
|
|
||||||
json_decref (json);
|
|
||||||
if (GNUNET_YES != res)
|
|
||||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
|
||||||
purpose.size = htonl (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose));
|
|
||||||
purpose.purpose = htonl (TALER_SIGNATURE_CLIENT_TEST_EDDSA);
|
|
||||||
if (GNUNET_OK !=
|
|
||||||
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_CLIENT_TEST_EDDSA,
|
|
||||||
&purpose,
|
|
||||||
&sig,
|
|
||||||
&pub))
|
|
||||||
{
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
return TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_FORBIDDEN,
|
|
||||||
TALER_EC_TEST_EDDSA_INVALID,
|
|
||||||
"eddsa_sig");
|
|
||||||
}
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
pk = GNUNET_CRYPTO_eddsa_key_create ();
|
|
||||||
purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_TEST_EDDSA);
|
|
||||||
if (GNUNET_OK !=
|
|
||||||
GNUNET_CRYPTO_eddsa_sign (pk,
|
|
||||||
&purpose,
|
|
||||||
&sig))
|
|
||||||
{
|
|
||||||
GNUNET_free (pk);
|
|
||||||
return TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
|
||||||
TALER_EC_TEST_EDDSA_ERROR,
|
|
||||||
"Failed to EdDSA-sign");
|
|
||||||
}
|
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (pk,
|
|
||||||
&pub);
|
|
||||||
GNUNET_free (pk);
|
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o, s:o}",
|
|
||||||
"eddsa_pub",
|
|
||||||
GNUNET_JSON_from_data_auto (&pub),
|
|
||||||
"eddsa_sig",
|
|
||||||
GNUNET_JSON_from_data_auto (&sig));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/rsa/get" request. Returns the RSA public key
|
|
||||||
* ("rsa_pub") which is used for signing in "/test/rsa/sign".
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_rsa_get (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
int res;
|
|
||||||
struct GNUNET_CRYPTO_RsaPublicKey *pub;
|
|
||||||
|
|
||||||
if (NULL == rsa_pk)
|
|
||||||
rsa_pk = GNUNET_CRYPTO_rsa_private_key_create (1024);
|
|
||||||
if (NULL == rsa_pk)
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
|
||||||
TALER_EC_TEST_RSA_GEN_ERROR,
|
|
||||||
"Failed to create RSA key");
|
|
||||||
}
|
|
||||||
pub = GNUNET_CRYPTO_rsa_private_key_get_public (rsa_pk);
|
|
||||||
if (NULL == pub)
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
|
||||||
TALER_EC_TEST_RSA_PUB_ERROR,
|
|
||||||
"Failed to get public RSA key");
|
|
||||||
}
|
|
||||||
res = TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o}",
|
|
||||||
"rsa_pub",
|
|
||||||
GNUNET_JSON_from_rsa_public_key (pub));
|
|
||||||
GNUNET_CRYPTO_rsa_public_key_free (pub);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/rsa/sign" request. Parses the JSON in the post, which
|
|
||||||
* must contain an "blind_ev" blinded value. A a blinded signature
|
|
||||||
* ("rsa_blind_sig") is returned.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_rsa_sign (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
struct GNUNET_CRYPTO_RsaSignature *sig;
|
|
||||||
void *in_ptr;
|
|
||||||
size_t in_ptr_size;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
|
||||||
GNUNET_JSON_spec_varsize ("blind_ev", &in_ptr, &in_ptr_size),
|
|
||||||
GNUNET_JSON_spec_end ()
|
|
||||||
};
|
|
||||||
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
res = TALER_MHD_parse_json_data (connection,
|
|
||||||
json,
|
|
||||||
spec);
|
|
||||||
json_decref (json);
|
|
||||||
if (GNUNET_YES != res)
|
|
||||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
|
||||||
if (NULL == rsa_pk)
|
|
||||||
rsa_pk = GNUNET_CRYPTO_rsa_private_key_create (1024);
|
|
||||||
if (NULL == rsa_pk)
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
return TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
|
||||||
TALER_EC_TEST_RSA_GEN_ERROR,
|
|
||||||
"Failed to create RSA key");
|
|
||||||
}
|
|
||||||
sig = GNUNET_CRYPTO_rsa_sign_blinded (rsa_pk,
|
|
||||||
in_ptr,
|
|
||||||
in_ptr_size);
|
|
||||||
if (NULL == sig)
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
return TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
|
||||||
TALER_EC_TEST_RSA_SIGN_ERROR,
|
|
||||||
"Failed to RSA-sign");
|
|
||||||
}
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
res = TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o}",
|
|
||||||
"rsa_blind_sig",
|
|
||||||
GNUNET_JSON_from_rsa_signature (sig));
|
|
||||||
GNUNET_CRYPTO_rsa_signature_free (sig);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/transfer" request. Parses the JSON in the post,
|
|
||||||
* which must contain a "secret_enc" with the encrypted link secret,
|
|
||||||
* a "trans_priv" with the transfer private key, a "coin_pub" with
|
|
||||||
* a coin public key. A reply with the decrypted "secret" is
|
|
||||||
* returned.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_transfer (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
struct TALER_TransferPrivateKeyP trans_priv;
|
|
||||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
|
||||||
GNUNET_JSON_spec_fixed_auto ("trans_priv", &trans_priv),
|
|
||||||
GNUNET_JSON_spec_fixed_auto ("coin_pub", &coin_pub),
|
|
||||||
GNUNET_JSON_spec_end ()
|
|
||||||
};
|
|
||||||
struct TALER_TransferSecretP secret;
|
|
||||||
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
res = TALER_MHD_parse_json_data (connection,
|
|
||||||
json,
|
|
||||||
spec);
|
|
||||||
json_decref (json);
|
|
||||||
if (GNUNET_YES != res)
|
|
||||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
|
||||||
TALER_link_reveal_transfer_secret (&trans_priv,
|
|
||||||
&coin_pub,
|
|
||||||
&secret);
|
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:o}",
|
|
||||||
"secret",
|
|
||||||
GNUNET_JSON_from_data_auto (&secret));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test" request. Parses the JSON in the post.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size)
|
|
||||||
{
|
|
||||||
json_t *json;
|
|
||||||
int res;
|
|
||||||
|
|
||||||
res = TALER_MHD_parse_post_json (connection,
|
|
||||||
connection_cls,
|
|
||||||
upload_data,
|
|
||||||
upload_data_size,
|
|
||||||
&json);
|
|
||||||
if (GNUNET_SYSERR == res)
|
|
||||||
return MHD_NO;
|
|
||||||
if ( (GNUNET_NO == res) || (NULL == json) )
|
|
||||||
return MHD_YES;
|
|
||||||
|
|
||||||
json_decref (json);
|
|
||||||
return MHD_NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* end of taler-exchange-httpd_test.c */
|
|
@ -1,225 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of TALER
|
|
||||||
Copyright (C) 2014 GNUnet e.V.
|
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU Affero 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 Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License along with
|
|
||||||
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* @file taler-exchange-httpd_test.h
|
|
||||||
* @brief Handle /test requests
|
|
||||||
* @author Christian Grothoff
|
|
||||||
*/
|
|
||||||
#ifndef TALER_EXCHANGE_HTTPD_TEST_H
|
|
||||||
#define TALER_EXCHANGE_HTTPD_TEST_H
|
|
||||||
|
|
||||||
#include <gnunet/gnunet_util_lib.h>
|
|
||||||
#include <microhttpd.h>
|
|
||||||
#include "taler-exchange-httpd.h"
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/base32" request. Parses the JSON in the post, runs
|
|
||||||
* the Crockford Base32 decoder on the "input" field in the JSON,
|
|
||||||
* hashes the result and sends the hashed value back as a JSON
|
|
||||||
* string with in Base32 Crockford encoding. Thus, this API
|
|
||||||
* allows testing the hashing and Crockford encoding/decoding
|
|
||||||
* functions.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_base32 (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/encrypt" request. Parses the JSON in the post,
|
|
||||||
* runs the Crockford Base32 decoder on the "input" field in the JSON,
|
|
||||||
* and encrypts the result with a shared secret derived using the HKDF
|
|
||||||
* function with salt "skey" and IV derived with salt "iv" of the
|
|
||||||
* Crockford Base32-encoded "key_hash" field in the JSON. The
|
|
||||||
* symmetric encryption is the AES/Twofish double-encryption used in
|
|
||||||
* Taler/GNUnet. The resulting ciphertext is returned as a Crockford
|
|
||||||
* Base32 encoded JSON string.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_encrypt (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/hkdf" request. Parses the JSON in the post, runs
|
|
||||||
* the Crockford Base32 decoder on the "input" field in the JSON,
|
|
||||||
* computes `HKDF(input, "salty")` and sends the result back as a JSON
|
|
||||||
* string with in Base32 Crockford encoding. Thus, this API allows
|
|
||||||
* testing the use of the (H)KDF. Note that the test fixes the
|
|
||||||
* input and output sizes and the salt (and the hash functions used
|
|
||||||
* by the HKDF), so this is only useful to test the HKDF in the
|
|
||||||
* same way it will be used within Taler/GNUnet.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_hkdf (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/ecdhe" request. Parses the JSON in the post, which
|
|
||||||
* must contain a "ecdhe_pub" with a public key and an "ecdhe_priv"
|
|
||||||
* with a private key. The reply is the resulting JSON is an object
|
|
||||||
* with the field "ecdh_hash" containing a Crockford Base32-encoded
|
|
||||||
* string representing the hash derived via ECDH of the two keys.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_ecdhe (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/eddsa" request. Parses the JSON in the post,
|
|
||||||
* which must contain a "eddsa_pub" with a public key and an
|
|
||||||
*"ecdsa_sig" with the corresponding signature for a purpose
|
|
||||||
* of #TALER_SIGNATURE_CLIENT_TEST_EDDSA. If the signature is
|
|
||||||
* valid, a reply with a #TALER_SIGNATURE_EXCHANGE_TEST_EDDSA is
|
|
||||||
* returned using the same JSON format.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_eddsa (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/rsa/get" request. Returns the RSA public key
|
|
||||||
* ("rsa_pub") which is used for signing in "/test/rsa/sign".
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_rsa_get (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/rsa/sign" request. Parses the JSON in the post, which
|
|
||||||
* must contain an "blind_ev" blinded value. A a blinded signature
|
|
||||||
* ("rsa_blind_sig") is returned.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_rsa_sign (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test/transfer" request. Parses the JSON in the post,
|
|
||||||
* which must contain a "secret_enc" with the encrypted link secret,
|
|
||||||
* a "trans_priv" with the transfer private key, a "coin_pub" with
|
|
||||||
* a coin public key. A reply with the decrypted "secret" is
|
|
||||||
* returned.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test_transfer (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle a "/test" request. Parses the JSON in the post.
|
|
||||||
*
|
|
||||||
* @param rh context of the handler
|
|
||||||
* @param connection the MHD connection to handle
|
|
||||||
* @param[in,out] connection_cls the connection's closure (can be updated)
|
|
||||||
* @param upload_data upload data
|
|
||||||
* @param[in,out] upload_data_size number of bytes (left) in @a upload_data
|
|
||||||
* @return MHD result code
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TEH_TEST_handler_test (struct TEH_RequestHandler *rh,
|
|
||||||
struct MHD_Connection *connection,
|
|
||||||
void **connection_cls,
|
|
||||||
const char *upload_data,
|
|
||||||
size_t *upload_data_size);
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue
Block a user