Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/scapy/layers/tls/crypto/groups.py: 55%

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

142 statements  

1# SPDX-License-Identifier: GPL-2.0-only 

2# This file is part of Scapy 

3# See https://scapy.net/ for more information 

4# Copyright (C) 2007, 2008, 2009 Arnaud Ebalard 

5# 2015, 2016, 2017 Maxence Tury 

6 

7""" 

8This is a register for DH groups from RFC 3526 and RFC 4306. 

9At this time the groups from RFC 7919 have not been registered by openssl, 

10thus they cannot be imported from the cryptography library. 

11 

12We also provide TLS identifiers for these DH groups and also the ECDH groups. 

13(Note that the equivalent of _ffdh_groups for ECDH is ec._CURVE_TYPES.) 

14""" 

15 

16import warnings 

17 

18from scapy.config import conf 

19from scapy.compat import bytes_int, int_bytes 

20from scapy.error import warning 

21from scapy.utils import long_converter 

22 

23if conf.crypto_valid: 

24 from cryptography.hazmat.backends import default_backend 

25 from cryptography.hazmat.primitives.asymmetric import ec 

26 from cryptography.hazmat.primitives import serialization 

27 # cryptography > 50 raises a DeprecationWarning 

28 from cryptography.utils import CryptographyDeprecationWarning 

29 with warnings.catch_warnings(): 

30 # Hide deprecation warnings 

31 warnings.filterwarnings("ignore", 

32 category=CryptographyDeprecationWarning) 

33 from cryptography.hazmat.primitives.asymmetric.dh import ( 

34 DHParameterNumbers, 

35 DHPublicNumbers, 

36 DHPrivateKey, 

37 ) 

38if conf.crypto_valid_advanced: 

39 from cryptography.hazmat.primitives.asymmetric import x25519 

40 from cryptography.hazmat.primitives.asymmetric import x448 

41 

42 

43_ffdh_groups = {} 

44 

45 

46class _FFDHParamsMetaclass(type): 

47 def __new__(cls, ffdh_name, bases, dct): 

48 the_class = super(_FFDHParamsMetaclass, cls).__new__(cls, ffdh_name, 

49 bases, dct) 

50 if conf.crypto_valid and ffdh_name != "_FFDHParams": 

51 pn = DHParameterNumbers(the_class.m, the_class.g) 

52 params = pn.parameters(default_backend()) 

53 _ffdh_groups[ffdh_name] = [params, the_class.mLen] 

54 return the_class 

55 

56 

57class _FFDHParams(metaclass=_FFDHParamsMetaclass): 

58 pass 

59 

60 

61class modp768(_FFDHParams): 

62 g = 0x02 

63 m = long_converter(""" 

64 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 

65 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 

66 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 

67 A63A3620 FFFFFFFF FFFFFFFF""") 

68 mLen = 768 

69 

70 

71class modp1024(_FFDHParams): # From RFC 4306 

72 g = 0x02 

73 m = long_converter(""" 

74 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 

75 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 

76 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 

77 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 

78 49286651 ECE65381 FFFFFFFF FFFFFFFF""") 

79 mLen = 1024 

80 

81 

82class modp1536(_FFDHParams): # From RFC 3526 

83 g = 0x02 

84 m = long_converter(""" 

85 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 

86 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD 

87 EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 

88 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED 

89 EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D 

90 C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 

91 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 

92 670C354E 4ABC9804 F1746C08 CA237327 FFFFFFFF FFFFFFFF""") 

93 mLen = 1536 

94 

95 

96class modp2048(_FFDHParams): # From RFC 3526 

97 g = 0x02 

98 m = long_converter(""" 

99 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 

100 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD 

101 EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 

102 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED 

103 EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D 

104 C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 

105 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 

106 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B 

107 E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 

108 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 

109 15728E5A 8AACAA68 FFFFFFFF FFFFFFFF""") 

110 mLen = 2048 

111 

112 

113class modp3072(_FFDHParams): # From RFC 3526 

114 g = 0x02 

115 m = long_converter(""" 

116 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 

117 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD 

118 EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 

119 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED 

120 EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D 

121 C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 

122 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 

123 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B 

124 E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 

125 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 

126 15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64 

127 ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7 

128 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B 

129 F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C 

130 BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 

131 43DB5BFC E0FD108E 4B82D120 A93AD2CA FFFFFFFF FFFFFFFF""") 

132 mLen = 3072 

133 

134 

135class modp4096(_FFDHParams): # From RFC 3526 

