@@ -824,6 +824,10 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
824
824
PKT_public_key * pripk = kb -> pkt -> pkt .public_key ;
825
825
gcry_md_hd_t md ;
826
826
int signer_alloced = 0 ;
827
+ int stub_is_selfsig ;
828
+
829
+ if (!is_selfsig )
830
+ is_selfsig = & stub_is_selfsig ;
827
831
828
832
rc = openpgp_pk_test_algo (sig -> pubkey_algo );
829
833
if (rc )
@@ -857,14 +861,11 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
857
861
858
862
if (signer )
859
863
{
860
- if (is_selfsig )
861
- {
862
- if (signer -> keyid [0 ] == pripk -> keyid [0 ]
863
- && signer -> keyid [1 ] == pripk -> keyid [1 ])
864
- * is_selfsig = 1 ;
865
- else
866
- * is_selfsig = 0 ;
867
- }
864
+ if (signer -> keyid [0 ] == pripk -> keyid [0 ]
865
+ && signer -> keyid [1 ] == pripk -> keyid [1 ])
866
+ * is_selfsig = 1 ;
867
+ else
868
+ * is_selfsig = 0 ;
868
869
}
869
870
else
870
871
{
@@ -874,8 +875,7 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
874
875
{
875
876
/* Issued by the primary key. */
876
877
signer = pripk ;
877
- if (is_selfsig )
878
- * is_selfsig = 1 ;
878
+ * is_selfsig = 1 ;
879
879
}
880
880
else
881
881
{
@@ -904,8 +904,7 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
904
904
if (! signer )
905
905
{
906
906
/* Signer by some other key. */
907
- if (is_selfsig )
908
- * is_selfsig = 0 ;
907
+ * is_selfsig = 0 ;
909
908
if (ret_pk )
910
909
{
911
910
signer = ret_pk ;
@@ -966,9 +965,22 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
966
965
else if (IS_UID_SIG (sig ) || IS_UID_REV (sig ))
967
966
{
968
967
log_assert (packet -> pkttype == PKT_USER_ID );
969
- hash_public_key (md , pripk );
970
- hash_uid_packet (packet -> pkt .user_id , md , sig );
971
- rc = check_signature_end_simple (signer , sig , md );
968
+ if (sig -> digest_algo == DIGEST_ALGO_SHA1 && !* is_selfsig
969
+ && sig -> timestamp > 1547856000 )
970
+ {
971
+ /* If the signature was created using SHA-1 we consider this
972
+ * signature invalid because it makes it possible to mount a
973
+ * chosen-prefix collision. We don't do this for
974
+ * self-signatures or for signatures created before the
975
+ * somewhat arbitrary cut-off date 2019-01-19. */
976
+ rc = gpg_error (GPG_ERR_DIGEST_ALGO );
977
+ }
978
+ else
979
+ {
980
+ hash_public_key (md , pripk );
981
+ hash_uid_packet (packet -> pkt .user_id , md , sig );
982
+ rc = check_signature_end_simple (signer , sig , md );
983
+ }
972
984
}
973
985
else
974
986
{
0 commit comments