@@ -7,67 +7,85 @@ module SNS
7
7
describe MessageVerifier do
8
8
9
9
let ( :signing_cert_url ) {
10
- "https://sns.eu-west-1 .amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f .pem"
10
+ "https://sns.us-east-2 .amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda .pem"
11
11
}
12
12
13
- let ( :message ) { <<-JSON . strip }
13
+ let ( :message_SHA1 ) { <<-JSON . strip }
14
14
{
15
15
"Type" : "Notification",
16
- "MessageId" : "5b324425-3d5e-4fdf-a3f6-f46b8f93df79",
17
- "TopicArn" : "arn:aws:sns:eu-west-1:382739154790:for_justeat_aws_specs",
18
- "Subject" : "sdfghdsfg",
19
- "Message" : "dfgdsfg",
20
- "Timestamp" : "2012-04-30T11:07:54.008Z",
16
+ "MessageId" : "792cda85-518f-5dd3-9163-81d851212f3a",
17
+ "TopicArn" : "arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362",
18
+ "Message" : "Hello world",
19
+ "Timestamp" : "2022-07-28T21:23:58.317Z",
21
20
"SignatureVersion" : "1",
22
- "Signature" : "CTbst0fA37gbKnC0fiWK6HB0nQOr767MSLCJaWb0GyXc7283m1gozU3lRvOBaKP5Cwcj+clhR+rAN1m0Cp6W63oxBEu9n1Z50oyWx/tWtQd2j+MPaes+tNJSGohjHSe5qAqMwvYFYTZkbgFDFoWuVQLQuRj9I53hR1Eo3waHkJQ =",
21
+ "Signature" : "ghtf+deOBAzHJJZ6s6CdRLfTQAlcGzq9naoFM1wi0CJiq//uVRuZnamrkWNF0fhouMFvuLVRwcz8PZLUMSfnmd5VpdTKpTyiKmy1qJAZXma0w+yi7G+I33hD1Jyk1Nbym2n0kqp3fVu2aoooiN2ZeLAT2bH0/BtjLSfN1yAOKNoprco4qV9gGUZinXJdj9a1YdNhDR2jKi33ldlsVtEXAtiaDklGEk7DgRKX38GerBPiLg3FdtgY6KC7cdeGpU/dGK+4hjc83Ive1HoFkAwqhpgInM2sMytBosoiXfCmOKmU4xeGD0gHDNZTlJUJQDlzw8Eag0H9f/5zXF9d3uy0YQ= =",
23
22
"SigningCertURL" : #{ signing_cert_url . inspect } ,
24
- "UnsubscribeURL" : "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:382739154790:for_justeat_aws_specs:674f4ab3-2d1d-4df9-b411-b8a336f0ef7d"
23
+ "UnsubscribeURL" : "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362:2296bc94-7992-4be1-b15f-b97229b5c1d8"
24
+ }
25
+ JSON
26
+
27
+ let ( :message_SHA256 ) { <<-JSON . strip }
28
+ {
29
+ "Type" : "Notification",
30
+ "MessageId" : "17dea24b-55c2-540b-8362-f916557af765",
31
+ "TopicArn" : "arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e",
32
+ "Message" : "Hello world",
33
+ "Timestamp" : "2022-07-28T21:24:08.324Z",
34
+ "SignatureVersion" : "2",
35
+ "Signature" : "CXVqp9PfZAL+4JHS3Zxo1PFbQsvnOjvmYhtIf17TWpwc+iIVas8kZ8GopuzVzVMdatE7rCl/O4P91Zp05Dwz8lk8dLhfp8gSu3Njlzxlyrmzo9x3va3Jb7zFnedgS2GKnZWHGBdwTXho+TosNUE+3e10OMSlwN5XGDwX7+R3WL+rn+AXmFAqp3alg27sYa55h1dLE9cGszGPjScPdtF3BmZsUDMx9wSdNKsCk+vSvE8yBjnCmUl7laSFj3LzPVrlSwgNYCF3kYnNAkah7NplK4SFhJYLwS0HCVCQJKa8rVbQLf9cBTu60U402mrgy0bN8xWoyimzbYbrOMJjalqkUg==",
36
+ "SigningCertURL" : #{ signing_cert_url . inspect } ,
37
+ "UnsubscribeURL" : "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e:ad7d16e3-0a7c-46aa-b23e-ffaf02250cbe"
25
38
}
26
39
JSON
27
40
28
41
let ( :lambda_message ) { <<-JSON . strip }
29
42
{
30
43
"Type" : "Notification",
31
- "MessageId" : "5b324425-3d5e-4fdf-a3f6-f46b8f93df79",
32
- "TopicArn" : "arn:aws:sns:eu-west-1:382739154790:for_justeat_aws_specs",
33
- "Subject" : "sdfghdsfg",
34
- "Message" : "dfgdsfg",
35
- "Timestamp" : "2012-04-30T11:07:54.008Z",
44
+ "MessageId" : "792cda85-518f-5dd3-9163-81d851212f3a",
45
+ "TopicArn" : "arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362",
46
+ "Message" : "Hello world",
47
+ "Timestamp" : "2022-07-28T21:23:58.317Z",
36
48
"SignatureVersion" : "1",
37
- "Signature" : "CTbst0fA37gbKnC0fiWK6HB0nQOr767MSLCJaWb0GyXc7283m1gozU3lRvOBaKP5Cwcj+clhR+rAN1m0Cp6W63oxBEu9n1Z50oyWx/tWtQd2j+MPaes+tNJSGohjHSe5qAqMwvYFYTZkbgFDFoWuVQLQuRj9I53hR1Eo3waHkJQ =",
49
+ "Signature" : "ghtf+deOBAzHJJZ6s6CdRLfTQAlcGzq9naoFM1wi0CJiq//uVRuZnamrkWNF0fhouMFvuLVRwcz8PZLUMSfnmd5VpdTKpTyiKmy1qJAZXma0w+yi7G+I33hD1Jyk1Nbym2n0kqp3fVu2aoooiN2ZeLAT2bH0/BtjLSfN1yAOKNoprco4qV9gGUZinXJdj9a1YdNhDR2jKi33ldlsVtEXAtiaDklGEk7DgRKX38GerBPiLg3FdtgY6KC7cdeGpU/dGK+4hjc83Ive1HoFkAwqhpgInM2sMytBosoiXfCmOKmU4xeGD0gHDNZTlJUJQDlzw8Eag0H9f/5zXF9d3uy0YQ= =",
38
50
"SigningCertUrl" : #{ signing_cert_url . inspect } ,
39
- "UnsubscribeUrl" : "https://sns.eu-west-1 .amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:382739154790:for_justeat_aws_specs:674f4ab3-2d1d-4df9-b411-b8a336f0ef7d "
51
+ "UnsubscribeUrl" : "https://sns.us-east-2 .amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362:2296bc94-7992-4be1-b15f-b97229b5c1d8 "
40
52
}
41
53
JSON
54
+
42
55
let ( :cert ) { <<-CERT . strip }
43
56
-----BEGIN CERTIFICATE-----
44
- MIIE+TCCA+GgAwIBAgIQax6zU8p9DAWTsa4uy9uF1jANBgkqhkiG9w0BAQUFADCB
45
- tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
46
- ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug
47
- YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMm
48
- VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwHhcNMTAxMDA4
49
- MDAwMDAwWhcNMTMxMDA3MjM1OTU5WjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
50
- V2FzaGluZ3RvbjEQMA4GA1UEBxQHU2VhdHRsZTEYMBYGA1UEChQPQW1hem9uLmNv
51
- bSBJbmMuMRowGAYDVQQDFBFzbnMuYW1hem9uYXdzLmNvbTCBnzANBgkqhkiG9w0B
52
- AQEFAAOBjQAwgYkCgYEAv8OHcwOX+SpVUpdS6OtB0FbmX6w7FQIXLJyChbcYQ3Ck
53
- gJnrVJ5OFIMYAc+YMbkikXnvu9+MvZx38ZV8hIYBK4y4YSR/fLMzTIqsQXKW7myq
54
- mIeEGGqGrCVVhs0xusCgfNBi64/zczJ3z/KLLzSXZ2Ln18MCCjQ3A8EcuwFeMTsC
55
- AwEAAaOCAdEwggHNMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMEUGA1UdHwQ+MDww
56
- OqA4oDaGNGh0dHA6Ly9TVlJTZWN1cmUtRzItY3JsLnZlcmlzaWduLmNvbS9TVlJT
57
- ZWN1cmVHMi5jcmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUF
58
- BwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMB0GA1UdJQQWMBQGCCsG
59
- AQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAWgBSl7wsRzsBBA6NKZZBIshzgVy19
60
- RzB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlz
61
- aWduLmNvbTBABggrBgEFBQcwAoY0aHR0cDovL1NWUlNlY3VyZS1HMi1haWEudmVy
62
- aXNpZ24uY29tL1NWUlNlY3VyZUcyLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFow
63
- WDBWFglpbWFnZS9naWYwITAfMAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEF
64
- GDAmFiRodHRwOi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZI
65
- hvcNAQEFBQADggEBAKcmdO9iRCChdO21L0NaB24f2BFuUZO/y9tsTgC6NJ8p0sJU
66
- +/dKc4p33pnmDE8EGDbImMd/HdVnqQ4nngurjzu7z/mv7247FGaUL/BnqLgOQJiM
67
- YBJtskNd2vKN4kk4I6Z7e2mp2+4tzBL9Sk/x3b297oy4ZXILrBKxr9s9MhyPO1rQ
68
- Mda9v2L3qcjPj38zbNoohEIpu/ilArbbFOUMOqdh7jomDoE3cyBDWMOOBh+t6QQD
69
- kMFvPxlw0XwWsvjTGPFCBIR7NZXnwQfVYbdFu88TjT10wTCZ/E3yCp77aDWD1JLV
70
- 2V2EF3v1wPCPCbvEKZKVR5rLVYl2djU9j9d+H30=
57
+ MIIF1zCCBL+gAwIBAgIQB9pYWG3Mi7xej22g9pobJTANBgkqhkiG9w0BAQsFADBG
58
+ MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRUwEwYDVQQLEwxTZXJ2ZXIg
59
+ Q0EgMUIxDzANBgNVBAMTBkFtYXpvbjAeFw0yMTA5MDcwMDAwMDBaFw0yMjA4MTcy
60
+ MzU5NTlaMBwxGjAYBgNVBAMTEXNucy5hbWF6b25hd3MuY29tMIIBIjANBgkqhkiG
61
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAutFqueT3XgP13udzxE6UpbdjOtVO5DwoMpSM
62
+ iDNMnGzF1TYH5/R2LPUOBeTB0SkKnR4kpNcUZhicpGD4aKciz/GEZ6wu65xncfT9
63
+ H/KBOQwoXYTuClHwp6fYpGzcGFaFoEYMnijL/o4qmTSd+ukglQUgKpsDw4ofw6rU
64
+ m2CttJo+GQSNQ9NfGR1h/0J+zsApkeSYrXRx5wNlu87z8os1C/6PBrUHwt3xXeaf
65
+ Xzfwut8aRRYsS8BySOA9DAgLfNHlfdQCjKPXKrG/ussgReyWD6n/HH+j7Uha3xos
66
+ TzQqJifcxlTq6MxWdPR6fDaJNvqw6DOE7UjUNxHguXHlVfxhlQIDAQABo4IC6TCC
67
+ AuUwHwYDVR0jBBgwFoAUWaRmBlKge5WSPKOUByeWdFv5PdAwHQYDVR0OBBYEFAqz
68
+ C+vyouneE7mWWLbi9i0UsWUbMBwGA1UdEQQVMBOCEXNucy5hbWF6b25hd3MuY29t
69
+ MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
70
+ OwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5zY2ExYi5hbWF6b250cnVzdC5j
71
+ b20vc2NhMWIuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMHUGCCsGAQUFBwEBBGkw
72
+ ZzAtBggrBgEFBQcwAYYhaHR0cDovL29jc3Auc2NhMWIuYW1hem9udHJ1c3QuY29t
73
+ MDYGCCsGAQUFBzAChipodHRwOi8vY3J0LnNjYTFiLmFtYXpvbnRydXN0LmNvbS9z
74
+ Y2ExYi5jcnQwDAYDVR0TAQH/BAIwADCCAX0GCisGAQQB1nkCBAIEggFtBIIBaQFn
75
+ AHYAKXm+8J45OSHwVnOfY6V35b5XfZxgCvj5TV0mXCVdx4QAAAF7vfDVkQAABAMA
76
+ RzBFAiEA2XfHuy36aqRFiaL8c3md2mH451go8707+fRE0pEdSRACIE/g5FXTUXUZ
77
+ PFcmOhm9TZ+uMY1i4CIQ/CKVWln6C3t+AHYAUaOw9f0BeZxWbbg3eI8MpHrMGyfL
78
+ 956IQpoN/tSLBeUAAAF7vfDVjAAABAMARzBFAiBF1MhhFP0+FQt3daDFfMYoWwnr
79
+ muTInrjNpwfzlvQBugIhAPYadFzr+LaxSJoiZEbEHBvTts7bT0M3eCQONA2O7w6n
80
+ AHUAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKWBvYAAAF7vfDVdAAABAMA
81
+ RjBEAiAtPapmFAuA71ih4NoSd5hJelzAltNQpxDMcDfDyHyU8gIgWxmaa6+2KbBu
82
+ 9xdv379zvnJACFR7jc+4asl08Dn4aagwDQYJKoZIhvcNAQELBQADggEBAA54QX0u
83
+ oFWXfMmv02CGZv4NWo5TapyeeixQ2kKpZHRdVZjxZrw+hoF6HD7P3kGjH8ztyJll
84
+ tDxB0qgMltbPhQdScwhA6iTgoaBYqEUC/VHKd4PmmPT6yIsM36NBZVmkGlzl5uNo
85
+ /dBgBaG0SsVJnhr5zro3c2quC7n6fVGEZhf/UgQwRnnvThnvbNKguglDMq4uEqv8
86
+ njKyleht+glkcmXO0m9qLKt6BOS0amy6U2GlAwRn0Wx02ndJtnRCSC6kPuRWK/SQ
87
+ FEjB7gCK4hdKaAOuWdZpI55vF6ifOeM8toC3g7ofO8qLTnJupAG+ZitY5J3cvHWr
88
+ HqOUdKigPDHYLRo=
71
89
-----END CERTIFICATE-----
72
90
CERT
73
91
@@ -79,60 +97,72 @@ module SNS
79
97
80
98
describe '#authenticate!' do
81
99
82
- it 'returns true for a valid message' do
83
- expect ( verifier . authenticate! ( message ) ) . to be ( true )
84
- end
85
-
86
- it 'returns true for a valid lambda message' do
87
- expect ( verifier . authenticate! ( lambda_message ) ) . to be ( true )
88
- end
89
-
90
- it 'raises when the SigningCertURL is not https' do
91
- msg = Json . load ( message )
92
- msg [ 'SigningCertURL' ] = msg [ 'SigningCertURL' ] . sub ( /https/ , 'http' )
93
- msg = Json . dump ( msg )
94
- expect {
95
- verifier . authenticate! ( msg )
96
- } . to raise_error ( MessageVerifier ::VerificationError , /must be https/ )
97
- end
98
-
99
- it 'raises when the SigningCertURL is not AWS hosted' do
100
- msg = Json . load ( message )
101
- msg [ 'SigningCertURL' ] = 'https://internetbadguys.com/cert.pem'
102
- msg = Json . dump ( msg )
103
- expect {
104
- verifier . authenticate! ( msg )
105
- } . to raise_error ( MessageVerifier ::VerificationError , /hosted by AWS/ )
106
- end
107
-
108
- it 'raises when the SigningCertURL is not a pem file' do
109
- msg = Json . load ( message )
110
- msg [ 'SigningCertURL' ] = msg [ 'SigningCertURL' ] . sub ( /pem$/ , 'key' )
111
- msg = Json . dump ( msg )
112
- expect {
113
- verifier . authenticate! ( msg )
114
- } . to raise_error ( MessageVerifier ::VerificationError , /a \. pem file/ )
115
- end
116
-
117
- it 'raises when the message signature fails validation' do
118
- msg = Json . load ( message )
119
- msg [ 'Signature' ] = 'bad'
120
- msg = Json . dump ( msg )
121
- expect {
122
- verifier . authenticate! ( msg )
123
- } . to raise_error ( MessageVerifier ::VerificationError , /cannot be verified/ )
100
+ [ :message_sha1 , :message_sha256 , :lambda_message ] . each do |message_type |
101
+ let ( :message ) { send ( message_type ) }
102
+ let ( :cert_url_key ) { message_type == :lambda_message ? 'SigningCertUrl' : 'SigningCertURL' }
103
+
104
+ context "message type is #{ message_type } " do
105
+ it 'returns true for a valid message' do
106
+ expect ( verifier . authenticate! ( message ) ) . to be ( true )
107
+ end
108
+
109
+ it 'raises when the message signature fails validation' do
110
+ msg = Json . load ( message )
111
+ msg [ 'Signature' ] = 'bad'
112
+ msg = Json . dump ( msg )
113
+ expect {
114
+ verifier . authenticate! ( msg )
115
+ } . to raise_error ( MessageVerifier ::VerificationError , /cannot be verified/ )
116
+ end
117
+
118
+ it 'raises when SignatureVersion is not a valid value' do
119
+ msg = Json . load ( message )
120
+ msg [ 'SignatureVersion' ] = '3'
121
+ msg = Json . dump ( msg )
122
+ expect {
123
+ verifier . authenticate! ( msg )
124
+ } . to raise_error ( MessageVerifier ::VerificationError , /Invalid SignatureVersion/ )
125
+ end
126
+
127
+ it 'raises when the SigningCertURL is not https' do
128
+ msg = Json . load ( message )
129
+ msg [ cert_url_key ] = msg [ cert_url_key ] . sub ( /https/ , 'http' )
130
+ msg = Json . dump ( msg )
131
+ expect {
132
+ verifier . authenticate! ( msg )
133
+ } . to raise_error ( MessageVerifier ::VerificationError , /must be https/ )
134
+ end
135
+
136
+ it 'raises when the SigningCertURL is not AWS hosted' do
137
+ msg = Json . load ( message )
138
+ msg [ cert_url_key ] = 'https://internetbadguys.com/cert.pem'
139
+ msg = Json . dump ( msg )
140
+ expect {
141
+ verifier . authenticate! ( msg )
142
+ } . to raise_error ( MessageVerifier ::VerificationError , /hosted by AWS/ )
143
+ end
144
+
145
+ it 'raises when the SigningCertURL is not a pem file' do
146
+ msg = Json . load ( message )
147
+ msg [ cert_url_key ] = msg [ cert_url_key ] . sub ( /pem$/ , 'key' )
148
+ msg = Json . dump ( msg )
149
+ expect {
150
+ verifier . authenticate! ( msg )
151
+ } . to raise_error ( MessageVerifier ::VerificationError , /a \. pem file/ )
152
+ end
153
+ end
124
154
end
125
155
126
156
it 'can use a configured :http_proxy' do
127
157
proxy_url = 'https://peccy:[email protected] :12345'
128
158
verifier = MessageVerifier . new ( http_proxy : proxy_url )
129
- verifier . authenticate! ( message )
159
+ verifier . authenticate! ( message_SHA1 )
130
160
expect ( a_request ( :get , signing_cert_url ) ) . to have_been_made
131
161
end
132
162
133
163
it 'caches the pem file' do
134
- verifier . authenticate! ( message )
135
- verifier . authenticate! ( message )
164
+ verifier . authenticate! ( message_SHA1 )
165
+ verifier . authenticate! ( message_SHA1 )
136
166
expect ( a_request ( :get , signing_cert_url ) ) . to have_been_made . once
137
167
end
138
168
@@ -141,29 +171,29 @@ module SNS
141
171
to_return ( status : 500 , body : '' ) .
142
172
to_return ( status : 500 , body : '' ) .
143
173
to_return ( status : 200 , body : cert )
144
- verifier . authenticate! ( message )
174
+ verifier . authenticate! ( message_SHA1 )
145
175
expect ( a_request ( :get , signing_cert_url ) ) . to have_been_made . times ( 3 )
146
176
end
147
177
148
178
it 'raises when the signing cert can not be downloaded due to networking errors' do
149
179
stub_request ( :get , signing_cert_url ) . to_raise ( StandardError , 'oops' )
150
180
expect {
151
- verifier . authenticate! ( message )
181
+ verifier . authenticate! ( message_SHA1 )
152
182
} . to raise_error ( MessageVerifier ::VerificationError , 'oops' )
153
183
end
154
184
155
185
it 'raises when the signing cert can not be downloaded' do
156
186
stub_request ( :get , signing_cert_url ) . to_return ( status :500 , body :'bad' )
157
187
expect {
158
- verifier . authenticate! ( message )
188
+ verifier . authenticate! ( message_SHA1 )
159
189
} . to raise_error ( MessageVerifier ::VerificationError , 'bad' )
160
190
end
161
191
162
192
it 'raises when the signing cert contains additional characters' do
163
193
cert_with_extra = "<xml><value>\n #{ cert } \n <value></xml>"
164
194
stub_request ( :get , signing_cert_url ) . to_return ( status :200 , body : cert_with_extra )
165
195
expect {
166
- verifier . authenticate! ( message )
196
+ verifier . authenticate! ( message_SHA1 )
167
197
} . to raise_error ( MessageVerifier ::VerificationError ,
168
198
/certificate does not match expected X509 PEM format/ )
169
199
end
@@ -172,15 +202,21 @@ module SNS
172
202
173
203
describe '#authentic?' do
174
204
175
- it 'returns true if the message can be authenticated' do
176
- expect ( verifier . authentic? ( message ) ) . to be ( true )
177
- end
178
-
179
- it 'returns false if the message can not be authenticated' do
180
- msg = Json . load ( message )
181
- msg [ 'Signature' ] = 'bad'
182
- msg = Json . dump ( msg )
183
- expect ( verifier . authentic? ( msg ) ) . to be ( false )
205
+ [ :message_sha1 , :message_sha256 , :lambda_message ] . each do |message_type |
206
+ let ( :message ) { send ( message_type ) }
207
+
208
+ context "message type is #{ message_type } " do
209
+ it 'returns true if the message can be authenticated' do
210
+ expect ( verifier . authentic? ( message ) ) . to be ( true )
211
+ end
212
+
213
+ it 'returns false if the message can not be authenticated' do
214
+ msg = Json . load ( message )
215
+ msg [ 'Signature' ] = 'bad'
216
+ msg = Json . dump ( msg )
217
+ expect ( verifier . authentic? ( msg ) ) . to be ( false )
218
+ end
219
+ end
184
220
end
185
221
186
222
end
0 commit comments