136 g = 0x02 

137 m = long_converter(""" 

138 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 

139 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD 

140 EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 

141 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED 

142 EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D 

143 C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 

144 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 

145 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B 

146 E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 

147 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 

148 15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64 

149 ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7 

150 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B 

151 F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C 

152 BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 

153 43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 

154 88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA 

155 2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6 

156 287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED 

157 1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9 

158 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34063199 

159 FFFFFFFF FFFFFFFF""") 

160 mLen = 4096 

161 

162 

163class modp6144(_FFDHParams): # From RFC 3526 

164 g = 0x02 

165 m = long_converter(""" 

166 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 

167 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 

168 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 

169 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 

170 49286651 ECE45B3D C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 

171 FD24CF5F 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 

172 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B E39E772C 

173 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 DE2BCBF6 95581718 

174 3995497C EA956AE5 15D22618 98FA0510 15728E5A 8AAAC42D AD33170D 

175 04507A33 A85521AB DF1CBA64 ECFB8504 58DBEF0A 8AEA7157 5D060C7D 

176 B3970F85 A6E1E4C7 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 

177 1AD2EE6B F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C 

178 BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 43DB5BFC 

179 E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 88719A10 BDBA5B26 

180 99C32718 6AF4E23C 1A946834 B6150BDA 2583E9CA 2AD44CE8 DBBBC2DB 

181 04DE8EF9 2E8EFC14 1FBECAA6 287C5947 4E6BC05D 99B2964F A090C3A2 

182 233BA186 515BE7ED 1F612970 CEE2D7AF B81BDD76 2170481C D0069127 

183 D5B05AA9 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492 

184 36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD F8FF9406 

185 AD9E530E E5DB382F 413001AE B06A53ED 9027D831 179727B0 865A8918 

186 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B DB7F1447 E6CC254B 33205151 

187 2BD7AF42 6FB8F401 378CD2BF 5983CA01 C64B92EC F032EA15 D1721D03 

188 F482D7CE 6E74FEF6 D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F 

189 BEC7E8F3 23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA 

190 CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328 06A1D58B 

191 B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C DA56C9EC 2EF29632 

192 387FE8D7 6E3C0468 043E8F66 3F4860EE 12BF2D5B 0B7474D6 E694F91E 

193 6DCC4024 FFFFFFFF FFFFFFFF""") 

194 mLen = 6144 

195 

196 

197class modp8192(_FFDHParams): # From RFC 3526 

198 g = 0x02 

199 m = long_converter(""" 

200 FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 

201 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD 

202 EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 

203 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED 

204 EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D 

205 C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 

206 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 

207 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B 

208 E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 

209 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 

210 15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64 

211 ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7 

212 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B 

213 F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C 

214 BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 

215 43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 

216 88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA 

217 2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6 

218 287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED 

219 1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9 

220 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492 

221 36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD 

222 F8FF9406 AD9E530E E5DB382F 413001AE B06A53ED 9027D831 

223 179727B0 865A8918 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B 

224 DB7F1447 E6CC254B 33205151 2BD7AF42 6FB8F401 378CD2BF 

225 5983CA01 C64B92EC F032EA15 D1721D03 F482D7CE 6E74FEF6 

226 D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F BEC7E8F3 

227 23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA 

228 CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328 

229 06A1D58B B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C 

230 DA56C9EC 2EF29632 387FE8D7 6E3C0468 043E8F66 3F4860EE 

231 12BF2D5B 0B7474D6 E694F91E 6DBE1159 74A3926F 12FEE5E4 

232 38777CB6 A932DF8C D8BEC4D0 73B931BA 3BC832B6 8D9DD300 

233 741FA7BF 8AFC47ED 2576F693 6BA42466 3AAB639C 5AE4F568 

234 3423B474 2BF1C978 238F16CB E39D652D E3FDB8BE FC848AD9 

235 22222E04 A4037C07 13EB57A8 1A23F0C7 3473FC64 6CEA306B 

236 4BCBC886 2F8385DD FA9D4B7F A2C087E8 79683303 ED5BDD3A 

237 062B3CF5 B3A278A6 6D2A13F8 3F44F82D DF310EE0 74AB6A36 

238 4597E899 A0255DC1 64F31CC5 0846851D F9AB4819 5DED7EA1 

239 B1D510BD 7EE74D73 FAF36BC3 1ECFA268 359046F4 EB879F92 

240 4009438B 481C6CD7 889A002E D5EE382B C9190DA6 FC026E47 

241 9558E447 5677E9AA 9E3050E2 765694DF C81F56E8 80B96E71 

242 60C980DD 98EDD3DF FFFFFFFF FFFFFFFF""") 

