[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] branch master updated: RECLAIM: Tickets are now simply GNS name
From: |
gnunet |
Subject: |
[gnunet] branch master updated: RECLAIM: Tickets are now simply GNS names |
Date: |
Mon, 29 Apr 2024 15:27:00 +0200 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new 44c3fa30b RECLAIM: Tickets are now simply GNS names
44c3fa30b is described below
commit 44c3fa30b9250ad4875587018bab5362cc254f22
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Mon Apr 29 15:26:46 2024 +0200
RECLAIM: Tickets are now simply GNS names
---
src/cli/reclaim/gnunet-reclaim.c | 16 +-
src/include/gnunet_messenger_service.h | 7 +-
src/include/gnunet_reclaim_service.h | 56 ++---
src/service/messenger/messenger_api.c | 22 +-
src/service/messenger/messenger_api_message.c | 12 +-
src/service/messenger/messenger_api_message_kind.c | 7 +-
src/service/messenger/messenger_api_message_kind.h | 2 +-
src/service/reclaim/gnunet-service-reclaim.c | 68 ++----
.../reclaim/gnunet-service-reclaim_tickets.c | 227 +++++++++++----------
.../reclaim/gnunet-service-reclaim_tickets.h | 4 +-
src/service/reclaim/reclaim.h | 6 +
src/service/reclaim/reclaim_api.c | 104 ++--------
src/service/rest/json_reclaim.c | 46 ++---
src/service/rest/reclaim_plugin.c | 37 ++--
14 files changed, 252 insertions(+), 362 deletions(-)
diff --git a/src/cli/reclaim/gnunet-reclaim.c b/src/cli/reclaim/gnunet-reclaim.c
index 63152d478..38d29ac09 100644
--- a/src/cli/reclaim/gnunet-reclaim.c
+++ b/src/cli/reclaim/gnunet-reclaim.c
@@ -335,18 +335,9 @@ ticket_iter_fin (void *cls)
static void
-ticket_iter (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket)
+ticket_iter (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket, const
char* rp_uri)
{
- char *ref;
- char *tkt;
-
- ref = GNUNET_STRINGS_data_to_string_alloc (&ticket->rnd,
sizeof(ticket->rnd));
- tkt =
- GNUNET_STRINGS_data_to_string_alloc (ticket,
- sizeof(struct GNUNET_RECLAIM_Ticket));
- fprintf (stdout, "Ticket: %s | ID: %s | Audience: %s\n", tkt, ref,
ticket->rp_uri);
- GNUNET_free (ref);
- GNUNET_free (tkt);
+ fprintf (stdout, "Ticket: %s | RP URI: %s\n", ticket->gns_name, rp_uri);
GNUNET_RECLAIM_ticket_iteration_next (ticket_iterator);
}
@@ -843,7 +834,8 @@ main (int argc, char *const argv[])
GNUNET_GETOPT_option_string ('a',
"add",
"NAME",
- gettext_noop ("Add or update an attribute
NAME"),
+ gettext_noop (
+ "Add or update an attribute NAME"),
&attr_name),
GNUNET_GETOPT_option_string ('d',
"delete",
diff --git a/src/include/gnunet_messenger_service.h
b/src/include/gnunet_messenger_service.h
index 1bc68b87b..4b3d6e441 100644
--- a/src/include/gnunet_messenger_service.h
+++ b/src/include/gnunet_messenger_service.h
@@ -543,7 +543,7 @@ struct GNUNET_MESSENGER_MessageTicket
/**
* The identifier of a RECLAIM ticket.
*/
- struct GNUNET_RECLAIM_Identifier identifier;
+ struct GNUNET_RECLAIM_Ticket ticket;
};
/**
@@ -1018,13 +1018,16 @@ GNUNET_MESSENGER_iterate_members (struct
GNUNET_MESSENGER_Room *room,
* being used by the messenger. The audience's public key is not allowed to be
the
* anonymous public key. The room needs to contain a member using the
audience's public
* key.
+ * The <i>rp_uri</i> must contain the audience public key in SOME FORMAT TODO.
*
* @param[in,out] room Room handle
* @param[in] ticket Ticket to send
+ * @param[in] rp_uri The expected audience RP URI
*/
void
GNUNET_MESSENGER_send_ticket (struct GNUNET_MESSENGER_Room *room,
- const struct GNUNET_RECLAIM_Ticket *ticket);
+ const struct GNUNET_RECLAIM_Ticket *ticket,
+ const char* rp_uri);
#if 0 /* keep Emacsens' auto-indent happy */
{
diff --git a/src/include/gnunet_reclaim_service.h
b/src/include/gnunet_reclaim_service.h
index 08f3f60a3..15472fb9f 100644
--- a/src/include/gnunet_reclaim_service.h
+++ b/src/include/gnunet_reclaim_service.h
@@ -74,15 +74,23 @@ struct GNUNET_RECLAIM_Operation;
*/
struct GNUNET_RECLAIM_Ticket
{
+ /**
+ * The ticket. A GNS name ending in the
+ * zTLD for identity.
+ * Base32(rnd).zTLD(identity)
+ * 0-terminated string.
+ */
+ char gns_name[GNUNET_DNSPARSER_MAX_LABEL_LENGTH * 2 + 2];
+
/**
* The ticket issuer (= the user)
*/
- struct GNUNET_CRYPTO_PublicKey identity;
+ //struct GNUNET_CRYPTO_PublicKey identity;
/**
* The ticket random identifier
*/
- struct GNUNET_RECLAIM_Identifier rnd;
+ //struct GNUNET_RECLAIM_Identifier rnd;
/**
@@ -90,7 +98,7 @@ struct GNUNET_RECLAIM_Ticket
* 0-terminated string.
* Example:
"urn:gns:000G002B4RF1XPBXDPGZA0PT16BHQCS427YQK4NC84KZMK7TK8C2Z5GMK8"
*/
- char rp_uri[GNUNET_RECLAIM_TICKET_RP_URI_MAX_LEN];
+ //char rp_uri[GNUNET_RECLAIM_TICKET_RP_URI_MAX_LEN];
};
@@ -101,10 +109,12 @@ struct GNUNET_RECLAIM_Ticket
*
* @param cls closure
* @param ticket the ticket
+ * @param rp_uri the RP URI of the ticket
*/
typedef void (*GNUNET_RECLAIM_TicketCallback) (
void *cls,
- const struct GNUNET_RECLAIM_Ticket *ticket);
+ const struct GNUNET_RECLAIM_Ticket *ticket,
+ const char* rp_uri);
/**
* Method called when a token has been issued.
@@ -502,44 +512,6 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle
*h);
void
GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op);
-/**
- * Get serialized ticket size
- *
- * @param tkt the ticket
- * @return the buffer length requirement for a serialization
- */
-size_t
-GNUNET_RECLAIM_ticket_serialize_get_size (const struct GNUNET_RECLAIM_Ticket
*tkt);
-
-/**
- * Deserializes a ticket
- *
- * @param buffer the buffer to read from
- * @param len the length of the buffer
- * @param tkt the ticket to write to (must be allocated)
- * @param kb_read how many bytes were read from buffer
- * @return GNUNET_SYSERR on error
- */
-enum GNUNET_GenericReturnValue
-GNUNET_RECLAIM_read_ticket_from_buffer (const void *buffer,
- size_t len,
- struct GNUNET_RECLAIM_Ticket *tkt,
- size_t *tb_read);
-
-/**
- * Serializes a ticket
- *
- * @param tkt the ticket to serialize
- * @param buffer the buffer to serialize to (must be allocated with sufficient
size
- * @param len the length of the buffer
- * @return the number of written bytes or < 0 on error
- */
-ssize_t
-GNUNET_RECLAIM_write_ticket_to_buffer (const struct
- GNUNET_RECLAIM_Ticket *tkt,
- void *buffer,
- size_t len);
-
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif
diff --git a/src/service/messenger/messenger_api.c
b/src/service/messenger/messenger_api.c
index 0778d3a48..80cea2b65 100644
--- a/src/service/messenger/messenger_api.c
+++ b/src/service/messenger/messenger_api.c
@@ -1247,7 +1247,7 @@ check_ticket_audience (void *cls,
char *key_str;
key = get_non_anonymous_key (get_contact_key (contact));
- key_str = GNUNET_CRYPTO_public_key_to_string(key);
+ key_str = GNUNET_CRYPTO_public_key_to_string (key);
GNUNET_snprintf (check_rp, GNUNET_RECLAIM_TICKET_RP_URI_MAX_LEN, "%s%s",
GNUNET_RECLAIM_TICKET_RP_URI_URN_PREFIX, key_str);
GNUNET_free (key_str);
@@ -1262,17 +1262,27 @@ check_ticket_audience (void *cls,
}
+// FIXME: Either passt the RP URI here or the key itself. DISCUSS!
void
GNUNET_MESSENGER_send_ticket (struct GNUNET_MESSENGER_Room *room,
- const struct GNUNET_RECLAIM_Ticket *ticket)
+ const struct GNUNET_RECLAIM_Ticket *ticket,
+ const char*rp_uri)
{
if ((! room) || (! ticket))
return;
const struct GNUNET_CRYPTO_PublicKey *pubkey;
- pubkey = get_handle_pubkey (room->handle);
+ struct GNUNET_CRYPTO_PublicKey iss;
+ char *tmp;
+ char *key;
- if (0 != GNUNET_memcmp (pubkey, &(ticket->identity)))
+ pubkey = get_handle_pubkey (room->handle);
+ tmp = GNUNET_strdup (ticket->gns_name);
+ GNUNET_assert (NULL != strtok (tmp, "."));
+ key = strtok (NULL, ".");
+ GNUNET_assert (NULL != key);
+ GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_public_key_from_string (key,
&iss));
+ if (0 != GNUNET_memcmp (pubkey, &iss))
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Sending ticket aborted: Invalid identity!\n");
@@ -1280,7 +1290,7 @@ GNUNET_MESSENGER_send_ticket (struct
GNUNET_MESSENGER_Room *room,
}
struct GNUNET_MESSENGER_CheckTicket check;
- check.check_rp = ticket->rp_uri;
+ check.check_rp = rp_uri;
check.result = GNUNET_NO;
const int members = iterate_room_members (
@@ -1296,7 +1306,7 @@ GNUNET_MESSENGER_send_ticket (struct
GNUNET_MESSENGER_Room *room,
}
struct GNUNET_MESSENGER_Message *message = create_message_ticket (
- &(ticket->rnd)
+ ticket
);
if (! message)
diff --git a/src/service/messenger/messenger_api_message.c
b/src/service/messenger/messenger_api_message.c
index 68b6c7d20..d42e799ab 100644
--- a/src/service/messenger/messenger_api_message.c
+++ b/src/service/messenger/messenger_api_message.c
@@ -296,7 +296,7 @@ get_message_body_kind_size (enum
GNUNET_MESSENGER_MessageKind kind)
break;
case GNUNET_MESSENGER_KIND_TICKET:
length += member_size (struct GNUNET_MESSENGER_Message,
- body.ticket.identifier);
+ body.ticket.ticket);
break;
case GNUNET_MESSENGER_KIND_TRANSCRIPT:
length += member_size (struct GNUNET_MESSENGER_Message,
@@ -510,7 +510,8 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind kind,
if (body->name.name)
encode_step_ext (buffer, offset, body->name.name, min (length - offset,
strlen (
-
body->name.name)));
+
body->name.name))
+ );
break;
case GNUNET_MESSENGER_KIND_KEY:
encode_step_key (buffer, offset, &(body->key.key), length);
@@ -538,7 +539,8 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind kind,
if (body->text.text)
encode_step_ext (buffer, offset, body->text.text, min (length - offset,
strlen (
-
body->text.text)));
+
body->text.text))
+ );
break;
case GNUNET_MESSENGER_KIND_FILE:
encode_step (buffer, offset, &(body->file.key));
@@ -567,7 +569,7 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind kind,
encode_step (buffer, offset, &value1);
break;
case GNUNET_MESSENGER_KIND_TICKET:
- encode_step (buffer, offset, &(body->ticket.identifier));
+ encode_step (buffer, offset, &(body->ticket.ticket));
break;
case GNUNET_MESSENGER_KIND_TRANSCRIPT:
encode_step (buffer, offset, &(body->transcript.hash));
@@ -780,7 +782,7 @@ decode_message_body (enum GNUNET_MESSENGER_MessageKind
*kind,
body->connection.flags = GNUNET_be32toh (value1);
break;
case GNUNET_MESSENGER_KIND_TICKET:
- decode_step (buffer, offset, &(body->ticket.identifier));
+ decode_step (buffer, offset, &(body->ticket.ticket));
break;
case GNUNET_MESSENGER_KIND_TRANSCRIPT:
decode_step (buffer, offset, &(body->transcript.hash));
diff --git a/src/service/messenger/messenger_api_message_kind.c
b/src/service/messenger/messenger_api_message_kind.c
index 33338af9d..bcec21cf7 100644
--- a/src/service/messenger/messenger_api_message_kind.c
+++ b/src/service/messenger/messenger_api_message_kind.c
@@ -190,9 +190,9 @@ create_message_delete (const struct GNUNET_HashCode *hash,
struct GNUNET_MESSENGER_Message*
-create_message_ticket (const struct GNUNET_RECLAIM_Identifier *identifier)
+create_message_ticket (const struct GNUNET_RECLAIM_Ticket *ticket)
{
- if (! identifier)
+ if (! ticket)
return NULL;
struct GNUNET_MESSENGER_Message *message = create_message (
@@ -201,8 +201,7 @@ create_message_ticket (const struct
GNUNET_RECLAIM_Identifier *identifier)
if (! message)
return NULL;
- GNUNET_memcpy (&(message->body.ticket.identifier), identifier,
- sizeof(struct GNUNET_RECLAIM_Identifier));
+ message->body.ticket.ticket = *ticket;
return message;
}
diff --git a/src/service/messenger/messenger_api_message_kind.h
b/src/service/messenger/messenger_api_message_kind.h
index a5bb12947..574cdf939 100644
--- a/src/service/messenger/messenger_api_message_kind.h
+++ b/src/service/messenger/messenger_api_message_kind.h
@@ -134,6 +134,6 @@ create_message_delete (const struct GNUNET_HashCode *hash,
* @return New message
*/
struct GNUNET_MESSENGER_Message*
-create_message_ticket (const struct GNUNET_RECLAIM_Identifier *identifier);
+create_message_ticket (const struct GNUNET_RECLAIM_Ticket *ticket);
#endif //GNUNET_MESSENGER_API_MESSAGE_KIND_H
diff --git a/src/service/reclaim/gnunet-service-reclaim.c
b/src/service/reclaim/gnunet-service-reclaim.c
index a9a427d90..f5762c83d 100644
--- a/src/service/reclaim/gnunet-service-reclaim.c
+++ b/src/service/reclaim/gnunet-service-reclaim.c
@@ -655,7 +655,6 @@ send_ticket_result (const struct IdpClient *client,
struct GNUNET_MQ_Envelope *env;
size_t pres_len = 0;
size_t tkt_len = 0;
- ssize_t written;
char *buf;
if (NULL != presentations)
@@ -664,20 +663,20 @@ send_ticket_result (const struct IdpClient *client,
GNUNET_RECLAIM_presentation_list_serialize_get_size (presentations);
}
if (NULL != ticket)
- tkt_len = GNUNET_RECLAIM_ticket_serialize_get_size (ticket);
+ tkt_len = strlen (ticket->gns_name) + 1;
env = GNUNET_MQ_msg_extra (irm,
pres_len + tkt_len,
GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT);
buf = (char*) &irm[1];
if (NULL != ticket)
{
- written = GNUNET_RECLAIM_write_ticket_to_buffer (ticket, buf, tkt_len);
- GNUNET_assert (0 <= written);
- buf += written;
+ memcpy (buf, ticket, tkt_len);
+ buf += tkt_len;
}
// TODO add success member
irm->id = htonl (r_id);
irm->tkt_len = htons (tkt_len);
+ irm->rp_uri_len = htons (0);
irm->presentations_len = htons (pres_len);
if (NULL != presentations)
{
@@ -884,9 +883,8 @@ handle_revoke_ticket_message (void *cls, const struct
RevokeTicketMessage *rm)
struct TicketRevocationOperation *rop;
struct IdpClient *idp = cls;
struct GNUNET_CRYPTO_PrivateKey identity;
- struct GNUNET_RECLAIM_Ticket ticket;
+ struct GNUNET_RECLAIM_Ticket *ticket;
size_t key_len;
- size_t tkt_len;
size_t read;
char *buf;
@@ -904,23 +902,13 @@ handle_revoke_ticket_message (void *cls, const struct
RevokeTicketMessage *rm)
return;
}
buf += read;
- tkt_len = ntohs (rm->tkt_len);
- if ((GNUNET_SYSERR ==
- GNUNET_RECLAIM_read_ticket_from_buffer (buf, tkt_len,
- &ticket, &read)) ||
- (read != tkt_len))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to read ticket\n");
- GNUNET_SERVICE_client_drop (idp->client);
- return;
- }
+ ticket = (struct GNUNET_RECLAIM_Ticket *) buf;
rop = GNUNET_new (struct TicketRevocationOperation);
rop->r_id = ntohl (rm->id);
rop->client = idp;
GNUNET_CONTAINER_DLL_insert (idp->revoke_op_head, idp->revoke_op_tail, rop);
rop->rh
- = RECLAIM_TICKETS_revoke (&ticket, &identity, &revoke_result_cb, rop);
+ = RECLAIM_TICKETS_revoke (ticket, &identity, &revoke_result_cb, rop);
GNUNET_SERVICE_client_continue (idp->client);
}
@@ -1018,29 +1006,17 @@ handle_consume_ticket_message (void *cls, const struct
ConsumeTicketMessage *cm)
{
struct ConsumeTicketOperation *cop;
struct IdpClient *idp = cls;
- struct GNUNET_RECLAIM_Ticket ticket;
- size_t tkt_len;
- size_t read;
+ struct GNUNET_RECLAIM_Ticket *ticket;
char *buf;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received CONSUME_TICKET message\n");
- tkt_len = ntohs (cm->tkt_len);
buf = (char*) &cm[1];
- if ((GNUNET_SYSERR ==
- GNUNET_RECLAIM_read_ticket_from_buffer (buf, tkt_len,
- &ticket, &read)) ||
- (read != tkt_len))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to read ticket\n");
- GNUNET_SERVICE_client_drop (idp->client);
- return;
- }
+ ticket = (struct GNUNET_RECLAIM_Ticket *) buf;
cop = GNUNET_new (struct ConsumeTicketOperation);
cop->r_id = ntohl (cm->id);
cop->client = idp;
cop->ch
- = RECLAIM_TICKETS_consume (&ticket, &consume_result_cb,
+ = RECLAIM_TICKETS_consume (ticket, &consume_result_cb,
cop);
GNUNET_CONTAINER_DLL_insert (idp->consume_op_head, idp->consume_op_tail,
cop);
GNUNET_SERVICE_client_continue (idp->client);
@@ -2462,27 +2438,27 @@ handle_credential_iteration_next (void *cls,
* Ticket iteration
******************************************************/
-/**
- * Got a ticket. Return to client
- *
- * @param cls our ticket iterator
- * @param ticket the ticket
- */
static void
-ticket_iter_cb (void *cls, struct GNUNET_RECLAIM_Ticket *ticket)
+ticket_iter_cb (void *cls, struct GNUNET_RECLAIM_Ticket *ticket, const char*
+ rp_uri)
{
struct TicketIteration *ti = cls;
struct GNUNET_MQ_Envelope *env;
struct TicketResultMessage *trm;
size_t tkt_len;
+ size_t rp_uri_len;
if (NULL == ticket)
tkt_len = 0;
else
- tkt_len = GNUNET_RECLAIM_ticket_serialize_get_size (ticket);
+ tkt_len = strlen (ticket->gns_name) + 1;
+ if (NULL == rp_uri)
+ rp_uri_len = 0;
+ else
+ rp_uri_len = strlen (rp_uri) + 1;
env = GNUNET_MQ_msg_extra (trm,
- tkt_len,
+ tkt_len + rp_uri_len,
GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT);
if (NULL == ticket)
{
@@ -2493,13 +2469,13 @@ ticket_iter_cb (void *cls, struct GNUNET_RECLAIM_Ticket
*ticket)
}
else
{
- GNUNET_RECLAIM_write_ticket_to_buffer (ticket,
- &trm[1],
- tkt_len);
+ memcpy (&trm[1], ticket, tkt_len);
}
+ memcpy ((char*) &trm[1] + tkt_len, rp_uri, rp_uri_len);
trm->id = htonl (ti->r_id);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending TICKET_RESULT message\n");
trm->tkt_len = htons (tkt_len);
+ trm->rp_uri_len = htons (rp_uri_len);
trm->presentations_len = htons (0);
GNUNET_MQ_send (ti->client->mq, env);
if (NULL == ticket)
diff --git a/src/service/reclaim/gnunet-service-reclaim_tickets.c
b/src/service/reclaim/gnunet-service-reclaim_tickets.c
index 7099fa80f..fcedc07ff 100644
--- a/src/service/reclaim/gnunet-service-reclaim_tickets.c
+++ b/src/service/reclaim/gnunet-service-reclaim_tickets.c
@@ -26,6 +26,7 @@
*/
#include "gnunet-service-reclaim_tickets.h"
#include "gnunet_common.h"
+#include "gnunet_reclaim_service.h"
#include <string.h>
@@ -82,7 +83,7 @@ struct RECLAIM_TICKETS_ConsumeHandle
/**
* LookupRequest
*/
- struct GNUNET_GNS_LookupRequest *lookup_request;
+ struct GNUNET_GNS_LookupWithTldRequest *lookup_request;
/**
* Lookup DLL
@@ -123,6 +124,13 @@ struct RECLAIM_TICKETS_ConsumeHandle
* Callback closure
*/
void *cb_cls;
+
+ /**
+ * The ticket audience (= relying party) URI.
+ * 0-terminated string.
+ * Example:
"urn:gns:000G002B4RF1XPBXDPGZA0PT16BHQCS427YQK4NC84KZMK7TK8C2Z5GMK8"
+ */
+ char rp_uri[GNUNET_RECLAIM_TICKET_RP_URI_MAX_LEN];
};
@@ -138,7 +146,7 @@ struct ParallelLookup
struct ParallelLookup *prev;
/* The GNS request */
- struct GNUNET_GNS_LookupRequest *lookup_request;
+ struct GNUNET_GNS_LookupWithTldRequest *lookup_request;
/* The handle the return to */
struct RECLAIM_TICKETS_ConsumeHandle *handle;
@@ -197,6 +205,18 @@ struct TicketIssueHandle
* Callback cls
*/
void *cb_cls;
+
+ /**
+ * The ticket audience (= relying party) URI.
+ * 0-terminated string.
+ * Example:
"urn:gns:000G002B4RF1XPBXDPGZA0PT16BHQCS427YQK4NC84KZMK7TK8C2Z5GMK8"
+ */
+ char rp_uri[GNUNET_RECLAIM_TICKET_RP_URI_MAX_LEN];
+
+ /**
+ * The ticket random identifier
+ */
+ struct GNUNET_RECLAIM_Identifier rnd;
};
@@ -886,6 +906,26 @@ rvk_attrs_err_cb (void *cls)
}
+static enum GNUNET_GenericReturnValue
+get_iss_from_ticket (const struct GNUNET_RECLAIM_Ticket *ticket,
+ struct GNUNET_CRYPTO_PublicKey *issuer)
+{
+ char *label;
+ char *key;
+ char *tmp;
+ int ret;
+
+ tmp = GNUNET_strdup (ticket->gns_name);
+ label = strtok (tmp, ".");
+ GNUNET_assert (NULL != label);
+ key = strtok (NULL, ".");
+ GNUNET_assert (NULL != key);
+ ret = GNUNET_CRYPTO_public_key_from_string (key, issuer);
+ GNUNET_free (tmp);
+ return ret;
+}
+
+
/**
* Revoke a ticket.
* We start by looking up attribute references in order
@@ -905,17 +945,17 @@ RECLAIM_TICKETS_revoke (const struct
GNUNET_RECLAIM_Ticket *ticket,
{
struct RECLAIM_TICKETS_RevokeHandle *rvk;
char *label;
+ char *tmp;
rvk = GNUNET_new (struct RECLAIM_TICKETS_RevokeHandle);
rvk->cb = cb;
rvk->cb_cls = cb_cls;
rvk->identity = *identity;
rvk->ticket = *ticket;
- GNUNET_CRYPTO_key_get_public (&rvk->identity, &rvk->ticket.identity);
- /** Get shared attributes **/
- label = GNUNET_STRINGS_data_to_string_alloc (&ticket->rnd,
- sizeof(ticket->rnd));
+ tmp = GNUNET_strdup (ticket->gns_name);
+ label = strtok (tmp, ".");
GNUNET_assert (NULL != label);
+ /** Get shared attributes **/
rvk->ns_qe = GNUNET_NAMESTORE_records_lookup (nsh,
identity,
label,
@@ -923,7 +963,7 @@ RECLAIM_TICKETS_revoke (const struct GNUNET_RECLAIM_Ticket
*ticket,
rvk,
&revoke_attrs_cb,
rvk);
- GNUNET_free (label);
+ GNUNET_free (tmp);
return rvk;
}
@@ -956,13 +996,13 @@ cleanup_cth (struct RECLAIM_TICKETS_ConsumeHandle *cth)
struct ParallelLookup *lu;
if (NULL != cth->lookup_request)
- GNUNET_GNS_lookup_cancel (cth->lookup_request);
+ GNUNET_GNS_lookup_with_tld_cancel (cth->lookup_request);
if (NULL != cth->kill_task)
GNUNET_SCHEDULER_cancel (cth->kill_task);
while (NULL != (lu = cth->parallel_lookups_head))
{
if (NULL != lu->lookup_request)
- GNUNET_GNS_lookup_cancel (lu->lookup_request);
+ GNUNET_GNS_lookup_with_tld_cancel (lu->lookup_request);
GNUNET_free (lu->label);
GNUNET_CONTAINER_DLL_remove (cth->parallel_lookups_head,
cth->parallel_lookups_tail,
@@ -978,26 +1018,22 @@ cleanup_cth (struct RECLAIM_TICKETS_ConsumeHandle *cth)
}
-/**
- * We found an attribute record.
- *
- * @param cls handle to the operation
- * @param rd_count size of record set
- * @param rd record set
- */
static void
process_parallel_lookup_result (void *cls,
+ int is_gns,
uint32_t rd_count,
const struct GNUNET_GNSRECORD_Data *rd)
{
struct ParallelLookup *parallel_lookup = cls;
struct RECLAIM_TICKETS_ConsumeHandle *cth = parallel_lookup->handle;
struct GNUNET_RECLAIM_AttributeListEntry *attr_le;
+ struct GNUNET_CRYPTO_PublicKey iss;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Parallel lookup finished (count=%u)\n",
rd_count);
+ GNUNET_assert (GNUNET_YES == is_gns);
GNUNET_CONTAINER_DLL_remove (cth->parallel_lookups_head,
cth->parallel_lookups_tail,
parallel_lookup);
@@ -1030,7 +1066,8 @@ process_parallel_lookup_result (void *cls,
if (NULL != cth->parallel_lookups_head)
return; // Wait for more
/* Else we are done */
- cth->cb (cth->cb_cls, &cth->ticket.identity,
+ get_iss_from_ticket (&cth->ticket, &iss);
+ cth->cb (cth->cb_cls, &iss,
cth->attrs, cth->presentations, GNUNET_OK, NULL);
cleanup_cth (cth);
}
@@ -1051,7 +1088,7 @@ abort_parallel_lookups (void *cls)
cth->kill_task = NULL;
for (lu = cth->parallel_lookups_head; NULL != lu;)
{
- GNUNET_GNS_lookup_cancel (lu->lookup_request);
+ GNUNET_GNS_lookup_with_tld_cancel (lu->lookup_request);
GNUNET_free (lu->label);
tmp = lu->next;
GNUNET_CONTAINER_DLL_remove (cth->parallel_lookups_head,
@@ -1064,21 +1101,14 @@ abort_parallel_lookups (void *cls)
}
-/**
- * GNS result with attribute references.
- * For each result, we start a (parallel) lookup of the actual
- * attribute record under the referenced label.
- *
- * @param cls handle to the operation
- * @param rd_count size of the record set
- * @param rd record set
- */
static void
lookup_authz_cb (void *cls,
+ int is_gns,
uint32_t rd_count,
const struct GNUNET_GNSRECORD_Data *rd)
{
struct RECLAIM_TICKETS_ConsumeHandle *cth = cls;
+ struct GNUNET_CRYPTO_PublicKey iss;
struct ParallelLookup *parallel_lookup;
const char *rp_uri = NULL;
char *lbl;
@@ -1086,6 +1116,7 @@ lookup_authz_cb (void *cls,
cth->lookup_request = NULL;
+ GNUNET_assert (GNUNET_YES == is_gns);
GNUNET_STATISTICS_update (stats,
"reclaim_authz_lookup_time_total",
GNUNET_TIME_absolute_get_duration (
@@ -1125,13 +1156,12 @@ lookup_authz_cb (void *cls,
parallel_lookup->label = lbl;
parallel_lookup->lookup_start_time = GNUNET_TIME_absolute_get ();
parallel_lookup->lookup_request =
- GNUNET_GNS_lookup (gns,
- lbl,
- &cth->ticket.identity,
- GNUNET_GNSRECORD_TYPE_ANY,
- GNUNET_GNS_LO_DEFAULT,
- &process_parallel_lookup_result,
- parallel_lookup);
+ GNUNET_GNS_lookup_with_tld (gns,
+ cth->ticket.gns_name,
+ GNUNET_GNSRECORD_TYPE_ANY,
+ GNUNET_GNS_LO_DEFAULT,
+ &process_parallel_lookup_result,
+ parallel_lookup);
GNUNET_CONTAINER_DLL_insert (cth->parallel_lookups_head,
cth->parallel_lookups_tail,
parallel_lookup);
@@ -1148,20 +1178,22 @@ lookup_authz_cb (void *cls,
/**
* Return error
*/
- cth->cb (cth->cb_cls, &cth->ticket.identity,
+ get_iss_from_ticket (&cth->ticket, &iss);
+ cth->cb (cth->cb_cls, &iss,
cth->attrs, NULL, GNUNET_NO, NULL);
cleanup_cth (cth);
return;
}
- if (0 != strcmp (rp_uri, cth->ticket.rp_uri))
+ if (0 != strcmp (rp_uri, cth->rp_uri))
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"RP URI does not match consume request: `%s' != `%s'\n",
- rp_uri, cth->ticket.rp_uri);
+ rp_uri, cth->rp_uri);
/**
* Return error
*/
- cth->cb (cth->cb_cls, &cth->ticket.identity,
+ get_iss_from_ticket (&cth->ticket, &iss);
+ cth->cb (cth->cb_cls, &iss,
cth->attrs, NULL, GNUNET_NO, NULL);
cleanup_cth (cth);
return;
@@ -1181,7 +1213,8 @@ lookup_authz_cb (void *cls,
/**
* No references found, return empty attribute list
*/
- cth->cb (cth->cb_cls, &cth->ticket.identity,
+ get_iss_from_ticket (&cth->ticket, &iss);
+ cth->cb (cth->cb_cls, &iss,
cth->attrs, NULL, GNUNET_OK, NULL);
cleanup_cth (cth);
}
@@ -1205,6 +1238,7 @@ RECLAIM_TICKETS_consume (const struct
GNUNET_RECLAIM_Ticket *ticket,
{
struct RECLAIM_TICKETS_ConsumeHandle *cth;
char *label;
+ char *tmp;
cth = GNUNET_new (struct RECLAIM_TICKETS_ConsumeHandle);
@@ -1213,24 +1247,21 @@ RECLAIM_TICKETS_consume (const struct
GNUNET_RECLAIM_Ticket *ticket,
cth->ticket = *ticket;
cth->cb = cb;
cth->cb_cls = cb_cls;
- label =
- GNUNET_STRINGS_data_to_string_alloc (&cth->ticket.rnd,
- sizeof(cth->ticket.rnd));
- char *str = GNUNET_CRYPTO_public_key_to_string (&cth->ticket.identity);
+ tmp = GNUNET_strdup (ticket->gns_name);
+ label = strtok (tmp, ".");
+ GNUNET_assert (NULL != label);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Looking for AuthZ info under %s in %s\n",
- label, str);
- GNUNET_free (str);
+ "Looking for AuthZ info under %s\n",
+ tmp);
cth->lookup_start_time = GNUNET_TIME_absolute_get ();
cth->lookup_request =
- GNUNET_GNS_lookup (gns,
- label,
- &cth->ticket.identity,
- GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE_REF,
- GNUNET_GNS_LO_DEFAULT,
- &lookup_authz_cb,
- cth);
- GNUNET_free (label);
+ GNUNET_GNS_lookup_with_tld (gns,
+ ticket->gns_name,
+ GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE_REF,
+ GNUNET_GNS_LO_DEFAULT,
+ &lookup_authz_cb,
+ cth);
+ GNUNET_free (tmp);
return cth;
}
@@ -1321,7 +1352,8 @@ issue_ticket (struct TicketIssueHandle *ih)
// Worst case we have one presentation per attribute plus the ticket
// plus the RP URI record
attrs_record =
- GNUNET_malloc ((2 * attrs_count + 2) * sizeof(struct
GNUNET_GNSRECORD_Data));
+ GNUNET_malloc ((2 * attrs_count + 2) * sizeof(struct
GNUNET_GNSRECORD_Data))
+ ;
i = 0;
for (le = ih->attrs->list_head; NULL != le; le = le->next)
{
@@ -1400,11 +1432,9 @@ issue_ticket (struct TicketIssueHandle *ih)
}
}
attrs_record[i].data_size =
- GNUNET_RECLAIM_ticket_serialize_get_size (&ih->ticket);
+ strlen (ih->ticket.gns_name) + 1;
tkt_data = GNUNET_malloc (attrs_record[i].data_size);
- GNUNET_RECLAIM_write_ticket_to_buffer (&ih->ticket,
- tkt_data,
- attrs_record[i].data_size);
+ memcpy (tkt_data, &ih->ticket, attrs_record[i].data_size);
// The ticket: Could be removed?
attrs_record[i].data = tkt_data;
attrs_record[i].expiration_time = ticket_refresh_interval.rel_value_us;
@@ -1413,8 +1443,8 @@ issue_ticket (struct TicketIssueHandle *ih)
GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION | GNUNET_GNSRECORD_RF_PRIVATE;
i++;
// The RP URI
- attrs_record[i].data_size = strlen (ih->ticket.rp_uri);
- attrs_record[i].data = ih->ticket.rp_uri;
+ attrs_record[i].data_size = strlen (ih->rp_uri);
+ attrs_record[i].data = ih->rp_uri;
attrs_record[i].expiration_time = ticket_refresh_interval.rel_value_us;
attrs_record[i].record_type = GNUNET_DNSPARSER_TYPE_URI;
attrs_record[i].flags =
@@ -1422,8 +1452,8 @@ issue_ticket (struct TicketIssueHandle *ih)
i++;
label =
- GNUNET_STRINGS_data_to_string_alloc (&ih->ticket.rnd,
- sizeof(ih->ticket.rnd));
+ GNUNET_STRINGS_data_to_string_alloc (&ih->rnd,
+ sizeof(ih->rnd));
struct GNUNET_CRYPTO_PublicKey pub;
GNUNET_CRYPTO_key_get_public (&ih->identity,
&pub);
@@ -1431,6 +1461,7 @@ issue_ticket (struct TicketIssueHandle *ih)
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Storing AuthZ information under %s in %s\n", label, str);
GNUNET_free (str);
+ sprintf (ih->ticket.gns_name, "%s.%s", label, str);
// Publish record
ih->ns_qe = GNUNET_NAMESTORE_record_set_store (nsh,
&ih->identity,
@@ -1499,7 +1530,7 @@ filter_tickets_cb (void *cls,
const struct GNUNET_GNSRECORD_Data *rd)
{
struct TicketIssueHandle *tih = cls;
- struct GNUNET_RECLAIM_Ticket ticket;
+ struct GNUNET_RECLAIM_Ticket *ticket;
struct GNUNET_RECLAIM_Presentation *presentation;
struct GNUNET_RECLAIM_PresentationList *ticket_presentations;
struct GNUNET_RECLAIM_Credential *cred;
@@ -1508,6 +1539,7 @@ filter_tickets_cb (void *cls,
unsigned int attr_cnt = 0;
unsigned int pres_cnt = 0;
int ticket_found = GNUNET_NO;
+ int rp_uri_matches = GNUNET_NO;
for (le = tih->attrs->list_head; NULL != le; le = le->next)
{
@@ -1519,7 +1551,6 @@ filter_tickets_cb (void *cls,
// ticket search
unsigned int found_attrs_cnt = 0;
unsigned int found_pres_cnt = 0;
- size_t read;
ticket_presentations = GNUNET_new (struct GNUNET_RECLAIM_PresentationList);
for (int i = 0; i < rd_count; i++)
@@ -1527,27 +1558,19 @@ filter_tickets_cb (void *cls,
// found ticket
if (GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET == rd[i].record_type)
{
- if ((GNUNET_SYSERR ==
- GNUNET_RECLAIM_read_ticket_from_buffer (rd[i].data,
- rd[i].data_size,
- &ticket,
- &read)) ||
- (read != rd[i].data_size))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to deserialize ticket from record\n");
- continue;
- }
+ ticket = (struct GNUNET_RECLAIM_Ticket *) rd[i].data;
+ tih->ticket = *ticket;
+ ticket_found = GNUNET_YES;
+ }
+ if (GNUNET_DNSPARSER_TYPE_URI == rd[i].record_type)
+ {
// cmp audience
- if (0 == strcmp (tih->ticket.rp_uri,
- ticket.rp_uri))
- {
- tih->ticket = ticket;
- ticket_found = GNUNET_YES;
+ if (0 != strncmp (tih->rp_uri,
+ rd[i].data,
+ rd[i].data_size))
continue;
- }
+ rp_uri_matches = GNUNET_YES;
}
-
// cmp requested attributes with ticket attributes
if (GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE_REF == rd[i].record_type)
{
@@ -1631,7 +1654,8 @@ filter_tickets_cb (void *cls,
*/
if ((attr_cnt == found_attrs_cnt) &&
(pres_cnt == found_pres_cnt) &&
- (GNUNET_YES == ticket_found))
+ (GNUNET_YES == ticket_found) &&
+ (GNUNET_YES == rp_uri_matches))
{
GNUNET_NAMESTORE_zone_iteration_stop (tih->ns_it);
tih->cb (tih->cb_cls, &tih->ticket, ticket_presentations, GNUNET_OK, NULL);
@@ -1657,8 +1681,7 @@ filter_tickets_finished_cb (void *cls)
{
struct TicketIssueHandle *tih = cls;
- GNUNET_CRYPTO_key_get_public (&tih->identity, &tih->ticket.identity);
- GNUNET_RECLAIM_id_generate (&tih->ticket.rnd);
+ GNUNET_RECLAIM_id_generate (&tih->rnd);
issue_ticket (tih);
}
@@ -1689,7 +1712,7 @@ RECLAIM_TICKETS_issue (const struct
GNUNET_CRYPTO_PrivateKey *identity,
tih->attrs = GNUNET_RECLAIM_attribute_list_dup (attrs);
tih->presentations = GNUNET_new (struct GNUNET_RECLAIM_PresentationList);
tih->identity = *identity;
- memcpy (tih->ticket.rp_uri, rp, strlen (rp) + 1);
+ memcpy (tih->rp_uri, rp, strlen (rp) + 1);
// First check whether the ticket has already been issued
tih->ns_it =
@@ -1741,27 +1764,23 @@ collect_tickets_cb (void *cls,
const struct GNUNET_GNSRECORD_Data *rd)
{
struct RECLAIM_TICKETS_Iterator *iter = cls;
- struct GNUNET_RECLAIM_Ticket ticket;
- size_t read;
+ struct GNUNET_RECLAIM_Ticket *ticket;
+ int ticket_found = GNUNET_NO;
+ const char *rp_uri = NULL;
for (int i = 0; i < rd_count; i++)
{
+ if (GNUNET_DNSPARSER_TYPE_URI == rd[i].record_type)
+ rp_uri = rd[i].data;
if (GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET != rd[i].record_type)
continue;
- if ((GNUNET_SYSERR ==
- GNUNET_RECLAIM_read_ticket_from_buffer (rd[i].data,
- rd[i].data_size,
- &ticket,
- &read)) ||
- (read != rd[i].data_size))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to deserialize ticket from record\n");
- continue;
- }
- iter->cb (iter->cb_cls, &ticket);
- return;
+ if ((GNUNET_YES == ticket_found) && (NULL != rp_uri))
+ break;
+ ticket = (struct GNUNET_RECLAIM_Ticket *) rd[i].data;
+ ticket_found = GNUNET_YES;
}
+ if ((GNUNET_YES == ticket_found) && (NULL != rp_uri))
+ iter->cb (iter->cb_cls, ticket, rp_uri);
GNUNET_NAMESTORE_zone_iterator_next (iter->ns_it, 1);
}
@@ -1777,7 +1796,7 @@ collect_tickets_finished_cb (void *cls)
struct RECLAIM_TICKETS_Iterator *iter = cls;
iter->ns_it = NULL;
- iter->cb (iter->cb_cls, NULL);
+ iter->cb (iter->cb_cls, NULL, NULL);
cleanup_iter (iter);
}
@@ -1793,7 +1812,7 @@ collect_tickets_error_cb (void *cls)
struct RECLAIM_TICKETS_Iterator *iter = cls;
iter->ns_it = NULL;
- iter->cb (iter->cb_cls, NULL);
+ iter->cb (iter->cb_cls, NULL, NULL);
cleanup_iter (iter);
}
diff --git a/src/service/reclaim/gnunet-service-reclaim_tickets.h
b/src/service/reclaim/gnunet-service-reclaim_tickets.h
index 93e48628a..6e610493b 100644
--- a/src/service/reclaim/gnunet-service-reclaim_tickets.h
+++ b/src/service/reclaim/gnunet-service-reclaim_tickets.h
@@ -102,10 +102,12 @@ struct TicketRecordsEntry
*
* @param cls closure
* @param ticket the ticket
+ * @param rp_uri the RP URI associated with the ticket
*/
typedef void (*RECLAIM_TICKETS_TicketIter) (
void *cls,
- struct GNUNET_RECLAIM_Ticket *ticket);
+ struct GNUNET_RECLAIM_Ticket *ticket,
+ const char* rp_uri);
/**
diff --git a/src/service/reclaim/reclaim.h b/src/service/reclaim/reclaim.h
index eebd39c29..33764c831 100644
--- a/src/service/reclaim/reclaim.h
+++ b/src/service/reclaim/reclaim.h
@@ -505,6 +505,11 @@ struct TicketResultMessage
*/
uint16_t tkt_len GNUNET_PACKED;
+ /**
+ * RP URI length
+ */
+ uint16_t rp_uri_len GNUNET_PACKED;
+
/**
* Length of new presentations created
*/
@@ -512,6 +517,7 @@ struct TicketResultMessage
/*
* Followed by the serialized ticket
+ * Followed by the RP URI
* Followed by the serialized GNUNET_RECLAIM_PresentationList
*/
};
diff --git a/src/service/reclaim/reclaim_api.c
b/src/service/reclaim/reclaim_api.c
index 92e240587..a9d9bdada 100644
--- a/src/service/reclaim/reclaim_api.c
+++ b/src/service/reclaim/reclaim_api.c
@@ -919,11 +919,13 @@ check_ticket_result (void *cls, const struct
TicketResultMessage *msg)
size_t msg_len;
size_t pres_len;
size_t tkt_len;
+ size_t rp_uri_len;
msg_len = ntohs (msg->header.size);
pres_len = ntohs (msg->presentations_len);
tkt_len = ntohs (msg->tkt_len);
- if (msg_len != sizeof(*msg) + pres_len + tkt_len)
+ rp_uri_len = ntohs (msg->rp_uri_len);
+ if (msg_len != sizeof(*msg) + pres_len + tkt_len + rp_uri_len)
{
GNUNET_break (0);
return GNUNET_SYSERR;
@@ -947,13 +949,16 @@ handle_ticket_result (void *cls, const struct
TicketResultMessage *msg)
struct GNUNET_RECLAIM_TicketIterator *it;
struct GNUNET_RECLAIM_PresentationList *presentation;
uint32_t r_id = ntohl (msg->id);
- struct GNUNET_RECLAIM_Ticket ticket;
+ struct GNUNET_RECLAIM_Ticket *ticket = NULL;
size_t pres_len;
size_t tkt_len;
- size_t tb_read;
+ size_t rp_uri_len;
+ size_t tb_read = 0;
char *buf;
+ char *rp_uri = NULL;
tkt_len = ntohs (msg->tkt_len);
+ rp_uri_len = ntohs (msg->rp_uri_len);
pres_len = ntohs (msg->presentations_len);
for (op = handle->op_head; NULL != op; op = op->next)
if (op->r_id == r_id)
@@ -966,13 +971,12 @@ handle_ticket_result (void *cls, const struct
TicketResultMessage *msg)
buf = (char*) &msg[1];
if (0 < tkt_len)
{
- GNUNET_assert (GNUNET_SYSERR !=
- GNUNET_RECLAIM_read_ticket_from_buffer (buf,
- tkt_len,
- &ticket,
- &tb_read));
- buf += tb_read;
+ ticket = (struct GNUNET_RECLAIM_Ticket*) buf;
+ buf += tkt_len;
+ tb_read += tkt_len;
}
+ if (0 < rp_uri_len)
+ rp_uri = buf;
if (NULL != op)
{
if (0 < pres_len)
@@ -989,7 +993,7 @@ handle_ticket_result (void *cls, const struct
TicketResultMessage *msg)
{
if (NULL != op->ti_cb)
op->ti_cb (op->cls,
- &ticket,
+ ticket,
(0 < pres_len) ? presentation : NULL);
}
if (0 < pres_len)
@@ -1010,7 +1014,7 @@ handle_ticket_result (void *cls, const struct
TicketResultMessage *msg)
else
{
if (NULL != it->tr_cb)
- it->tr_cb (it->cls, &ticket);
+ it->tr_cb (it->cls, ticket, rp_uri);
}
return;
}
@@ -1555,14 +1559,14 @@ GNUNET_RECLAIM_ticket_consume (
op->atr_cb = cb;
op->cls = cb_cls;
op->r_id = h->r_id_gen++;
- tkt_len = GNUNET_RECLAIM_ticket_serialize_get_size (ticket);
+ tkt_len = strlen (ticket->gns_name) + 1;
GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op);
op->env = GNUNET_MQ_msg_extra (ctm,
tkt_len,
GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET);
buf = (char*) &ctm[1];
ctm->tkt_len = htons (tkt_len);
- GNUNET_RECLAIM_write_ticket_to_buffer (ticket, buf, tkt_len);
+ memcpy (buf, ticket, tkt_len);
ctm->id = htonl (op->r_id);
if (NULL != h->mq)
GNUNET_MQ_send_copy (h->mq, op->env);
@@ -1700,7 +1704,7 @@ GNUNET_RECLAIM_ticket_revoke (
op->r_id = rid;
GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op);
key_len = GNUNET_CRYPTO_private_key_get_length (identity);
- tkt_len = GNUNET_RECLAIM_ticket_serialize_get_size (ticket);
+ tkt_len = strlen (ticket->gns_name) + 1;
op->env = GNUNET_MQ_msg_extra (msg,
key_len + tkt_len,
GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET);
@@ -1713,9 +1717,7 @@ GNUNET_RECLAIM_ticket_revoke (
key_len);
GNUNET_assert (0 <= written);
buf += written;
- GNUNET_RECLAIM_write_ticket_to_buffer (ticket,
- buf,
- tkt_len);
+ memcpy (buf, ticket, tkt_len);
if (NULL != h->mq)
{
GNUNET_MQ_send (h->mq, op->env);
@@ -1725,72 +1727,4 @@ GNUNET_RECLAIM_ticket_revoke (
}
-size_t
-GNUNET_RECLAIM_ticket_serialize_get_size (const struct
- GNUNET_RECLAIM_Ticket *tkt)
-{
- size_t size = sizeof (tkt->rnd);
- size += GNUNET_CRYPTO_public_key_get_length (&tkt->identity);
- size += strlen (tkt->rp_uri) + 1;
- return size;
-}
-
-
-enum GNUNET_GenericReturnValue
-GNUNET_RECLAIM_read_ticket_from_buffer (const void *buffer,
- size_t len,
- struct GNUNET_RECLAIM_Ticket *tkt,
- size_t *tb_read)
-{
- const char *tmp = buffer;
- size_t read = 0;
- size_t left = len;
- if (GNUNET_SYSERR ==
- GNUNET_CRYPTO_read_public_key_from_buffer (tmp,
- left,
- &tkt->identity,
- &read))
- return GNUNET_SYSERR;
- left -= read;
- tmp += read;
- if (left <= sizeof (tkt->rnd))
- return GNUNET_SYSERR;
- if (left - sizeof (tkt->rnd) > GNUNET_RECLAIM_TICKET_RP_URI_MAX_LEN)
- return GNUNET_SYSERR;
- memcpy (tkt->rp_uri, tmp, left - sizeof (tkt->rnd));
- tmp += left - sizeof (tkt->rnd);
- left = sizeof (tkt->rnd);
- memcpy (&tkt->rnd, tmp, sizeof (tkt->rnd));
- *tb_read = tmp - (char*) buffer + sizeof (tkt->rnd);
- return GNUNET_OK;
-}
-
-
-ssize_t
-GNUNET_RECLAIM_write_ticket_to_buffer (const struct
- GNUNET_RECLAIM_Ticket *tkt,
- void *buffer,
- size_t len)
-{
- char *tmp = buffer;
- size_t left = len;
- ssize_t written = 0;
- written = GNUNET_CRYPTO_write_public_key_to_buffer (&tkt->identity,
- buffer,
- left);
- if (0 > written)
- return written;
- left -= written;
- tmp += written;
- memcpy (tmp, tkt->rp_uri, strlen (tkt->rp_uri) + 1);
- written = strlen (tkt->rp_uri) + 1;
- left -= written;
- tmp += written;
- if (left < sizeof (tkt->rnd))
- return -1;
- memcpy (tmp, &tkt->rnd, sizeof (tkt->rnd));
- return tmp - (char*) buffer + sizeof (tkt->rnd);
-}
-
-
/* end of reclaim_api.c */
diff --git a/src/service/rest/json_reclaim.c b/src/service/rest/json_reclaim.c
index 6cbd44adf..3b43a37e4 100644
--- a/src/service/rest/json_reclaim.c
+++ b/src/service/rest/json_reclaim.c
@@ -170,9 +170,7 @@ static int
parse_ticket (void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
{
struct GNUNET_RECLAIM_Ticket *ticket;
- const char *rnd_str;
- const char *aud_str;
- const char *id_str;
+ const char *gns_str;
int unpack_state;
GNUNET_assert (NULL != root);
@@ -185,13 +183,9 @@ parse_ticket (void *cls, json_t *root, struct
GNUNET_JSON_Specification *spec)
}
// interpret single ticket
unpack_state = json_unpack (root,
- "{s:s, s:s, s:s!}",
- "rnd",
- &rnd_str,
- "audience",
- &aud_str,
- "issuer",
- &id_str);
+ "{s:s}",
+ "gns_name",
+ &gns_str);
if (0 != unpack_state)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -199,27 +193,7 @@ parse_ticket (void *cls, json_t *root, struct
GNUNET_JSON_Specification *spec)
return GNUNET_SYSERR;
}
ticket = GNUNET_new (struct GNUNET_RECLAIM_Ticket);
- if (GNUNET_OK != GNUNET_STRINGS_string_to_data (rnd_str,
- strlen (rnd_str),
- &ticket->rnd,
- sizeof(ticket->rnd)))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Rnd invalid\n");
- GNUNET_free (ticket);
- return GNUNET_SYSERR;
- }
- if (GNUNET_OK !=
- GNUNET_STRINGS_string_to_data (id_str,
- strlen (id_str),
- &ticket->identity,
- sizeof(ticket->identity)))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Identity invalid\n");
- GNUNET_free (ticket);
- return GNUNET_SYSERR;
- }
-
- strcpy (ticket->rp_uri, aud_str);
+ strncpy (ticket->gns_name, gns_str, sizeof (ticket->gns_name));
*(struct GNUNET_RECLAIM_Ticket **) spec->ptr = ticket;
return GNUNET_OK;
@@ -277,7 +251,8 @@ GNUNET_RECLAIM_JSON_spec_ticket (struct
GNUNET_RECLAIM_Ticket **ticket)
* @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
*/
static int
-parse_credential (void *cls, json_t *root, struct GNUNET_JSON_Specification
*spec)
+parse_credential (void *cls, json_t *root, struct GNUNET_JSON_Specification *
+ spec)
{
struct GNUNET_RECLAIM_Credential *cred;
const char *name_str = NULL;
@@ -316,9 +291,12 @@ parse_credential (void *cls, json_t *root, struct
GNUNET_JSON_Specification *spe
"Error json object has a wrong format!\n");
return GNUNET_SYSERR;
}
- if (json_is_string (val_json)) {
+ if (json_is_string (val_json))
+ {
val_str = GNUNET_strdup (json_string_value (val_json));
- } else {
+ }
+ else
+ {
val_str = json_dumps (val_json, JSON_COMPACT);
}
type = GNUNET_RECLAIM_credential_typename_to_number (type_str);
diff --git a/src/service/rest/reclaim_plugin.c
b/src/service/rest/reclaim_plugin.c
index 921faf8ca..31a795dc8 100644
--- a/src/service/rest/reclaim_plugin.c
+++ b/src/service/rest/reclaim_plugin.c
@@ -434,32 +434,19 @@ collect_finished_cb (void *cls)
*
*/
static void
-ticket_collect (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket)
+ticket_collect (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket,
+ const char *rp_uri)
{
json_t *json_resource;
struct RequestHandle *handle = cls;
- json_t *value;
- char *tmp;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding ticket\n");
- tmp = GNUNET_STRINGS_data_to_string_alloc (&ticket->rnd,
sizeof(ticket->rnd));
json_resource = json_object ();
- GNUNET_free (tmp);
json_array_append (handle->resp_object, json_resource);
- tmp =
- GNUNET_STRINGS_data_to_string_alloc (&ticket->identity,
- sizeof(struct
- GNUNET_CRYPTO_PublicKey));
- value = json_string (tmp);
- json_object_set_new (json_resource, "issuer", value);
- GNUNET_free (tmp);
- json_object_set_new (json_resource, "audience", json_string
(ticket->rp_uri));
- GNUNET_free (tmp);
- tmp = GNUNET_STRINGS_data_to_string_alloc (&ticket->rnd,
sizeof(ticket->rnd));
- value = json_string (tmp);
- json_object_set_new (json_resource, "rnd", value);
- GNUNET_free (tmp);
+ json_object_set_new (json_resource, "gns_name", json_string
(ticket->gns_name)
+ );
+ json_object_set_new (json_resource, "rp_uri", json_string (rp_uri));
GNUNET_RECLAIM_ticket_iteration_next (handle->ticket_it);
}
@@ -932,7 +919,8 @@ parse_jwt (const struct GNUNET_RECLAIM_Credential *cred,
type_str = "String";
type = GNUNET_RECLAIM_attribute_typename_to_number (type_str);
if (GNUNET_SYSERR == GNUNET_RECLAIM_attribute_string_to_value (type,val_str,
- (void **)
&data,
+ (void **)
&data
+ ,
&data_size))
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1128,8 +1116,11 @@ revoke_ticket_cont (struct GNUNET_REST_RequestHandle
*con_handle,
struct RequestHandle *handle = cls;
struct EgoEntry *ego_entry;
struct GNUNET_RECLAIM_Ticket *ticket = NULL;
+ struct GNUNET_CRYPTO_PublicKey iss;
struct GNUNET_CRYPTO_PublicKey tmp_pk;
char term_data[handle->rest_handle->data_size + 1];
+ char *tmp;
+ char *key;
json_t *data_json;
json_error_t err;
struct GNUNET_JSON_Specification tktspec[] =
@@ -1166,15 +1157,21 @@ revoke_ticket_cont (struct GNUNET_REST_RequestHandle
*con_handle,
return;
}
+ tmp = GNUNET_strdup (ticket->gns_name);
+ GNUNET_assert (NULL != strtok (tmp, "."));
+ key = strtok (NULL, ".");
+ GNUNET_CRYPTO_public_key_from_string (key, &iss);
+
for (ego_entry = ego_head; NULL != ego_entry;
ego_entry = ego_entry->next)
{
GNUNET_IDENTITY_ego_get_public_key (ego_entry->ego, &tmp_pk);
- if (0 == memcmp (&ticket->identity,
+ if (0 == memcmp (&iss,
&tmp_pk,
sizeof(struct GNUNET_CRYPTO_PublicKey)))
break;
}
+ GNUNET_free (tmp);
if (NULL == ego_entry)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Identity unknown\n");
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnunet] branch master updated: RECLAIM: Tickets are now simply GNS names,
gnunet <=