From 5be7a51b0980909719670953c938ee724627ad90 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Golle <daniel@makrotopia.org>
|
|
Date: Thu, 28 Feb 2019 15:30:26 +0100
|
|
Subject: [PATCH] credential: include headers in dist sources
|
|
|
|
---
|
|
src/credential/Makefile.am | 3 +++
|
|
src/include/Makefile.am | 4 ++--
|
|
2 files changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
--- a/src/credential/Makefile.am
|
|
+++ b/src/credential/Makefile.am
|
|
@@ -68,8 +68,11 @@ gnunet_service_credential_LDADD = \
|
|
|
|
|
|
libgnunetcredential_la_SOURCES = \
|
|
+ credential.h \
|
|
credential_api.c \
|
|
+ credential_serialization.h \
|
|
credential_serialization.c \
|
|
+ credential_misc.h \
|
|
credential_misc.c
|
|
libgnunetcredential_la_LIBADD = \
|
|
$(top_builddir)/src/util/libgnunetutil.la $(XLIB)
|
|
--- a/src/include/Makefile.am
|
|
+++ b/src/include/Makefile.am
|
|
@@ -47,7 +47,7 @@ gnunetinclude_HEADERS = \
|
|
gnunet_container_lib.h \
|
|
gnunet_conversation_service.h \
|
|
gnunet_core_service.h \
|
|
- gnunet_credential_service.h \
|
|
+ gnunet_credential_service.h \
|
|
gnunet_crypto_lib.h \
|
|
gnunet_curl_lib.h \
|
|
gnunet_datacache_lib.h \
|
|
@@ -107,7 +107,7 @@ gnunetinclude_HEADERS = \
|
|
gnunet_regex_service.h \
|
|
gnunet_rest_lib.h \
|
|
gnunet_rest_plugin.h \
|
|
- gnunet_rps_service.h \
|
|
+ gnunet_rps_service.h \
|
|
gnunet_revocation_service.h \
|
|
gnunet_scalarproduct_service.h \
|
|
gnunet_scheduler_lib.h \
|
|
--- /dev/null
|
|
+++ b/src/credential/credential.h
|
|
@@ -0,0 +1,221 @@
|
|
+/*
|
|
+ This file is part of GNUnet
|
|
+ Copyright (C) 2012-2013 GNUnet e.V.
|
|
+
|
|
+ GNUnet 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 of the License,
|
|
+ or (at your option) any later version.
|
|
+
|
|
+ GNUnet 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
+
|
|
+ SPDX-License-Identifier: AGPL3.0-or-later
|
|
+ */
|
|
+/**
|
|
+ * @file credential/credential.h
|
|
+ * @brief IPC messages between CREDENTIAL API and CREDENTIAL service
|
|
+ * @author Martin Schanzenbach
|
|
+ */
|
|
+#ifndef CREDENTIAL_H
|
|
+#define CREDENTIAL_H
|
|
+
|
|
+#include "gnunet_credential_service.h"
|
|
+
|
|
+GNUNET_NETWORK_STRUCT_BEGIN
|
|
+
|
|
+/**
|
|
+ * Message from client to Credential service to collect credentials.
|
|
+ */
|
|
+struct CollectMessage
|
|
+{
|
|
+ /**
|
|
+ * Header of type #GNUNET_MESSAGE_TYPE_CREDENTIAL_VERIFY
|
|
+ */
|
|
+ struct GNUNET_MessageHeader header;
|
|
+
|
|
+ /**
|
|
+ * Subject public key
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPrivateKey subject_key;
|
|
+
|
|
+ /**
|
|
+ * Trust anchor
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey issuer_key;
|
|
+
|
|
+ /**
|
|
+ * Length of the issuer attribute
|
|
+ */
|
|
+ uint16_t issuer_attribute_len;
|
|
+
|
|
+ /**
|
|
+ * Unique identifier for this request (for key collisions).
|
|
+ */
|
|
+ uint32_t id GNUNET_PACKED;
|
|
+
|
|
+ /* Followed by the zero-terminated attribute */
|
|
+
|
|
+};
|
|
+
|
|
+
|
|
+/**
|
|
+ * Message from client to Credential service to verify attributes.
|
|
+ */
|
|
+struct VerifyMessage
|
|
+{
|
|
+ /**
|
|
+ * Header of type #GNUNET_MESSAGE_TYPE_CREDENTIAL_VERIFY
|
|
+ */
|
|
+ struct GNUNET_MessageHeader header;
|
|
+
|
|
+ /**
|
|
+ * Subject public key
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
|
|
+
|
|
+ /**
|
|
+ * Trust anchor
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey issuer_key;
|
|
+
|
|
+ /**
|
|
+ * Number of credentials
|
|
+ */
|
|
+ uint32_t c_count;
|
|
+
|
|
+ /**
|
|
+ * Length of the issuer attribute
|
|
+ */
|
|
+ uint16_t issuer_attribute_len;
|
|
+
|
|
+ /**
|
|
+ * Unique identifier for this request (for key collisions).
|
|
+ */
|
|
+ uint32_t id GNUNET_PACKED;
|
|
+
|
|
+ /* Followed by the zero-terminated attribute and credentials to look up */
|
|
+
|
|
+};
|
|
+
|
|
+
|
|
+/**
|
|
+ * Message from CREDENTIAL service to client: new results.
|
|
+ */
|
|
+struct DelegationChainResultMessage
|
|
+{
|
|
+ /**
|
|
+ * Header of type #GNUNET_MESSAGE_TYPE_CREDENTIAL_VERIFY_RESULT
|
|
+ */
|
|
+ struct GNUNET_MessageHeader header;
|
|
+
|
|
+ /**
|
|
+ * Unique identifier for this request (for key collisions).
|
|
+ */
|
|
+ uint32_t id GNUNET_PACKED;
|
|
+
|
|
+ /**
|
|
+ * Indicates if credential has been found at all
|
|
+ */
|
|
+ uint32_t cred_found GNUNET_PACKED;
|
|
+
|
|
+ /**
|
|
+ * The number of delegations in the response
|
|
+ */
|
|
+ uint32_t d_count GNUNET_PACKED;
|
|
+
|
|
+ /**
|
|
+ * The number of credentials in the response
|
|
+ */
|
|
+ uint32_t c_count GNUNET_PACKED;
|
|
+
|
|
+ /* followed by ad_count GNUNET_CREDENTIAL_RecordData structs*/
|
|
+
|
|
+};
|
|
+
|
|
+struct DelegationRecordData
|
|
+{
|
|
+ /**
|
|
+ * Subject key
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
|
|
+
|
|
+ /**
|
|
+ * Subject attributes
|
|
+ */
|
|
+ uint32_t subject_attribute_len GNUNET_PACKED;
|
|
+};
|
|
+
|
|
+
|
|
+struct ChainEntry
|
|
+{
|
|
+ /**
|
|
+ * Issuer key
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey issuer_key;
|
|
+
|
|
+ /**
|
|
+ * Subject key
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
|
|
+
|
|
+ /**
|
|
+ * Issuer attributes
|
|
+ */
|
|
+ uint32_t issuer_attribute_len GNUNET_PACKED;
|
|
+
|
|
+ /**
|
|
+ * Subject attributes
|
|
+ */
|
|
+ uint32_t subject_attribute_len GNUNET_PACKED;
|
|
+};
|
|
+
|
|
+
|
|
+struct CredentialEntry
|
|
+{
|
|
+
|
|
+ /**
|
|
+ * The signature for this credential by the issuer
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaSignature signature;
|
|
+
|
|
+ /**
|
|
+ * Signature meta
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
+
|
|
+ /**
|
|
+ * Public key of the issuer
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey issuer_key;
|
|
+
|
|
+ /**
|
|
+ * Public key of the subject this credential was issued to
|
|
+ */
|
|
+ struct GNUNET_CRYPTO_EcdsaPublicKey subject_key;
|
|
+
|
|
+ /**
|
|
+ * Expiration time of this credential
|
|
+ */
|
|
+ uint64_t expiration GNUNET_PACKED;
|
|
+
|
|
+ /**
|
|
+ * Issuer attribute length
|
|
+ */
|
|
+ uint32_t issuer_attribute_len;
|
|
+
|
|
+ /**
|
|
+ * Followed by the attribute string
|
|
+ */
|
|
+};
|
|
+
|
|
+
|
|
+GNUNET_NETWORK_STRUCT_END
|
|
+
|
|
+#endif
|
|
+
|
|
--- /dev/null
|
|
+++ b/src/credential/credential_misc.h
|
|
@@ -0,0 +1,35 @@
|
|
+/*
|
|
+ This file is part of GNUnet
|
|
+ Copyright (C) 2012-2013 GNUnet e.V.
|
|
+
|
|
+ GNUnet 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 of the License,
|
|
+ or (at your option) any later version.
|
|
+
|
|
+ GNUnet 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
+
|
|
+ SPDX-License-Identifier: AGPL3.0-or-later
|
|
+ */
|
|
+/**
|
|
+ * @file credential/credential_misc.h
|
|
+ * @brief Credential helper functions
|
|
+ */
|
|
+#ifndef CREDENTIAL_MISC_H
|
|
+#define CREDENTIAL_MISC_H
|
|
+
|
|
+
|
|
+
|
|
+char*
|
|
+GNUNET_CREDENTIAL_credential_to_string (const struct GNUNET_CREDENTIAL_Credential *cred);
|
|
+
|
|
+struct GNUNET_CREDENTIAL_Credential*
|
|
+GNUNET_CREDENTIAL_credential_from_string (const char* str);
|
|
+
|
|
+#endif
|
|
--- /dev/null
|
|
+++ b/src/credential/credential_serialization.h
|
|
@@ -0,0 +1,159 @@
|
|
+/*
|
|
+ This file is part of GNUnet.
|
|
+ Copyright (C) 2009-2013, 2016 GNUnet e.V.
|
|
+
|
|
+ GNUnet 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 of the License,
|
|
+ or (at your option) any later version.
|
|
+
|
|
+ GNUnet 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
+
|
|
+ SPDX-License-Identifier: AGPL3.0-or-later
|
|
+*/
|
|
+
|
|
+
|
|
+/**
|
|
+ * @file credential/credential_serialization.h
|
|
+ * @brief API to serialize and deserialize delegation chains
|
|
+ * and credentials
|
|
+ * @author Martin Schanzenbach
|
|
+ */
|
|
+#ifndef CREDENTIAL_SERIALIZATION_H
|
|
+#define CREDENTIAL_SERIALIZATION_H
|
|
+
|
|
+#include "platform.h"
|
|
+#include "gnunet_util_lib.h"
|
|
+#include "gnunet_constants.h"
|
|
+#include "gnunet_credential_service.h"
|
|
+
|
|
+/**
|
|
+ * Calculate how many bytes we will need to serialize
|
|
+ * the given delegation record
|
|
+ *
|
|
+ * @param ds_count number of delegation chain entries
|
|
+ * @param dsr array of #GNUNET_CREDENTIAL_Delegation
|
|
+ * @return the required size to serialize
|
|
+ */
|
|
+size_t
|
|
+GNUNET_CREDENTIAL_delegation_set_get_size (unsigned int ds_count,
|
|
+ const struct GNUNET_CREDENTIAL_DelegationSet *dsr);
|
|
+
|
|
+/**
|
|
+ * Serizalize the given delegation record entries
|
|
+ *
|
|
+ * @param d_count number of delegation chain entries
|
|
+ * @param dsr array of #GNUNET_CREDENTIAL_Delegation
|
|
+ * @param dest_size size of the destination
|
|
+ * @param dest where to store the result
|
|
+ * @return the size of the data, -1 on failure
|
|
+ */
|
|
+ssize_t
|
|
+GNUNET_CREDENTIAL_delegation_set_serialize (unsigned int d_count,
|
|
+ const struct GNUNET_CREDENTIAL_DelegationSet *dsr,
|
|
+ size_t dest_size,
|
|
+ char *dest);
|
|
+
|
|
+
|
|
+/**
|
|
+ * Deserialize the given destination
|
|
+ *
|
|
+ * @param len size of the serialized delegation recird
|
|
+ * @param src the serialized data
|
|
+ * @param d_count the number of delegation chain entries
|
|
+ * @param dsr where to put the delegation chain entries
|
|
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
|
|
+ */
|
|
+int
|
|
+GNUNET_CREDENTIAL_delegation_set_deserialize (size_t len,
|
|
+ const char *src,
|
|
+ unsigned int d_count,
|
|
+ struct GNUNET_CREDENTIAL_DelegationSet *dsr);
|
|
+
|
|
+ /**
|
|
+ * Calculate how many bytes we will need to serialize
|
|
+ * the given delegation chain and credential
|
|
+ *
|
|
+ * @param d_count number of delegation chain entries
|
|
+ * @param dd array of #GNUNET_CREDENTIAL_Delegation
|
|
+ * @param c_count number of credential entries
|
|
+ * @param cd a #GNUNET_CREDENTIAL_Credential
|
|
+ * @return the required size to serialize
|
|
+ */
|
|
+ size_t
|
|
+ GNUNET_CREDENTIAL_delegation_chain_get_size (unsigned int d_count,
|
|
+ const struct GNUNET_CREDENTIAL_Delegation *dd,
|
|
+ unsigned int c_count,
|
|
+ const struct GNUNET_CREDENTIAL_Credential *cd);
|
|
+
|
|
+ /**
|
|
+ * Serizalize the given delegation chain entries and credential
|
|
+ *
|
|
+ * @param d_count number of delegation chain entries
|
|
+ * @param dd array of #GNUNET_CREDENTIAL_Delegation
|
|
+ * @param c_count number of credential entries
|
|
+ * @param cd a #GNUNET_CREDENTIAL_Credential
|
|
+ * @param dest_size size of the destination
|
|
+ * @param dest where to store the result
|
|
+ * @return the size of the data, -1 on failure
|
|
+ */
|
|
+ ssize_t
|
|
+ GNUNET_CREDENTIAL_delegation_chain_serialize (unsigned int d_count,
|
|
+ const struct GNUNET_CREDENTIAL_Delegation *dd,
|
|
+ unsigned int c_count,
|
|
+ const struct GNUNET_CREDENTIAL_Credential *cd,
|
|
+ size_t dest_size,
|
|
+ char *dest);
|
|
+
|
|
+
|
|
+ /**
|
|
+ * Deserialize the given destination
|
|
+ *
|
|
+ * @param len size of the serialized delegation chain and cred
|
|
+ * @param src the serialized data
|
|
+ * @param d_count the number of delegation chain entries
|
|
+ * @param dd where to put the delegation chain entries
|
|
+ * @param c_count number of credential entries
|
|
+ * @param cd where to put the credential data
|
|
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
|
|
+ */
|
|
+ int
|
|
+ GNUNET_CREDENTIAL_delegation_chain_deserialize (size_t len,
|
|
+ const char *src,
|
|
+ unsigned int d_count,
|
|
+ struct GNUNET_CREDENTIAL_Delegation *dd,
|
|
+ unsigned int c_count,
|
|
+ struct GNUNET_CREDENTIAL_Credential *cd);
|
|
+ size_t
|
|
+ GNUNET_CREDENTIAL_credentials_get_size (unsigned int c_count,
|
|
+ const struct GNUNET_CREDENTIAL_Credential *cd);
|
|
+
|
|
+ssize_t
|
|
+GNUNET_CREDENTIAL_credentials_serialize (unsigned int c_count,
|
|
+ const struct GNUNET_CREDENTIAL_Credential *cd,
|
|
+ size_t dest_size,
|
|
+ char *dest);
|
|
+
|
|
+
|
|
+int
|
|
+GNUNET_CREDENTIAL_credentials_deserialize (size_t len,
|
|
+ const char *src,
|
|
+ unsigned int c_count,
|
|
+ struct GNUNET_CREDENTIAL_Credential *cd);
|
|
+
|
|
+
|
|
+int
|
|
+GNUNET_CREDENTIAL_credential_serialize (struct GNUNET_CREDENTIAL_Credential *cred,
|
|
+ char **data);
|
|
+
|
|
+struct GNUNET_CREDENTIAL_Credential*
|
|
+GNUNET_CREDENTIAL_credential_deserialize (const char* data,
|
|
+ size_t data_size);
|
|
+#endif
|
|
+/* end of credential_serialization.h */
|
|
--- a/src/credential/Makefile.in
|
|
+++ b/src/credential/Makefile.in
|
|
@@ -714,8 +714,11 @@ gnunet_service_credential_LDADD = \
|
|
$(GN_LIBINTL)
|
|
|
|
libgnunetcredential_la_SOURCES = \
|
|
+ credential.h \
|
|
credential_api.c \
|
|
+ credential_serialization.h \
|
|
credential_serialization.c \
|
|
+ credential_misc.h \
|
|
credential_misc.c
|
|
|
|
libgnunetcredential_la_LIBADD = \
|