243 mLen = 8192 

244 

245 

246class ffdhe2048(_FFDHParams): # From RFC 7919 

247 g = 0x02 

248 m = long_converter(""" 

249 FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 

250 D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 

251 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 

252 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 

253 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 

254 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB 

255 B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 

256 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 

257 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 

258 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA 

259 886B4238 61285C97 FFFFFFFF FFFFFFFF 

260 """) 

261 mLen = 2048 

262 

263 

264class ffdhe3072(_FFDHParams): # From RFC 7919 

265 g = 0x02 

266 m = long_converter(""" 

267 FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 

268 D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 

269 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 

270 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 

271 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 

272 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB 

273 B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 

274 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 

275 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 

276 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA 

277 886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238 

278 61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C 

279 AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3 

280 64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D 

281 ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF 

282 3C1B20EE 3FD59D7C 25E41D2B 66C62E37 FFFFFFFF FFFFFFFF 

283 """) 

284 mLen = 3072 

285 

286 

287class ffdhe4096(_FFDHParams): # From RFC 7919 

288 g = 0x02 

289 m = long_converter(""" 

290 FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 

291 D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 

292 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 

293 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 

294 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 

295 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB 

296 B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 

297 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 

298 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 

299 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA 

300 886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238 

301 61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C 

302 AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3 

303 64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D 

304 ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF 

305 3C1B20EE 3FD59D7C 25E41D2B 669E1EF1 6E6F52C3 164DF4FB 

306 7930E9E4 E58857B6 AC7D5F42 D69F6D18 7763CF1D 55034004 

307 87F55BA5 7E31CC7A 7135C886 EFB4318A ED6A1E01 2D9E6832 

308 A907600A 918130C4 6DC778F9 71AD0038 092999A3 33CB8B7A 

309 1A1DB93D 7140003C 2A4ECEA9 F98D0ACC 0A8291CD CEC97DCF 

310 8EC9B55A 7F88A46B 4DB5A851 F44182E1 C68A007E 5E655F6A 

311 FFFFFFFF FFFFFFFF 

312 """) 

313 mLen = 4096 

314 

315 

316class ffdhe6144(_FFDHParams): # From RFC 7919 

317 g = 0x02 

318 m = long_converter(""" 

319 FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 

320 D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 

321 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 

322 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 

323 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 

324 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB 

325 B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 

326 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 

327 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 

328 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA 

329 886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238 

330 61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C 

331 AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3 

332 64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D 

333 ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF 

334 3C1B20EE 3FD59D7C 25E41D2B 669E1EF1 6E6F52C3 164DF4FB 

335 7930E9E4 E58857B6 AC7D5F42 D69F6D18 7763CF1D 55034004 

336 87F55BA5 7E31CC7A 7135C886 EFB4318A ED6A1E01 2D9E6832 

337 A907600A 918130C4 6DC778F9 71AD0038 092999A3 33CB8B7A 

338 1A1DB93D 7140003C 2A4ECEA9 F98D0ACC 0A8291CD CEC97DCF 

339 8EC9B55A 7F88A46B 4DB5A851 F44182E1 C68A007E 5E0DD902 

340 0BFD64B6 45036C7A 4E677D2C 38532A3A 23BA4442 CAF53EA6 

341 3BB45432 9B7624C8 917BDD64 B1C0FD4C B38E8C33 4C701C3A 

342 CDAD0657 FCCFEC71 9B1F5C3E 4E46041F 388147FB 4CFDB477 

343 A52471F7 A9A96910 B855322E DB6340D8 A00EF092 350511E3 

344 0ABEC1FF F9E3A26E 7FB29F8C 183023C3 587E38DA 0077D9B4 

345 763E4E4B 94B2BBC1 94C6651E 77CAF992 EEAAC023 2A281BF6 

346 B3A739C1 22611682 0AE8DB58 47A67CBE F9C9091B 462D538C 

347 D72B0374 6AE77F5E 62292C31 1562A846 505DC82D B854338A 

348 E49F5235 C95B9117 8CCF2DD5 CACEF403 EC9D1810 C6272B04 

349 5B3B71F9 DC6B80D6 3FDD4A8E 9ADB1E69 62A69526 D43161C1 

350 A41D570D 7938DAD4 A40E329C D0E40E65 FFFFFFFF FFFFFFFF 

351 """) 

