/*
This file is part of GNUnet.
- Copyright (C) 2012-2015 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2012-2015 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
struct IdentityToken
{
/**
- * JSON header
+ * DLL
*/
- json_t *header;
+ struct TokenAttr *attr_head;
/**
- * JSON Payload
+ * DLL
*/
- json_t *payload;
+ struct TokenAttr *attr_tail;
/**
* Token Signature
struct GNUNET_CRYPTO_EcdsaPublicKey aud_key;
};
+struct TokenAttr
+{
+ /**
+ * DLL
+ */
+ struct TokenAttr *next;
+
+ /**
+ * DLL
+ */
+ struct TokenAttr *prev;
+
+ /**
+ * Attribute name
+ */
+ char *name;
+
+ /**
+ * Attribute value DLL
+ */
+ struct TokenAttrValue *val_head;
+
+ /**
+ * Attribute value DLL
+ */
+ struct TokenAttrValue *val_tail;
+
+};
+
+struct TokenAttrValue
+{
+ /**
+ * DLL
+ */
+ struct TokenAttrValue *next;
+
+ /**
+ * DLL
+ */
+ struct TokenAttrValue *prev;
+
+ /**
+ * Attribute value
+ */
+ char *value;
+
+ /**
+ * Attribute int value
+ * used if NULL == value
+ */
+ uint64_t int_value;
+};
+
struct TokenTicketPayload
{
/**
* Nonce
*/
- char* nonce;
+ uint64_t nonce;
/**
* Label
* @param value the value
*/
void
-token_add_attr (const struct IdentityToken *token,
- const char* key,
- const char* value);
+token_add_attr (struct IdentityToken *token,
+ const char* key,
+ const char* value);
+
+/**
+ * Add a new key value pair to the token
+ *
+ * @param token the token to modify
+ * @param key the key
+ * @param value the value
+ */
+void
+token_add_attr_int (struct IdentityToken *token,
+ const char* key,
+ uint64_t value);
+
+
+
+/**
+ * Add a value to a TokenAttribute
+ *
+ * @param attr the token attribute
+ * @param value value to add
+ */
+ void
+ token_attr_add_value (const struct TokenAttr *attr,
+ const char *value);
/**
* Add a new key value pair to the token with the value as json
* @param value the value
*
*/
-void
-token_add_json (const struct IdentityToken *token,
- const char* key,
- json_t* value);
+ void
+ token_add_json (const struct IdentityToken *token,
+ const char* key,
+ json_t* value);
/**
* Serialize a token. The token will be signed and base64 according to the
*
* @return GNUNET_OK on success
*/
-int
-token_serialize (const struct IdentityToken*token,
- const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
- struct GNUNET_CRYPTO_EcdhePrivateKey **ecdhe_privkey,
- char **result);
+ int
+ token_serialize (const struct IdentityToken*token,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
+ struct GNUNET_CRYPTO_EcdhePrivateKey **ecdhe_privkey,
+ char **result);
/**
* Parses the serialized token and returns a token
*
* @return GNUNET_OK on success
*/
-int
-token_parse (const char* data,
- const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
- struct IdentityToken **result);
+ int
+ token_parse (const char* data,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
+ struct IdentityToken **result);
/**
* Parses the serialized token and returns a token
*
* @return GNUNET_OK on success
*/
- int
- token_parse2 (const char* data,
- const struct GNUNET_CRYPTO_EcdhePrivateKey *priv_key,
- const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
- struct IdentityToken **result);
+int
+token_parse2 (const char* data,
+ const struct GNUNET_CRYPTO_EcdhePrivateKey *priv_key,
+ const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
+ struct IdentityToken **result);
/**
* Creates a ticket that can be exchanged by the audience for
* the token. The token must be placed under the label
*
- * @param nonce_str nonce provided by the audience that requested the ticket
+ * @param nonce nonce provided by the audience that requested the ticket
* @param iss_pkey the issuer pubkey used to sign the ticket
* @param label the label encoded in the ticket
* @param aud_ley the audience pubkey used to encrypt the ticket payload
* @return the ticket
*/
struct TokenTicket*
-ticket_create (const char* nonce_str,
+ticket_create (uint64_t nonce,
const struct GNUNET_CRYPTO_EcdsaPublicKey* iss_pkey,
const char* lbl_str,
const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key);
*
* @return GNUNET_OK on success
*/
-int
-ticket_serialize (struct TokenTicket *ticket,
- const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
- char **result);
+ int
+ ticket_serialize (struct TokenTicket *ticket,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
+ char **result);
/**
* Destroys a ticket
*
* @return GNUNET_OK on success
*/
- int
- ticket_parse (const char* raw_data,
- const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
- struct TokenTicket **ticket);
+int
+ticket_parse (const char* raw_data,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
+ struct TokenTicket **ticket);
#endif