gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-anastasis] branch master updated (0ca921b -> 432c38c)


From: gnunet
Subject: [taler-anastasis] branch master updated (0ca921b -> 432c38c)
Date: Sun, 26 Apr 2020 21:33:43 +0200

This is an automated email from the git hooks/post-receive script.

dennis-neufeld pushed a change to branch master
in repository anastasis.

    from 0ca921b  small fixes
     new bdcc0d5  optimized error handling in anastasis_crypto
     new 0ab008c  ANASTASIS_CRYPTO_Iv set to 16 Byte length
     new 56347c7  ANASTASIS_CRYPTO_Iv set to 16 Byte length
     new 5eac11c  const in decryption routine
     new 6d32893  modified salt api
     new 246d6de  fixed salt api
     new 220e6b8  fix json_pack
     new 432c38c  packed structs in crypto lib

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/backend/anastasis-httpd_policy.c        |   6 +-
 src/backend/anastasis-httpd_policy.h        |   2 +-
 src/backend/anastasis-httpd_policy_upload.c |   4 +-
 src/backend/anastasis-httpd_salt.c          |  16 +-
 src/backend/anastasis-httpd_truth.c         |   4 +-
 src/include/anastasis_crypto_lib.h          |  98 ++++++-----
 src/include/anastasis_database_plugin.h     |  22 +--
 src/include/anastasis_service.h             |  12 +-
 src/include/anastasis_testing_lib.h         |  15 +-
 src/lib/anastasis.c                         |  36 ++--
 src/lib/anastasis_api_keyshare_lookup.c     |   6 +-
 src/lib/anastasis_api_policy_lookup.c       |   6 +-
 src/lib/anastasis_api_policy_store.c        |   4 +-
 src/lib/anastasis_api_salt.c                |  23 +--
 src/lib/testing_api_cmd_keyshare_lookup.c   |   4 +-
 src/lib/testing_api_cmd_policy_lookup.c     |   4 +-
 src/lib/testing_api_cmd_policy_store.c      |  10 +-
 src/lib/testing_api_cmd_salt.c              |   2 +-
 src/lib/testing_api_cmd_truth_store.c       |  10 +-
 src/lib/testing_api_trait_account_priv.c    |   4 +-
 src/lib/testing_api_trait_account_pub.c     |   4 +-
 src/stasis/plugin_anastasis_postgres.c      |  18 +-
 src/stasis/test_anastasis_db.c              |   4 +-
 src/util/anastasis_crypto.c                 | 257 ++++++++++++++++------------
 src/util/test_anastasis_crypto.c            |  65 +++----
 25 files changed, 353 insertions(+), 283 deletions(-)