352 mLen = 6144 

353 

354 

355class ffdhe8192(_FFDHParams): # From RFC 7919 

356 g = 0x02 

357 m = long_converter(""" 

358 FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 

359 D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 

360 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 

361 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 

362 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 

363 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB 

364 B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 

365 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 

366 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 

367 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA 

368 886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238 

369 61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C 

370 AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3 

371 64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D 

372 ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF 

373 3C1B20EE 3FD59D7C 25E41D2B 669E1EF1 6E6F52C3 164DF4FB 

374 7930E9E4 E58857B6 AC7D5F42 D69F6D18 7763CF1D 55034004 

375 87F55BA5 7E31CC7A 7135C886 EFB4318A ED6A1E01 2D9E6832 

376 A907600A 918130C4 6DC778F9 71AD0038 092999A3 33CB8B7A 

377 1A1DB93D 7140003C 2A4ECEA9 F98D0ACC 0A8291CD CEC97DCF 

378 8EC9B55A 7F88A46B 4DB5A851 F44182E1 C68A007E 5E0DD902 

379 0BFD64B6 45036C7A 4E677D2C 38532A3A 23BA4442 CAF53EA6 

380 3BB45432 9B7624C8 917BDD64 B1C0FD4C B38E8C33 4C701C3A 

381 CDAD0657 FCCFEC71 9B1F5C3E 4E46041F 388147FB 4CFDB477 

382 A52471F7 A9A96910 B855322E DB6340D8 A00EF092 350511E3 

383 0ABEC1FF F9E3A26E 7FB29F8C 183023C3 587E38DA 0077D9B4 

384 763E4E4B 94B2BBC1 94C6651E 77CAF992 EEAAC023 2A281BF6 

385 B3A739C1 22611682 0AE8DB58 47A67CBE F9C9091B 462D538C 

386 D72B0374 6AE77F5E 62292C31 1562A846 505DC82D B854338A 

387 E49F5235 C95B9117 8CCF2DD5 CACEF403 EC9D1810 C6272B04 

388 5B3B71F9 DC6B80D6 3FDD4A8E 9ADB1E69 62A69526 D43161C1 

389 A41D570D 7938DAD4 A40E329C CFF46AAA 36AD004C F600C838 

390 1E425A31 D951AE64 FDB23FCE C9509D43 687FEB69 EDD1CC5E 

391 0B8CC3BD F64B10EF 86B63142 A3AB8829 555B2F74 7C932665 

392 CB2C0F1C C01BD702 29388839 D2AF05E4 54504AC7 8B758282 

393 2846C0BA 35C35F5C 59160CC0 46FD8251 541FC68C 9C86B022 

394 BB709987 6A460E74 51A8A931 09703FEE 1C217E6C 3826E52C 

395 51AA691E 0E423CFC 99E9E316 50C1217B 624816CD AD9A95F9 

396 D5B80194 88D9C0A0 A1FE3075 A577E231 83F81D4A 3F2FA457 

397 1EFC8CE0 BA8A4FE8 B6855DFE 72B0A66E DED2FBAB FBE58A30 

398 FAFABE1C 5D71A87E 2F741EF8 C1FE86FE A6BBFDE5 30677F0D 

399 97D11D49 F7A8443D 0822E506 A9F4614E 011E2A94 838FF88C 

400 D68C8BB7 C5C6424C FFFFFFFF FFFFFFFF 

401 """) 

402 mLen = 8192 

403 

404 

405_tls_named_ffdh_groups = {256: "ffdhe2048", 257: "ffdhe3072", 

406 258: "ffdhe4096", 259: "ffdhe6144", 

407 260: "ffdhe8192"} 

408 

409_tls_named_curves = {1: "sect163k1", 2: "sect163r1", 3: "sect163r2", 

410 4: "sect193r1", 5: "sect193r2", 6: "sect233k1", 

411 7: "sect233r1", 8: "sect239k1", 9: "sect283k1", 

412 10: "sect283r1", 11: "sect409k1", 12: "sect409r1", 

413 13: "sect571k1", 14: "sect571r1", 15: "secp160k1", 

414 16: "secp160r1", 17: "secp160r2", 18: "secp192k1", 

415 19: "secp192r1", 20: "secp224k1", 21: "secp224r1", 

416 22: "secp256k1", 23: "secp256r1", 24: "secp384r1", 

417 25: "secp521r1", 26: "brainpoolP256r1", 

418 27: "brainpoolP384r1", 28: "brainpoolP512r1", 

419 29: "x25519", 30: "x448", 

420 0xff01: "arbitrary_explicit_prime_curves", 

421 0xff02: "arbitrary_explicit_char2_curves"} 

