Verify correctness of authentication in BFD layer.
(self, packet)
| 807 | self.test.pg_start() |
| 808 | |
| 809 | def verify_sha1_auth(self, packet): |
| 810 | """Verify correctness of authentication in BFD layer.""" |
| 811 | bfd = packet[BFD] |
| 812 | self.test.assert_equal(bfd.auth_len, 28, "Auth section length") |
| 813 | self.test.assert_equal(bfd.auth_type, self.sha1_key.auth_type, BFDAuthType) |
| 814 | self.test.assert_equal(bfd.auth_key_id, self.bfd_key_id, "Key ID") |
| 815 | self.test.assert_equal(bfd.auth_reserved, 0, "Reserved") |
| 816 | if self.vpp_seq_number is None: |
| 817 | self.vpp_seq_number = bfd.auth_seq_num |
| 818 | self.test.logger.debug( |
| 819 | "Received initial sequence number: %s" % self.vpp_seq_number |
| 820 | ) |
| 821 | else: |
| 822 | recvd_seq_num = bfd.auth_seq_num |
| 823 | self.test.logger.debug( |
| 824 | "Received followup sequence number: %s" % recvd_seq_num |
| 825 | ) |
| 826 | if self.vpp_seq_number < 0xFFFFFFFF: |
| 827 | if self.sha1_key.auth_type == BFDAuthType.meticulous_keyed_sha1: |
| 828 | self.test.assert_equal( |
| 829 | recvd_seq_num, self.vpp_seq_number + 1, "BFD sequence number" |
| 830 | ) |
| 831 | else: |
| 832 | self.test.assert_in_range( |
| 833 | recvd_seq_num, |
| 834 | self.vpp_seq_number, |
| 835 | self.vpp_seq_number + 1, |
| 836 | "BFD sequence number", |
| 837 | ) |
| 838 | else: |
| 839 | if self.sha1_key.auth_type == BFDAuthType.meticulous_keyed_sha1: |
| 840 | self.test.assert_equal(recvd_seq_num, 0, "BFD sequence number") |
| 841 | else: |
| 842 | self.test.assertIn( |
| 843 | recvd_seq_num, |
| 844 | (self.vpp_seq_number, 0), |
| 845 | "BFD sequence number not one of " |
| 846 | "(%s, 0)" % self.vpp_seq_number, |
| 847 | ) |
| 848 | self.vpp_seq_number = recvd_seq_num |
| 849 | # last 20 bytes represent the hash - so replace them with the key, |
| 850 | # pad the result with zeros and hash the result |
| 851 | hash_material = ( |
| 852 | bfd.original[:-20] |
| 853 | + self.sha1_key.key |
| 854 | + b"\0" * (20 - len(self.sha1_key.key)) |
| 855 | ) |
| 856 | expected_hash = hashlib.sha1(hash_material).hexdigest() |
| 857 | self.test.assert_equal( |
| 858 | binascii.hexlify(bfd.auth_key_hash), expected_hash.encode(), "Auth key hash" |
| 859 | ) |
| 860 | |
| 861 | def verify_bfd(self, packet): |
| 862 | """Verify correctness of BFD layer.""" |
no test coverage detected