aboutsummaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2022-10-29 18:06:26 +0900
committerMartin Schanzenbach <schanzen@gnunet.org>2022-10-29 18:06:26 +0900
commit0f2da4636e108c70697c589d9e38781f2bafefba (patch)
tree0e831befd71d4323596cdae55e8431df7720c531 /src/include
parent4e2259f14be320c8e2fe2a672a473e09677269c4 (diff)
downloadgnunet-0f2da4636e108c70697c589d9e38781f2bafefba.tar.gz
gnunet-0f2da4636e108c70697c589d9e38781f2bafefba.zip
IDENTITY
This commit is a major rework of the unclean GNUNET_IDENTITY_*Key structures and its use in serialized objects (e.g. RPC messages). The structures are now no longer to be used directly but instead through their serialization helper functions whenever needed.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/gnunet_identity_service.h82
-rw-r--r--src/include/gnunet_reclaim_service.h37
2 files changed, 105 insertions, 14 deletions
diff --git a/src/include/gnunet_identity_service.h b/src/include/gnunet_identity_service.h
index d234ff552..cd745ba51 100644
--- a/src/include/gnunet_identity_service.h
+++ b/src/include/gnunet_identity_service.h
@@ -85,11 +85,10 @@ struct GNUNET_IDENTITY_Handle;
85 */ 85 */
86struct GNUNET_IDENTITY_Ego; 86struct GNUNET_IDENTITY_Ego;
87 87
88// FIXME: these types are NOT packed,
89// NOT 64-bit aligned, but used in messages!!??
90
91/** 88/**
92 * A private key for an identity as per LSD0001. 89 * A private key for an identity as per LSD0001.
90 * Note that these types are NOT packed and MUST NOT be used in RPC
91 * messages. Use the respective serialization functions.
93 */ 92 */
94struct GNUNET_IDENTITY_PrivateKey 93struct GNUNET_IDENTITY_PrivateKey
95{ 94{
@@ -406,8 +405,7 @@ GNUNET_IDENTITY_cancel (struct GNUNET_IDENTITY_Operation *op);
406 * @return -1 on error, else the compacted length of the key. 405 * @return -1 on error, else the compacted length of the key.
407 */ 406 */
408ssize_t 407ssize_t
409GNUNET_IDENTITY_key_get_length (const struct GNUNET_IDENTITY_PublicKey *key); 408GNUNET_IDENTITY_public_key_get_length (const struct GNUNET_IDENTITY_PublicKey *key);
410
411 409
412/** 410/**
413 * Reads a #GNUNET_IDENTITY_PublicKey from a compact buffer. 411 * Reads a #GNUNET_IDENTITY_PublicKey from a compact buffer.
@@ -416,15 +414,32 @@ GNUNET_IDENTITY_key_get_length (const struct GNUNET_IDENTITY_PublicKey *key);
416 * If the buffer is too small, the function returns -1 as error. 414 * If the buffer is too small, the function returns -1 as error.
417 * If the buffer does not contain a valid key, it returns -2 as error. 415 * If the buffer does not contain a valid key, it returns -2 as error.
418 * 416 *
419 * @param key the key
420 * @param buffer the buffer 417 * @param buffer the buffer
421 * @param len the length of buffer 418 * @param len the length of buffer
422 * @return -1 or -2 on error, else the amount of bytes read from the buffer 419 * @param key the key
420 * @param the amount of bytes read from the buffer
421 * @return GNUNET_SYSERR on error
422 */
423enum GNUNET_GenericReturnValue
424GNUNET_IDENTITY_read_public_key_from_buffer (const void *buffer,
425 size_t len,
426 struct
427 GNUNET_IDENTITY_PublicKey *key,
428 size_t *read);
429
430/**
431 * Get the compacted length of a #GNUNET_IDENTITY_PrivateKey.
432 * Compacted means that it returns the minimum number of bytes this
433 * key is long, as opposed to the union structure inside
434 * #GNUNET_IDENTITY_PrivateKey.
435 * Useful for compact serializations.
436 *
437 * @param key the key.
438 * @return -1 on error, else the compacted length of the key.
423 */ 439 */
424ssize_t 440ssize_t
425GNUNET_IDENTITY_read_key_from_buffer (struct GNUNET_IDENTITY_PublicKey *key, 441GNUNET_IDENTITY_private_key_get_length (const struct
426 const void*buffer, 442 GNUNET_IDENTITY_PrivateKey *key);
427 size_t len);
428 443
429 444
430/** 445/**
@@ -440,10 +455,49 @@ GNUNET_IDENTITY_read_key_from_buffer (struct GNUNET_IDENTITY_PublicKey *key,
440 * @return -1 or -2 on error, else the amount of bytes written to the buffer 455 * @return -1 or -2 on error, else the amount of bytes written to the buffer
441 */ 456 */
442ssize_t 457ssize_t
443GNUNET_IDENTITY_write_key_to_buffer (const struct 458GNUNET_IDENTITY_write_public_key_to_buffer (const struct
444 GNUNET_IDENTITY_PublicKey *key, 459 GNUNET_IDENTITY_PublicKey *key,
445 void*buffer, 460 void*buffer,
446 size_t len); 461 size_t len);
462
463
464/**
465 * Reads a #GNUNET_IDENTITY_PrivateKey from a compact buffer.
466 * The buffer has to contain at least the compacted length of
467 * a #GNUNET_IDENTITY_PrivateKey in bytes.
468 * If the buffer is too small, the function returns GNUNET_SYSERR as error.
469 *
470 * @param buffer the buffer
471 * @param len the length of buffer
472 * @param key the key
473 * @param the amount of bytes read from the buffer
474 * @return GNUNET_SYSERR on error
475 */
476enum GNUNET_GenericReturnValue
477GNUNET_IDENTITY_read_private_key_from_buffer (const void*buffer,
478 size_t len,
479 struct
480 GNUNET_IDENTITY_PrivateKey *key,
481 size_t *read);
482
483
484/**
485 * Writes a #GNUNET_IDENTITY_PrivateKey to a compact buffer.
486 * The buffer requires space for at least the compacted length of
487 * a #GNUNET_IDENTITY_PrivateKey in bytes.
488 * If the buffer is too small, the function returns -1 as error.
489 * If the key is not valid, it returns -2 as error.
490 *
491 * @param key the key
492 * @param buffer the buffer
493 * @param len the length of buffer
494 * @return -1 or -2 on error, else the amount of bytes written to the buffer
495 */
496ssize_t
497GNUNET_IDENTITY_write_private_key_to_buffer (const struct
498 GNUNET_IDENTITY_PrivateKey *key,
499 void*buffer,
500 size_t len);
447 501
448 502
449/** 503/**
diff --git a/src/include/gnunet_reclaim_service.h b/src/include/gnunet_reclaim_service.h
index e9e0f144d..a3f6c19b6 100644
--- a/src/include/gnunet_reclaim_service.h
+++ b/src/include/gnunet_reclaim_service.h
@@ -498,6 +498,43 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h);
498void 498void
499GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op); 499GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op);
500 500
501/**
502 * Get serialized ticket size
503 *
504 * @param tkt the ticket
505 * @return the buffer length requirement for a serialization
506 */
507size_t
508GNUNET_RECLAIM_ticket_serialize_get_size (const struct GNUNET_RECLAIM_Ticket *tkt);
509
510/**
511 * Deserializes a ticket
512 *
513 * @param buffer the buffer to read from
514 * @param len the length of the buffer
515 * @param tkt the ticket to write to (must be allocated)
516 * @param kb_read how many bytes were read from buffer
517 * @return GNUNET_SYSERR on error
518 */
519enum GNUNET_GenericReturnValue
520GNUNET_RECLAIM_read_ticket_from_buffer (const void *buffer,
521 size_t len,
522 struct GNUNET_RECLAIM_Ticket *tkt,
523 size_t *tb_read);
524
525/**
526 * Serializes a ticket
527 *
528 * @param tkt the ticket to serialize
529 * @param buffer the buffer to serialize to (must be allocated with sufficient size
530 * @param len the length of the buffer
531 * @return the number of written bytes or < 0 on error
532 */
533ssize_t
534GNUNET_RECLAIM_write_ticket_to_buffer (const struct
535 GNUNET_RECLAIM_Ticket *tkt,
536 void *buffer,
537 size_t len);
501 538
502#if 0 /* keep Emacsens' auto-indent happy */ 539#if 0 /* keep Emacsens' auto-indent happy */
503{ 540{