gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [gnunet] branch master updated: add more general HMAC funct


From: gnunet
Subject: [GNUnet-SVN] [gnunet] branch master updated: add more general HMAC function for JWTs
Date: Sat, 21 Jul 2018 08:00:56 +0200

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

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new ee4adf976 add more general HMAC function for JWTs
ee4adf976 is described below

commit ee4adf9768a740c3d79b854453eb8bc0f5c14d30
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Sat Jul 21 08:00:49 2018 +0200

    add more general HMAC function for JWTs
---
 src/include/gnunet_crypto_lib.h          | 17 +++++++++++++++++
 src/reclaim/jwt.c                        | 16 ++++++++--------
 src/reclaim/jwt.h                        |  2 +-
 src/reclaim/plugin_rest_openid_connect.c |  4 +---
 src/util/crypto_hash.c                   | 26 ++++++++++++++++++++++++--
 5 files changed, 51 insertions(+), 14 deletions(-)

diff --git a/src/include/gnunet_crypto_lib.h b/src/include/gnunet_crypto_lib.h
index 7b69c157f..8a591fa09 100644
--- a/src/include/gnunet_crypto_lib.h
+++ b/src/include/gnunet_crypto_lib.h
@@ -726,6 +726,23 @@ GNUNET_CRYPTO_hash_context_abort (struct 
GNUNET_HashContext *hc);
 
 
 /**
+ * Calculate HMAC of a message (RFC 2104)
+ * TODO: Shouldn' this be the standard hmac function and
+ * the above be renamed?
+ *
+ * @param key secret key
+ * @param key_len secret key length
+ * @param plaintext input plaintext
+ * @param plaintext_len length of @a plaintext
+ * @param hmac where to store the hmac
+ */
+void
+GNUNET_CRYPTO_hmac_raw (const void *key, size_t key_len,
+                    const void *plaintext, size_t plaintext_len,
+                    struct GNUNET_HashCode *hmac);
+
+
+/**
  * @ingroup hash
  * Calculate HMAC of a message (RFC 2104)
  *
diff --git a/src/reclaim/jwt.c b/src/reclaim/jwt.c
index 45b5d73f6..ec1e6d098 100644
--- a/src/reclaim/jwt.c
+++ b/src/reclaim/jwt.c
@@ -65,8 +65,8 @@ create_jwt_header(void)
 char*
 jwt_create_from_list (const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
                       const struct GNUNET_CRYPTO_EcdsaPublicKey *sub_key,
-                                                const struct 
GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs,
-                                                const struct 
GNUNET_CRYPTO_AuthKey *priv_key)
+                      const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs,
+                      const char *secret_key)
 {
   struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry *le;
   struct GNUNET_HashCode signature;
@@ -89,12 +89,12 @@ jwt_create_from_list (const struct 
GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
   //nonce only if nonce
   // OPTIONAL acr,amr,azp
   subject = GNUNET_STRINGS_data_to_string_alloc (&sub_key,
-                                                sizeof (struct 
GNUNET_CRYPTO_EcdsaPublicKey));
+                                                 sizeof (struct 
GNUNET_CRYPTO_EcdsaPublicKey));
   audience = GNUNET_STRINGS_data_to_string_alloc (aud_key,
                                                   sizeof (struct 
GNUNET_CRYPTO_EcdsaPublicKey));
   header = create_jwt_header ();
   body = json_object ();
-  
+
   //iss REQUIRED case sensitive server uri with https
   //The issuer is the local reclaim instance (e.g. 
https://reclaim.id/api/openid)
   json_object_set_new (body,
@@ -108,8 +108,8 @@ jwt_create_from_list (const struct 
GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
   for (le = attrs->list_head; NULL != le; le = le->next)
   {
     attr_val_str = GNUNET_RECLAIM_ATTRIBUTE_value_to_string (le->claim->type,
-                                                              le->claim->data,
-                                                              
le->claim->data_size);
+                                                             le->claim->data,
+                                                             
le->claim->data_size);
     json_object_set_new (body,
                          le->claim->name,
                          json_string (attr_val_str));
@@ -142,8 +142,8 @@ jwt_create_from_list (const struct 
GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
    * Creating the JWT signature. This might not be
    * standards compliant, check.
    */
