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

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

61 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 

8import typing 

9 

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

11from cryptography.hazmat.primitives import _serialization, hashes 

12from cryptography.hazmat.primitives.asymmetric import utils as asym_utils 

13from cryptography.utils import Buffer 

14 

15 

16class DSAParameters(metaclass=abc.ABCMeta): 

17 @abc.abstractmethod 

18 def generate_private_key(self) -> DSAPrivateKey: 

19 """ 

20 Generates and returns a DSAPrivateKey. 

21 """ 

22 

23 @abc.abstractmethod 

24 def parameter_numbers(self) -> DSAParameterNumbers: 

25 """ 

26 Returns a DSAParameterNumbers. 

27 """ 

28 

29 

30DSAParametersWithNumbers = DSAParameters 

31DSAParameters.register(rust_openssl.dsa.DSAParameters) 

32 

33 

34class DSAPrivateKey(metaclass=abc.ABCMeta): 

35 @property 

36 @abc.abstractmethod 

37 def key_size(self) -> int: 

38 """ 

39 The bit length of the prime modulus. 

40 """ 

41 

42 @abc.abstractmethod 

43 def public_key(self) -> DSAPublicKey: 

44 """ 

45 The DSAPublicKey associated with this private key. 

46 """ 

47 

48 @abc.abstractmethod 

49 def parameters(self) -> DSAParameters: 

50 """ 

51 The DSAParameters object associated with this private key. 

52 """ 

53 

54 @abc.abstractmethod 

55 def sign( 

56 self, 

57 data: Buffer, 

58 algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, 

59 ) -> bytes: 

60 """ 

61 Signs the data 

62 """ 

63 

64 @abc.abstractmethod 

65 def private_numbers(self) -> DSAPrivateNumbers: 

66 """ 

67 Returns a DSAPrivateNumbers. 

68 """ 

69 

70 @abc.abstractmethod 

71 def private_bytes( 

72 self, 

73 encoding: _serialization.Encoding, 

74 format: _serialization.PrivateFormat, 

75 encryption_algorithm: _serialization.KeySerializationEncryption, 

76 ) -> bytes: 

77 """ 

78 Returns the key serialized as bytes. 

79 """ 

80 

81 @abc.abstractmethod 

82 def __copy__(self) -> DSAPrivateKey: 

83 """ 

84 Returns a copy. 

85 """ 

86 

87 

88DSAPrivateKeyWithSerialization = DSAPrivateKey 

89DSAPrivateKey.register(rust_openssl.dsa.DSAPrivateKey) 

90 

91 

92class DSAPublicKey(metaclass=abc.ABCMeta): 

93 @property 

94 @abc.abstractmethod 

95 def key_size(self) -> int: 

96 """ 

97 The bit length of the prime modulus. 

98 """ 

99 

100 @abc.abstractmethod 

101 def parameters(self) -> DSAParameters: 

102 """ 

103 The DSAParameters object associated with this public key. 

104 """ 

105 

106 @abc.abstractmethod 

107 def public_numbers(self) -> DSAPublicNumbers: 

108 """ 

109 Returns a DSAPublicNumbers. 

110 """ 

111 

112 @abc.abstractmethod 

113 def public_bytes( 

114 self, 

115 encoding: _serialization.Encoding, 

116 format: _serialization.PublicFormat, 

117 ) -> bytes: 

118 """ 

119 Returns the key serialized as bytes. 

120 """ 

121 

122 @abc.abstractmethod 

123 def verify( 

124 self, 

125 signature: Buffer, 

126 data: Buffer, 

127 algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, 

128 ) -> None: 

129 """ 

130 Verifies the signature of the data. 

131 """ 

132 

133 @abc.abstractmethod 

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

135 """ 

136 Checks equality. 

137 """ 

138 

139 @abc.abstractmethod 

140 def __copy__(self) -> DSAPublicKey: 

141 """ 

142 Returns a copy. 

143 """ 

144 

145 

146DSAPublicKeyWithSerialization = DSAPublicKey 

147DSAPublicKey.register(rust_openssl.dsa.DSAPublicKey) 

148 

149DSAPrivateNumbers = rust_openssl.dsa.DSAPrivateNumbers 

150DSAPublicNumbers = rust_openssl.dsa.DSAPublicNumbers 

151DSAParameterNumbers = rust_openssl.dsa.DSAParameterNumbers 

152 

153 

154def generate_parameters( 

155 key_size: int, backend: typing.Any = None 

156) -> DSAParameters: 

157 if key_size not in (1024, 2048, 3072, 4096): 

158 raise ValueError("Key size must be 1024, 2048, 3072, or 4096 bits.") 

159 

160 return rust_openssl.dsa.generate_parameters(key_size) 

161 

162 

163def generate_private_key( 

164 key_size: int, backend: typing.Any = None 

165) -> DSAPrivateKey: 

166 parameters = generate_parameters(key_size) 

167 return parameters.generate_private_key()