Fix some issues in cryptography package (#3474)

Note: the verifier() methods are not in docs, but they don't look private and are actually used in some code.
This commit is contained in:
Ivan Levkivskyi
2019-11-21 17:05:22 +00:00
committed by GitHub
parent c53bc5a7ab
commit 8df632bca5
4 changed files with 36 additions and 19 deletions

View File

@@ -1,7 +1,10 @@
from abc import ABCMeta, abstractmethod
from typing import Union
from cryptography.hazmat.backends.interfaces import DSABackend
from cryptography.hazmat.primitives.asymmetric.padding import AsymmetricPadding
from cryptography.hazmat.primitives.asymmetric import AsymmetricVerificationContext
from cryptography.hazmat.primitives.asymmetric.utils import Prehashed
from cryptography.hazmat.primitives.hashes import HashAlgorithm
from cryptography.hazmat.primitives.serialization import Encoding, KeySerializationEncryption, PrivateFormat, PublicFormat
@@ -32,7 +35,7 @@ class DSAPrivateKey(metaclass=ABCMeta):
@abstractmethod
def public_key(self) -> DSAPublicKey: ...
@abstractmethod
def sign(self, data: bytes, algorithm: HashAlgorithm) -> bytes: ...
def sign(self, data: bytes, algorithm: Union[HashAlgorithm, Prehashed]) -> bytes: ...
class DSAPrivateKeyWithSerialization(DSAPrivateKey):
@abstractmethod
@@ -58,9 +61,10 @@ class DSAPublicKey(metaclass=ABCMeta):
@abstractmethod
def public_numbers(self) -> DSAPublicNumbers: ...
@abstractmethod
def sign(self, data: bytes, padding: AsymmetricPadding, algorithm: HashAlgorithm) -> bytes: ...
def verifier(self, signature: bytes,
signature_algorithm: Union[HashAlgorithm, Prehashed]) -> AsymmetricVerificationContext: ...
@abstractmethod
def verify(self, signature: bytes, data: bytes, padding: AsymmetricPadding, algorithm: HashAlgorithm) -> None: ...
def verify(self, signature: bytes, data: bytes, algorithm: Union[HashAlgorithm, Prehashed]) -> None: ...
DSAPublicKeyWithSerialization = DSAPublicKey

View File

@@ -2,8 +2,8 @@ from abc import ABCMeta, abstractmethod
from typing import ClassVar, Union
from cryptography.hazmat.backends.interfaces import EllipticCurveBackend
from cryptography.hazmat.primitives.asymmetric.padding import AsymmetricPadding
from cryptography.hazmat.primitives.asymmetric.utils import Prehashed
from cryptography.hazmat.primitives.asymmetric import AsymmetricVerificationContext
from cryptography.hazmat.primitives.hashes import HashAlgorithm
from cryptography.hazmat.primitives.serialization import Encoding, KeySerializationEncryption, PrivateFormat, PublicFormat
from cryptography.x509 import ObjectIdentifier
@@ -162,6 +162,8 @@ class EllipticCurvePrivateKey(metaclass=ABCMeta):
def exchange(self, algorithm: ECDH, peer_public_key: EllipticCurvePublicKey) -> bytes: ...
@abstractmethod
def public_key(self) -> EllipticCurvePublicKey: ...
@abstractmethod
def sign(self, data: bytes, signature_algorithm: EllipticCurveSignatureAlgorithm) -> bytes: ...
class EllipticCurvePrivateKeyWithSerialization(EllipticCurvePrivateKey):
@abstractmethod
@@ -193,9 +195,9 @@ class EllipticCurvePublicKey(metaclass=ABCMeta):
@abstractmethod
def public_numbers(self) -> EllipticCurvePublicNumbers: ...
@abstractmethod
def sign(self, data: bytes, padding: AsymmetricPadding, algorithm: HashAlgorithm) -> bytes: ...
def verifier(self, signature: bytes, signature_algorithm: EllipticCurveSignatureAlgorithm) -> AsymmetricVerificationContext: ...
@abstractmethod
def verify(self, signature: bytes, data: bytes, padding: AsymmetricPadding, algorithm: HashAlgorithm) -> None: ...
def verify(self, signature: bytes, data: bytes, signature_algorithm: EllipticCurveSignatureAlgorithm) -> None: ...
EllipticCurvePublicKeyWithSerialization = EllipticCurvePublicKey

View File

@@ -2,6 +2,7 @@ from abc import ABCMeta, abstractmethod
from typing import Tuple, Union
from cryptography.hazmat.backends.interfaces import RSABackend
from cryptography.hazmat.primitives.asymmetric import AsymmetricVerificationContext
from cryptography.hazmat.primitives.asymmetric.padding import AsymmetricPadding
from cryptography.hazmat.primitives.asymmetric.utils import Prehashed
from cryptography.hazmat.primitives.hashes import HashAlgorithm
@@ -37,9 +38,11 @@ class RSAPublicKey(metaclass=ABCMeta):
@abstractmethod
def public_numbers(self) -> RSAPublicNumbers: ...
@abstractmethod
def sign(self, data: bytes, padding: AsymmetricPadding, algorithm: HashAlgorithm) -> bytes: ...
def verifier(self, signature: bytes, padding: AsymmetricPadding,
algorithm: Union[HashAlgorithm, Prehashed]) -> AsymmetricVerificationContext: ...
@abstractmethod
def verify(self, signature: bytes, data: bytes, padding: AsymmetricPadding, algorithm: HashAlgorithm) -> None: ...
def verify(self, signature: bytes, data: bytes, padding: AsymmetricPadding,
algorithm: Union[HashAlgorithm, Prehashed]) -> None: ...
RSAPublicKeyWithSerialization = RSAPublicKey

View File

@@ -2,7 +2,7 @@ import datetime
from abc import ABCMeta, abstractmethod
from enum import Enum
from ipaddress import IPv4Address, IPv4Network, IPv6Address, IPv6Network
from typing import Any, ClassVar, Dict, Generator, List, Optional, Union
from typing import Any, ClassVar, Generator, List, Optional, Union, Text, Iterable, Sequence
from cryptography.hazmat.backends.interfaces import X509Backend
from cryptography.hazmat.primitives.asymmetric.dsa import DSAPrivateKey, DSAPublicKey
@@ -14,6 +14,7 @@ from cryptography.hazmat.primitives.hashes import HashAlgorithm
from cryptography.hazmat.primitives.serialization import Encoding
class ObjectIdentifier(object):
def __init__(self, dotted_string: str) -> None: ...
def dotted_string(self) -> str: ...
class CRLEntryExtensionOID(object):
@@ -97,8 +98,8 @@ class SignatureAlgorithmOID(object):
class NameAttribute(object):
oid: ObjectIdentifier
value: str
def __init__(self, oid: ObjectIdentifier, value: str) -> None: ...
value: Text
def __init__(self, oid: ObjectIdentifier, value: Text) -> None: ...
def rfc4514_string(self) -> str: ...
class RelativeDistinguishedName(object):
@@ -109,8 +110,9 @@ class RelativeDistinguishedName(object):
class Name(object):
rdns: List[RelativeDistinguishedName]
def __init__(self, attributes: List[Union[NameAttribute, RelativeDistinguishedName]]) -> None: ...
def __init__(self, attributes: Sequence[Union[NameAttribute, RelativeDistinguishedName]]) -> None: ...
def __iter__(self) -> Generator[NameAttribute, None, None]: ...
def __len__(self) -> int: ...
def get_attributes_for_oid(self, oid: ObjectIdentifier) -> List[NameAttribute]: ...
def public_bytes(self, backend: X509Backend) -> bytes: ...
def rfc4514_string(self) -> str: ...
@@ -139,6 +141,12 @@ class Certificate(metaclass=ABCMeta):
def public_key(self) -> Union[DSAPublicKey, Ed25519PublicKey, Ed448PublicKey, EllipticCurvePublicKey, RSAPublicKey]: ...
class CertificateBuilder(object):
def __init__(self, issuer_name: Optional[Name] = ..., subject_name: Optional[Name] = ...,
public_key: Union[DSAPublicKey, Ed25519PublicKey, Ed448PublicKey, EllipticCurvePublicKey, RSAPublicKey, None] = ...,
serial_number: Optional[int] = ...,
not_valid_before: Optional[datetime.datetime] = ...,
not_valid_after: Optional[datetime.datetime] = ...,
extensions: Optional[Iterable[ExtensionType]] = ...) -> None: ...
def add_extension(self, extension: ExtensionType, critical: bool) -> CertificateBuilder: ...
def issuer_name(self, name: Name) -> CertificateBuilder: ...
def not_valid_after(self, time: datetime.datetime) -> CertificateBuilder: ...
@@ -231,8 +239,8 @@ class DirectoryName(GeneralName):
def __init__(self, value: Name) -> None: ...
class DNSName(GeneralName):
value: str
def __init__(self, value: str) -> None: ...
value: Text
def __init__(self, value: Text) -> None: ...
class IPAddress(GeneralName):
value: Union[IPv4Address, IPv6Address, IPv4Network, IPv6Network]
@@ -248,12 +256,12 @@ class RegisteredID(GeneralName):
def __init__(self, value: ObjectIdentifier) -> None: ...
class RFC822Name(GeneralName):
value: str
def __init__(self, value: str) -> None: ...
value: Text
def __init__(self, value: Text) -> None: ...
class UniformResourceIdentifier(GeneralName):
value: str
def __init__(self, value: str) -> None: ...
value: Text
def __init__(self, value: Text) -> None: ...
# X.509 Extensions