[vlc-commits] update: sha1 is not mandatory anymore

Rafaël Carré git at videolan.org
Sun May 11 13:13:41 CEST 2014


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Sun May 11 13:12:30 2014 +0200| [db8f517649bb57eefd71076fb60735bd136c7dee] | committer: Rafaël Carré

update: sha1 is not mandatory anymore

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=db8f517649bb57eefd71076fb60735bd136c7dee
---

 src/misc/update.c        |   12 ++++++------
 src/misc/update.h        |   35 +++++++++--------------------------
 src/misc/update_crypto.c |   20 ++++++++++----------
 3 files changed, 25 insertions(+), 42 deletions(-)

diff --git a/src/misc/update.c b/src/misc/update.c
index cefb6e3..b00eb27 100644
--- a/src/misc/update.c
+++ b/src/misc/update.c
@@ -307,7 +307,7 @@ static bool GetUpdateFile( update_t *p_update )
             goto error;
         }
 
-        uint8_t *p_hash = hash_sha1_from_public_key( p_new_pkey );
+        uint8_t *p_hash = hash_from_public_key( p_new_pkey );
         if( !p_hash )
         {
             msg_Err( p_update->p_libvlc, "Failed to hash signature" );
@@ -332,17 +332,17 @@ static bool GetUpdateFile( update_t *p_update )
         }
     }
 
-    uint8_t *p_hash = hash_sha1_from_text( psz_update_data, &sign );
+    uint8_t *p_hash = hash_from_text( psz_update_data, &sign );
     if( !p_hash )
     {
-        msg_Warn( p_update->p_libvlc, "Can't compute SHA1 hash for status file" );
+        msg_Warn( p_update->p_libvlc, "Can't compute hash for status file" );
         goto error;
     }
 
     else if( p_hash[0] != sign.hash_verification[0] ||
         p_hash[1] != sign.hash_verification[1] )
     {
-        msg_Warn( p_update->p_libvlc, "Bad SHA1 hash for status file" );
+        msg_Warn( p_update->p_libvlc, "Bad hash for status file" );
         free( p_hash );
         goto error;
     }
@@ -671,7 +671,7 @@ static void* update_DownloadReal( void *obj )
         goto end;
     }
 
-    uint8_t *p_hash = hash_sha1_from_file( psz_destfile, &sign );
+    uint8_t *p_hash = hash_from_file( psz_destfile, &sign );
     if( !p_hash )
     {
         msg_Err( p_udt, "Unable to hash %s", psz_destfile );
@@ -691,7 +691,7 @@ static void* update_DownloadReal( void *obj )
         dialog_FatalWait( p_udt, _("File corrupted"),
             _("Downloaded file \"%s\" was corrupted. Thus, it was deleted."),
              psz_destfile );
-        msg_Err( p_udt, "Bad SHA1 hash for %s", psz_destfile );
+        msg_Err( p_udt, "Bad hash for %s", psz_destfile );
         free( p_hash );
         goto end;
     }
diff --git a/src/misc/update.h b/src/misc/update.h
index ed9f71a..906b056 100644
--- a/src/misc/update.h
+++ b/src/misc/update.h
@@ -20,23 +20,6 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-/* Go reading the rfc 4880 ! NOW !! */
-
-/*
- * XXX
- *  When PGP-signing a file, we only sign a SHA-1 hash of this file
- *  The DSA key size requires that we use an algorithm which produce
- *  a 160 bits long hash
- *  An alternative is RIPEMD160 , which you can use by giving the option
- *      --digest-algo RIPEMD160 to GnuPG
- *
- *  As soon as SHA-1 is broken, this method is not secure anymore, because an
- *  attacker could generate a file with the same SHA-1 hash.
- *
- *  Whenever this happens, we need to use another algorithm / type of key.
- * XXX
- */
-
 #include <vlc_update.h>
 #include <vlc_atomic.h>
 
@@ -65,7 +48,7 @@ enum    /* Signature subpacket types */
 };
 
 struct public_key_packet_t
