@@ -862,6 +862,59 @@ func TestCreated(t *testing.T) {
862862 t .Run ("verify logic requires to verify Created" , testDateFail )
863863}
864864
865+ func TestVerifyDateWithin (t * testing.T ) {
866+ now := time .Now ().Unix ()
867+ fields := Headers ("@status" , "date" , "content-type" )
868+ signatureName := "sigres"
869+ key , err := base64 .StdEncoding .DecodeString ("uzvJfB4u3N0Jy4T7NZ75MDVcr8zSTInedJtkgcu46YW4XByzNJjxBdtjUkdJPBtbmHhIDi6pcl8jsasjlTMtDQ==" )
870+ if err != nil {
871+ t .Fatal (err )
872+ }
873+ signConfig := NewSignConfig ().SignCreated (true ).setFakeCreated (now ).SetKeyID ("test-shared-secret" )
874+ signer , err := NewHMACSHA256Signer (key , signConfig , fields )
875+ if err != nil {
876+ t .Fatal (err )
877+ }
878+ res := readResponse (httpres2 )
879+ alignedDate := time .Unix (now , 0 ).UTC ().Format (http .TimeFormat )
880+ res .Header .Set ("Date" , alignedDate )
881+ sigInput , sig , err := SignResponse (signatureName , * signer , res , nil )
882+ if err != nil {
883+ t .Fatal (err )
884+ }
885+ verifyConfig := NewVerifyConfig ().SetVerifyDateWithin (time .Minute )
886+
887+ t .Run ("aligned Date passes" , func (t * testing.T ) {
888+ res2 := readResponse (httpres2 )
889+ res2 .Header .Set ("Date" , alignedDate )
890+ res2 .Header .Add ("Signature" , sig )
891+ res2 .Header .Add ("Signature-Input" , sigInput )
892+ verifier , err := NewHMACSHA256Verifier (key , verifyConfig , fields )
893+ if err != nil {
894+ t .Fatal (err )
895+ }
896+ if err := VerifyResponse (signatureName , * verifier , res2 , nil ); err != nil {
897+ t .Errorf ("verification error: %s" , err )
898+ }
899+ })
900+
901+ t .Run ("misaligned Date fails" , func (t * testing.T ) {
902+ res2 := readResponse (httpres2 )
903+ res2 .Header .Set ("Date" , time .Unix (now - 3600 , 0 ).UTC ().Format (http .TimeFormat ))
904+ res2 .Header .Add ("Signature" , sig )
905+ res2 .Header .Add ("Signature-Input" , sigInput )
906+ verifier , err := NewHMACSHA256Verifier (key , verifyConfig , fields )
907+ if err != nil {
908+ t .Fatal (err )
909+ }
910+ err = VerifyResponse (signatureName , * verifier , res2 , nil )
911+ if err == nil {
912+ t .Fatal ("expected verification to fail" )
913+ }
914+ assert .Contains (t , err .Error (), "Date header" )
915+ })
916+ }
917+
865918// Same as TestCreated but using Message
866919func TestMessageCreated (t * testing.T ) {
867920 testOnceWithConfig := func (t * testing.T , createdTime int64 , verifyConfig * VerifyConfig , wantSuccess bool ) {
0 commit comments