Skip to content

Commit ff75793

Browse files
jolafVasily Zakharov
and
Vasily Zakharov
authored
Improve OpenSSL stubs (#5645)
* Support Python 3. * Add OpenSSL.SSL. * Extend OpenSSL.crypto. Co-authored-by: Vasily Zakharov <[email protected]>
1 parent e58070c commit ff75793

File tree

4 files changed

+169
-134
lines changed

4 files changed

+169
-134
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
OpenSSL
2+
OpenSSL.SSL
3+
OpenSSL.crypto

stubs/openssl-python/METADATA.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
version = "0.1"
22
python2 = true
3-
python3 = false
3+
python3 = true
44
requires = ["types-cryptography"]

stubs/openssl-python/OpenSSL/SSL.pyi

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from socket import socket
2+
from typing import Callable, Sequence
3+
4+
from OpenSSL.crypto import X509
5+
6+
TLSv1_2_METHOD: int
7+
OP_NO_SSLv2: int
8+
OP_NO_SSLv3: int
9+
OP_NO_TLSv1: int
10+
OP_NO_TLSv1_1: int
11+
OP_NO_TLSv1_2: int
12+
OP_NO_TLSv1_3: int
13+
VERIFY_PEER: int
14+
15+
class Connection:
16+
def __init__(self, context: Context, _socket: socket | None) -> None: ...
17+
def connect(self, addr: str | bytes | Sequence[str | int]) -> None: ...
18+
def do_handshake(self) -> None: ...
19+
def get_peer_certificate(self) -> X509: ...
20+
def set_tlsext_host_name(self, name: bytes) -> None: ...
21+
22+
class Context:
23+
def __init__(self, method: int) -> None: ...
24+
def load_verify_locations(self, cafile: str | None, capath: str | None) -> None: ...
25+
def set_options(self, options: int) -> None: ...
26+
def set_verify(self, mode: int, callback: Callable[[Connection, X509, int, int, int], bool]) -> None: ...
Lines changed: 139 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -1,197 +1,203 @@
1-
import sys
21
from datetime import datetime
3-
from typing import Callable, Iterable, List, Optional, Set, Text, Tuple, Union
2+
from typing import Callable, Iterable, List, Sequence, Set, Text, Tuple, Union
43

5-
from cryptography.hazmat.primitives.asymmetric import dsa, rsa
4+
from cryptography.hazmat.primitives.asymmetric.dsa import DSAPrivateKey, DSAPublicKey
5+
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey, RSAPublicKey
6+
from cryptography.x509 import Certificate, CertificateRevocationList, CertificateSigningRequest
7+
8+
_Key = Union[DSAPrivateKey, DSAPublicKey, RSAPrivateKey, RSAPublicKey]
69

710
FILETYPE_PEM: int
811
FILETYPE_ASN1: int
912
FILETYPE_TEXT: int
13+
1014
TYPE_RSA: int
1115
TYPE_DSA: int
1216

13-
class Error(Exception): ...
17+
class _EllipticCurve:
18+
name: Text
1419

15-
_Key = Union[rsa.RSAPublicKey, rsa.RSAPrivateKey, dsa.DSAPublicKey, dsa.DSAPrivateKey]
20+
class Error(Exception): ...
1621

1722
class PKey:
1823
def __init__(self) -> None: ...
19-
def to_cryptography_key(self) -> _Key: ...
24+
def bits(self) -> int: ...
25+
def check(self) -> bool: ...
2026
@classmethod
2127
def from_cryptography_key(cls, crypto_key: _Key) -> PKey: ...
2228
def generate_key(self, type: int, bits: int) -> None: ...
23-
def check(self) -> bool: ...
29+
def to_cryptography_key(self) -> _Key: ...
2430
def type(self) -> int: ...
25-
def bits(self) -> int: ...
26-
27-
class _EllipticCurve:
28-
name: Text
29-
30-
def get_elliptic_curves() -> Set[_EllipticCurve]: ...
31-
def get_elliptic_curve(name: str) -> _EllipticCurve: ...
32-
33-
if sys.version_info >= (3, 0):
34-
_StrLike = str
35-
else:
36-
_StrLike = Union[str, unicode]
3731

3832
class X509Name:
33+
countryName: Text
34+
C: Text
35+
stateOrProvinceName: Text
36+
ST: Text
37+
localityName: Text
38+
L: Text
39+
organizationName: Text
40+
O: Text
41+
organizationalUnitName: Text
42+
OU: Text
43+
commonName: Text
44+
CN: Text
45+
emailAddress: Text
3946
def __init__(self, name: X509Name) -> None: ...
40-
countryName: _StrLike
41-
stateOrProvinceName: _StrLike
42-
localityName: _StrLike
43-
organizationName: _StrLike
44-
organizationalUnitName: _StrLike
45-
commonName: _StrLike
46-
emailAddress: _StrLike
47-
C: _StrLike
48-
ST: _StrLike
49-
L: _StrLike
50-
O: _StrLike
51-
OU: _StrLike
52-
CN: _StrLike
53-
def hash(self) -> int: ...
5447
def der(self) -> bytes: ...
5548
def get_components(self) -> List[Tuple[str, str]]: ...
56-
57-
class X509Extension:
58-
def __init__(
59-
self, type_name: bytes, critical: bool, value: bytes, subject: Optional[X509] = ..., issuer: Optional[X509] = ...
60-
) -> None: ...
61-
def get_critical(self) -> bool: ...
62-
def get_short_name(self) -> str: ...
63-
def get_data(self) -> str: ...
64-
65-
class X509Req:
66-
def __init__(self) -> None: ...
67-
def set_pubkey(self, pkey: PKey) -> None: ...
68-
def get_pubkey(self) -> PKey: ...
69-
def set_version(self, version: int) -> None: ...
70-
def get_version(self) -> int: ...
71-
def get_subject(self) -> X509Name: ...
72-
def add_extensions(self, extensions: Iterable[X509Extension]) -> None: ...
73-
def get_extensions(self) -> List[X509Extension]: ...
74-
def sign(self, pkey: PKey, digest: str) -> None: ...
75-
def verify(self, pkey: PKey) -> bool: ...
49+
def hash(self) -> int: ...
7650

7751
class X509:
7852
def __init__(self) -> None: ...
79-
def set_version(self, version: int) -> None: ...
80-
def get_version(self) -> int: ...
53+
def add_extensions(self, extensions: Iterable[X509Extension]) -> None: ...
54+
def digest(self, digest_name: bytes) -> bytes: ...
55+
@classmethod
56+
def from_cryptography(cls, crypto_key: Certificate) -> X509: ...
57+
def get_extension(self, index: int) -> X509Extension: ...
58+
def get_extension_count(self) -> int: ...
59+
def get_issuer(self) -> X509Name: ...
60+
def get_notAfter(self) -> bytes | None: ...
61+
def get_notBefore(self) -> bytes | None: ...
8162
def get_pubkey(self) -> PKey: ...
82-
def set_pubkey(self, pkey: PKey) -> None: ...
83-
def sign(self, pkey: PKey, digest: str) -> None: ...
84-
def get_signature_algorithm(self) -> str: ...
85-
def digest(self, digest_name: str) -> str: ...
86-
def subject_name_hash(self) -> str: ...
87-
def set_serial_number(self, serial: int) -> None: ...
8863
def get_serial_number(self) -> int: ...
64+
def get_signature_algorithm(self) -> bytes: ...
65+
def get_subject(self) -> X509Name: ...
66+
def get_version(self) -> int: ...
8967
def gmtime_adj_notAfter(self, amount: int) -> None: ...
9068
def gmtime_adj_notBefore(self, amount: int) -> None: ...
9169
def has_expired(self) -> bool: ...
92-
def get_notBefore(self) -> str: ...
93-
def set_notBefore(self, when: str) -> None: ...
94-
def get_notAfter(self) -> str: ...
95-
def set_notAfter(self, when: str) -> None: ...
96-
def get_issuer(self) -> X509Name: ...
9770
def set_issuer(self, issuer: X509Name) -> None: ...
98-
def get_subject(self) -> X509Name: ...
71+
def set_notAfter(self, when: bytes) -> None: ...
72+
def set_notBefore(self, when: bytes) -> None: ...
73+
def set_pubkey(self, pkey: PKey) -> None: ...
74+
def set_serial_number(self, serial: int) -> None: ...
9975
def set_subject(self, subject: X509Name) -> None: ...
100-
def get_extension_count(self) -> int: ...
76+
def set_version(self, version: int) -> None: ...
77+
def sign(self, pkey: PKey, digest: Text | bytes) -> None: ...
78+
def subject_name_hash(self) -> bytes: ...
79+
def to_cryptography(self) -> Certificate: ...
80+
81+
class X509Req:
82+
def __init__(self) -> None: ...
10183
def add_extensions(self, extensions: Iterable[X509Extension]) -> None: ...
102-
def get_extension(self, index: int) -> X509Extension: ...
84+
@classmethod
85+
def from_cryptography(cls, crypto_req: CertificateSigningRequest) -> X509Req: ...
86+
def get_extensions(self) -> List[X509Extension]: ...
87+
def get_pubkey(self) -> PKey: ...
88+
def get_subject(self) -> X509Name: ...
89+
def get_version(self) -> int: ...
90+
def set_pubkey(self, pkey: PKey) -> None: ...
91+
def set_version(self, version: int) -> None: ...
92+
def sign(self, pkey: PKey, digest: Text | bytes) -> None: ...
93+
def to_cryptography(self) -> CertificateSigningRequest: ...
94+
def verify(self, pkey: PKey) -> bool: ...
10395

104-
class X509StoreFlags:
105-
CRL_CHECK: int
106-
CRL_CHECK_ALL: int
107-
IGNORE_CRITICAL: int
108-
X509_STRICT: int
109-
ALLOW_PROXY_CERTS: int
110-
POLICY_CHECK: int
111-
EXPLICIT_POLICY: int
112-
INHIBIT_MAP: int
113-
NOTIFY_POLICY: int
114-
CHECK_SS_SIGNATURE: int
115-
CB_ISSUER_CHECK: int
96+
class X509Extension:
97+
def __init__(
98+
self, type_name: bytes, critical: bool, value: bytes, subject: X509 | None = ..., issuer: X509 | None = ...
99+
) -> None: ...
100+
def get_critical(self) -> bool: ...
101+
def get_data(self) -> bytes: ...
102+
def get_short_name(self) -> bytes: ...
103+
104+
class Revoked:
105+
def __init__(self) -> None: ...
106+
def all_reasons(self) -> List[bytes]: ...
107+
def get_reason(self) -> bytes | None: ...
108+
def get_rev_date(self) -> bytes: ...
109+
def get_serial(self) -> bytes: ...
110+
def set_reason(self, reason: bytes | None) -> None: ...
111+
def set_rev_date(self, when: bytes) -> None: ...
112+
def set_serial(self, hex_str: bytes) -> None: ...
113+
114+
class CRL:
115+
def __init__(self) -> None: ...
116+
def add_revoked(self, revoked: Revoked) -> None: ...
117+
def export(self, cert: X509, key: PKey, type: int = ..., days: int = ..., digest: bytes = ...) -> bytes: ...
118+
@classmethod
119+
def from_cryptography(cls, crypto_crl: CertificateRevocationList) -> CRL: ...
120+
def get_issuer(self) -> X509Name: ...
121+
def get_revoked(self) -> Tuple[Revoked, ...]: ...
122+
def set_lastUpdate(self, when: bytes) -> None: ...
123+
def set_nextUpdate(self, when: bytes) -> None: ...
124+
def set_version(self, version: int) -> None: ...
125+
def sign(self, issuer_cert: X509, issuer_key: PKey, digest: bytes) -> None: ...
126+
def to_cryptography(self) -> CertificateRevocationList: ...
116127

117128
class X509Store:
118129
def __init__(self) -> None: ...
119130
def add_cert(self, cert: X509) -> None: ...
120131
def add_crl(self, crl: CRL) -> None: ...
132+
def load_locations(self, cafile: Text | bytes, capath: Text | bytes) -> None: ...
121133
def set_flags(self, flags: int) -> None: ...
122134
def set_time(self, vfy_time: datetime) -> None: ...
123135

124-
class X509StoreContextError(Exception):
125-
certificate: X509
126-
def __init__(self, message: str, certificate: X509) -> None: ...
127-
128136
class X509StoreContext:
129-
def __init__(self, store: X509Store, certificate: X509) -> None: ...
137+
def __init__(self, store: X509Store, certificate: X509, chain: Sequence[X509] | None) -> None: ...
138+
def get_verified_chain(self) -> List[X509]: ...
130139
def set_store(self, store: X509Store) -> None: ...
131140
def verify_certificate(self) -> None: ...
132141

133-
def load_certificate(type: int, buffer: _StrLike) -> X509: ...
134-
def dump_certificate(type: int, cert: X509) -> bytes: ...
135-
def dump_publickey(type: int, pkey: PKey) -> bytes: ...
136-
def dump_privatekey(
137-
type: int, pkey: PKey, cipher: Optional[str] = ..., passphrase: Optional[Union[str, Callable[[int], int]]] = ...
138-
) -> bytes: ...
139-
140-
class Revoked:
141-
def __init__(self) -> None: ...
142-
def set_serial(self, hex_str: str) -> None: ...
143-
def get_serial(self) -> str: ...
144-
def set_reason(self, reason: str) -> None: ...
145-
def get_reason(self) -> str: ...
146-
def all_reasons(self) -> List[str]: ...
147-
def set_rev_date(self, when: str) -> None: ...
148-
def get_rev_date(self) -> str: ...
142+
class X509StoreContextError(Exception):
143+
certificate: X509
144+
def __init__(self, message: Text | bytes, certificate: X509) -> None: ...
149145

150-
class CRL:
151-
def __init__(self) -> None: ...
152-
def get_revoked(self) -> Tuple[Revoked, ...]: ...
153-
def add_revoked(self, revoked: Revoked) -> None: ...
154-
def get_issuer(self) -> X509Name: ...
155-
def set_version(self, version: int) -> None: ...
156-
def set_lastUpdate(self, when: str) -> None: ...
157-
def set_nextUpdate(self, when: str) -> None: ...
158-
def sign(self, issuer_cert: X509, issuer_key: PKey, digest: str) -> None: ...
159-
def export(self, cert: X509, key: PKey, type: int = ..., days: int = ..., digest: str = ...) -> bytes: ...
146+
class X509StoreFlags:
147+
CRL_CHECK: int
148+
CRL_CHECK_ALL: int
149+
IGNORE_CRITICAL: int
150+
X509_STRICT: int
151+
ALLOW_PROXY_CERTS: int
152+
POLICY_CHECK: int
153+
EXPLICIT_POLICY: int
154+
INHIBIT_MAP: int
155+
NOTIFY_POLICY: int
156+
CHECK_SS_SIGNATURE: int
157+
CB_ISSUER_CHECK: int
160158

161159
class PKCS7:
162-
def type_is_signed(self) -> bool: ...
160+
def get_type_name(self) -> Text: ...
161+
def type_is_data(self) -> bool: ...
163162
def type_is_enveloped(self) -> bool: ...
163+
def type_is_signed(self) -> bool: ...
164164
def type_is_signedAndEnveloped(self) -> bool: ...
165-
def type_is_data(self) -> bool: ...
166-
def get_type_name(self) -> str: ...
167165

168166
class PKCS12:
169167
def __init__(self) -> None: ...
168+
def export(self, passphrase: bytes | None = ..., iter: int = ..., maciter: int = ...) -> bytes: ...
169+
def get_ca_certificates(self) -> Tuple[X509, ...]: ...
170170
def get_certificate(self) -> X509: ...
171-
def set_certificate(self, cert: X509) -> None: ...
171+
def get_friendlyname(self) -> bytes | None: ...
172172
def get_privatekey(self) -> PKey: ...
173+
def set_ca_certificates(self, cacerts: Iterable[X509] | None) -> None: ...
174+
def set_certificate(self, cert: X509) -> None: ...
175+
def set_friendlyname(self, name: bytes | None) -> None: ...
173176
def set_privatekey(self, pkey: PKey) -> None: ...
174-
def get_ca_certificates(self) -> Tuple[X509, ...]: ...
175-
def set_ca_certificates(self, cacerts: Iterable[X509]) -> None: ...
176-
def set_friendlyname(self, name: bytes) -> None: ...
177-
def get_friendlyname(self) -> bytes: ...
178-
def export(self, passphrase: Optional[str] = ..., iter: int = ..., maciter: int = ...) -> bytes: ...
179177

180178
class NetscapeSPKI:
181179
def __init__(self) -> None: ...
182-
def sign(self, pkey: PKey, digest: str) -> None: ...
183-
def verify(self, key: PKey) -> bool: ...
184-
def b64_encode(self) -> str: ...
180+
def b64_encode(self) -> bytes: ...
185181
def get_pubkey(self) -> PKey: ...
186182
def set_pubkey(self, pkey: PKey) -> None: ...
183+
def sign(self, pkey: PKey, digest: bytes) -> None: ...
184+
def verify(self, key: PKey) -> bool: ...
187185

188-
def load_publickey(type: int, buffer: _StrLike) -> PKey: ...
189-
def load_privatekey(type: int, buffer: bytes, passphrase: Optional[Union[str, Callable[[int], int]]] = ...) -> PKey: ...
190-
def dump_certificate_request(type: int, req: X509Req) -> bytes: ...
191-
def load_certificate_request(type: int, buffer: _StrLike) -> X509Req: ...
192-
def sign(pkey: PKey, data: _StrLike, digest: str) -> bytes: ...
193-
def verify(cert: X509, signature: bytes, data: _StrLike, digest: str) -> None: ...
186+
def get_elliptic_curves() -> Set[_EllipticCurve]: ...
187+
def get_elliptic_curve(name: Text) -> _EllipticCurve: ...
188+
def dump_certificate(type: int, cert: X509) -> bytes: ...
189+
def load_certificate(type: int, buffer: bytes) -> X509: ...
190+
def dump_certificate_request(type: int, cert: X509Req) -> bytes: ...
191+
def load_certificate_request(type: int, buffer: bytes) -> X509Req: ...
192+
def dump_privatekey(
193+
type: int, pkey: PKey, cipher: bytes | None = ..., passphrase: bytes | Callable[[], bytes] | None = ...
194+
) -> bytes: ...
195+
def load_privatekey(type: int, buffer: Text | bytes, passphrase: bytes | Callable[[], bytes] | None = ...) -> PKey: ...
196+
def dump_publickey(type: int, pkey: PKey) -> bytes: ...
197+
def load_publickey(type: int, buffer: Text | bytes) -> PKey: ...
194198
def dump_crl(type: int, crl: CRL) -> bytes: ...
195-
def load_crl(type: int, buffer: _StrLike) -> CRL: ...
196-
def load_pkcs7_data(type: int, buffer: _StrLike) -> PKCS7: ...
197-
def load_pkcs12(buffer: _StrLike, passphrase: Optional[Union[str, Callable[[int], int]]] = ...) -> PKCS12: ...
199+
def load_crl(type: int, buffer: Text | bytes) -> CRL: ...
200+
def load_pkcs7_data(type: int, buffer: Text | bytes) -> PKCS7: ...
201+
def load_pkcs12(buffer: Text | bytes, passphrase: bytes | None = ...) -> PKCS12: ...
202+
def sign(pkey: PKey, data: Text | bytes, digest: Text | bytes) -> bytes: ...
203+
def verify(cert: X509, signature: bytes, data: Text | bytes, digest: Text | bytes) -> None: ...

0 commit comments

Comments
 (0)