-{ /* a public key packet (DSA/SHA-1) is 418 bytes */
+{ /* a public key packet (DSA) is 418 bytes */
 
     uint8_t version;      /* we use only version 4 */
     uint8_t timestamp[4]; /* creation time of the key */
@@ -84,7 +67,7 @@ struct signature_packet_t
 
     uint8_t type;
     uint8_t public_key_algo;    /* DSA only */
-    uint8_t digest_algo;        /* SHA-1 only */
+    uint8_t digest_algo;
 
     uint8_t hash_verification[2];
     uint8_t issuer_longid[8];
@@ -191,7 +174,7 @@ parse_public_key(
         const uint8_t *p_sig_issuer );
 
 /*
- * Verify an OpenPGP signature made on some SHA-1 hash, with some DSA public key
+ * Verify an OpenPGP signature made on some hash, with some DSA public key
  */
 int
 verify_signature(signature_packet_t *sign, public_key_packet_t *p_key,
@@ -206,21 +189,21 @@ download_signature(
         vlc_object_t *p_this, signature_packet_t *p_sig, const char *psz_url );
 
 /*
- * return a sha1 hash of a text
+ * return a hash of a text
  */
 uint8_t *
-hash_sha1_from_text(
+hash_from_text(
         const char *psz_text, signature_packet_t *p_sig );
 
 /*
- * return a sha1 hash of a file
+ * return a hash of a file
  */
 uint8_t *
-hash_sha1_from_file(
+hash_from_file(
         const char *psz_file, signature_packet_t *p_sig );
 
 /*
- * return a sha1 hash of a public key
+ * return a hash of a public key
  */
 uint8_t *
-hash_sha1_from_public_key( public_key_t *p_pkey );
+hash_from_public_key( public_key_t *p_pkey );
diff --git a/src/misc/update_crypto.c b/src/misc/update_crypto.c
index 3555f4f..97b55c6 100644
--- a/src/misc/update_crypto.c
+++ b/src/misc/update_crypto.c
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * update_crypto.c: DSA/SHA1 related functions used for updating
+ * update_crypto.c: DSA related functions used for updating
  *****************************************************************************
  * Copyright © 2008-2009 VLC authors and VideoLAN
  * $Id$
@@ -158,7 +158,7 @@ static size_t parse_signature_v3_packet( signature_packet_t *p_sig,
 
 /*
  * fill a signature_packet_v4_t from signature packet data
- * verify that it was used with a DSA public key, using SHA-1 digest
+ * verify that it was used with a DSA public key
  */
 static size_t parse_signature_v4_packet( signature_packet_t *p_sig,
                                       const uint8_t *p_buf, size_t i_sig_len )
@@ -412,12 +412,12 @@ static int pgp_unarmor( const char *p_ibuf, size_t i_ibuf_len,
 
 
 /*
- * Verify an OpenPGP signature made on some SHA-1 hash, with some DSA public key
+ * Verify an OpenPGP signature made with some DSA public key
  */
 int verify_signature( signature_packet_t *sign, public_key_packet_t *p_key,
                       uint8_t *p_hash )
 {
-    /* the data to be verified (a SHA-1 hash) */
+    /* the data to be verified (a hash) */
     const char *hash_sexp_s = "(data(flags raw)(value %m))";
     /* the public key */
     const char *key_sexp_s = "(public-key(dsa(p %m)(q %m)(g %m)(y %m)))";
@@ -668,9 +668,9 @@ static uint8_t *hash_finish( gcry_md_hd_t hd, signature_packet_t *p_sig )
 
 
 /*
- * return a sha1 hash of a text
+ * return a hash of a text
  */
-uint8_t *hash_sha1_from_text( const char *psz_string,
+uint8_t *hash_from_text( const char *psz_string,
         signature_packet_t *p_sig )
 {
     gcry_md_hd_t hd;
@@ -703,9 +703,9 @@ uint8_t *hash_sha1_from_text( const char *psz_string,
 
 
 /*
- * return a sha1 hash of a file
+ * return a hash of a file
  */
-uint8_t *hash_sha1_from_file( const char *psz_file, signature_packet_t *p_sig )
+uint8_t *hash_from_file( const char *psz_file, signature_packet_t *p_sig )
 {
     gcry_md_hd_t hd;
     if( gcry_md_open( &hd, p_sig->digest_algo, 0 ) )
@@ -722,10 +722,10 @@ uint8_t *hash_sha1_from_file( const char *psz_file, signature_packet_t *p_sig )
 
 
 /*
- * Generate a SHA1 hash on a public key, to verify a signature made on that hash
+ * Generate a hash on a public key, to verify a signature made on that hash
  * Note that we need the signature (v4) to compute the hash
  */
-uint8_t *hash_sha1_from_public_key( public_key_t *p_pkey )
+uint8_t *hash_from_public_key( public_key_t *p_pkey )
 {
     if( p_pkey->sig.version != 4 )
         return NULL;



More information about the vlc-commits mailing list