예제 #1
0
    def _parse_ecc_ssleay(data):
        """
        Parse binary structure of the old SSLeay file format used by OpenSSL.

        For ECDSA keys.
        """
        private_key = SigningKey.from_der(compatHMAC(data))
        secret_mult = private_key.privkey.secret_multiplier
        return Python_ECDSAKey(None, None, private_key.curve.name, secret_mult)
예제 #2
0
    ec["publicKey"] = ec_rfc5915["publicKey"]
    p8["version"] = 0
    p8["privateKeyAlgorithm"] = AlgorithmIdentifier()
    p8["privateKeyAlgorithm"]["algorithm"] = "1.2.840.10045.2.1"
    p8["privateKeyAlgorithm"]["parameters"] = ObjectIdentifier(
        ec_rfc5915["parameters"])
    p8["privateKey"] = DER_Encode(ec)
    der = DER_Encode(p8)
    #print; dumpasn1(der)
    #print; dumpasn1(der_test_keys["ec_pkcs8"])
    print
    print "Reencoded PKCS #8 {} static data".format(
        "matches" if der == der_test_keys["ec_pkcs8"] else "doesn't match")

    # Try doing same thing with ecdsa package ASN.1 utilities.
    sk = SigningKey.from_der(der_test_keys["ec_rfc5915"])
    vk = ECDSA_DER.encode_bitstring("\x00\x04" +
                                    sk.get_verifying_key().to_string())
    ec = ECDSA_DER.encode_sequence(
        ECDSA_DER.encode_integer(1),
        ECDSA_DER.encode_octet_string(sk.to_string()),
        ECDSA_DER.encode_constructed(1, vk))
    p8 = ECDSA_DER.encode_sequence(
        ECDSA_DER.encode_integer(0),
        ECDSA_DER.encode_sequence(encoded_oid_ecPublicKey,
                                  sk.curve.encoded_oid),
        ECDSA_DER.encode_octet_string(ec))
    print
    print "ECDSA-library PKCS #8 encoding {} pyasn1 PKCS #8 encoding".format(
        "matches" if p8 == der_test_keys["ec_pkcs8"] else "doesn't match")
예제 #3
0
 def _parse_eddsa_private_key(data):
     """Parse a DER encoded EdDSA key."""
     priv_key = SigningKey.from_der(data)
     return Python_EdDSAKey(priv_key.verifying_key, private_key=priv_key)