Paul Kehrer | 016e08a | 2014-11-26 09:41:18 -1000 | [diff] [blame] | 1 | # This file is dual licensed under the terms of the Apache License, Version |
| 2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository |
| 3 | # for complete details. |
| 4 | |
| 5 | from __future__ import absolute_import, division, print_function |
| 6 | |
Paul Kehrer | b2de948 | 2014-12-11 14:54:48 -0600 | [diff] [blame] | 7 | import abc |
Paul Kehrer | 016e08a | 2014-11-26 09:41:18 -1000 | [diff] [blame] | 8 | from enum import Enum |
| 9 | |
Paul Kehrer | b2de948 | 2014-12-11 14:54:48 -0600 | [diff] [blame] | 10 | import six |
| 11 | |
Paul Kehrer | 016e08a | 2014-11-26 09:41:18 -1000 | [diff] [blame] | 12 | |
Paul Kehrer | e76cd27 | 2014-12-14 19:00:51 -0600 | [diff] [blame] | 13 | class Version(Enum): |
Paul Kehrer | 016e08a | 2014-11-26 09:41:18 -1000 | [diff] [blame] | 14 | v1 = 0 |
| 15 | v3 = 2 |
| 16 | |
| 17 | |
Paul Kehrer | 016e08a | 2014-11-26 09:41:18 -1000 | [diff] [blame] | 18 | def load_pem_x509_certificate(data, backend): |
| 19 | return backend.load_pem_x509_certificate(data) |
| 20 | |
| 21 | |
Paul Kehrer | 016e08a | 2014-11-26 09:41:18 -1000 | [diff] [blame] | 22 | def load_der_x509_certificate(data, backend): |
| 23 | return backend.load_der_x509_certificate(data) |
Paul Kehrer | a68fd33 | 2014-11-27 07:08:40 -1000 | [diff] [blame] | 24 | |
| 25 | |
Paul Kehrer | e76cd27 | 2014-12-14 19:00:51 -0600 | [diff] [blame] | 26 | class InvalidVersion(Exception): |
Paul Kehrer | d5cccf7 | 2014-12-15 17:20:33 -0600 | [diff] [blame^] | 27 | def __init__(self, msg, parsed_version): |
| 28 | super(InvalidVersion, self).__init__(msg) |
| 29 | self.parsed_version = parsed_version |
Paul Kehrer | b2de948 | 2014-12-11 14:54:48 -0600 | [diff] [blame] | 30 | |
| 31 | |
| 32 | @six.add_metaclass(abc.ABCMeta) |
Paul Kehrer | e76cd27 | 2014-12-14 19:00:51 -0600 | [diff] [blame] | 33 | class Certificate(object): |
Paul Kehrer | b2de948 | 2014-12-11 14:54:48 -0600 | [diff] [blame] | 34 | @abc.abstractmethod |
| 35 | def fingerprint(self, algorithm): |
| 36 | """ |
| 37 | Returns bytes using digest passed. |
| 38 | """ |
| 39 | |
| 40 | @abc.abstractproperty |
| 41 | def serial(self): |
| 42 | """ |
| 43 | Returns certificate serial number |
| 44 | """ |
| 45 | |
| 46 | @abc.abstractproperty |
| 47 | def version(self): |
| 48 | """ |
| 49 | Returns the certificate version |
| 50 | """ |
| 51 | |
| 52 | @abc.abstractmethod |
| 53 | def public_key(self): |
| 54 | """ |
| 55 | Returns the public key |
| 56 | """ |
| 57 | |
| 58 | @abc.abstractproperty |
| 59 | def not_valid_before(self): |
| 60 | """ |
| 61 | Not before time (represented as UTC datetime) |
| 62 | """ |
| 63 | |
| 64 | @abc.abstractproperty |
| 65 | def not_valid_after(self): |
| 66 | """ |
| 67 | Not after time (represented as UTC datetime) |
| 68 | """ |