def __call__(cls, key_path=None): """ key_path may be the path to either: _an RSAPrivateKey_OpenSSL (as generated by openssl); _an ECDSAPrivateKey_OpenSSL (as generated by openssl); _an RSAPrivateKey; _an ECDSAPrivateKey. """ if key_path is None: obj = type.__call__(cls) if cls is PrivKey: cls = PrivKeyECDSA obj.__class__ = cls obj.frmt = "original" obj.fill_and_store() return obj obj = _PKIObjMaker.__call__(cls, key_path, _MAX_KEY_SIZE) multiPEM = False try: privkey = RSAPrivateKey_OpenSSL(obj.der) privkey = privkey.privateKey obj.__class__ = PrivKeyRSA marker = b"PRIVATE KEY" except: try: privkey = ECDSAPrivateKey_OpenSSL(obj.der) privkey = privkey.privateKey obj.__class__ = PrivKeyECDSA marker = b"EC PRIVATE KEY" multiPEM = True except: try: privkey = RSAPrivateKey(obj.der) obj.__class__ = PrivKeyRSA marker = b"RSA PRIVATE KEY" except: try: privkey = ECDSAPrivateKey(obj.der) obj.__class__ = PrivKeyECDSA marker = b"EC PRIVATE KEY" except: raise Exception("Unable to import private key") try: obj.import_from_asn1pkt(privkey) except ImportError: pass if obj.frmt == "DER": if multiPEM: # this does not restore the EC PARAMETERS header obj.pem = der2pem(raw(privkey), marker) else: obj.pem = der2pem(obj.der, marker) return obj
def __call__(cls, key_path): """ key_path may be the path to either: _an RSAPrivateKey_OpenSSL (as generated by openssl); _an ECDSAPrivateKey_OpenSSL (as generated by openssl); _an RSAPrivateKey; _an ECDSAPrivateKey. """ obj = _PKIObjMaker.__call__(cls, key_path, MAX_KEY_SIZE) multiPEM = False try: privkey = RSAPrivateKey_OpenSSL(obj.der) privkey = privkey.privateKey obj.__class__ = PrivKeyRSA marker = "PRIVATE KEY" except: try: privkey = ECDSAPrivateKey_OpenSSL(obj.der) privkey = privkey.privateKey obj.__class__ = PrivKeyECDSA marker = "EC PRIVATE KEY" multiPEM = True except: try: privkey = RSAPrivateKey(obj.der) obj.__class__ = PrivKeyRSA marker = "RSA PRIVATE KEY" except: try: privkey = ECDSAPrivateKey(obj.der) obj.__class__ = PrivKeyECDSA marker = "EC PRIVATE KEY" except: raise Exception("Unable to import private key") obj.updateWith(privkey) if obj.frmt == "DER": if multiPEM: # this does not restore the EC PARAMETERS header obj.pem = der2pem(str(privkey), marker) else: obj.pem = der2pem(obj.der, marker) return obj