1""" 
    2<Program Name> 
    3  exceptions.py 
    4 
    5<Author> 
    6  Santiago Torres-Arias <santiago@nyu.edu> 
    7  Lukas Puehringer <lukas.puehringer@nyu.edu> 
    8 
    9<Started> 
    10  Dec 8, 2017 
    11 
    12<Copyright> 
    13  See LICENSE for licensing information. 
    14 
    15<Purpose> 
    16  Define Exceptions used in the gpg package. Following the practice from 
    17  securesystemslib the names chosen for exception classes should end in 
    18  'Error' (except where there is a good reason not to). 
    19 
    20""" 
    21 
    22import datetime 
    23 
    24 
    25class PacketParsingError(Exception): 
    26    pass 
    27 
    28 
    29class KeyNotFoundError(Exception): 
    30    pass 
    31 
    32 
    33class PacketVersionNotSupportedError(Exception): 
    34    pass 
    35 
    36 
    37class SignatureAlgorithmNotSupportedError(Exception): 
    38    pass 
    39 
    40 
    41class KeyExpirationError(Exception): 
    42    def __init__(self, key): 
    43        super().__init__() 
    44        self.key = key 
    45 
    46    def __str__(self): 
    47        creation_time = datetime.datetime.utcfromtimestamp(self.key["creation_time"]) 
    48        expiration_time = datetime.datetime.utcfromtimestamp( 
    49            self.key["creation_time"] + self.key["validity_period"] 
    50        ) 
    51        validity_period = expiration_time - creation_time 
    52 
    53        return ( 
    54            "GPG key '{}' created on '{:%Y-%m-%d %H:%M} UTC' with validity " 
    55            "period '{}' expired on '{:%Y-%m-%d %H:%M} UTC'.".format( 
    56                self.key["keyid"], 
    57                creation_time, 
    58                validity_period, 
    59                expiration_time, 
    60            ) 
    61        )