def dump_unencrypted(pkey): keytype = pkey.__module__.rsplit('.',1)[-1] if keytype == 'RSA': algoId = OID_PKCS_RSAPKEY algoParms = None vals = [0, pkey.n, pkey.e, pkey.d, pkey.p, pkey.q, pkey.d % (pkey.p - 1), pkey.d % (pkey.q - 1), inverse(pkey.q, pkey.p)] pkeyData = asn1.dumps(vals) elif keytype == 'DSA': algoId = OID_PKCS_DSAPKEY algoParms = (pkey.p, pkey.q, pkey.g) pkeyData = asn1.dumps(pkey.x) elif keytype == 'ElGamal': algoId = OID_PKCS_DHPKEY algoParms = (pkey.p, pkey.g) pkeyData = asn1.dumps(pkey.x) else: raise TypeError('unknown private key implementation') pkeyAlgo = (algoId, algoParms) return (0, pkeyAlgo, pkeyData)
def dump_encrypted(pkey, cipher): pkeyInfo = dump_unencrypted(pkey) pkeyData = asn1.dumps(pkeyInfo) encrAlgo = _pbecipher_toAlgoInfo(cipher) encrData = cipher.encrypt(pkeyData) return (encrAlgo, encrData)