def _import_subjectPublicKeyInfo(encoded, passphrase, params): algoid, encoded_key, emb_params = _expand_subject_public_key_info(encoded) if algoid != oid: raise ValueError("No DSA subjectPublicKeyInfo") if params and emb_params: raise ValueError("Too many DSA parameters") y = DerInteger().decode(encoded_key).value p, q, g = list(DerSequence().decode(params or emb_params)) tup = (y, g, p, q) return construct(tup)
def _import_subjectPublicKeyInfo(encoded, *kwargs): oid, encoded_key, params = _expand_subject_public_key_info(encoded) # We accept id-ecPublicKey, id-ecDH, id-ecMQV without making any # distiction for now. unrestricted_oid = "1.2.840.10045.2.1" ecdh_oid = "1.3.132.1.12" ecmqv_oid = "1.3.132.1.13" if oid not in (unrestricted_oid, ecdh_oid, ecmqv_oid) or not params: raise ValueError("Invalid ECC OID") # ECParameters ::= CHOICE { # namedCurve OBJECT IDENTIFIER # -- implicitCurve NULL # -- specifiedCurve SpecifiedECDomain # } curve_name = DerObjectId().decode(params).value return _import_public_der(curve_name, encoded_key)
def _import_subjectPublicKeyInfo(encoded, *kwargs): """Convert a subjectPublicKeyInfo into an EccKey object""" # See RFC5480 # Parse the generic subjectPublicKeyInfo structure oid, ec_point, params = _expand_subject_public_key_info(encoded) # ec_point must be an encoded OCTET STRING # params is encoded ECParameters # We accept id-ecPublicKey, id-ecDH, id-ecMQV without making any # distiction for now. # Restrictions can be captured in the key usage certificate # extension unrestricted_oid = "1.2.840.10045.2.1" ecdh_oid = "1.3.132.1.12" ecmqv_oid = "1.3.132.1.13" if oid not in (unrestricted_oid, ecdh_oid, ecmqv_oid): raise UnsupportedEccFeature("Unsupported ECC purpose (OID: %s)" % oid) # Parameters are mandatory for all three types if not params: raise ValueError("Missing ECC parameters") # ECParameters ::= CHOICE { # namedCurve OBJECT IDENTIFIER # -- implicitCurve NULL # -- specifiedCurve SpecifiedECDomain # } # # implicitCurve and specifiedCurve are not supported (as per RFC) curve_oid = DerObjectId().decode(params).value return _import_public_der(curve_oid, ec_point)
def _import_subjectPublicKeyInfo(encoded, *kwargs): """Convert a subjectPublicKeyInfo into an EccKey object""" # See RFC5480 # Parse the generic subjectPublicKeyInfo structure oid, ec_point, params = _expand_subject_public_key_info(encoded) # ec_point must be an encoded OCTET STRING # params is encoded ECParameters # We accept id-ecPublicKey, id-ecDH, id-ecMQV without making any # distiction for now. unrestricted_oid = "1.2.840.10045.2.1" # Restrictions can be captured # in the key usage certificate # extension ecdh_oid = "1.3.132.1.12" ecmqv_oid = "1.3.132.1.13" if oid not in (unrestricted_oid, ecdh_oid, ecmqv_oid): raise UnsupportedEccFeature("Unsupported ECC purpose (OID: %s)" % oid) # Parameters are mandatory for all three types if not params: raise ValueError("Missing ECC parameters") # ECParameters ::= CHOICE { # namedCurve OBJECT IDENTIFIER # -- implicitCurve NULL # -- specifiedCurve SpecifiedECDomain # } # # implicitCurve and specifiedCurve are not supported (as per RFC) curve_oid = DerObjectId().decode(params).value return _import_public_der(curve_oid, ec_point)
def _import_subjectPublicKeyInfo(encoded, *kwargs): algoid, encoded_key, params = _expand_subject_public_key_info(encoded) if algoid != oid or params is not None: raise ValueError("No RSA subjectPublicKeyInfo") return _import_pkcs1_public(encoded_key)