422 

423_tls_post_quantum_hybrid = { 

424 # https://www.ietf.org/archive/id/draft-kwiatkowski-tls-ecdhe-mlkem-02.html#name-secp256r1mlkem768 

425 0x11EB: "SecP256r1MLKEM768", 

426 # https://www.ietf.org/archive/id/draft-kwiatkowski-tls-ecdhe-mlkem-02.html#name-x25519mlkem768 

427 0x11EC: "X25519MLKEM768", 

428 # https://www.ietf.org/archive/id/draft-tls-westerbaan-xyber768d00-03.html#name-iana-considerations 

429 0x6399: "X25519Kyber768Draft00", 

430} 

431 

432_tls_named_groups = {} 

433_tls_named_groups.update(_tls_named_ffdh_groups) 

434_tls_named_groups.update(_tls_named_curves) 

435_tls_named_groups.update(_tls_post_quantum_hybrid) 

436 

437 

438def _tls_named_groups_import(group, pubbytes): 

439 if group in _tls_named_ffdh_groups: 

440 # https://datatracker.ietf.org/doc/html/rfc8446#section-4.2.8.1 

441 params = _ffdh_groups[_tls_named_ffdh_groups[group]][0] 

442 pn = params.parameter_numbers() 

443 y = bytes_int(pubbytes) 

444 public_numbers = DHPublicNumbers(y, pn) 

445 return public_numbers.public_key(default_backend()) 

446 elif group in _tls_named_curves: 

447 # https://datatracker.ietf.org/doc/html/rfc8446#section-4.2.8.2 

448 if _tls_named_curves[group] in ["x25519", "x448"]: 

449 if conf.crypto_valid_advanced: 

450 if _tls_named_curves[group] == "x25519": 

451 import_point = x25519.X25519PublicKey.from_public_bytes 

452 else: 

453 import_point = x448.X448PublicKey.from_public_bytes 

454 return import_point(pubbytes) 

455 else: 

456 curve = ec._CURVE_TYPES[_tls_named_curves[group]] 

457 try: 

458 # cryptography < 42 

459 curve = curve() 

460 except TypeError: 

461 pass 

462 try: # cryptography >= 2.5 

463 return ec.EllipticCurvePublicKey.from_encoded_point( 

464 curve, 

465 pubbytes 

466 ) 

467 except AttributeError: 

468 pub_num = ec.EllipticCurvePublicNumbers.from_encoded_point( 

469 curve, 

470 pubbytes 

471 ).public_numbers() 

472 return pub_num.public_key(default_backend()) 

473 

474 

475def _tls_named_groups_pubbytes(privkey): 

476 if isinstance(privkey, DHPrivateKey): 

477 # https://datatracker.ietf.org/doc/html/rfc8446#section-4.2.8.1 

478 pubkey = privkey.public_key() 

