Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py: 76%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

55 statements  

1# This file is dual licensed under the terms of the Apache License, Version 

2# 2.0, and the BSD License. See the LICENSE file in the root of this repository 

3# for complete details. 

4 

5from __future__ import annotations 

6 

7import abc 

8 

9from cryptography.exceptions import UnsupportedAlgorithm, _Reasons 

10from cryptography.hazmat.bindings._rust import openssl as rust_openssl 

11from cryptography.hazmat.primitives import _serialization 

12from cryptography.utils import Buffer 

13 

14 

15class Ed448PublicKey(metaclass=abc.ABCMeta): 

16 @classmethod 

17 def from_public_bytes(cls, data: bytes) -> Ed448PublicKey: 

18 from cryptography.hazmat.backends.openssl.backend import backend 

19 

20 if not backend.ed448_supported(): 

21 raise UnsupportedAlgorithm( 

22 "ed448 is not supported by this version of OpenSSL.", 

23 _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, 

24 ) 

25 

26 return rust_openssl.ed448.from_public_bytes(data) 

27 

28 @abc.abstractmethod 

29 def public_bytes( 

30 self, 

31 encoding: _serialization.Encoding, 

32 format: _serialization.PublicFormat, 

33 ) -> bytes: 

34 """ 

35 The serialized bytes of the public key. 

36 """ 

37 

38 @abc.abstractmethod 

39 def public_bytes_raw(self) -> bytes: 

40 """ 

41 The raw bytes of the public key. 

42 Equivalent to public_bytes(Raw, Raw). 

43 """ 

44 

45 @abc.abstractmethod 

46 def verify(self, signature: Buffer, data: Buffer) -> None: 

47 """ 

48 Verify the signature. 

49 """ 

50 

51 @abc.abstractmethod 

52 def __eq__(self, other: object) -> bool: 

53 """ 

54 Checks equality. 

55 """ 

56 

57 @abc.abstractmethod 

58 def __copy__(self) -> Ed448PublicKey: 

59 """ 

60 Returns a copy. 

61 """ 

62 

63 @abc.abstractmethod 

64 def __deepcopy__(self, memo: dict) -> Ed448PublicKey: 

65 """ 

66 Returns a deep copy. 

67 """ 

68 

69 

70if hasattr(rust_openssl, "ed448"): 

71 Ed448PublicKey.register(rust_openssl.ed448.Ed448PublicKey) 

72 

73 

74class Ed448PrivateKey(metaclass=abc.ABCMeta): 

75 @classmethod 

76 def generate(cls) -> Ed448PrivateKey: 

77 from cryptography.hazmat.backends.openssl.backend import backend 

78 

79 if not backend.ed448_supported(): 

80 raise UnsupportedAlgorithm( 

81 "ed448 is not supported by this version of OpenSSL.", 

82 _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, 

83 ) 

84 

85 return rust_openssl.ed448.generate_key() 

86 

87 @classmethod 

88 def from_private_bytes(cls, data: Buffer) -> Ed448PrivateKey: 

89 from cryptography.hazmat.backends.openssl.backend import backend 

90 

91 if not backend.ed448_supported(): 

92 raise UnsupportedAlgorithm( 

93 "ed448 is not supported by this version of OpenSSL.", 

94 _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, 

95 ) 

96 

97 return rust_openssl.ed448.from_private_bytes(data) 

98 

99 @abc.abstractmethod 

100 def public_key(self) -> Ed448PublicKey: 

101 """ 

102 The Ed448PublicKey derived from the private key. 

103 """ 

104 

105 @abc.abstractmethod 

106 def sign(self, data: Buffer) -> bytes: 

107 """ 

108 Signs the data. 

109 """ 

110 

111 @abc.abstractmethod 

112 def private_bytes( 

113 self, 

114 encoding: _serialization.Encoding, 

115 format: _serialization.PrivateFormat, 

116 encryption_algorithm: _serialization.KeySerializationEncryption, 

117 ) -> bytes: 

118 """ 

119 The serialized bytes of the private key. 

120 """ 

121 

122 @abc.abstractmethod 

123 def private_bytes_raw(self) -> bytes: 

124 """ 

125 The raw bytes of the private key. 

126 Equivalent to private_bytes(Raw, Raw, NoEncryption()). 

127 """ 

128 

129 @abc.abstractmethod 

130 def __copy__(self) -> Ed448PrivateKey: 

131 """ 

132 Returns a copy. 

133 """ 

134 

135 @abc.abstractmethod 

136 def __deepcopy__(self, memo: dict) -> Ed448PrivateKey: 

137 """ 

138 Returns a deep copy. 

139 """ 

140 

141 

142if hasattr(rust_openssl, "x448"): 

143 Ed448PrivateKey.register(rust_openssl.ed448.Ed448PrivateKey)