@@ -732,19 +732,14 @@ func verifyDetachedSignatureReader(keyring KeyRing, signed, signature io.Reader,
732
732
// It checks the following:
733
733
// - Hash function should not be invalid according to
734
734
// config.RejectHashAlgorithms.
735
- // - Verification key must be older than the signature creation time.
736
735
// - Check signature notations.
737
736
// - Signature is not expired (unless a zero time is passed to
738
737
// explicitly ignore expiration).
739
- func checkSignatureDetails (pk * packet. PublicKey , signature * packet.Signature , now time.Time , config * packet.Config ) error {
738
+ func checkSignatureDetails (signature * packet.Signature , now time.Time , config * packet.Config ) error {
740
739
if config .RejectHashAlgorithm (signature .Hash ) {
741
740
return errors .SignatureError ("insecure hash algorithm: " + signature .Hash .String ())
742
741
}
743
742
744
- if pk .CreationTime .Unix () > signature .CreationTime .Unix () {
745
- return errors .ErrSignatureOlderThanKey
746
- }
747
-
748
743
for _ , notation := range signature .Notations {
749
744
if notation .IsCritical && ! config .KnownNotation (notation .Name ) {
750
745
return errors .SignatureError ("unknown critical notation: " + notation .Name )
@@ -762,30 +757,29 @@ func checkSignatureDetails(pk *packet.PublicKey, signature *packet.Signature, no
762
757
// signature and all relevant binding signatures.
763
758
// In addition, the message signature hash algorithm is checked against
764
759
// config.RejectMessageHashAlgorithms.
760
+ // Finally, the signature must be newer than the verification key.
765
761
func checkMessageSignatureDetails (verifiedKey * Key , signature * packet.Signature , config * packet.Config ) error {
766
762
if config .RejectMessageHashAlgorithm (signature .Hash ) {
767
763
return errors .SignatureError ("insecure message hash algorithm: " + signature .Hash .String ())
768
764
}
769
765
766
+ if signature .CreationTime .Unix () < verifiedKey .PublicKey .CreationTime .Unix () {
767
+ return errors .ErrSignatureOlderThanKey
768
+ }
769
+
770
770
sigsToCheck := []* packet.Signature {signature , verifiedKey .PrimarySelfSignature }
771
771
if ! verifiedKey .IsPrimary () {
772
772
sigsToCheck = append (sigsToCheck , verifiedKey .SelfSignature , verifiedKey .SelfSignature .EmbeddedSignature )
773
773
}
774
774
var errs []error
775
775
for _ , sig := range sigsToCheck {
776
- var pk * packet.PublicKey
777
- if sig == verifiedKey .PrimarySelfSignature || sig == verifiedKey .SelfSignature {
778
- pk = verifiedKey .Entity .PrimaryKey
779
- } else {
780
- pk = verifiedKey .PublicKey
781
- }
782
776
var time time.Time
783
777
if sig == signature {
784
778
time = config .Now ()
785
779
} else {
786
780
time = signature .CreationTime
787
781
}
788
- if err := checkSignatureDetails (pk , sig , time , config ); err != nil {
782
+ if err := checkSignatureDetails (sig , time , config ); err != nil {
789
783
errs = append (errs , err )
790
784
}
791
785
}
0 commit comments