X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_gnsrecord_lib.h;h=3a49d98b9fc286ba0081812c984a6d56765d4941;hb=1d468ecabd6c2ee5c0eae672292efa0f51bc9e48;hp=7e0a1a9e96708caf04d3579233df6f3bd9b4f005;hpb=691aa85bfaec80c08330db772499a123b2ac2373;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_gnsrecord_lib.h b/src/include/gnunet_gnsrecord_lib.h index 7e0a1a9e9..3a49d98b9 100644 --- a/src/include/gnunet_gnsrecord_lib.h +++ b/src/include/gnunet_gnsrecord_lib.h @@ -2,21 +2,21 @@ 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 General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. + 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 - General Public License for more details. + Affero General Public License for more details. - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ /** * @author Christian Grothoff @@ -35,9 +35,8 @@ #define GNUNET_GNSRECORD_LIB_H #ifdef __cplusplus -extern "C" -{ -#if 0 /* keep Emacsens' auto-indent happy */ +extern "C" { +#if 0 /* keep Emacsens' auto-indent happy */ } #endif #endif @@ -94,38 +93,58 @@ extern "C" #define GNUNET_GNSRECORD_TYPE_PHONE 65543 /** - * Record type for identity attributes (of IDENTITY). + * Record type for identity attributes (of RECLAIM). + */ +#define GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR 65544 + +/** + * Record type for local ticket references */ -#define GNUNET_GNSRECORD_TYPE_ID_ATTR 65544 +#define GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET 65545 /** - * Record type for an identity token (of IDENTITY-TOKEN). + * 65546 reserved */ -#define GNUNET_GNSRECORD_TYPE_ID_TOKEN 65545 /** - * Record type for the private metadata of an identity token (of IDENTITY-TOKEN). + * 65547 deleted, free to use */ -#define GNUNET_GNSRECORD_TYPE_ID_TOKEN_METADATA 65546 /** - * Record type for credential + * Record type for policies */ -#define GNUNET_GNSRECORD_TYPE_CREDENTIAL 65547 +#define GNUNET_GNSRECORD_TYPE_DELEGATE 65548 /** * Record type for reverse lookups */ -#define GNUNET_GNSRECORD_TYPE_REVERSE 65548 +#define GNUNET_GNSRECORD_TYPE_ATTRIBUTE 65549 + +/** + * Record type for reclaim records + */ +#define GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF 65550 + +/** + * Record type for RECLAIM master + */ +#define GNUNET_GNSRECORD_TYPE_RECLAIM_MASTER 65551 +/** + * Record type for reclaim OIDC clients + */ +#define GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_CLIENT 65552 +/** + * Record type for reclaim OIDC redirect URIs + */ +#define GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_REDIRECT 65553 /** * Flags that can be set for a record. */ enum GNUNET_GNSRECORD_Flags { - /** * No special options. */ @@ -155,17 +174,17 @@ enum GNUNET_GNSRECORD_Flags */ GNUNET_GNSRECORD_RF_SHADOW_RECORD = 16 - /** - * When comparing flags for record equality for removal, - * which flags should must match (in addition to the type, - * name, expiration value and data of the record)? All flags - * that are not listed here will be ignored for this purpose. - * (for example, we don't expect that users will remember to - * pass the '--private' option when removing a record from - * the namestore, hence we don't require this particular option - * to match upon removal). See also - * #GNUNET_GNSRECORD_records_cmp. - */ +/** + * When comparing flags for record equality for removal, + * which flags should must match (in addition to the type, + * name, expiration value and data of the record)? All flags + * that are not listed here will be ignored for this purpose. + * (for example, we don't expect that users will remember to + * pass the '--private' option when removing a record from + * the namestore, hence we don't require this particular option + * to match upon removal). See also + * #GNUNET_GNSRECORD_records_cmp. + */ #define GNUNET_GNSRECORD_RF_RCMP_FLAGS (GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION) }; @@ -175,7 +194,6 @@ enum GNUNET_GNSRECORD_Flags */ struct GNUNET_GNSRECORD_Data { - /** * Binary value stored in the DNS record. Note: "data" must never * be individually 'malloc'ed, but instead always points into some @@ -238,7 +256,6 @@ struct GNUNET_GNSRECORD_PlaceData */ struct GNUNET_GNSRECORD_Block { - /** * Signature of the block. */ @@ -276,7 +293,6 @@ struct GNUNET_GNSRECORD_Block */ struct GNUNET_GNSRECORD_BoxRecord { - /** * Protocol of the boxed record (6 = TCP, 17 = UDP, etc.). * Yes, in IP protocols are usually limited to 8 bits. In NBO. @@ -294,7 +310,6 @@ struct GNUNET_GNSRECORD_BoxRecord uint32_t record_type GNUNET_PACKED; /* followed by the 'original' record */ - }; /** @@ -329,10 +344,8 @@ GNUNET_NETWORK_STRUCT_END * @param rd_count number of entries in @a rd array * @param rd array of records with data to store */ -typedef void (*GNUNET_GNSRECORD_RecordCallback) (void *cls, - unsigned int rd_count, - const struct GNUNET_GNSRECORD_Data *rd); - +typedef void (*GNUNET_GNSRECORD_RecordCallback) ( + void *cls, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd); /* ***************** API related to GNSRECORD plugins ************** */ @@ -347,9 +360,8 @@ typedef void (*GNUNET_GNSRECORD_RecordCallback) (void *cls, * @return NULL on error, otherwise human-readable representation of the value */ char * -GNUNET_GNSRECORD_value_to_string (uint32_t type, - const void *data, - size_t data_size); +GNUNET_GNSRECORD_value_to_string (uint32_t type, const void *data, + size_t data_size); /** @@ -363,10 +375,8 @@ GNUNET_GNSRECORD_value_to_string (uint32_t type, * @return #GNUNET_OK on success */ int -GNUNET_GNSRECORD_string_to_value (uint32_t type, - const char *s, - void **data, - size_t *data_size); +GNUNET_GNSRECORD_string_to_value (uint32_t type, const char *s, void **data, + size_t *data_size); /** @@ -397,11 +407,11 @@ GNUNET_GNSRECORD_number_to_typename (uint32_t type); * * @param rd_count number of records in the @a rd array * @param rd array of #GNUNET_GNSRECORD_Data with @a rd_count elements - * @return the required size to serialize + * @return the required size to serialize, -1 on error */ -size_t +ssize_t GNUNET_GNSRECORD_records_get_size (unsigned int rd_count, - const struct GNUNET_GNSRECORD_Data *rd); + const struct GNUNET_GNSRECORD_Data *rd); /** @@ -415,9 +425,8 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count, */ ssize_t GNUNET_GNSRECORD_records_serialize (unsigned int rd_count, - const struct GNUNET_GNSRECORD_Data *rd, - size_t dest_size, - char *dest); + const struct GNUNET_GNSRECORD_Data *rd, + size_t dest_size, char *dest); /** @@ -430,16 +439,14 @@ GNUNET_GNSRECORD_records_serialize (unsigned int rd_count, * @return #GNUNET_OK on success, #GNUNET_SYSERR on error */ int -GNUNET_GNSRECORD_records_deserialize (size_t len, - const char *src, - unsigned int rd_count, - struct GNUNET_GNSRECORD_Data *dest); +GNUNET_GNSRECORD_records_deserialize (size_t len, const char *src, + unsigned int rd_count, + struct GNUNET_GNSRECORD_Data *dest); /* ******* general APIs relating to blocks, records and labels ******** */ - /** * Test if a given record is expired. * @@ -466,7 +473,8 @@ GNUNET_GNSRECORD_string_to_lowercase (const char *src); * NOT reentrant! * * @param z public key of a zone - * @return string form; will be overwritten by next call to #GNUNET_GNSRECORD_z2s. + * @return string form; will be overwritten by next call to + * #GNUNET_GNSRECORD_z2s. */ const char * GNUNET_GNSRECORD_z2s (const struct GNUNET_CRYPTO_EcdsaPublicKey *z); @@ -487,17 +495,17 @@ GNUNET_GNSRECORD_pkey_to_zkey (const struct GNUNET_CRYPTO_EcdsaPublicKey *pkey); /** - * Convert an absolute domain name in the ".zkey" pTLD to the + * Convert an absolute domain name to the * respective public key. * - * @param zkey string "X.zkey" where X is the public + * @param zkey string "X" where X is the public * key in an encoding suitable for DNS labels. * @param pkey set to a public key on the eliptic curve * @return #GNUNET_SYSERR if @a zkey has the wrong syntax */ int GNUNET_GNSRECORD_zkey_to_pkey (const char *zkey, - struct GNUNET_CRYPTO_EcdsaPublicKey *pkey); + struct GNUNET_CRYPTO_EcdsaPublicKey *pkey); /** @@ -508,9 +516,9 @@ GNUNET_GNSRECORD_zkey_to_pkey (const char *zkey, * @param query hash to use for the query */ void -GNUNET_GNSRECORD_query_from_private_key (const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, - const char *label, - struct GNUNET_HashCode *query); +GNUNET_GNSRECORD_query_from_private_key ( + const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label, + struct GNUNET_HashCode *query); /** @@ -521,9 +529,9 @@ GNUNET_GNSRECORD_query_from_private_key (const struct GNUNET_CRYPTO_EcdsaPrivate * @param query hash to use for the query */ void -GNUNET_GNSRECORD_query_from_public_key (const struct GNUNET_CRYPTO_EcdsaPublicKey *pub, - const char *label, - struct GNUNET_HashCode *query); +GNUNET_GNSRECORD_query_from_public_key ( + const struct GNUNET_CRYPTO_EcdsaPublicKey *pub, const char *label, + struct GNUNET_HashCode *query); /** @@ -537,10 +545,29 @@ GNUNET_GNSRECORD_query_from_public_key (const struct GNUNET_CRYPTO_EcdsaPublicKe */ struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, - struct GNUNET_TIME_Absolute expire, - const char *label, - const struct GNUNET_GNSRECORD_Data *rd, - unsigned int rd_count); + struct GNUNET_TIME_Absolute expire, + const char *label, + const struct GNUNET_GNSRECORD_Data *rd, + unsigned int rd_count); + + +/** + * Sign name and records, cache derived public key (also keeps the + * private key in static memory, so do not use this function if + * keeping the private key in the process'es RAM is a major issue). + * + * @param key the private key + * @param expire block expiration + * @param label the name for the records + * @param rd record data + * @param rd_count number of records in @a rd + */ +struct GNUNET_GNSRECORD_Block * +GNUNET_GNSRECORD_block_create2 (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, + struct GNUNET_TIME_Absolute expire, + const char *label, + const struct GNUNET_GNSRECORD_Data *rd, + unsigned int rd_count); /** @@ -566,11 +593,10 @@ GNUNET_GNSRECORD_block_verify (const struct GNUNET_GNSRECORD_Block *block); * not well-formed */ int -GNUNET_GNSRECORD_block_decrypt (const struct GNUNET_GNSRECORD_Block *block, - const struct GNUNET_CRYPTO_EcdsaPublicKey *zone_key, - const char *label, - GNUNET_GNSRECORD_RecordCallback proc, - void *proc_cls); +GNUNET_GNSRECORD_block_decrypt ( + const struct GNUNET_GNSRECORD_Block *block, + const struct GNUNET_CRYPTO_EcdsaPublicKey *zone_key, const char *label, + GNUNET_GNSRECORD_RecordCallback proc, void *proc_cls); /** @@ -595,11 +621,11 @@ GNUNET_GNSRECORD_records_cmp (const struct GNUNET_GNSRECORD_Data *a, * @return absolute expiration time */ struct GNUNET_TIME_Absolute -GNUNET_GNSRECORD_record_get_expiration_time (unsigned int rd_count, - const struct GNUNET_GNSRECORD_Data *rd); +GNUNET_GNSRECORD_record_get_expiration_time ( + unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd); -#if 0 /* keep Emacsens' auto-indent happy */ +#if 0 /* keep Emacsens' auto-indent happy */ { #endif #ifdef __cplusplus @@ -608,4 +634,4 @@ GNUNET_GNSRECORD_record_get_expiration_time (unsigned int rd_count, #endif -/** @} */ /* end of group */ +/** @} */ /* end of group */