def test_extract_headers(self): """ L{DKIMVerifier.extractSignedHeaders} correctly extracts canonicalizes headers. """ data = ( # Count on Recipient ("""Host:example.com Content-Type: text/calendar ; charset = "utf-8" Originator: mailto:[email protected] Recipient: mailto:[email protected] ,\t mailto:[email protected]\t\t iSchedule-Version: 1.0 DKIM-Signature: v=1;\t\t d=example.com; s = dkim; t\t=\t1234; a=rsa-sha1; \t\tq=dns/txt:http/well-known\t\t; c=ischedule-relaxed/simple; h=Content-Type:Originator:Recipient:iSchedule-Version:iSchedule-Message-ID; bh=abc; b=def Cache-Control:no-cache Connection:close """, """content-type:text/calendar ; charset = "utf-8" originator:mailto:[email protected] recipient:mailto:[email protected],mailto:[email protected] ischedule-version:1.0 dkim-signature:v=1; d=example.com; s = dkim; t = 1234; a=rsa-sha1; q=dns/txt:http/well-known ; c=ischedule-relaxed/simple; h=Content-Type:Originator:Recipient:iSchedule-Version:iSchedule-Message-ID; bh=abc; b=""" ), # Exact count on Recipient ("""Host:example.com Content-Type: text/calendar ; charset = "utf-8" Originator: mailto:[email protected] Recipient: mailto:[email protected] ,\t mailto:[email protected]\t\t Recipient:\t\t mailto:[email protected] iSchedule-Version: 1.0 DKIM-Signature: v=1;\t\t d=example.com; s = dkim; t\t=\t1234; a=rsa-sha1; \t\tq=dns/txt:http/well-known\t\t; c=ischedule-relaxed/simple; h=Content-Type:Originator:Recipient:iSchedule-Version:iSchedule-Message-ID; bh=abc; b=def Cache-Control:no-cache Connection:close """, """content-type:text/calendar ; charset = "utf-8" originator:mailto:[email protected] recipient:mailto:[email protected],mailto:[email protected],mailto:[email protected] ischedule-version:1.0 dkim-signature:v=1; d=example.com; s = dkim; t = 1234; a=rsa-sha1; q=dns/txt:http/well-known ; c=ischedule-relaxed/simple; h=Content-Type:Originator:Recipient:iSchedule-Version:iSchedule-Message-ID; bh=abc; b=""" ), # Re-ordered Content-Type ("""Host:example.com iSchedule-Version: 1.0 Originator: mailto:[email protected] Recipient: mailto:[email protected] ,\t mailto:[email protected]\t\t DKIM-Signature: v=1;\t\t d=example.com; s = dkim; t\t=\t1234; a=rsa-sha1; \t\tq=dns/txt:http/well-known\t\t; c=ischedule-relaxed/simple; h=Content-Type:Originator:Recipient:iSchedule-Version:iSchedule-Message-ID; bh=abc; b=def Content-Type: text/calendar ; charset = "utf-8" Cache-Control:no-cache Connection:close """, """content-type:text/calendar ; charset = "utf-8" originator:mailto:[email protected] recipient:mailto:[email protected],mailto:[email protected] ischedule-version:1.0 dkim-signature:v=1; d=example.com; s = dkim; t = 1234; a=rsa-sha1; q=dns/txt:http/well-known ; c=ischedule-relaxed/simple; h=Content-Type:Originator:Recipient:iSchedule-Version:iSchedule-Message-ID; bh=abc; b=""" ), ) for hdrs, result in data: headers = [hdr.split(":", 1) for hdr in hdrs.splitlines()] verifier = DKIMVerifier(self._makeHeaders(headers), "") verifier.processDKIMHeader() extracted = verifier.extractSignedHeaders() self.assertEqual(extracted, result.replace("\n", "\r\n"))