479 return int_bytes(pubkey.public_numbers().y, privkey.key_size // 8) 

480 elif isinstance(privkey, (x25519.X25519PrivateKey, 

481 x448.X448PrivateKey)): 

482 # https://datatracker.ietf.org/doc/html/rfc8446#section-4.2.8.2 

483 pubkey = privkey.public_key() 

484 return pubkey.public_bytes( 

485 serialization.Encoding.Raw, 

486 serialization.PublicFormat.Raw 

487 ) 

488 else: 

489 pubkey = privkey.public_key() 

490 try: 

491 # cryptography >= 2.5 

492 return pubkey.public_bytes( 

493 serialization.Encoding.X962, 

494 serialization.PublicFormat.UncompressedPoint 

495 ) 

496 except TypeError: 

497 # older versions 

498 return pubkey.public_numbers().encode_point() 

499 

500 

501def _tls_named_groups_generate(group): 

502 if group in _tls_named_ffdh_groups: 

503 params = _ffdh_groups[_tls_named_ffdh_groups[group]][0] 

504 return params.generate_private_key() 

505 elif group in _tls_named_curves: 

506 group_name = _tls_named_curves[group] 

507 if group_name in ["x25519", "x448"]: 

508 if conf.crypto_valid_advanced: 

509 if group_name == "x25519": 

510 return x25519.X25519PrivateKey.generate() 

511 else: 

512 return x448.X448PrivateKey.generate() 

513 else: 

514 warning( 

515 "Your cryptography version doesn't support " + group_name 

516 ) 

517 else: 

518 curve = ec._CURVE_TYPES[_tls_named_curves[group]] 

519 try: 

520 # cryptography < 42 

521 curve = curve() 

522 except TypeError: 

523 pass 

524 return ec.generate_private_key(curve, default_backend()) 

525 

526# Below lies ghost code since the shift from 'ecdsa' to 'cryptography' lib. 

527# Part of the code has been kept, but commented out, in case anyone would like 

528# to improve ECC support in 'cryptography' (namely for the compressed point 

529# format and additional curves). 

530# 

531# Recommended curve parameters from www.secg.org/SEC2-Ver-1.0.pdf 

532# and www.ecc-brainpool.org/download/Domain-parameters.pdf 

533# 

534# 

535# import math 

536# 

537# from scapy.utils import long_converter, binrepr 

538# from scapy.layers.tls.crypto.pkcs1 import pkcs_i2osp, pkcs_os2ip 

539# 

540# 

541# def encode_point(point, point_format=0): 

542# """ 

543# Return a string representation of the Point p, according to point_format. 

544# """ 

545# pLen = len(binrepr(point.curve().p())) 

546# x = pkcs_i2osp(point.x(), math.ceil(pLen/8)) 

547# y = pkcs_i2osp(point.y(), math.ceil(pLen/8)) 

548# if point_format == 0: 

549# frmt = b'\x04' 

550# elif point_format == 1: 

551# frmt = chr(2 + y%2) 

552# y = '' 

553# else: 

554# raise Exception("No support for point_format %d" % point_format) 

555# return frmt + x + y 

556# 

557# 

558# try: 

559# import ecdsa 

560# ecdsa_support = True 

561# except ImportError: 

562# import logging 

563# log_loading = logging.getLogger("scapy.loading") 

564# log_loading.info("Can't import python ecdsa lib. No curves.") 

565# 

566# 

567# if ecdsa_support: 

568# 

569# from ecdsa.ellipticcurve import CurveFp, Point 

570# from ecdsa.curves import Curve 

571# from ecdsa.numbertheory import square_root_mod_prime 

572# 

573# 

574# def extract_coordinates(g, curve): 

575# """ 

576# Return the coordinates x and y as integers, 

577# regardless of the point format of string g. 

578# Second expected parameter is a CurveFp. 

579# """ 

580# p = curve.p() 

581# point_format = g[0] 

582# point = g[1:] 

583# if point_format == b'\x04': 

584# point_len = len(point) 

585# if point_len % 2 != 0: 

586# raise Exception("Point length is not even.") 

587# x_bytes = point[:point_len>>1] 

588# x = pkcs_os2ip(x_bytes) % p 

589# y_bytes = point[point_len>>1:] 

590# y = pkcs_os2ip(y_bytes) % p 

591# elif point_format in [b'\x02', b'\x03']: 

592# x_bytes = point 

593# x = pkcs_os2ip(x_bytes) % p 

594# # perform the y coordinate computation with self.tls_ec 

595# y_square = (x*x*x + curve.a()*x + curve.b()) % p 

596# y = square_root_mod_prime(y_square, p) 

597# y_parity = ord(point_format) % 2 # \x02 means even, \x03 means odd # noqa: E501 

598# if y % 2 != y_parity: 

599# y = -y % p 

600# else: 

601# raise Exception("Point starts with %s. This encoding " 

602# "is not recognized." % repr(point_format)) 

603# if not curve.contains_point(x, y): 

604# raise Exception("The point we extracted does not belong on the curve!") # noqa: E501 

605# return x, y 

606# 

607# def import_curve(p, a, b, g, r, name="dummyName", oid=(1, 3, 132, 0, 0xff)): # noqa: E501 

608# """ 

609# Create an ecdsa.curves.Curve from the usual parameters. 

610# Arguments may be either octet strings or integers, 

611# except g which we expect to be an octet string. 

612# """ 

613# if isinstance(p, str): 

614# p = pkcs_os2ip(p) 

615# if isinstance(a, str): 

616# a = pkcs_os2ip(a) 

617# if isinstance(b, str): 

618# b = pkcs_os2ip(b) 

619# if isinstance(r, str): 

620# r = pkcs_os2ip(r) 

621# curve = CurveFp(p, a, b) 

622# x, y = extract_coordinates(g, curve) 

623# generator = Point(curve, x, y, r) 

624# return Curve(name, curve, generator, oid) 

625 

626# Named curves 

627 

628# We always provide _a as a positive integer. 

629 

630# _p = long_converter(""" 

631# ffffffff ffffffff ffffffff fffffffe ffffac73""") 

632# _a = 0 

633# _b = 7 

634# _Gx = long_converter(""" 

635# 3b4c382c e37aa192 a4019e76 3036f4f5 dd4d7ebb""") 

636# _Gy = long_converter(""" 

637# 938cf935 318fdced 6bc28286 531733c3 f03c4fee""") 

638# _r = long_converter("""01 

639# 00000000 00000000 0001b8fa 16dfab9a ca16b6b3""") 

640# curve = CurveFp(_p, _a, _b) 

641# generator = Point(curve, _Gx, _Gy, _r) 

642# SECP160k1 = Curve("SECP160k1", curve, generator, 

643# (1, 3, 132, 0, 9), "secp160k1") 

644 

645# _p = long_converter(""" 

646# ffffffff ffffffff ffffffff ffffffff 7fffffff""") 

647# _a = -3 % _p 

648# _b = long_converter(""" 

649# 1c97befc 54bd7a8b 65acf89f 81d4d4ad c565fa45""") 

650# _Gx = long_converter(""" 

651# 4a96b568 8ef57328 46646989 68c38bb9 13cbfc82""") 

652# _Gy = long_converter(""" 

653# 23a62855 3168947d 59dcc912 04235137 7ac5fb32""") 

654# _r = long_converter("""01 

655# 00000000 00000000 0001f4c8 f927aed3 ca752257""") 

656# curve = CurveFp(_p, _a, _b) 

657# generator = Point(curve, _Gx, _Gy, _r) 

658# SECP160r1 = Curve("SECP160r1", curve, generator, 

659# (1, 3, 132, 0, 8), "secp160r1") 

660 

661# _p = long_converter(""" 

662# ffffffff ffffffff ffffffff fffffffe ffffac73""") 

663# _a = -3 % _p 

664# _b = long_converter(""" 

665# b4e134d3 fb59eb8b ab572749 04664d5a f50388ba""") 

666# _Gx = long_converter(""" 

667# 52dcb034 293a117e 1f4ff11b 30f7199d 3144ce6d""") 

668# _Gy = long_converter(""" 

669# feaffef2 e331f296 e071fa0d f9982cfe a7d43f2e""") 

670# _r = long_converter("""01 

671# 00000000 00000000 0000351e e786a818 f3a1a16b""") 

672# curve = CurveFp(_p, _a, _b) 

673# generator = Point(curve, _Gx, _Gy, _r) 

674# SECP160r2 = Curve("SECP160r2", curve, generator, 

675# (1, 3, 132, 0, 30), "secp160r2") 

676 

677# _p = long_converter(""" 

678# ffffffff ffffffff ffffffff ffffffff fffffffe ffffee37""") 

679# _a = 0 

680# _b = 3 

681# _Gx = long_converter(""" 

682# db4ff10e c057e9ae 26b07d02 80b7f434 1da5d1b1 eae06c7d""") 

683# _Gy = long_converter(""" 

684# 9b2f2f6d 9c5628a7 844163d0 15be8634 4082aa88 d95e2f9d""") 

685# _r = long_converter(""" 

686# ffffffff ffffffff fffffffe 26f2fc17 0f69466a 74defd8d""") 

687# curve = CurveFp(_p, _a, _b) 

688# generator = Point(curve, _Gx, _Gy, _r) 

689# SECP192k1 = Curve("SECP192k1", curve, generator, 

690# (1, 3, 132, 0, 31), "secp192k1") 

691 

692# _p = long_converter(""" 

693# ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe 

694# ffffe56d""") 

695# _a = 0 

696# _b = 5 

697# _Gx = long_converter(""" 

698# a1455b33 4df099df 30fc28a1 69a467e9 e47075a9 0f7e650e 

699# b6b7a45c""") 

700# _Gy = long_converter(""" 

701# 7e089fed 7fba3442 82cafbd6 f7e319f7 c0b0bd59 e2ca4bdb 

702# 556d61a5""") 

703# _r = long_converter("""01 

704# 00000000 00000000 00000000 0001dce8 d2ec6184 caf0a971 

705# 769fb1f7""") 

706# curve = CurveFp(_p, _a, _b) 

707# generator = Point(curve, _Gx, _Gy, _r) 

708# SECP224k1 = Curve("SECP224k1", curve, generator, 

709# (1, 3, 132, 0, 32), "secp224k1") 

710 

711# _p = long_converter(""" 

712# A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028 

713# 2013481D 1F6E5377""") 

714# _a = long_converter(""" 

715# 7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C 

716# E94A4B44 F330B5D9""") 

717# _b = long_converter(""" 

718# 26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE 

719# 6BCCDC18 FF8C07B6""") 

720# _Gx = long_converter(""" 

721# 8BD2AEB9 CB7E57CB 2C4B482F FC81B7AF B9DE27E1 E3BD23C2 

722# 3A4453BD 9ACE3262""") 

723# _Gy = long_converter(""" 

724# 547EF835 C3DAC4FD 97F8461A 14611DC9 C2774513 2DED8E54 

725# 5C1D54C7 2F046997""") 

726# _r = long_converter(""" 

727# A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7 

728# 901E0E82 974856A7""") 

729# curve = CurveFp(_p, _a, _b) 

730# generator = Point(curve, _Gx, _Gy, _r) 

731# BRNP256r1 = Curve("BRNP256r1", curve, generator, 

732# (1, 3, 36, 3, 3, 2, 8, 1, 1, 7), "brainpoolP256r1") 

733 

734# _p = long_converter(""" 

735# 8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4 

736# 12B1DA19 7FB71123 ACD3A729 901D1A71 87470013 3107EC53""") 

737# _a = long_converter(""" 

738# 7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787 

739# 139165EF BA91F90F 8AA5814A 503AD4EB 04A8C7DD 22CE2826""") 

740# _b = long_converter(""" 

741# 04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6 

742# 2E880EA5 3EEB62D5 7CB43902 95DBC994 3AB78696 FA504C11""") 

743# _Gx = long_converter(""" 

744# 1D1C64F0 68CF45FF A2A63A81 B7C13F6B 8847A3E7 7EF14FE3 

745# DB7FCAFE 0CBD10E8 E826E034 36D646AA EF87B2E2 47D4AF1E""") 

746# _Gy = long_converter(""" 

747# 8ABE1D75 20F9C2A4 5CB1EB8E 95CFD552 62B70B29 FEEC5864 

748# E19C054F F9912928 0E464621 77918111 42820341 263C5315""") 

749# _r = long_converter(""" 

750# 8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3 

751# 1F166E6C AC0425A7 CF3AB6AF 6B7FC310 3B883202 E9046565""") 

752# curve = CurveFp(_p, _a, _b) 

753# generator = Point(curve, _Gx, _Gy, _r) 

754# BRNP384r1 = Curve("BRNP384r1", curve, generator, 

755# (1, 3, 36, 3, 3, 2, 8, 1, 1, 11), "brainpoolP384r1") 

756 

757# _p = long_converter(""" 

758# AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E 

759# D6639CCA 70330871 7D4D9B00 9BC66842 AECDA12A E6A380E6 

760# 2881FF2F 2D82C685 28AA6056 583A48F3""") 

761# _a = long_converter(""" 

762# 7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610 

763# A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 

764# 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA""") 

765# _b = long_converter(""" 

766# 3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 

767# 8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA DC083E67 

768# 984050B7 5EBAE5DD 2809BD63 8016F723""") 

769# _Gx = long_converter(""" 

770# 81AEE4BD D82ED964 5A21322E 9C4C6A93 85ED9F70 B5D916C1 

771# B43B62EE F4D0098E FF3B1F78 E2D0D48D 50D1687B 93B97D5F 

772# 7C6D5047 406A5E68 8B352209 BCB9F822""") 

773# _Gy = long_converter(""" 

774# 7DDE385D 566332EC C0EABFA9 CF7822FD F209F700 24A57B1A 

775# A000C55B 881F8111 B2DCDE49 4A5F485E 5BCA4BD8 8A2763AE 

776# D1CA2B2F A8F05406 78CD1E0F 3AD80892""") 

777# _r = long_converter(""" 

778# AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E 

779# D6639CCA 70330870 553E5C41 4CA92619 41866119 7FAC1047 

780# 1DB1D381 085DDADD B5879682 9CA90069""") 

781# curve = CurveFp(_p, _a, _b) 

782# generator = Point(curve, _Gx, _Gy, _r) 

783# BRNP512r1 = Curve("BRNP512r1", curve, generator, 

784# (1, 3, 36, 3, 3, 2, 8, 1, 1, 13), "brainpoolP512r1")