@@ -294,3 +294,93 @@ func TestVerify_tooManySignatures(t *testing.T) {
294
294
t .Fatalf ("Expected %v verifications, got %v" , options .MaxVerifications , len (verifs ))
295
295
}
296
296
}
297
+
298
+ const validSignatureWithSFlag = `DKIM-Signature: a=rsa-sha256; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
299
+ c=simple/simple; d=example.com;
300
+ h=Received:From:To:Subject:Date:Message-ID; s=helsinki; t=1627654546; v=1;
301
+ b=IKIukw2EoRWxb86Ke2ingZFWLoAeNnKYAwGghFe1y0bbn5QLSoyk78o36JXT8z1DzmPquMHt
302
+ C//jnBna6DtqBneiKAUo3OyYmv1+EbTWWEvHGGtUkrKge2VdIXM3ttaOpuTHJRG+6irPKq0Ul4T
303
+ Ofa99PVg4o6nfY6Ctakv3aYc=
304
+ Received: from helsinki.example.com [192.0.2.1]
305
+ by submitserver.example.com with SUBMISSION;
306
+ Fri, 11 Jul 2003 21:01:54 -0700 (PDT)
307
+ From: Joe Helsinki <[email protected] >
308
+
309
+ Subject: Is dinner ready?
310
+ Date: Fri, 11 Jul 2021 21:00:37 -0700 (PDT)
311
+
312
+
313
+ Hi.
314
+
315
+ We lost the game. Are you hungry yet?
316
+
317
+ Joe.`
318
+
319
+ var testSFlagVerification = & Verification {
320
+ Domain : "example.com" ,
321
+ Identifier : "@example.com" ,
322
+ HeaderKeys : []string {"Received" , "From" , "To" , "Subject" , "Date" , "Message-ID" },
323
+ Time : time .Unix (1627654546 , 0 ),
324
+ }
325
+
326
+ func TestVerify_SFlag (t * testing.T ) {
327
+ r := newMailStringReader (validSignatureWithSFlag )
328
+
329
+ verifications , err := Verify (r )
330
+ if err != nil {
331
+ t .Fatalf ("Expected no error while verifying signature with flags, got: %v" , err )
332
+ } else if len (verifications ) != 1 {
333
+ t .Fatalf ("Expected exactly one verification with flags, got %v" , len (verifications ))
334
+ }
335
+
336
+ v := verifications [0 ]
337
+ if ! reflect .DeepEqual (testSFlagVerification , v ) {
338
+ t .Errorf ("Expected verification with flags to be \n %+v\n but got \n %+v" , testSFlagVerification , v )
339
+ }
340
+ }
341
+
342
+ const invalidSignatureWithSFlag = `DKIM-Signature: a=rsa-sha256; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
343
+ c=simple/simple; d=example.com;
344
+ h=Received:From:To:Subject:Date:Message-ID; [email protected] ;
345
+ s=helsinki; t=1627654996; v=1;
346
+ b=k07JuWvk3PZkanimQ0QtIXRwXC5W4EhG/0sPH+r7zWKQ731fNZE//9+ofz+vcA3K5YQ0cOR2
347
+ EXY9qjriMPHFlaYsKZ4gj5YebNhRHyjJ9xlsTPNtFLqs9wnnaKCZu3VxJpualfTaY+Vs3RMjYLq
348
+ 7IvOY4tqxnifJg2uFC/5kRbY=
349
+ Received: from helsinki.example.com [192.0.2.1]
350
+ by submitserver.example.com with SUBMISSION;
351
+ Fri, 11 Jul 2003 21:01:54 -0700 (PDT)
352
+ From: Joe Helsinki <[email protected] >
353
+
354
+ Subject: Is dinner ready?
355
+ Date: Fri, 11 Jul 2021 21:00:37 -0700 (PDT)
356
+
357
+
358
+ Hi.
359
+
360
+ We lost the game. Are you hungry yet?
361
+
362
+ Joe.`
363
+
364
+ var testSFlagVerificationFail = & Verification {
365
+ Domain : "example.com" ,
366
+
367
+ HeaderKeys : []string {"Received" , "From" , "To" , "Subject" , "Date" , "Message-ID" },
368
+ Time : time .Unix (1627654996 , 0 ),
369
+ Err : permFailError ("identifier and domain mismatch" ),
370
+ }
371
+
372
+ func TestVerify_InvalidSFlag (t * testing.T ) {
373
+ r := newMailStringReader (invalidSignatureWithSFlag )
374
+
375
+ verifications , err := Verify (r )
376
+ if err != nil {
377
+ t .Fatalf ("Expected no error while verifying signature with flags, got: %v" , err )
378
+ } else if len (verifications ) != 1 {
379
+ t .Fatalf ("Expected exactly one verification with flags, got %v" , len (verifications ))
380
+ }
381
+
382
+ v := verifications [0 ]
383
+ if ! reflect .DeepEqual (testSFlagVerificationFail , v ) {
384
+ t .Errorf ("Expected verification with flags to be \n %+v\n but got \n %+v" , testSFlagVerificationFail , v )
385
+ }
386
+ }
0 commit comments