aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/cryptography/x509/general_name.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/cryptography/x509/general_name.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/cryptography/x509/general_name.py')
-rw-r--r--.venv/lib/python3.12/site-packages/cryptography/x509/general_name.py281
1 files changed, 281 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/cryptography/x509/general_name.py b/.venv/lib/python3.12/site-packages/cryptography/x509/general_name.py
new file mode 100644
index 00000000..672f2875
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/cryptography/x509/general_name.py
@@ -0,0 +1,281 @@
+# This file is dual licensed under the terms of the Apache License, Version
+# 2.0, and the BSD License. See the LICENSE file in the root of this repository
+# for complete details.
+
+from __future__ import annotations
+
+import abc
+import ipaddress
+import typing
+from email.utils import parseaddr
+
+from cryptography.x509.name import Name
+from cryptography.x509.oid import ObjectIdentifier
+
+_IPAddressTypes = typing.Union[
+ ipaddress.IPv4Address,
+ ipaddress.IPv6Address,
+ ipaddress.IPv4Network,
+ ipaddress.IPv6Network,
+]
+
+
+class UnsupportedGeneralNameType(Exception):
+ pass
+
+
+class GeneralName(metaclass=abc.ABCMeta):
+ @property
+ @abc.abstractmethod
+ def value(self) -> typing.Any:
+ """
+ Return the value of the object
+ """
+
+
+class RFC822Name(GeneralName):
+ def __init__(self, value: str) -> None:
+ if isinstance(value, str):
+ try:
+ value.encode("ascii")
+ except UnicodeEncodeError:
+ raise ValueError(
+ "RFC822Name values should be passed as an A-label string. "
+ "This means unicode characters should be encoded via "
+ "a library like idna."
+ )
+ else:
+ raise TypeError("value must be string")
+
+ name, address = parseaddr(value)
+ if name or not address:
+ # parseaddr has found a name (e.g. Name <email>) or the entire
+ # value is an empty string.
+ raise ValueError("Invalid rfc822name value")
+
+ self._value = value
+
+ @property
+ def value(self) -> str:
+ return self._value
+
+ @classmethod
+ def _init_without_validation(cls, value: str) -> RFC822Name:
+ instance = cls.__new__(cls)
+ instance._value = value
+ return instance
+
+ def __repr__(self) -> str:
+ return f"<RFC822Name(value={self.value!r})>"
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, RFC822Name):
+ return NotImplemented
+
+ return self.value == other.value
+
+ def __hash__(self) -> int:
+ return hash(self.value)
+
+
+class DNSName(GeneralName):
+ def __init__(self, value: str) -> None:
+ if isinstance(value, str):
+ try:
+ value.encode("ascii")
+ except UnicodeEncodeError:
+ raise ValueError(
+ "DNSName values should be passed as an A-label string. "
+ "This means unicode characters should be encoded via "
+ "a library like idna."
+ )
+ else:
+ raise TypeError("value must be string")
+
+ self._value = value
+
+ @property
+ def value(self) -> str:
+ return self._value
+
+ @classmethod
+ def _init_without_validation(cls, value: str) -> DNSName:
+ instance = cls.__new__(cls)
+ instance._value = value
+ return instance
+
+ def __repr__(self) -> str:
+ return f"<DNSName(value={self.value!r})>"
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, DNSName):
+ return NotImplemented
+
+ return self.value == other.value
+
+ def __hash__(self) -> int:
+ return hash(self.value)
+
+
+class UniformResourceIdentifier(GeneralName):
+ def __init__(self, value: str) -> None:
+ if isinstance(value, str):
+ try:
+ value.encode("ascii")
+ except UnicodeEncodeError:
+ raise ValueError(
+ "URI values should be passed as an A-label string. "
+ "This means unicode characters should be encoded via "
+ "a library like idna."
+ )
+ else:
+ raise TypeError("value must be string")
+
+ self._value = value
+
+ @property
+ def value(self) -> str:
+ return self._value
+
+ @classmethod
+ def _init_without_validation(cls, value: str) -> UniformResourceIdentifier:
+ instance = cls.__new__(cls)
+ instance._value = value
+ return instance
+
+ def __repr__(self) -> str:
+ return f"<UniformResourceIdentifier(value={self.value!r})>"
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, UniformResourceIdentifier):
+ return NotImplemented
+
+ return self.value == other.value
+
+ def __hash__(self) -> int:
+ return hash(self.value)
+
+
+class DirectoryName(GeneralName):
+ def __init__(self, value: Name) -> None:
+ if not isinstance(value, Name):
+ raise TypeError("value must be a Name")
+
+ self._value = value
+
+ @property
+ def value(self) -> Name:
+ return self._value
+
+ def __repr__(self) -> str:
+ return f"<DirectoryName(value={self.value})>"
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, DirectoryName):
+ return NotImplemented
+
+ return self.value == other.value
+
+ def __hash__(self) -> int:
+ return hash(self.value)
+
+
+class RegisteredID(GeneralName):
+ def __init__(self, value: ObjectIdentifier) -> None:
+ if not isinstance(value, ObjectIdentifier):
+ raise TypeError("value must be an ObjectIdentifier")
+
+ self._value = value
+
+ @property
+ def value(self) -> ObjectIdentifier:
+ return self._value
+
+ def __repr__(self) -> str:
+ return f"<RegisteredID(value={self.value})>"
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, RegisteredID):
+ return NotImplemented
+
+ return self.value == other.value
+
+ def __hash__(self) -> int:
+ return hash(self.value)
+
+
+class IPAddress(GeneralName):
+ def __init__(self, value: _IPAddressTypes) -> None:
+ if not isinstance(
+ value,
+ (
+ ipaddress.IPv4Address,
+ ipaddress.IPv6Address,
+ ipaddress.IPv4Network,
+ ipaddress.IPv6Network,
+ ),
+ ):
+ raise TypeError(
+ "value must be an instance of ipaddress.IPv4Address, "
+ "ipaddress.IPv6Address, ipaddress.IPv4Network, or "
+ "ipaddress.IPv6Network"
+ )
+
+ self._value = value
+
+ @property
+ def value(self) -> _IPAddressTypes:
+ return self._value
+
+ def _packed(self) -> bytes:
+ if isinstance(
+ self.value, (ipaddress.IPv4Address, ipaddress.IPv6Address)
+ ):
+ return self.value.packed
+ else:
+ return (
+ self.value.network_address.packed + self.value.netmask.packed
+ )
+
+ def __repr__(self) -> str:
+ return f"<IPAddress(value={self.value})>"
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, IPAddress):
+ return NotImplemented
+
+ return self.value == other.value
+
+ def __hash__(self) -> int:
+ return hash(self.value)
+
+
+class OtherName(GeneralName):
+ def __init__(self, type_id: ObjectIdentifier, value: bytes) -> None:
+ if not isinstance(type_id, ObjectIdentifier):
+ raise TypeError("type_id must be an ObjectIdentifier")
+ if not isinstance(value, bytes):
+ raise TypeError("value must be a binary string")
+
+ self._type_id = type_id
+ self._value = value
+
+ @property
+ def type_id(self) -> ObjectIdentifier:
+ return self._type_id
+
+ @property
+ def value(self) -> bytes:
+ return self._value
+
+ def __repr__(self) -> str:
+ return f"<OtherName(type_id={self.type_id}, value={self.value!r})>"
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, OtherName):
+ return NotImplemented
+
+ return self.type_id == other.type_id and self.value == other.value
+
+ def __hash__(self) -> int:
+ return hash((self.type_id, self.value))