-  GNUNET_asprintf (&signature_target, "%s,%s", header_base64, body_base64);
-  GNUNET_CRYPTO_hmac (priv_key, signature_target, strlen (signature_target), 
&signature);
+  GNUNET_asprintf (&signature_target, "%s.%s", header_base64, body_base64);
+  GNUNET_CRYPTO_hmac_raw (secret_key, strlen (secret_key), signature_target, 
strlen (signature_target), &signature);
   GNUNET_STRINGS_base64_encode ((const char*)&signature,
                                 sizeof (struct GNUNET_HashCode),
                                 &signature_base64);
diff --git a/src/reclaim/jwt.h b/src/reclaim/jwt.h
index 4b0b01be3..39b4e2f3c 100644
--- a/src/reclaim/jwt.h
+++ b/src/reclaim/jwt.h
@@ -5,6 +5,6 @@ char*
 jwt_create_from_list (const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
                       const struct GNUNET_CRYPTO_EcdsaPublicKey *sub_key,
                                                 const struct 
GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs,
-                                                const struct 
GNUNET_CRYPTO_AuthKey *priv_key);
+                                                const char* secret_key);
 
 #endif
diff --git a/src/reclaim/plugin_rest_openid_connect.c 
b/src/reclaim/plugin_rest_openid_connect.c
index 6aa2cd907..5a34e5b72 100644
--- a/src/reclaim/plugin_rest_openid_connect.c
+++ b/src/reclaim/plugin_rest_openid_connect.c
@@ -1647,14 +1647,12 @@ token_endpoint (struct GNUNET_REST_RequestHandle 
*con_handle,
     GNUNET_free(ticket);
     return;
   }
-  struct GNUNET_CRYPTO_AuthKey jwt_sign_key;
   struct GNUNET_CRYPTO_EcdsaPublicKey pk;
   GNUNET_IDENTITY_ego_get_public_key (ego_entry->ego, &pk);
-  GNUNET_CRYPTO_hash (jwt_secret, strlen (jwt_secret), (struct 
GNUNET_HashCode*)jwt_sign_key.key);
   char *id_token = jwt_create_from_list(&ticket->audience,
                                         &pk,
                                         cl,
-                                        &jwt_sign_key);
+                                        jwt_secret);
 
   //Create random access_token
   char* access_token_number;
diff --git a/src/util/crypto_hash.c b/src/util/crypto_hash.c
index 8410b7835..fe1f58df7 100644
--- a/src/util/crypto_hash.c
+++ b/src/util/crypto_hash.c
@@ -365,14 +365,17 @@ GNUNET_CRYPTO_hmac_derive_key_v (struct 
GNUNET_CRYPTO_AuthKey *key,
 
 /**
  * Calculate HMAC of a message (RFC 2104)
+ * TODO: Shouldn' this be the standard hmac function and
+ * the above be renamed?
  *
  * @param key secret key
+ * @param key_len secret key length
  * @param plaintext input plaintext
  * @param plaintext_len length of @a plaintext
  * @param hmac where to store the hmac
  */
 void
-GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key,
+GNUNET_CRYPTO_hmac_raw (const void *key, size_t key_len,
                     const void *plaintext, size_t plaintext_len,
                     struct GNUNET_HashCode *hmac)
 {
@@ -390,7 +393,7 @@ GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key,
   {
     gcry_md_reset (md);
   }
-  gcry_md_setkey (md, key->key, sizeof (key->key));
+  gcry_md_setkey (md, key, key_len);
   gcry_md_write (md, plaintext, plaintext_len);
   mc = gcry_md_read (md, GCRY_MD_SHA512);
   GNUNET_assert (NULL != mc);
@@ -399,6 +402,25 @@ GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey 
*key,
 
 
 /**
+ * Calculate HMAC of a message (RFC 2104)
+ *
+ * @param key secret key
+ * @param plaintext input plaintext
+ * @param plaintext_len length of @a plaintext
+ * @param hmac where to store the hmac
+ */
+void
+GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key,
+                    const void *plaintext, size_t plaintext_len,
+                    struct GNUNET_HashCode *hmac)
+{
+  GNUNET_CRYPTO_hmac_raw ((void*) key->key, sizeof (key->key),
+                          plaintext, plaintext_len,
+                          hmac);
+}
+
+
+/**
  * Context for cummulative hashing.
  */
 struct GNUNET_HashContext

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



reply via email to

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