diff --git a/src/backend/anastasis-httpd_policy.c 
b/src/backend/anastasis-httpd_policy.c
index c3327ba..2717783 100644
--- a/src/backend/anastasis-httpd_policy.c
+++ b/src/backend/anastasis-httpd_policy.c
@@ -50,7 +50,7 @@
  */
 MHD_RESULT
 AH_return_policy (struct MHD_Connection *connection,
-                  const struct ANASTASIS_CRYPTO_AccountPublicKey *account_pub,
+                  const struct ANASTASIS_CRYPTO_AccountPublicKeyP *account_pub,
                   unsigned int default_http_status)
 {
   enum ANASTASIS_DB_QueryStatus qs;
@@ -191,7 +191,7 @@ AH_policy_get (struct MHD_Connection *connection,
   struct GNUNET_HashCode recovery_data_hash;
   enum ANASTASIS_DB_QueryStatus qs;
   MHD_RESULT ret;
-  struct ANASTASIS_CRYPTO_AccountPublicKey account_pub;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP account_pub;
 
   GNUNET_assert (0 == strncmp (url,
                                "/policy/",
@@ -205,7 +205,7 @@ AH_policy_get (struct MHD_Connection *connection,
                                        strlen (account),
                                        &account_pub,
                                        sizeof (struct
-                                               
ANASTASIS_CRYPTO_AccountPublicKey)))
+                                               
ANASTASIS_CRYPTO_AccountPublicKeyP)))
     {
       return TALER_MHD_reply_with_error (connection,
                                          MHD_HTTP_BAD_REQUEST,
diff --git a/src/backend/anastasis-httpd_policy.h 
b/src/backend/anastasis-httpd_policy.h
index 0eb9566..1373cf0 100644
--- a/src/backend/anastasis-httpd_policy.h
+++ b/src/backend/anastasis-httpd_policy.h
@@ -68,7 +68,7 @@ AH_handler_policy_post (struct MHD_Connection *connection,
  */
 MHD_RESULT
 AH_return_policy (struct MHD_Connection *connection,
-                  const struct ANASTASIS_CRYPTO_AccountPublicKey *account,
+                  const struct ANASTASIS_CRYPTO_AccountPublicKeyP *account,
                   unsigned int default_http_status);
 
 
diff --git a/src/backend/anastasis-httpd_policy_upload.c 
b/src/backend/anastasis-httpd_policy_upload.c
index f13d809..cb665e2 100644
--- a/src/backend/anastasis-httpd_policy_upload.c
+++ b/src/backend/anastasis-httpd_policy_upload.c
@@ -57,7 +57,7 @@ struct PolicyUploadContext
   /**
    * Public key of the account holder.
    */
-  struct ANASTASIS_CRYPTO_AccountPublicKey account;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP account;
 
   /**
    * Hash of the previous upload, or zeros if first upload.
@@ -650,7 +650,7 @@ AH_handler_policy_post (struct MHD_Connection *connection,
                         size_t *recovery_data_size)
 {
   struct PolicyUploadContext *puc;
-  struct ANASTASIS_CRYPTO_AccountPublicKey accountPubP;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP accountPubP;
 
   puc = *con_cls;
   if (NULL == puc)
diff --git a/src/backend/anastasis-httpd_salt.c 
b/src/backend/anastasis-httpd_salt.c
index 7b27b7f..4c0c47a 100644
--- a/src/backend/anastasis-httpd_salt.c
+++ b/src/backend/anastasis-httpd_salt.c
@@ -38,12 +38,20 @@ AH_handler_salt (struct MHD_Connection *connection,
                  const char *url,
                  void **con_cls)
 {
+  struct ANASTASIS_CRYPTO_SaltP salt;
+
+  GNUNET_CRYPTO_hash (AH_server_salt,
+                      strlen (AH_server_salt),
+                      &salt.salt);
+
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Server Salt: %s\n",
-              (char *) AH_server_salt);
+              "At %s:%d Server Salt is %s-%llu b\n", __FILE__, __LINE__,
+              TALER_B2S (&salt),
+              (unsigned long long) sizeof (salt));
+
   return TALER_MHD_reply_json_pack (connection,
                                     MHD_HTTP_OK,
-                                    "{s:s}",
+                                    "{s:O}",
                                     "server_salt",
-                                    (char *) AH_server_salt);
+                                    GNUNET_JSON_from_data_auto (&salt));
 }
\ No newline at end of file
diff --git a/src/backend/anastasis-httpd_truth.c 
b/src/backend/anastasis-httpd_truth.c
index 4c2059d..350d621 100644
--- a/src/backend/anastasis-httpd_truth.c
+++ b/src/backend/anastasis-httpd_truth.c
@@ -41,7 +41,7 @@ AH_handler_truth_get (struct MHD_Connection *connection,
 {
   // FIXME: Handle truth get
   uuid_t uuid;
-  struct ANASTASIS_CRYPTO_TruthKey truth_key;
+  struct ANASTASIS_CRYPTO_TruthKeyP truth_key;
   struct GNUNET_HashCode challenge_response;
   const char *challenge_response_s;
   void *encrypted_truth;
@@ -92,7 +92,7 @@ AH_handler_truth_get (struct MHD_Connection *connection,
                                          strlen (tdk),
                                          &truth_key,
                                          sizeof (struct
-                                                 ANASTASIS_CRYPTO_TruthKey))))
+                                                 ANASTASIS_CRYPTO_TruthKeyP))))
     {
       GNUNET_break_op (0);
       return TALER_MHD_reply_with_error (connection,
diff --git a/src/include/anastasis_crypto_lib.h 
b/src/include/anastasis_crypto_lib.h
index 902606c..a7e21f4 100644
--- a/src/include/anastasis_crypto_lib.h
+++ b/src/include/anastasis_crypto_lib.h
@@ -25,10 +25,12 @@
 #include <jansson.h>
 #include <gnunet/gnunet_crypto_lib.h>
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * An EdDSA public key that is used to identify a user's account.
  */
-struct ANASTASIS_CRYPTO_AccountPublicKey
+struct ANASTASIS_CRYPTO_AccountPublicKeyP
 {
   struct GNUNET_CRYPTO_EddsaPublicKey pub;
 };
@@ -37,7 +39,7 @@ struct ANASTASIS_CRYPTO_AccountPublicKey
 /**
  * An EdDSA private key that is used to identify a user's account.
  */
-struct ANASTASIS_CRYPTO_AccountPrivateKey
+struct ANASTASIS_CRYPTO_AccountPrivateKeyP
 {
   struct GNUNET_CRYPTO_EddsaPrivateKey priv;
 };
@@ -46,61 +48,61 @@ struct ANASTASIS_CRYPTO_AccountPrivateKey
 /**
  * Specifies a TruthKey which is used to decrypt the Truth stored by the user.
 */
-struct ANASTASIS_CRYPTO_TruthKey
+struct ANASTASIS_CRYPTO_TruthKeyP
 {
-  struct GNUNET_HashCode key;
+  struct GNUNET_HashCode key GNUNET_PACKED;
 };
 
 
 /**
- * Specifies a Salt value, should be 32 Byte large.
+ * Specifies a Salt value as a hash.
 */
-struct ANASTASIS_CRYPTO_Salt
+struct ANASTASIS_CRYPTO_SaltP
 {
-  const char *salt;
+  struct GNUNET_HashCode salt GNUNET_PACKED;
 };
 
 
 /**
  * Specifies a policy key which is used to decrypt the master key
 */
-struct ANASTASIS_CRYPTO_PolicyKey
+struct ANASTASIS_CRYPTO_PolicyKeyP
 {
-  struct GNUNET_HashCode key;
+  struct GNUNET_HashCode key GNUNET_PACKED;
 };
 
 
 /**
  * Specifies an encrypted master key, the key is used to encrypt the core 
secret from the user
 */
-struct ANASTASIS_CRYPTO_EncryptedMasterKey
+struct ANASTASIS_CRYPTO_EncryptedMasterKeyP
 {
-  struct GNUNET_HashCode key;
+  struct GNUNET_HashCode key GNUNET_PACKED;
 };
 
 
 /**
  * Specifies a Nonce used for the AES encryption, here defined as 32Byte large.
 */
-struct ANASTASIS_CRYPTO_Nonce
+struct ANASTASIS_CRYPTO_NonceP
 {
   uint32_t nonce[8];
 };
 
 
 /**
- * Specifies an IV used for the AES encryption, here defined as 12Byte large.
+ * Specifies an IV used for the AES encryption, here defined as 16Byte large.
 */
-struct ANASTASIS_CRYPTO_Iv
+struct ANASTASIS_CRYPTO_IvP
 {
-  uint32_t iv[3];
+  uint32_t iv[4];
 };
 
 
 /**
  * Specifies an symmetric key used for the AES encryption, here defined as 
32Byte large.
 */
-struct ANASTASIS_CRYPTO_SymKey
+struct ANASTASIS_CRYPTO_SymKeyP
 {
   uint32_t key[8];
 };
@@ -109,7 +111,7 @@ struct ANASTASIS_CRYPTO_SymKey
 /**
  * Specifies an AES Tag used for the AES authentication, here defined as 16 
Byte large.
 */
-struct ANASTASIS_CRYPTO_AesTag
+struct ANASTASIS_CRYPTO_AesTagP
 {
   uint32_t aes_tag[4];
 };
@@ -119,7 +121,7 @@ struct ANASTASIS_CRYPTO_AesTag
  * Specifies a Key Share from an escrow provider, the combined keyshares 
generate the EscrowMasterKey
  * which is used to decrypt the Secret from the user.
 */
-struct ANASTASIS_CRYPTO_KeyShare
+struct ANASTASIS_CRYPTO_KeyShareP
 {
   uint32_t key[8];
 };
@@ -128,18 +130,18 @@ struct ANASTASIS_CRYPTO_KeyShare
 /**
  * Specifies an encrypted KeyShare
 */
-struct ANASTASIS_CRYPTO_EncryptedKeyShare
+struct ANASTASIS_CRYPTO_EncryptedKeyShareP
 {
-  struct ANASTASIS_CRYPTO_Nonce nonce;
-  struct ANASTASIS_CRYPTO_AesTag tag;
-  struct ANASTASIS_CRYPTO_KeyShare keyshare;
+  struct ANASTASIS_CRYPTO_NonceP nonce;
+  struct ANASTASIS_CRYPTO_AesTagP tag;
+  struct ANASTASIS_CRYPTO_KeyShareP keyshare;
 };
 
 
 /**
  * The escrow master key is the key used to encrypt the user secret 
(MasterKey).
  */
-struct ANASTASIS_CRYPTO_EscrowMasterKey
+struct ANASTASIS_CRYPTO_EscrowMasterKeyP
 {
   uint32_t key[8];
 };
@@ -149,11 +151,13 @@ struct ANASTASIS_CRYPTO_EscrowMasterKey
  * The user identifier consists of user information and the server salt. It is 
used as
  * entropy source to generate the account public key and the encryption keys.
  */
-struct ANASTASIS_CRYPTO_UserIdentifier
+struct ANASTASIS_CRYPTO_UserIdentifierP
 {
   uint32_t hash[8];
 };
 
+GNUNET_NETWORK_STRUCT_END
+
 
 /**
  * Creates the UserIdentifier, it is used as entropy source for the encryption 
keys and
@@ -165,8 +169,8 @@ struct ANASTASIS_CRYPTO_UserIdentifier
 void
 ANASTASIS_CRYPTO_user_identifier_derive (
   const json_t *id_data,
-  const struct ANASTASIS_CRYPTO_Salt *server_salt,
-  struct ANASTASIS_CRYPTO_UserIdentifier *id);
+  const struct ANASTASIS_CRYPTO_SaltP *server_salt,
+  struct ANASTASIS_CRYPTO_UserIdentifierP *id);
 
 
 /**
@@ -176,8 +180,8 @@ ANASTASIS_CRYPTO_user_identifier_derive (
  */
 void
 ANASTASIS_CRYPTO_account_public_key_derive (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
-  struct ANASTASIS_CRYPTO_AccountPublicKey *pub_key);
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP *pub_key);
 
 /**
  * //FIXME combine these two
@@ -187,7 +191,7 @@ ANASTASIS_CRYPTO_account_public_key_derive (
  */
 void
 ANASTASIS_CRYPTO_account_private_key_derive (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
   struct GNUNET_CRYPTO_EddsaPrivateKey *priv_key);
 
 /**
@@ -203,7 +207,7 @@ ANASTASIS_CRYPTO_account_private_key_derive (
  */
 void
 ANASTASIS_CRYPTO_recovery_document_encrypt (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
   const void *rec_doc,
   size_t rd_size,
   void **enc_rec_doc,
@@ -224,7 +228,7 @@ ANASTASIS_CRYPTO_recovery_document_encrypt (
  */
 void
 ANASTASIS_CRYPTO_recovery_document_decrypt (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
   const void *enc_rec_doc,
   size_t erd_size,
   void **rec_doc,
@@ -240,9 +244,9 @@ ANASTASIS_CRYPTO_recovery_document_decrypt (
  */
 void
 ANASTASIS_CRYPTO_keyshare_encrypt (
-  const struct ANASTASIS_CRYPTO_KeyShare *key_share,
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
-  struct ANASTASIS_CRYPTO_EncryptedKeyShare **enc_key_share);
+  const struct ANASTASIS_CRYPTO_KeyShareP *key_share,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
+  struct ANASTASIS_CRYPTO_EncryptedKeyShareP **enc_key_share);
 
 
 /**
@@ -254,9 +258,9 @@ ANASTASIS_CRYPTO_keyshare_encrypt (
  */
 void
 ANASTASIS_CRYPTO_keyshare_decrypt (
-  const struct ANASTASIS_CRYPTO_EncryptedKeyShare *enc_key_share,
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
-  struct ANASTASIS_CRYPTO_KeyShare **key_share);
+  const struct ANASTASIS_CRYPTO_EncryptedKeyShareP *enc_key_share,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
+  struct ANASTASIS_CRYPTO_KeyShareP **key_share);
 
 
 /**
@@ -273,7 +277,7 @@ ANASTASIS_CRYPTO_keyshare_decrypt (
  */
 void
 ANASTASIS_CRYPTO_truth_encrypt (
-  const struct ANASTASIS_CRYPTO_TruthKey *truth_enc_key,
+  const struct ANASTASIS_CRYPTO_TruthKeyP *truth_enc_key,
   const void *truth,
   size_t truth_size,
   void **enc_truth,
@@ -293,7 +297,7 @@ ANASTASIS_CRYPTO_truth_encrypt (
  */
 void
 ANASTASIS_CRYPTO_truth_decrypt (
-  const struct ANASTASIS_CRYPTO_TruthKey *truth_enc_key,
+  const struct ANASTASIS_CRYPTO_TruthKeyP *truth_enc_key,
   const void *enc_truth,
   size_t ect_size,
   void **truth,
@@ -308,7 +312,7 @@ ANASTASIS_CRYPTO_truth_decrypt (
  */
 void
 ANASTASIS_CRYPTO_keyshare_create (
-  struct ANASTASIS_CRYPTO_KeyShare *key_share);
+  struct ANASTASIS_CRYPTO_KeyShareP *key_share);
 
 
 /**
@@ -322,10 +326,10 @@ ANASTASIS_CRYPTO_keyshare_create (
  */
 void
 ANASTASIS_CRYPTO_policy_key_derive (
-  const struct ANASTASIS_CRYPTO_KeyShare *key_shares,
+  const struct ANASTASIS_CRYPTO_KeyShareP *key_shares,
   unsigned int keyshare_length,
-  const struct ANASTASIS_CRYPTO_Salt *salt,
-  struct ANASTASIS_CRYPTO_PolicyKey *policy_key);
+  const struct ANASTASIS_CRYPTO_SaltP *salt,
+  struct ANASTASIS_CRYPTO_PolicyKeyP *policy_key);
 
 
 /**
@@ -344,12 +348,12 @@ ANASTASIS_CRYPTO_policy_key_derive (
  */
 void
 ANASTASIS_CRYPTO_core_secret_encrypt (
-  const struct ANASTASIS_CRYPTO_PolicyKey *policy_keys,
+  const struct ANASTASIS_CRYPTO_PolicyKeyP *policy_keys,
   unsigned int policy_keys_length,
   const void *core_secret,
   size_t core_secret_size,
   void **enc_core_secret,
-  struct ANASTASIS_CRYPTO_EncryptedMasterKey *encrypted_master_keys);
+  struct ANASTASIS_CRYPTO_EncryptedMasterKeyP *encrypted_master_keys);
 
 
 /**
@@ -365,8 +369,8 @@ ANASTASIS_CRYPTO_core_secret_encrypt (
  */
 void
 ANASTASIS_CRYPTO_core_secret_recover (
-  const struct ANASTASIS_CRYPTO_EncryptedMasterKey *encrypted_master_key,
-  const struct ANASTASIS_CRYPTO_PolicyKey policy_key,
+  const struct ANASTASIS_CRYPTO_EncryptedMasterKeyP *encrypted_master_key,
+  const struct ANASTASIS_CRYPTO_PolicyKeyP policy_key,
   const void *encrypted_core_secret,
   size_t encrypted_core_secret_size,
   void **core_secret,
diff --git a/src/include/anastasis_database_plugin.h 
b/src/include/anastasis_database_plugin.h
index b58a3e8..407eae0 100644
--- a/src/include/anastasis_database_plugin.h
+++ b/src/include/anastasis_database_plugin.h
@@ -33,12 +33,12 @@
  */
 struct ANASTASIS_DB_Truth
 {
-  struct ANASTASIS_CRYPTO_EncryptedKeyShare keyshare_data;
+  struct ANASTASIS_CRYPTO_EncryptedKeyShareP keyshare_data;
 
-  struct ANASTASIS_CRYPTO_Nonce nonce;
+  struct ANASTASIS_CRYPTO_NonceP nonce;
 
   // AES_GCM_Tag
-  struct ANASTASIS_CRYPTO_AesTag aes_gcm_tag;
+  struct ANASTASIS_CRYPTO_AesTagP aes_gcm_tag;
 
   void *encrypted_truth;
 
@@ -179,7 +179,7 @@ struct ANASTASIS_DatabasePlugin
   enum ANASTASIS_DB_QueryStatus
   (*store_recovery_document)(void *cls,
                              const struct
-                             ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                             ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                              const struct
                              ANASTASIS_AccountSignatureP *account_sig,
                              const struct
@@ -205,7 +205,7 @@ struct ANASTASIS_DatabasePlugin
   enum ANASTASIS_DB_QueryStatus
   (*get_recovery_document)(void *cls,
                            const struct
-                           ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                           ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                            struct
                            ANASTASIS_AccountSignatureP *account_sig,
                            struct
@@ -229,7 +229,7 @@ struct ANASTASIS_DatabasePlugin
   enum ANASTASIS_DB_QueryStatus
   (*get_latest_recovery_document)(void *cls,
                                   const struct
-                                  ANASTASIS_CRYPTO_AccountPublicKey *
+                                  ANASTASIS_CRYPTO_AccountPublicKeyP *
                                   anastasis_pub,
                                   struct
                                   ANASTASIS_AccountSignatureP *account_sig,
@@ -257,7 +257,7 @@ struct ANASTASIS_DatabasePlugin
   (*store_truth)(void *cls,
                  const uuid_t *uuid,
                  const struct
-                 ANASTASIS_CRYPTO_EncryptedKeyShare *key_share_data,
+                 ANASTASIS_CRYPTO_EncryptedKeyShareP *key_share_data,
                  const char *mime_type,
                  const void *encrypted_truth,
                  size_t encrypted_truth_size,
@@ -304,7 +304,7 @@ struct ANASTASIS_DatabasePlugin
   enum ANASTASIS_DB_QueryStatus
   (*lookup_account)(void *cls,
                     const struct
-                    ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                    ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                     struct GNUNET_HashCode *recovery_data_hash);
 
   /**
@@ -318,7 +318,7 @@ struct ANASTASIS_DatabasePlugin
   enum ANASTASIS_DB_QueryStatus
   (*lookup_pending_payments_by_account)(void *cls,
                                         const struct
-                                        ANASTASIS_CRYPTO_AccountPublicKey *
+                                        ANASTASIS_CRYPTO_AccountPublicKeyP *
                                         anastasis_pub,
                                         ANASTASIS_DB_PaymentPendingIterator it,
                                         void *it_cls);
@@ -335,7 +335,7 @@ struct ANASTASIS_DatabasePlugin
   enum ANASTASIS_DB_QueryStatus
   (*increment_lifetime)(void *cls,
                         const struct
-                        ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                        ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                         const struct
                         ANASTASIS_PaymentSecretP *payment_identifier,
                         struct GNUNET_TIME_Relative lifetime);
@@ -356,7 +356,7 @@ struct ANASTASIS_DatabasePlugin
   enum ANASTASIS_DB_QueryStatus
   (*record_payment)(void *cls,
                     const struct
-                    ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                    ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                     uint32_t post_counter,
                     const struct ANASTASIS_PaymentSecretP *payment_secret,
                     const struct TALER_Amount *amount);
diff --git a/src/include/anastasis_service.h b/src/include/anastasis_service.h
index 1b8e9d9..c21ed9d 100644
--- a/src/include/anastasis_service.h
+++ b/src/include/anastasis_service.h
@@ -253,7 +253,7 @@ struct ANASTASIS_UploadDetails
 typedef void
 (*ANASTASIS_SaltCallback)(void *cls,
                           unsigned int http_status,
-                          const struct ANASTASIS_CRYPTO_Salt *salt);
+                          const struct ANASTASIS_CRYPTO_SaltP *salt);
 
 
 struct ANASTASIS_SaltOperation *
@@ -300,7 +300,7 @@ struct ANASTASIS_SaltOperation
   /**
    * Server salt.
    */
-  struct ANASTASIS_CRYPTO_Salt salt;
+  struct ANASTASIS_CRYPTO_SaltP salt;
 };
 
 
@@ -339,7 +339,7 @@ struct ANASTASIS_PolicyLookupOperation *
 ANASTASIS_policy_lookup (struct GNUNET_CURL_Context *ctx,
                          const char *backend_url,
                          const struct
-                         ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                         ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                          ANASTASIS_PolicyLookupCallback cb,
                          void *cb_cls);
 
@@ -358,7 +358,7 @@ struct ANASTASIS_PolicyLookupOperation *
 ANASTASIS_policy_lookup_version (struct GNUNET_CURL_Context *ctx,
                                  const char *backend_url,
                                  const struct
-                                 ANASTASIS_CRYPTO_AccountPublicKey *
+                                 ANASTASIS_CRYPTO_AccountPublicKeyP *
                                  anastasis_pub,
                                  ANASTASIS_PolicyLookupCallback cb,
                                  void *cb_cls,
@@ -415,7 +415,7 @@ struct ANASTASIS_PolicyStoreOperation *
 ANASTASIS_policy_store (struct GNUNET_CURL_Context *ctx,
                         const char *backend_url,
                         const struct
-                        ANASTASIS_CRYPTO_AccountPrivateKey *anastasis_priv,
+                        ANASTASIS_CRYPTO_AccountPrivateKeyP *anastasis_priv,
                         const struct
                         GNUNET_HashCode *prev_recovery_data_hash,
                         const void *recovery_data,
@@ -473,7 +473,7 @@ struct ANASTASIS_KeyShareLookupOperation *
 ANASTASIS_keyshare_lookup (struct GNUNET_CURL_Context *ctx,
                            const char *backend_url,
                            const uuid_t *truth_uuid,
-                           const struct ANASTASIS_CRYPTO_TruthKey *truth_key,
+                           const struct ANASTASIS_CRYPTO_TruthKeyP *truth_key,
                            const struct GNUNET_HashCode *hashed_answer,
                            ANASTASIS_KeyShareLookupCallback cb,
                            void *cb_cls);
diff --git a/src/include/anastasis_testing_lib.h 
b/src/include/anastasis_testing_lib.h
index f708771..9ab793d 100644
--- a/src/include/anastasis_testing_lib.h
+++ b/src/include/anastasis_testing_lib.h
@@ -83,7 +83,8 @@ ANASTASIS_TESTING_get_trait_account_pub (const struct
                                          TALER_TESTING_Command *cmd,
                                          unsigned int index,
                                          const struct
-                                         ANASTASIS_CRYPTO_AccountPublicKey 
**pub);
+                                         ANASTASIS_CRYPTO_AccountPublicKeyP **
+                                         pub);
 
 
 /**
@@ -96,7 +97,7 @@ ANASTASIS_TESTING_get_trait_account_pub (const struct
 struct TALER_TESTING_Trait
 ANASTASIS_TESTING_make_trait_account_pub (unsigned int index,
                                           const struct
-                                          ANASTASIS_CRYPTO_AccountPublicKey 
*h);
+                                          ANASTASIS_CRYPTO_AccountPublicKeyP 
*h);
 
 
 /**
@@ -112,7 +113,7 @@ ANASTASIS_TESTING_get_trait_account_priv (const struct
                                           TALER_TESTING_Command *cmd,
                                           unsigned int index,
                                           const struct
-                                          ANASTASIS_CRYPTO_AccountPrivateKey **
+                                          ANASTASIS_CRYPTO_AccountPrivateKeyP 
**
                                           priv);
 
 
@@ -126,7 +127,7 @@ ANASTASIS_TESTING_get_trait_account_priv (const struct
 struct TALER_TESTING_Trait
 ANASTASIS_TESTING_make_trait_account_priv (unsigned int index,
                                            const struct
-                                           ANASTASIS_CRYPTO_AccountPrivateKey *
+                                           ANASTASIS_CRYPTO_AccountPrivateKeyP 
*
                                            priv);
 
 /**
@@ -346,7 +347,7 @@ enum ANASTASIS_TESTING_TruthStoreOption
  * @param key_str a str you want to be a truth key
  * @return truthkey
  */
-struct ANASTASIS_CRYPTO_TruthKey
+struct ANASTASIS_CRYPTO_TruthKeyP
 ANASTASIS_TESTING_make_truthkey (const char *key_str);
 
 /**
@@ -374,7 +375,7 @@ ANASTASIS_TESTING_make_truth_example (const char *method,
                                       const char *mime_type,
                                       const struct GNUNET_HashCode answer,
                                       const struct
-                                      ANASTASIS_CRYPTO_TruthKey key);
+                                      ANASTASIS_CRYPTO_TruthKeyP key);
 
 /**
  * Make the "truth store" command.
@@ -412,7 +413,7 @@ ANASTASIS_TESTING_cmd_keyshare_lookup (const char *label,
                                        unsigned int http_status,
                                        const struct GNUNET_HashCode answer,
                                        const struct
-                                       ANASTASIS_CRYPTO_TruthKey key,
+                                       ANASTASIS_CRYPTO_TruthKeyP key,
                                        const char *upload_ref);
 
 /**
diff --git a/src/lib/anastasis.c b/src/lib/anastasis.c
index aca4e78..22db6f7 100644
--- a/src/lib/anastasis.c
+++ b/src/lib/anastasis.c
@@ -58,7 +58,7 @@ struct SaltState
 static void
 salt_cb (void *cls,
          unsigned int http_status,
-         const struct ANASTASIS_CRYPTO_Salt *salt)
+         const struct ANASTASIS_CRYPTO_SaltP *salt)
 {
   struct SaltState *ss = cls;
 
@@ -118,11 +118,11 @@ struct ANASTASIS_Challenge
   /**
    * Key used to encrypt the truth passed to the server
    */
-  struct ANASTASIS_CRYPTO_TruthKey truth_key;
+  struct ANASTASIS_CRYPTO_TruthKeyP truth_key;
   /**
    * Salt used to encrypt the truth
    */
-  struct ANASTASIS_CRYPTO_Salt truth_salt;
+  struct ANASTASIS_CRYPTO_SaltP truth_salt;
   /**
    * plaintext challenge which is sent to the client
    */
@@ -210,11 +210,11 @@ struct ANASTASIS_Recovery
   /**
    * Identity key material used for the derivation of keys
   */
-  struct ANASTASIS_CRYPTO_UserIdentifier id;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id;
   /**
    * Public key for a request
   */
-  struct ANASTASIS_CRYPTO_AccountPublicKey pub_key;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP pub_key;
   /**
    * Curl context
   */
@@ -436,15 +436,15 @@ struct ANASTASIS_Truth
   /**
    * keyshare of this truth, used to generate policy keys
    */
-  struct ANASTASIS_CRYPTO_KeyShare key_share;
+  struct ANASTASIS_CRYPTO_KeyShareP key_share;
   /**
    * key used to encrypt this truth
    */
-  struct ANASTASIS_CRYPTO_TruthKey truth_key;
+  struct ANASTASIS_CRYPTO_TruthKeyP truth_key;
   /**
    * salt used to encrypt the truth
    */
-  struct ANASTASIS_CRYPTO_Salt *salt;
+  struct ANASTASIS_CRYPTO_SaltP *salt;
 };
 
 /**
@@ -463,7 +463,7 @@ struct ANASTASIS_TruthUpload
   /**
    * User identifier used for the keyshare encryption
    */
-  struct ANASTASIS_CRYPTO_UserIdentifier id;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id;
   /**
    * Callback which tells the user the payment details for the upload
    */
@@ -599,7 +599,7 @@ ANASTASIS_truth_upload (const json_t *id_data,
   tu = GNUNET_new (struct ANASTASIS_TruthUpload);
   struct ANASTASIS_Truth *t;
   t = GNUNET_new (struct ANASTASIS_Truth);
-  struct ANASTASIS_CRYPTO_EncryptedKeyShare *encrypted_key_share;
+  struct ANASTASIS_CRYPTO_EncryptedKeyShareP *encrypted_key_share;
   void *encrypted_truth;
   size_t encrypted_truth_size;
   json_t *truth;
@@ -627,7 +627,7 @@ ANASTASIS_truth_upload (const json_t *id_data,
 
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_STRONG,
                               &t->truth_key,
-                              sizeof (struct ANASTASIS_CRYPTO_TruthKey));
+                              sizeof (struct ANASTASIS_CRYPTO_TruthKeyP));
 
   ANASTASIS_CRYPTO_truth_encrypt (&t->truth_key,
                                   truth_data,
@@ -702,11 +702,11 @@ struct ANASTASIS_Policy
   /**
   * Encrypted policy master key
   */
-  struct ANASTASIS_CRYPTO_PolicyKey policy_key;
+  struct ANASTASIS_CRYPTO_PolicyKeyP policy_key;
   /**
    * salt used to encrypt the master key
    */
-  struct ANASTASIS_CRYPTO_Salt salt;
+  struct ANASTASIS_CRYPTO_SaltP salt;
   /**
    * set of truths inside this policy
    */
@@ -729,7 +729,7 @@ ANASTASIS_policy_create (struct ANASTASIS_Truth *truths[],
 {
   struct ANASTASIS_Policy *p;
   p = GNUNET_new (struct ANASTASIS_Policy);
-  struct ANASTASIS_CRYPTO_KeyShare key_shares[truths_len];
+  struct ANASTASIS_CRYPTO_KeyShareP key_shares[truths_len];
   uuid_t uuids[truths_len];
   for (unsigned int i = 0; i < truths_len; i++)
   {
@@ -800,7 +800,7 @@ struct PolicyStoreState
   /**
    * User identifier used as entropy source for the account public key
    */
-  struct ANASTASIS_CRYPTO_UserIdentifier id;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id;
   /**
    * Struct to obtain the salt from the server
    */
@@ -820,7 +820,7 @@ struct PolicyStoreState
   /**
    * Eddsa Publickey.
    */
-  struct ANASTASIS_CRYPTO_AccountPublicKey anastasis_pub;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP anastasis_pub;
   /**
    * Eddsa Privatekey.
    */
@@ -995,9 +995,9 @@ ANASTASIS_secret_share (const json_t *id_data,
   struct PolicyStoreState pss[truths_len];
   ss->pss = &pss;
   ss->pss_length = truths_len;
-  struct ANASTASIS_CRYPTO_EncryptedMasterKey
+  struct ANASTASIS_CRYPTO_EncryptedMasterKeyP
     encrypted_master_keys[policies_len];
-  struct ANASTASIS_CRYPTO_PolicyKey policy_keys[policies_len];
+  struct ANASTASIS_CRYPTO_PolicyKeyP policy_keys[policies_len];
   void *encrypted_core_secret;
 
   // Recovery document contains the array decryption policies and the array 
escrow methods
diff --git a/src/lib/anastasis_api_keyshare_lookup.c 
b/src/lib/anastasis_api_keyshare_lookup.c
index 653e858..8e0dcaf 100644
--- a/src/lib/anastasis_api_keyshare_lookup.c
+++ b/src/lib/anastasis_api_keyshare_lookup.c
@@ -72,7 +72,7 @@ struct ANASTASIS_KeyShareLookupOperation
   /**
    * Key to decrypt the truth on the server
    */
-  const struct ANASTASIS_CRYPTO_TruthKey *truth_key;
+  const struct ANASTASIS_CRYPTO_TruthKeyP *truth_key;
 
   /**
    * Hash of the response (security question)
@@ -216,7 +216,7 @@ handle_header (char *buffer,
                                        strlen (hdr_val),
                                        &kslo->truth_key,
                                        sizeof (struct
-                                               ANASTASIS_CRYPTO_TruthKey)))
+                                               ANASTASIS_CRYPTO_TruthKeyP)))
     {
       GNUNET_break_op (0);
       GNUNET_free (ndup);
@@ -244,7 +244,7 @@ struct ANASTASIS_KeyShareLookupOperation *
 ANASTASIS_keyshare_lookup (struct GNUNET_CURL_Context *ctx,
                            const char *backend_url,
                            const uuid_t *truth_uuid,
-                           const struct ANASTASIS_CRYPTO_TruthKey *truth_key,
+                           const struct ANASTASIS_CRYPTO_TruthKeyP *truth_key,
                            const struct GNUNET_HashCode *hashed_answer,
                            ANASTASIS_KeyShareLookupCallback cb,
                            void *cb_cls)
diff --git a/src/lib/anastasis_api_policy_lookup.c 
b/src/lib/anastasis_api_policy_lookup.c
index f5b3c84..0f89741 100644
--- a/src/lib/anastasis_api_policy_lookup.c
+++ b/src/lib/anastasis_api_policy_lookup.c
@@ -72,7 +72,7 @@ struct ANASTASIS_PolicyLookupOperation
   /**
    * Public key of the account we are downloading from.
    */
-  struct ANASTASIS_CRYPTO_AccountPublicKey account_pub;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP account_pub;
 
   /**
    * Signature returned in the "Sync-Signature"
@@ -294,7 +294,7 @@ struct ANASTASIS_PolicyLookupOperation *
 ANASTASIS_policy_lookup (struct GNUNET_CURL_Context *ctx,
                          const char *backend_url,
                          const struct
-                         ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                         ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                          ANASTASIS_PolicyLookupCallback cb,
                          void *cb_cls)
 {
@@ -350,7 +350,7 @@ struct ANASTASIS_PolicyLookupOperation *
 ANASTASIS_policy_lookup_version (struct GNUNET_CURL_Context *ctx,
                                  const char *backend_url,
                                  const struct
-                                 ANASTASIS_CRYPTO_AccountPublicKey *
+                                 ANASTASIS_CRYPTO_AccountPublicKeyP *
                                  anastasis_pub,
                                  ANASTASIS_PolicyLookupCallback cb,
                                  void *cb_cls,
diff --git a/src/lib/anastasis_api_policy_store.c 
b/src/lib/anastasis_api_policy_store.c
index df6e1ec..e4036b3 100644
--- a/src/lib/anastasis_api_policy_store.c
+++ b/src/lib/anastasis_api_policy_store.c
@@ -273,7 +273,7 @@ struct ANASTASIS_PolicyStoreOperation *
 ANASTASIS_policy_store (struct GNUNET_CURL_Context *ctx,
                         const char *backend_url,
                         const struct
-                        ANASTASIS_CRYPTO_AccountPrivateKey *anastasis_priv,
+                        ANASTASIS_CRYPTO_AccountPrivateKeyP *anastasis_priv,
                         const struct
                         GNUNET_HashCode *prev_recovery_data_hash,
                         const void *recovery_data,
@@ -394,7 +394,7 @@ ANASTASIS_policy_store (struct GNUNET_CURL_Context *ctx,
   {
     char *acc_pub_str;
     char *path;
-    struct ANASTASIS_CRYPTO_AccountPublicKey pub;
+    struct ANASTASIS_CRYPTO_AccountPublicKeyP pub;
 
     GNUNET_CRYPTO_eddsa_key_get_public (&anastasis_priv->priv,
                                         &pub.pub);
diff --git a/src/lib/anastasis_api_salt.c b/src/lib/anastasis_api_salt.c
index f21ee59..eac5e9e 100644
--- a/src/lib/anastasis_api_salt.c
+++ b/src/lib/anastasis_api_salt.c
@@ -56,21 +56,24 @@ handle_salt_finished (void *cls,
   case MHD_HTTP_OK:
     {
       struct GNUNET_JSON_Specification spec[] = {
-        GNUNET_JSON_spec_string ("server_salt", &so->salt.salt),
+        GNUNET_JSON_spec_fixed_auto ("server_salt", &so->salt),
         GNUNET_JSON_spec_end ()
       };
 
-      GNUNET_assert (GNUNET_OK ==
-                     GNUNET_JSON_parse (json,
-                                        spec,
-                                        NULL, NULL));
+      if (GNUNET_OK !=
+          GNUNET_JSON_parse (json,
+                             spec,
+                             NULL, NULL))
+      {
+        GNUNET_break (0);
+        return;
+      }
 
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Salt json from download: %s\n\n",
-                  json_dumps (json, JSON_COMPACT));
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Salt from download: %s\n\n",
-                  so->salt.salt);
+                  "At %s:%d Server Salt from Download is %s-%llu b\n", 
__FILE__,
+                  __LINE__,
+                  TALER_B2S (&so->salt),
+                  (unsigned long long) sizeof (so->salt));
       so->cb (so->cb_cls,
               response_code,
               &so->salt);
diff --git a/src/lib/testing_api_cmd_keyshare_lookup.c 
b/src/lib/testing_api_cmd_keyshare_lookup.c
index 8aafc81..37f21a6 100644
--- a/src/lib/testing_api_cmd_keyshare_lookup.c
+++ b/src/lib/testing_api_cmd_keyshare_lookup.c
@@ -60,7 +60,7 @@ struct KeyShareLookupState
   /**
    * Key to decrypt truth
    */
-  struct ANASTASIS_CRYPTO_TruthKey truth_key;
+  struct ANASTASIS_CRYPTO_TruthKeyP truth_key;
 
   /**
    * Identification of the Truth Object
@@ -245,7 +245,7 @@ ANASTASIS_TESTING_cmd_keyshare_lookup (const char *label,
                                        unsigned int http_status,
                                        const struct GNUNET_HashCode answer,
                                        const struct
-                                       ANASTASIS_CRYPTO_TruthKey key,
+                                       ANASTASIS_CRYPTO_TruthKeyP key,
                                        const char *upload_ref)
 {
   struct KeyShareLookupState *ksls;
diff --git a/src/lib/testing_api_cmd_policy_lookup.c 
b/src/lib/testing_api_cmd_policy_lookup.c
index 744466d..1b3f1dc 100644
--- a/src/lib/testing_api_cmd_policy_lookup.c
+++ b/src/lib/testing_api_cmd_policy_lookup.c
@@ -39,7 +39,7 @@ struct PolicyLookupState
   /**
    * Eddsa Publickey.
    */
-  struct ANASTASIS_CRYPTO_AccountPublicKey anastasis_pub;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP anastasis_pub;
 
   /**
    * Hash of the upload (all zeros if there was no upload).
@@ -139,7 +139,7 @@ policy_lookup_run (void *cls,
   if (NULL != pls->upload_reference)
   {
     const struct TALER_TESTING_Command *upload_cmd;
-    const struct ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub;
+    const struct ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub;
 
     upload_cmd = TALER_TESTING_interpreter_lookup_command
                    (is,
diff --git a/src/lib/testing_api_cmd_policy_store.c 
b/src/lib/testing_api_cmd_policy_store.c
index b4e24e1..ca1ad3d 100644
--- a/src/lib/testing_api_cmd_policy_store.c
+++ b/src/lib/testing_api_cmd_policy_store.c
@@ -52,12 +52,12 @@ struct PolicyStoreState
   /**
    * Eddsa Publickey.
    */
-  struct ANASTASIS_CRYPTO_AccountPublicKey anastasis_pub;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP anastasis_pub;
 
   /**
    * Eddsa Privatekey.
    */
-  struct ANASTASIS_CRYPTO_AccountPrivateKey anastasis_priv;
+  struct ANASTASIS_CRYPTO_AccountPrivateKeyP anastasis_priv;
 
   /**
    * Hash of the previous upload (maybe bogus if
@@ -79,7 +79,7 @@ struct PolicyStoreState
   /**
    * The nonce.
    */
-  struct ANASTASIS_CRYPTO_Nonce nonce;
+  struct ANASTASIS_CRYPTO_NonceP nonce;
 
   /**
    * URL of the anastasis backend.
@@ -293,7 +293,7 @@ policy_store_run (void *cls,
       pss->prev_hash = *h;
     }
     {
-      const struct ANASTASIS_CRYPTO_AccountPrivateKey *priv;
+      const struct ANASTASIS_CRYPTO_AccountPrivateKeyP *priv;
 
       if (GNUNET_OK !=
           ANASTASIS_TESTING_get_trait_account_priv (ref,
@@ -307,7 +307,7 @@ policy_store_run (void *cls,
       pss->anastasis_priv = *priv;
     }
     {
-      const struct ANASTASIS_CRYPTO_AccountPublicKey *pub;
+      const struct ANASTASIS_CRYPTO_AccountPublicKeyP *pub;
 
       if (GNUNET_OK !=
           ANASTASIS_TESTING_get_trait_account_pub (ref,
diff --git a/src/lib/testing_api_cmd_salt.c b/src/lib/testing_api_cmd_salt.c
index 31dd81d..6360408 100644
--- a/src/lib/testing_api_cmd_salt.c
+++ b/src/lib/testing_api_cmd_salt.c
@@ -63,7 +63,7 @@ struct SaltState
 static void
 salt_cb (void *cls,
          unsigned int http_status,
-         const struct ANASTASIS_CRYPTO_Salt *salt)
+         const struct ANASTASIS_CRYPTO_SaltP *salt)
 {
   struct SaltState *ss = cls;
 
diff --git a/src/lib/testing_api_cmd_truth_store.c 
b/src/lib/testing_api_cmd_truth_store.c
index ddaa2cf..5dfc0d5 100644
--- a/src/lib/testing_api_cmd_truth_store.c
+++ b/src/lib/testing_api_cmd_truth_store.c
@@ -356,10 +356,10 @@ truth_store_traits (void *cls,
  * @param key_str a str you want to be a truth key
  * @return truthkey (must be freed)
  */
-struct ANASTASIS_CRYPTO_TruthKey
+struct ANASTASIS_CRYPTO_TruthKeyP
 ANASTASIS_TESTING_make_truthkey (const char *key_str)
 {
-  struct ANASTASIS_CRYPTO_TruthKey key;
+  struct ANASTASIS_CRYPTO_TruthKeyP key;
 
   GNUNET_CRYPTO_hash (key_str,
                       strlen (key_str),
@@ -385,10 +385,10 @@ ANASTASIS_TESTING_make_truth_example (const char *method,
                                       const char *mime_type,
                                       const struct GNUNET_HashCode answer,
                                       const struct
-                                      ANASTASIS_CRYPTO_TruthKey key)
+                                      ANASTASIS_CRYPTO_TruthKeyP key)
 {
   json_t *truth_data;
-  struct ANASTASIS_CRYPTO_EncryptedKeyShare keyshare_data;
+  struct ANASTASIS_CRYPTO_EncryptedKeyShareP keyshare_data;
   void *encrypted_truth;
   size_t size_encrypted_truth;
 
@@ -406,7 +406,7 @@ ANASTASIS_TESTING_make_truth_example (const char *method,
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
                               &keyshare_data,
                               sizeof (struct
-                                      ANASTASIS_CRYPTO_EncryptedKeyShare));
+                                      ANASTASIS_CRYPTO_EncryptedKeyShareP));
   GNUNET_assert (NULL != &keyshare_data);
 
   ANASTASIS_CRYPTO_truth_encrypt (&key,
diff --git a/src/lib/testing_api_trait_account_priv.c 
b/src/lib/testing_api_trait_account_priv.c
index 2fb701d..4860e82 100644
--- a/src/lib/testing_api_trait_account_priv.c
+++ b/src/lib/testing_api_trait_account_priv.c
@@ -39,7 +39,7 @@ int
 ANASTASIS_TESTING_get_trait_account_priv
   (const struct TALER_TESTING_Command *cmd,
   unsigned int index,
-  const struct ANASTASIS_CRYPTO_AccountPrivateKey **priv)
+  const struct ANASTASIS_CRYPTO_AccountPrivateKeyP **priv)
 {
   return cmd->traits (cmd->cls,
                       (const void **) priv,
@@ -58,7 +58,7 @@ ANASTASIS_TESTING_get_trait_account_priv
 struct TALER_TESTING_Trait
 ANASTASIS_TESTING_make_trait_account_priv
   (unsigned int index,
-  const struct ANASTASIS_CRYPTO_AccountPrivateKey *priv)
+  const struct ANASTASIS_CRYPTO_AccountPrivateKeyP *priv)
 {
   struct TALER_TESTING_Trait ret = {
     .index = index,
diff --git a/src/lib/testing_api_trait_account_pub.c 
b/src/lib/testing_api_trait_account_pub.c
index ddf5d0d..5a3632e 100644
--- a/src/lib/testing_api_trait_account_pub.c
+++ b/src/lib/testing_api_trait_account_pub.c
@@ -39,7 +39,7 @@ int
 ANASTASIS_TESTING_get_trait_account_pub
   (const struct TALER_TESTING_Command *cmd,
   unsigned int index,
-  const struct ANASTASIS_CRYPTO_AccountPublicKey **pub)
+  const struct ANASTASIS_CRYPTO_AccountPublicKeyP **pub)
 {
   return cmd->traits (cmd->cls,
                       (const void **) pub,
@@ -58,7 +58,7 @@ ANASTASIS_TESTING_get_trait_account_pub
 struct TALER_TESTING_Trait
 ANASTASIS_TESTING_make_trait_account_pub
   (unsigned int index,
-  const struct ANASTASIS_CRYPTO_AccountPublicKey *h)
+  const struct ANASTASIS_CRYPTO_AccountPublicKeyP *h)
 {
   struct TALER_TESTING_Trait ret = {
     .index = index,
diff --git a/src/stasis/plugin_anastasis_postgres.c 
b/src/stasis/plugin_anastasis_postgres.c
index 68d0ae7..661ae65 100644
--- a/src/stasis/plugin_anastasis_postgres.c
+++ b/src/stasis/plugin_anastasis_postgres.c
@@ -355,7 +355,8 @@ payment_by_account_cb (void *cls,
 static enum ANASTASIS_DB_QueryStatus
 postgres_lookup_pending_payments_by_account (void *cls,
                                              const struct
-                                             ANASTASIS_CRYPTO_AccountPublicKey 
*
+                                             ANASTASIS_CRYPTO_AccountPublicKeyP
+                                             *
                                              anastasis_pub,
                                              
ANASTASIS_DB_PaymentPendingIterator
                                              it,
@@ -404,7 +405,7 @@ postgres_lookup_pending_payments_by_account (void *cls,
 static enum ANASTASIS_DB_QueryStatus
 postgres_store_recovery_document (void *cls,
                                   const struct
-                                  ANASTASIS_CRYPTO_AccountPublicKey *
+                                  ANASTASIS_CRYPTO_AccountPublicKeyP *
                                   anastasis_pub,
                                   const struct
                                   ANASTASIS_AccountSignatureP *account_sig,
@@ -682,7 +683,7 @@ postgres_store_recovery_document (void *cls,
 static enum ANASTASIS_DB_QueryStatus
 postgres_increment_lifetime (void *cls,
                              const struct
-                             ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                             ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                              const struct
                              ANASTASIS_PaymentSecretP *payment_identifier,
                              struct GNUNET_TIME_Relative lifetime)
@@ -839,7 +840,7 @@ postgres_increment_lifetime (void *cls,
 static enum ANASTASIS_DB_QueryStatus
 postgres_record_payment (void *cls,
                          const struct
-                         ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                         ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                          uint32_t post_counter,
                          const struct ANASTASIS_PaymentSecretP *payment_secret,
                          const struct TALER_Amount *amount)
@@ -980,7 +981,7 @@ static enum ANASTASIS_DB_QueryStatus
 postgres_store_truth (void *cls,
                       const uuid_t *uuid,
                       const struct
-                      ANASTASIS_CRYPTO_EncryptedKeyShare *key_share_data,
+                      ANASTASIS_CRYPTO_EncryptedKeyShareP *key_share_data,
                       const char *mime_type,
                       const void *encrypted_truth,
                       size_t encrypted_truth_size,
@@ -1133,7 +1134,7 @@ postgres_get_key_share (void *cls,
 enum ANASTASIS_DB_QueryStatus
 postgres_lookup_account (void *cls,
                          const struct
-                         ANASTASIS_CRYPTO_AccountPublicKey *anastasis_pub,
+                         ANASTASIS_CRYPTO_AccountPublicKeyP *anastasis_pub,
                          struct GNUNET_HashCode *recovery_data_hash)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1226,7 +1227,7 @@ postgres_lookup_account (void *cls,
 enum ANASTASIS_DB_QueryStatus
 postgres_get_latest_recovery_document (void *cls,
                                        const struct
-                                       ANASTASIS_CRYPTO_AccountPublicKey *
+                                       ANASTASIS_CRYPTO_AccountPublicKeyP *
                                        anastasis_pub,
                                        struct
                                        ANASTASIS_AccountSignatureP 
*account_sig,
@@ -1294,7 +1295,8 @@ postgres_get_latest_recovery_document (void *cls,
 enum ANASTASIS_DB_QueryStatus
 postgres_get_recovery_document (void *cls,
                                 const struct
-                                ANASTASIS_CRYPTO_AccountPublicKey 
*anastasis_pub,
+                                ANASTASIS_CRYPTO_AccountPublicKeyP *
+                                anastasis_pub,
                                 struct
                                 ANASTASIS_AccountSignatureP *account_sig,
                                 struct
diff --git a/src/stasis/test_anastasis_db.c b/src/stasis/test_anastasis_db.c
index cb557b5..63a6bfc 100644
--- a/src/stasis/test_anastasis_db.c
+++ b/src/stasis/test_anastasis_db.c
@@ -59,12 +59,12 @@ static struct ANASTASIS_PaymentSecretP paymentSecretP;
 /**
  * User public key, set to a random value
  */
-static struct ANASTASIS_CRYPTO_AccountPublicKey accountPubP;
+static struct ANASTASIS_CRYPTO_AccountPublicKeyP accountPubP;
 
 /**
  * User private key
  */
-static struct ANASTASIS_CRYPTO_AccountPrivateKey accountPrivP;
+static struct ANASTASIS_CRYPTO_AccountPrivateKeyP accountPrivP;
 
 /**
  * Signature
diff --git a/src/util/anastasis_crypto.c b/src/util/anastasis_crypto.c
index 89ee857..8dfe23f 100644
--- a/src/util/anastasis_crypto.c
+++ b/src/util/anastasis_crypto.c
@@ -49,28 +49,32 @@
 static void
 get_iv_key (const void *key_material,
             size_t key_m_len,
-            const struct ANASTASIS_CRYPTO_Nonce *nonce,
+            const struct ANASTASIS_CRYPTO_NonceP *nonce,
             const char *salt,
-            struct ANASTASIS_CRYPTO_SymKey *key,
-            struct ANASTASIS_CRYPTO_Iv *iv)
+            const struct ANASTASIS_CRYPTO_SymKeyP *key,
+            struct ANASTASIS_CRYPTO_IvP *iv)
 {
-  char res[sizeof (struct ANASTASIS_CRYPTO_SymKey)
-           + sizeof (struct ANASTASIS_CRYPTO_Iv)];
-
-  GNUNET_assert (GNUNET_YES ==
-                 GNUNET_CRYPTO_hkdf (res,
-                                     sizeof (res),
-                                     GCRY_MD_SHA512,
-                                     GCRY_MD_SHA256,
-                                     key_material,
-                                     key_m_len,
-                                     nonce,
-                                     sizeof (struct ANASTASIS_CRYPTO_Nonce),
-                                     salt,
-                                     strlen (salt),
-                                     NULL,
-                                     0));
-  memcpy (key,
+  char res[sizeof (struct ANASTASIS_CRYPTO_SymKeyP)
+           + sizeof (struct ANASTASIS_CRYPTO_IvP)];
+
+  if (GNUNET_YES !=
+      GNUNET_CRYPTO_hkdf (res,
+                          sizeof (res),
+                          GCRY_MD_SHA512,
+                          GCRY_MD_SHA256,
+                          key_material,
+                          key_m_len,
+                          nonce,
+                          sizeof (struct ANASTASIS_CRYPTO_NonceP),
+                          salt,
+                          strlen (salt),
+                          NULL,
+                          0))
+  {
+    GNUNET_break (0);
+    return;
+  }
+  memcpy ((void *) key,
           res,
           sizeof (*key));
   memcpy (iv,
@@ -99,12 +103,12 @@ anastasis_encrypt (const void *key,
                    void **res,
                    size_t *res_size)
 {
-  struct ANASTASIS_CRYPTO_Nonce *nonce;
+  struct ANASTASIS_CRYPTO_NonceP *nonce;
   gcry_cipher_hd_t cipher;
-  struct ANASTASIS_CRYPTO_SymKey sym_key;
-  struct ANASTASIS_CRYPTO_Iv iv;
+  struct ANASTASIS_CRYPTO_SymKeyP sym_key;
+  struct ANASTASIS_CRYPTO_IvP iv;
   int rc;
-  struct ANASTASIS_CRYPTO_AesTag *tag;
+  struct ANASTASIS_CRYPTO_AesTagP *tag;
   char *ciphertext;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -117,18 +121,27 @@ anastasis_encrypt (const void *key,
               (unsigned long long) data_size);
 
   *res_size = data_size
-              + sizeof (struct ANASTASIS_CRYPTO_Nonce)
-              + sizeof (struct ANASTASIS_CRYPTO_AesTag);
+              + sizeof (struct ANASTASIS_CRYPTO_NonceP)
+              + sizeof (struct ANASTASIS_CRYPTO_AesTagP);
+  if (*res_size <= data_size)
+  {
+    GNUNET_break (0);
+    return;
+  }
   *res = GNUNET_malloc (*res_size);
-  GNUNET_assert (*res_size == data_size
-                 + sizeof (struct ANASTASIS_CRYPTO_Nonce)
-                 + sizeof (struct ANASTASIS_CRYPTO_AesTag));
-  nonce = (struct ANASTASIS_CRYPTO_Nonce *) *res;
-  tag = (struct ANASTASIS_CRYPTO_AesTag *) &nonce[1];
+  if (*res_size != data_size
+      + sizeof (struct ANASTASIS_CRYPTO_NonceP)
+      + sizeof (struct ANASTASIS_CRYPTO_AesTagP))
+  {
+    GNUNET_break (0);
+    return;
+  }
+  nonce = (struct ANASTASIS_CRYPTO_NonceP *) *res;
+  tag = (struct ANASTASIS_CRYPTO_AesTagP *) &nonce[1];
   ciphertext = (char *) &tag[1];
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
                               nonce,
-                              sizeof (struct ANASTASIS_CRYPTO_Nonce));
+                              sizeof (struct ANASTASIS_CRYPTO_NonceP));
   get_iv_key (key,
               key_len,
               nonce,
@@ -166,7 +179,7 @@ anastasis_encrypt (const void *key,
   GNUNET_assert (0 ==
                  gcry_cipher_gettag (cipher,
                                      tag,
-                                     sizeof (struct ANASTASIS_CRYPTO_AesTag)));
+                                     sizeof (struct 
ANASTASIS_CRYPTO_AesTagP)));
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "At %s:%d TAG_E is %s-%llu b\n", __FILE__, __LINE__,
               TALER_B2S (tag),
@@ -200,12 +213,12 @@ anastasis_decrypt (const void *key,
                    void **res,
                    size_t *res_size)
 {
-  const struct ANASTASIS_CRYPTO_Nonce *nonce;
+  const struct ANASTASIS_CRYPTO_NonceP *nonce;
   gcry_cipher_hd_t cipher;
-  struct ANASTASIS_CRYPTO_SymKey sym_key;
-  struct ANASTASIS_CRYPTO_Iv iv;
+  const struct ANASTASIS_CRYPTO_SymKeyP sym_key;
+  struct ANASTASIS_CRYPTO_IvP iv;
   int rc;
-  const struct ANASTASIS_CRYPTO_AesTag *tag;
+  const struct ANASTASIS_CRYPTO_AesTagP *tag;
   const char *ciphertext;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -218,20 +231,30 @@ anastasis_decrypt (const void *key,
               (unsigned long long) data_size);
 
   *res_size = data_size
-              - sizeof (struct ANASTASIS_CRYPTO_Nonce)
-              - sizeof (struct ANASTASIS_CRYPTO_AesTag);
+              - sizeof (struct ANASTASIS_CRYPTO_NonceP)
+              - sizeof (struct ANASTASIS_CRYPTO_AesTagP);
+  if (*res_size >= data_size)
+  {
+    GNUNET_break (0);
+    return;
+  }
   *res = GNUNET_malloc (*res_size);
-  GNUNET_assert (*res_size == data_size
-                 - sizeof (struct ANASTASIS_CRYPTO_Nonce)
-                 - sizeof (struct ANASTASIS_CRYPTO_AesTag));
+  if (*res_size != data_size
+      - sizeof (struct ANASTASIS_CRYPTO_NonceP)
+      - sizeof (struct ANASTASIS_CRYPTO_AesTagP))
+  {
+    GNUNET_break (0);
+    GNUNET_free (*res);
+    return;
+  }
 
-  nonce = (const struct ANASTASIS_CRYPTO_Nonce *) data;
+  nonce = (const struct ANASTASIS_CRYPTO_NonceP *) data;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "At %s:%d NONCE_D is %s-%llu b\n", __FILE__, __LINE__,
               TALER_B2S (nonce),
               (unsigned long long) sizeof (*nonce));
 
-  tag = (struct ANASTASIS_CRYPTO_AesTag *) &nonce[1];
+  tag = (struct ANASTASIS_CRYPTO_AesTagP *) &nonce[1];
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "At %s:%d TAG_D is %s-%llu b\n", __FILE__, __LINE__,
               TALER_B2S (tag),
@@ -272,11 +295,16 @@ anastasis_decrypt (const void *key,
               "At %s:%d PLAINTEXT_D is %s-%llu b\n", __FILE__, __LINE__,
               TALER_b2s (*res, *res_size),
               (unsigned long long) *res_size);
-  GNUNET_assert (0 ==
-                 gcry_cipher_checktag (cipher,
-                                       tag,
-                                       sizeof (struct
-                                               ANASTASIS_CRYPTO_AesTag)));
+  if (0 !=
+      gcry_cipher_checktag (cipher,
+                            tag,
+                            sizeof (struct
+                                    ANASTASIS_CRYPTO_AesTagP)))
+  {
+    GNUNET_break (0);
+    GNUNET_free (*res);
+    return;
+  }
   gcry_cipher_close (cipher);
 }
 
@@ -291,22 +319,25 @@ anastasis_decrypt (const void *key,
 void
 ANASTASIS_CRYPTO_user_identifier_derive (
   const json_t *id_data,
-  const struct ANASTASIS_CRYPTO_Salt *server_salt,
-  struct ANASTASIS_CRYPTO_UserIdentifier *id)
+  const struct ANASTASIS_CRYPTO_SaltP *server_salt,
+  struct ANASTASIS_CRYPTO_UserIdentifierP *id)
 {
   char *json_enc;
   json_enc = json_dumps (id_data, 0);
-  GNUNET_assert (0 ==
-                 gcry_kdf_derive (json_enc,
-                                  strlen (json_enc),
-                                  GCRY_KDF_SCRYPT,
-                                  1, // subalgo
-                                  server_salt->salt,
-                                  strlen (server_salt->salt),
-                                  SCRYPT_ITERATION, // iterations
-                                  sizeof (struct
-                                          ANASTASIS_CRYPTO_UserIdentifier),
-                                  id));
+  if (0 !=
+      gcry_kdf_derive (json_enc,
+                       strlen (json_enc),
+                       GCRY_KDF_SCRYPT,
+                       1, // subalgo
+                       server_salt,
+                       sizeof (*server_salt),
+                       SCRYPT_ITERATION, // iterations
+                       sizeof (struct ANASTASIS_CRYPTO_UserIdentifierP),
+                       id))
+  {
+    GNUNET_break (0);
+    return;
+  }
   free (json_enc);
 }
 
@@ -318,20 +349,25 @@ ANASTASIS_CRYPTO_user_identifier_derive (
  */
 void
 ANASTASIS_CRYPTO_account_private_key_derive (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
   struct GNUNET_CRYPTO_EddsaPrivateKey *priv_key)
 {
   /* priv_key = ver_secret */
-  GNUNET_CRYPTO_hkdf (priv_key,
-                      sizeof (*priv_key),
-                      GCRY_MD_SHA512,
-                      GCRY_MD_SHA256,
-                      id,
-                      sizeof (struct ANASTASIS_CRYPTO_UserIdentifier),
-                      "ver",
-                      strlen ("ver"),
-                      NULL,
-                      0);
+  if (GNUNET_YES !=
+      GNUNET_CRYPTO_hkdf (priv_key,
+                          sizeof (*priv_key),
+                          GCRY_MD_SHA512,
+                          GCRY_MD_SHA256,
+                          id,
+                          sizeof (struct ANASTASIS_CRYPTO_UserIdentifierP),
+                          "ver",
+                          strlen ("ver"),
+                          NULL,
+                          0))
+  {
+    GNUNET_break (0);
+    return;
+  }
   /* go from ver_secret to proper private key (eddsa_d_to_a() in spec) */
   priv_key->d[0] = (priv_key->d[0] & 0x7f) | 0x40;
   priv_key->d[31] &= 0xf8;
@@ -345,8 +381,8 @@ ANASTASIS_CRYPTO_account_private_key_derive (
  */
 void
 ANASTASIS_CRYPTO_account_public_key_derive (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
-  struct ANASTASIS_CRYPTO_AccountPublicKey *pub_key)
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP *pub_key)
 {
   struct GNUNET_CRYPTO_EddsaPrivateKey priv;
   ANASTASIS_CRYPTO_account_private_key_derive (id,
@@ -369,7 +405,7 @@ ANASTASIS_CRYPTO_account_public_key_derive (
  */
 void
 ANASTASIS_CRYPTO_recovery_document_encrypt (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
   const void *rec_doc,
   size_t rd_size,
   void **enc_rec_doc,
@@ -377,7 +413,7 @@ ANASTASIS_CRYPTO_recovery_document_encrypt (
 {
   const char *salt = "erd";
   anastasis_encrypt (id,
-                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifier),
+                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifierP),
                      rec_doc,
                      rd_size,
                      salt,
@@ -400,7 +436,7 @@ ANASTASIS_CRYPTO_recovery_document_encrypt (
  */
 void
 ANASTASIS_CRYPTO_recovery_document_decrypt (
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
   const void *enc_rec_doc,
   size_t erd_size,
   void **rec_doc,
@@ -408,7 +444,7 @@ ANASTASIS_CRYPTO_recovery_document_decrypt (
 {
   const char *salt = "erd";
   anastasis_decrypt (id,
-                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifier),
+                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifierP),
                      enc_rec_doc,
                      erd_size,
                      salt,
@@ -426,9 +462,9 @@ ANASTASIS_CRYPTO_recovery_document_decrypt (
  */
 void
 ANASTASIS_CRYPTO_keyshare_encrypt (
-  const struct ANASTASIS_CRYPTO_KeyShare *key_share,
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
-  struct ANASTASIS_CRYPTO_EncryptedKeyShare **enc_key_share)
+  const struct ANASTASIS_CRYPTO_KeyShareP *key_share,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
+  struct ANASTASIS_CRYPTO_EncryptedKeyShareP **enc_key_share)
 {
   const char *salt = "eks";
   size_t eks_size;
@@ -437,14 +473,18 @@ ANASTASIS_CRYPTO_keyshare_encrypt (
       security question, see 12.6.-> interface EncryptedKeyShare in spec)
   */
   anastasis_encrypt (id,
-                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifier),
+                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifierP),
                      key_share,
-                     sizeof (struct ANASTASIS_CRYPTO_KeyShare),
+                     sizeof (struct ANASTASIS_CRYPTO_KeyShareP),
                      salt,
                      (void **) enc_key_share,
                      &eks_size);
-  GNUNET_assert (eks_size == sizeof (struct
-                                     ANASTASIS_CRYPTO_EncryptedKeyShare));
+  if (eks_size !=
+      sizeof (struct ANASTASIS_CRYPTO_EncryptedKeyShareP))
+  {
+    GNUNET_break (0);
+    return;
+  }
 }
 
 
@@ -457,20 +497,25 @@ ANASTASIS_CRYPTO_keyshare_encrypt (
  */
 void
 ANASTASIS_CRYPTO_keyshare_decrypt (
-  const struct ANASTASIS_CRYPTO_EncryptedKeyShare *enc_key_share,
-  const struct ANASTASIS_CRYPTO_UserIdentifier *id,
-  struct ANASTASIS_CRYPTO_KeyShare **key_share)
+  const struct ANASTASIS_CRYPTO_EncryptedKeyShareP *enc_key_share,
+  const struct ANASTASIS_CRYPTO_UserIdentifierP *id,
+  struct ANASTASIS_CRYPTO_KeyShareP **key_share)
 {
   const char *salt = "eks";
   size_t ks_size;
   anastasis_decrypt (id,
-                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifier),
+                     sizeof (struct ANASTASIS_CRYPTO_UserIdentifierP),
                      enc_key_share,
-                     sizeof (struct ANASTASIS_CRYPTO_EncryptedKeyShare),
+                     sizeof (struct ANASTASIS_CRYPTO_EncryptedKeyShareP),
                      salt,
                      (void **) key_share,
                      &ks_size);
-  GNUNET_assert (ks_size == sizeof (struct ANASTASIS_CRYPTO_KeyShare));
+  if (ks_size !=
+      sizeof (struct ANASTASIS_CRYPTO_KeyShareP))
+  {
+    GNUNET_break (0);
+    return;
+  }
 }
 
 
@@ -488,7 +533,7 @@ ANASTASIS_CRYPTO_keyshare_decrypt (
  */
 void
 ANASTASIS_CRYPTO_truth_encrypt (
-  const struct ANASTASIS_CRYPTO_TruthKey *truth_enc_key,
+  const struct ANASTASIS_CRYPTO_TruthKeyP *truth_enc_key,
   const void *truth,
   size_t truth_size,
   void **enc_truth,
@@ -496,7 +541,7 @@ ANASTASIS_CRYPTO_truth_encrypt (
 {
   const char *salt = "ect";
   anastasis_encrypt (truth_enc_key,
-                     sizeof (struct ANASTASIS_CRYPTO_TruthKey),
+                     sizeof (struct ANASTASIS_CRYPTO_TruthKeyP),
                      truth,
                      truth_size,
                      salt,
@@ -518,7 +563,7 @@ ANASTASIS_CRYPTO_truth_encrypt (
  */
 void
 ANASTASIS_CRYPTO_truth_decrypt (
-  const struct ANASTASIS_CRYPTO_TruthKey *truth_enc_key,
+  const struct ANASTASIS_CRYPTO_TruthKeyP *truth_enc_key,
   const void *enc_truth,
   size_t ect_size,
   void **truth,
@@ -526,7 +571,7 @@ ANASTASIS_CRYPTO_truth_decrypt (
 {
   const char *salt = "ect";
   anastasis_decrypt (truth_enc_key,
-                     sizeof (struct ANASTASIS_CRYPTO_TruthKey),
+                     sizeof (struct ANASTASIS_CRYPTO_TruthKeyP),
                      enc_truth,
                      ect_size,
                      salt,
@@ -543,11 +588,11 @@ ANASTASIS_CRYPTO_truth_decrypt (
  */
 void
 ANASTASIS_CRYPTO_keyshare_create (
-  struct ANASTASIS_CRYPTO_KeyShare *key_share)
+  struct ANASTASIS_CRYPTO_KeyShareP *key_share)
 {
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_STRONG,
                               key_share,
-                              sizeof (struct ANASTASIS_CRYPTO_KeyShare));
+                              sizeof (struct ANASTASIS_CRYPTO_KeyShareP));
 }
 
 
@@ -562,10 +607,10 @@ ANASTASIS_CRYPTO_keyshare_create (
  */
 void
 ANASTASIS_CRYPTO_policy_key_derive (
-  const struct ANASTASIS_CRYPTO_KeyShare *key_shares,
+  const struct ANASTASIS_CRYPTO_KeyShareP *key_shares,
   unsigned int keyshare_length,
-  const struct ANASTASIS_CRYPTO_Salt *salt,
-  struct ANASTASIS_CRYPTO_PolicyKey *policy_key)
+  const struct ANASTASIS_CRYPTO_SaltP *salt,
+  struct ANASTASIS_CRYPTO_PolicyKeyP *policy_key)
 {
   GNUNET_CRYPTO_hkdf (policy_key,
                       sizeof (*policy_key),
@@ -595,12 +640,12 @@ ANASTASIS_CRYPTO_policy_key_derive (
  */
 void
 ANASTASIS_CRYPTO_core_secret_encrypt (
-  const struct ANASTASIS_CRYPTO_PolicyKey *policy_keys,
+  const struct ANASTASIS_CRYPTO_PolicyKeyP *policy_keys,
   unsigned int policy_keys_length,
   const void *core_secret,
   size_t core_secret_size,
   void **enc_core_secret,
-  struct ANASTASIS_CRYPTO_EncryptedMasterKey *encrypted_master_keys)
+  struct ANASTASIS_CRYPTO_EncryptedMasterKeyP *encrypted_master_keys)
 {
   struct GNUNET_CRYPTO_SymmetricSessionKey sk;
   struct GNUNET_CRYPTO_SymmetricInitializationVector iv;
@@ -647,8 +692,8 @@ ANASTASIS_CRYPTO_core_secret_encrypt (
  */
 void
 ANASTASIS_CRYPTO_core_secret_recover (
-  const struct ANASTASIS_CRYPTO_EncryptedMasterKey *encrypted_master_key,
-  const struct ANASTASIS_CRYPTO_PolicyKey policy_key,
+  const struct ANASTASIS_CRYPTO_EncryptedMasterKeyP *encrypted_master_key,
+  const struct ANASTASIS_CRYPTO_PolicyKeyP policy_key,
   const void *encrypted_core_secret,
   size_t encrypted_core_secret_size,
   void **core_secret,
@@ -666,7 +711,7 @@ ANASTASIS_CRYPTO_core_secret_recover (
     GNUNET_SYSERR !=
     GNUNET_CRYPTO_symmetric_decrypt (
       encrypted_master_key,
-      sizeof (struct ANASTASIS_CRYPTO_EncryptedMasterKey),
+      sizeof (struct ANASTASIS_CRYPTO_EncryptedMasterKeyP),
       &mk_sk,
       &mk_iv,
       &master_key));
diff --git a/src/util/test_anastasis_crypto.c b/src/util/test_anastasis_crypto.c
index dc6eeff..6a43fdf 100644
--- a/src/util/test_anastasis_crypto.c
+++ b/src/util/test_anastasis_crypto.c
@@ -38,12 +38,14 @@ test_user_identifier_derive (void)
   json_t *id_data_1;
   json_t *id_data_2;
   json_t *id_data_3;
-  struct ANASTASIS_CRYPTO_UserIdentifier id_1;
-  struct ANASTASIS_CRYPTO_UserIdentifier id_2;
-  struct ANASTASIS_CRYPTO_UserIdentifier id_3;
-  struct ANASTASIS_CRYPTO_Salt salt;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id_1;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id_2;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id_3;
+  struct ANASTASIS_CRYPTO_SaltP salt;
 
-  salt.salt = "Server Salt";
+  GNUNET_CRYPTO_hash_from_string2 ("Server Salt",
+                                   strlen ("Server Salt"),
+                                   &salt.salt);
 
   // sample data 1
   id_data_1 = json_object ();
@@ -93,13 +95,16 @@ test_recovery_document (void)
   size_t size_ciphertext;
   void *plaintext;
   size_t size_plaintext;
-  struct ANASTASIS_CRYPTO_UserIdentifier id;
-  struct ANASTASIS_CRYPTO_Salt salt;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id;
+  struct ANASTASIS_CRYPTO_SaltP salt;
   int ret;
 
   json_t *id_data = json_object ();
   const char *test = "TEST_ERD";
-  salt.salt = "Server Salt";
+
+  GNUNET_CRYPTO_hash_from_string2 ("Server Salt",
+                                   strlen ("Server Salt"),
+                                   &salt.salt);
 
   json_object_set_new (id_data, "arg1", json_string ("ID_DATA"));
   ANASTASIS_CRYPTO_user_identifier_derive (id_data,
@@ -136,18 +141,18 @@ test_recovery_document (void)
 static int
 test_key_share (void)
 {
-  struct ANASTASIS_CRYPTO_EncryptedKeyShare *ciphertext;
-  struct ANASTASIS_CRYPTO_KeyShare *plaintext;
-  struct ANASTASIS_CRYPTO_UserIdentifier id;
-  struct ANASTASIS_CRYPTO_KeyShare key_share;
-  struct ANASTASIS_CRYPTO_KeyShare key_share_1;
-  struct ANASTASIS_CRYPTO_KeyShare key_share_2;
+  struct ANASTASIS_CRYPTO_EncryptedKeyShareP *ciphertext;
+  struct ANASTASIS_CRYPTO_KeyShareP *plaintext;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id;
+  struct ANASTASIS_CRYPTO_KeyShareP key_share;
+  struct ANASTASIS_CRYPTO_KeyShareP key_share_1;
+  struct ANASTASIS_CRYPTO_KeyShareP key_share_2;
   int ret;
 
   // testing of enc-/decryption of a keyshare
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
                               &id,
-                              sizeof (struct ANASTASIS_CRYPTO_UserIdentifier));
+                              sizeof (struct 
ANASTASIS_CRYPTO_UserIdentifierP));
   ANASTASIS_CRYPTO_keyshare_create (&key_share);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "KEYSHARE_BEFORE:   %s\n",
@@ -183,12 +188,12 @@ test_truth (void)
   size_t size_ciphertext;
   void *plaintext;
   size_t size_plaintext;
-  struct ANASTASIS_CRYPTO_TruthKey truth_enc_key;
+  struct ANASTASIS_CRYPTO_TruthKeyP truth_enc_key;
   int ret;
 
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
                               &truth_enc_key,
-                              sizeof (struct ANASTASIS_CRYPTO_TruthKey));
+                              sizeof (struct ANASTASIS_CRYPTO_TruthKeyP));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "TRUTH_BEFORE:   %s\n",
@@ -223,21 +228,21 @@ test_core_secret (void)
   const char *test_wrong = "TEST_CORE_WRONG";
   void *enc_core_secret;
   unsigned int policy_keys_length = 5;
-  struct ANASTASIS_CRYPTO_Salt salt;
-  struct ANASTASIS_CRYPTO_EncryptedMasterKey
+  struct ANASTASIS_CRYPTO_SaltP salt;
+  struct ANASTASIS_CRYPTO_EncryptedMasterKeyP
     encrypted_master_keys[policy_keys_length];
 
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
                               &salt,
-                              sizeof (struct ANASTASIS_CRYPTO_Salt));
+                              sizeof (struct ANASTASIS_CRYPTO_SaltP));
 
   // construction of PolicyKey-array
-  struct ANASTASIS_CRYPTO_PolicyKey policy_keys[policy_keys_length];
+  struct ANASTASIS_CRYPTO_PolicyKeyP policy_keys[policy_keys_length];
   for (unsigned int i = 0; i < policy_keys_length; i++)
   {
     // construction of KeyShare-array
     unsigned int keyshare_length = 5;
-    struct ANASTASIS_CRYPTO_KeyShare keyshares[keyshare_length];
+    struct ANASTASIS_CRYPTO_KeyShareP keyshares[keyshare_length];
     for (unsigned int j = 0; j < keyshare_length; j++)
     {
       ANASTASIS_CRYPTO_keyshare_create (&keyshares[j]);
@@ -248,7 +253,7 @@ test_core_secret (void)
 
     // derive policy-keys
     ANASTASIS_CRYPTO_policy_key_derive ((struct
-                                         ANASTASIS_CRYPTO_KeyShare *)
+                                         ANASTASIS_CRYPTO_KeyShareP *)
                                         keyshares,
                                         keyshare_length,
                                         &salt,
@@ -269,7 +274,7 @@ test_core_secret (void)
                                         strlen (test),
                                         &enc_core_secret,
                                         (struct
-                                         ANASTASIS_CRYPTO_EncryptedMasterKey *)
+                                         ANASTASIS_CRYPTO_EncryptedMasterKeyP 
*)
                                         &encrypted_master_keys);
 
   // test recover of core secret
@@ -304,12 +309,15 @@ test_core_secret (void)
 static int
 test_public_key_derive ()
 {
-  struct ANASTASIS_CRYPTO_UserIdentifier id;
-  struct ANASTASIS_CRYPTO_AccountPublicKey pub_key;
-  struct ANASTASIS_CRYPTO_Salt server_salt;
+  struct ANASTASIS_CRYPTO_UserIdentifierP id;
+  struct ANASTASIS_CRYPTO_AccountPublicKeyP pub_key;
+  struct ANASTASIS_CRYPTO_SaltP server_salt;
 
   json_t *id_data = json_object ();
-  server_salt.salt = "Server Salt";
+
+  GNUNET_CRYPTO_hash_from_string2 ("Server Salt",
+                                   strlen ("Server Salt"),
+                                   &server_salt.salt);
 
   json_object_set_new (id_data, "arg1", json_string ("ID_DATA"));
   ANASTASIS_CRYPTO_user_identifier_derive (id_data,
@@ -343,7 +351,6 @@ main (int argc,
     return 1;
 
   return 0;
-
 }
 
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]