## This file is part of Scapy
## Copyright (C) 2007, 2008, 2009 Arnaud Ebalard
##               2015, 2016, 2017 Maxence Tury
## This program is published under a GPLv2 license

"""
This is a register for DH groups from RFC 3526 and RFC 4306.
At this time the groups from RFC 7919 have not been registered by openssl,
thus they cannot be imported from the cryptography library.

We also provide TLS identifiers for these DH groups and also the ECDH groups.
(Note that the equivalent of _ffdh_groups for ECDH is ec._CURVE_TYPES.)
"""

from __future__ import absolute_import

from scapy.config import conf
from scapy.utils import long_converter
if conf.crypto_valid:
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives.asymmetric import dh
import scapy.modules.six as six

from scapy.config import conf
from scapy.utils import long_converter

# We have to start by a dirty hack in order to allow long generators,
# which some versions of openssl love to use...

if conf.crypto_valid:
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives.asymmetric.dh import DHParameterNumbers

    try:
        # We test with dummy values whether the size limitation has been removed.
        pn_test = DHParameterNumbers(2, 7)
    except ValueError:
        # We get rid of the limitation through the cryptography v1.9 __init__.
        import six
        def DHParameterNumbers__init__hack(self, p, g, q=None):
            if (
                not isinstance(p, six.integer_types) or
                not isinstance(g, six.integer_types)
            ):
                raise TypeError("p and g must be integers")
            if q is not None and not isinstance(q, six.integer_types):
                raise TypeError("q must be integer or None")

            self._p = p
            self._g = g
            self._q = q

        DHParameterNumbers.__init__ = DHParameterNumbers__init__hack

    # End of hack.


_ffdh_groups = {}

class _FFDHParamsMetaclass(type):
    def __new__(cls, ffdh_name, bases, dct):
        the_class = super(_FFDHParamsMetaclass, cls).__new__(cls, ffdh_name,
                                                             bases, dct)
        if conf.crypto_valid and ffdh_name != "_FFDHParams":
            pn = DHParameterNumbers(the_class.m, the_class.g)
            params = pn.parameters(default_backend())
            _ffdh_groups[ffdh_name] = [params, the_class.mLen]
        return the_class


class _FFDHParams(six.with_metaclass(_FFDHParamsMetaclass)):
    pass


class modp768(_FFDHParams):
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08
    8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B
    302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9
    A63A3620 FFFFFFFF FFFFFFFF""")
    mLen = 768

class modp1024(_FFDHParams): # From RFC 4306
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08
    8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B
    302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9
    A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6
    49286651 ECE65381 FFFFFFFF FFFFFFFF""")
    mLen  = 1024

class modp1536(_FFDHParams): # From RFC 3526
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
    29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
    EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
    E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
    EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
    C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
    83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
    670C354E 4ABC9804 F1746C08 CA237327 FFFFFFFF FFFFFFFF""")
    mLen  = 1536

class modp2048(_FFDHParams): # From RFC 3526
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
    29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
    EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
    E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
    EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
    C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
    83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
    670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
    E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
    DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
    15728E5A 8AACAA68 FFFFFFFF FFFFFFFF""")
    mLen  = 2048

class modp3072(_FFDHParams): # From RFC 3526
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
    29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
    EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
    E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
    EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
    C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
    83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
    670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
    E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
    DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
    15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64
    ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7
    ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
    F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
    BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
    43DB5BFC E0FD108E 4B82D120 A93AD2CA FFFFFFFF FFFFFFFF""")
    mLen  = 3072

class modp4096(_FFDHParams): # From RFC 3526
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
    29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
    EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
    E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
    EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
    C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
    83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
    670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
    E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
    DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
    15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64
    ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7
    ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
    F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
    BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
    43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7
    88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA
    2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6
    287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED
    1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9
    93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34063199
    FFFFFFFF FFFFFFFF""")
    mLen  = 4096

class modp6144(_FFDHParams): # From RFC 3526
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08
    8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B
    302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9
    A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6
    49286651 ECE45B3D C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8
    FD24CF5F 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
    670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B E39E772C
    180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 DE2BCBF6 95581718
    3995497C EA956AE5 15D22618 98FA0510 15728E5A 8AAAC42D AD33170D
    04507A33 A85521AB DF1CBA64 ECFB8504 58DBEF0A 8AEA7157 5D060C7D
    B3970F85 A6E1E4C7 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226
    1AD2EE6B F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
    BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 43DB5BFC
    E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 88719A10 BDBA5B26
    99C32718 6AF4E23C 1A946834 B6150BDA 2583E9CA 2AD44CE8 DBBBC2DB
    04DE8EF9 2E8EFC14 1FBECAA6 287C5947 4E6BC05D 99B2964F A090C3A2
    233BA186 515BE7ED 1F612970 CEE2D7AF B81BDD76 2170481C D0069127
    D5B05AA9 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492
    36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD F8FF9406
    AD9E530E E5DB382F 413001AE B06A53ED 9027D831 179727B0 865A8918
    DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B DB7F1447 E6CC254B 33205151
    2BD7AF42 6FB8F401 378CD2BF 5983CA01 C64B92EC F032EA15 D1721D03
    F482D7CE 6E74FEF6 D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F
    BEC7E8F3 23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA
    CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328 06A1D58B
    B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C DA56C9EC 2EF29632
    387FE8D7 6E3C0468 043E8F66 3F4860EE 12BF2D5B 0B7474D6 E694F91E
    6DCC4024 FFFFFFFF FFFFFFFF""")
    mLen = 6144

class modp8192(_FFDHParams): # From RFC 3526
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
    29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
    EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
    E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
    EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
    C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
    83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
    670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
    E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
    DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
    15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64
    ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7
    ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
    F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
    BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
    43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7
    88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA
    2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6
    287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED
    1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9
    93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492
    36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD
    F8FF9406 AD9E530E E5DB382F 413001AE B06A53ED 9027D831
    179727B0 865A8918 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B
    DB7F1447 E6CC254B 33205151 2BD7AF42 6FB8F401 378CD2BF
    5983CA01 C64B92EC F032EA15 D1721D03 F482D7CE 6E74FEF6
    D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F BEC7E8F3
    23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA
    CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328
    06A1D58B B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C
    DA56C9EC 2EF29632 387FE8D7 6E3C0468 043E8F66 3F4860EE
    12BF2D5B 0B7474D6 E694F91E 6DBE1159 74A3926F 12FEE5E4
    38777CB6 A932DF8C D8BEC4D0 73B931BA 3BC832B6 8D9DD300
    741FA7BF 8AFC47ED 2576F693 6BA42466 3AAB639C 5AE4F568
    3423B474 2BF1C978 238F16CB E39D652D E3FDB8BE FC848AD9
    22222E04 A4037C07 13EB57A8 1A23F0C7 3473FC64 6CEA306B
    4BCBC886 2F8385DD FA9D4B7F A2C087E8 79683303 ED5BDD3A
    062B3CF5 B3A278A6 6D2A13F8 3F44F82D DF310EE0 74AB6A36
    4597E899 A0255DC1 64F31CC5 0846851D F9AB4819 5DED7EA1
    B1D510BD 7EE74D73 FAF36BC3 1ECFA268 359046F4 EB879F92
    4009438B 481C6CD7 889A002E D5EE382B C9190DA6 FC026E47
    9558E447 5677E9AA 9E3050E2 765694DF C81F56E8 80B96E71
    60C980DD 98EDD3DF FFFFFFFF FFFFFFFF""")
    mLen = 8192

class ffdhe2048(_FFDHParams): # From RFC 7919
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1
    D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9
    7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561
    2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935
    984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735
    30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB
    B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19
    0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61
    9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73
    3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA
    886B4238 61285C97 FFFFFFFF FFFFFFFF
    """)
    mLen = 2048

class ffdhe3072(_FFDHParams): # From RFC 7919
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1
    D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9
    7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561
    2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935
    984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735
    30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB
    B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19
    0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61
    9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73
    3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA
    886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238
    61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C
    AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3
    64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D
    ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF
    3C1B20EE 3FD59D7C 25E41D2B 66C62E37 FFFFFFFF FFFFFFFF
    """)
    mLen = 3072

class ffdhe4096(_FFDHParams): # From RFC 7919
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1
    D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9
    7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561
    2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935
    984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735
    30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB
    B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19
    0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61
    9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73
    3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA
    886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238
    61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C
    AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3
    64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D
    ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF
    3C1B20EE 3FD59D7C 25E41D2B 669E1EF1 6E6F52C3 164DF4FB
    7930E9E4 E58857B6 AC7D5F42 D69F6D18 7763CF1D 55034004
    87F55BA5 7E31CC7A 7135C886 EFB4318A ED6A1E01 2D9E6832
    A907600A 918130C4 6DC778F9 71AD0038 092999A3 33CB8B7A
    1A1DB93D 7140003C 2A4ECEA9 F98D0ACC 0A8291CD CEC97DCF
    8EC9B55A 7F88A46B 4DB5A851 F44182E1 C68A007E 5E655F6A
    FFFFFFFF FFFFFFFF
    """)
    mLen = 4096

class ffdhe6144(_FFDHParams): # From RFC 7919
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1
    D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9
    7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561
    2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935
    984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735
    30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB
    B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19
    0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61
    9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73
    3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA
    886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238
    61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C
    AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3
    64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D
    ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF
    3C1B20EE 3FD59D7C 25E41D2B 669E1EF1 6E6F52C3 164DF4FB
    7930E9E4 E58857B6 AC7D5F42 D69F6D18 7763CF1D 55034004
    87F55BA5 7E31CC7A 7135C886 EFB4318A ED6A1E01 2D9E6832
    A907600A 918130C4 6DC778F9 71AD0038 092999A3 33CB8B7A
    1A1DB93D 7140003C 2A4ECEA9 F98D0ACC 0A8291CD CEC97DCF
    8EC9B55A 7F88A46B 4DB5A851 F44182E1 C68A007E 5E0DD902
    0BFD64B6 45036C7A 4E677D2C 38532A3A 23BA4442 CAF53EA6
    3BB45432 9B7624C8 917BDD64 B1C0FD4C B38E8C33 4C701C3A
    CDAD0657 FCCFEC71 9B1F5C3E 4E46041F 388147FB 4CFDB477
    A52471F7 A9A96910 B855322E DB6340D8 A00EF092 350511E3
    0ABEC1FF F9E3A26E 7FB29F8C 183023C3 587E38DA 0077D9B4
    763E4E4B 94B2BBC1 94C6651E 77CAF992 EEAAC023 2A281BF6
    B3A739C1 22611682 0AE8DB58 47A67CBE F9C9091B 462D538C
    D72B0374 6AE77F5E 62292C31 1562A846 505DC82D B854338A
    E49F5235 C95B9117 8CCF2DD5 CACEF403 EC9D1810 C6272B04
    5B3B71F9 DC6B80D6 3FDD4A8E 9ADB1E69 62A69526 D43161C1
    A41D570D 7938DAD4 A40E329C D0E40E65 FFFFFFFF FFFFFFFF
    """)
    mLen = 6144

class ffdhe8192(_FFDHParams): # From RFC 7919
    g = 0x02
    m = long_converter("""
    FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1
    D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9
    7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561
    2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935
    984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735
    30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB
    B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19
    0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61
    9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73
    3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA
    886B4238 611FCFDC DE355B3B 6519035B BC34F4DE F99C0238
    61B46FC9 D6E6C907 7AD91D26 91F7F7EE 598CB0FA C186D91C
    AEFE1309 85139270 B4130C93 BC437944 F4FD4452 E2D74DD3
    64F2E21E 71F54BFF 5CAE82AB 9C9DF69E E86D2BC5 22363A0D
    ABC52197 9B0DEADA 1DBF9A42 D5C4484E 0ABCD06B FA53DDEF
    3C1B20EE 3FD59D7C 25E41D2B 669E1EF1 6E6F52C3 164DF4FB
    7930E9E4 E58857B6 AC7D5F42 D69F6D18 7763CF1D 55034004
    87F55BA5 7E31CC7A 7135C886 EFB4318A ED6A1E01 2D9E6832
    A907600A 918130C4 6DC778F9 71AD0038 092999A3 33CB8B7A
    1A1DB93D 7140003C 2A4ECEA9 F98D0ACC 0A8291CD CEC97DCF
    8EC9B55A 7F88A46B 4DB5A851 F44182E1 C68A007E 5E0DD902
    0BFD64B6 45036C7A 4E677D2C 38532A3A 23BA4442 CAF53EA6
    3BB45432 9B7624C8 917BDD64 B1C0FD4C B38E8C33 4C701C3A
    CDAD0657 FCCFEC71 9B1F5C3E 4E46041F 388147FB 4CFDB477
    A52471F7 A9A96910 B855322E DB6340D8 A00EF092 350511E3
    0ABEC1FF F9E3A26E 7FB29F8C 183023C3 587E38DA 0077D9B4
    763E4E4B 94B2BBC1 94C6651E 77CAF992 EEAAC023 2A281BF6
    B3A739C1 22611682 0AE8DB58 47A67CBE F9C9091B 462D538C
    D72B0374 6AE77F5E 62292C31 1562A846 505DC82D B854338A
    E49F5235 C95B9117 8CCF2DD5 CACEF403 EC9D1810 C6272B04
    5B3B71F9 DC6B80D6 3FDD4A8E 9ADB1E69 62A69526 D43161C1
    A41D570D 7938DAD4 A40E329C CFF46AAA 36AD004C F600C838
    1E425A31 D951AE64 FDB23FCE C9509D43 687FEB69 EDD1CC5E
    0B8CC3BD F64B10EF 86B63142 A3AB8829 555B2F74 7C932665
    CB2C0F1C C01BD702 29388839 D2AF05E4 54504AC7 8B758282
    2846C0BA 35C35F5C 59160CC0 46FD8251 541FC68C 9C86B022
    BB709987 6A460E74 51A8A931 09703FEE 1C217E6C 3826E52C
    51AA691E 0E423CFC 99E9E316 50C1217B 624816CD AD9A95F9
    D5B80194 88D9C0A0 A1FE3075 A577E231 83F81D4A 3F2FA457
    1EFC8CE0 BA8A4FE8 B6855DFE 72B0A66E DED2FBAB FBE58A30
    FAFABE1C 5D71A87E 2F741EF8 C1FE86FE A6BBFDE5 30677F0D
    97D11D49 F7A8443D 0822E506 A9F4614E 011E2A94 838FF88C
    D68C8BB7 C5C6424C FFFFFFFF FFFFFFFF
    """)
    mLen = 8192


_tls_named_ffdh_groups = { 256: "ffdhe2048", 257: "ffdhe3072",
                           258: "ffdhe4096", 259: "ffdhe6144",
                           260: "ffdhe8192" }

_tls_named_curves = {  1: "sect163k1",  2: "sect163r1",  3: "sect163r2",
                       4: "sect193r1",  5: "sect193r2",  6: "sect233k1",
                       7: "sect233r1",  8: "sect239k1",  9: "sect283k1",
                      10: "sect283r1", 11: "sect409k1", 12: "sect409r1",
                      13: "sect571k1", 14: "sect571r1", 15: "secp160k1",
                      16: "secp160r1", 17: "secp160r2", 18: "secp192k1",
                      19: "secp192r1", 20: "secp224k1", 21: "secp224r1",
                      22: "secp256k1", 23: "secp256r1", 24: "secp384r1",
                      25: "secp521r1", 26: "brainpoolP256r1",
                      27: "brainpoolP384r1", 28: "brainpoolP512r1",
                      29: "x25519",    30: "x448",
                      0xff01: "arbitrary_explicit_prime_curves",
                      0xff02: "arbitrary_explicit_char2_curves"}

_tls_named_groups = {}
_tls_named_groups.update(_tls_named_ffdh_groups)
_tls_named_groups.update(_tls_named_curves)


# Below lies ghost code since the shift from 'ecdsa' to 'cryptography' lib.
# Part of the code has been kept, but commented out, in case anyone would like
# to improve ECC support in 'cryptography' (namely for the compressed point
# format and additional curves).
# 
# Recommended curve parameters from www.secg.org/SEC2-Ver-1.0.pdf
# and www.ecc-brainpool.org/download/Domain-parameters.pdf
#
#
#import math
#
#from scapy.utils import long_converter, binrepr
#from scapy.layers.tls.crypto.pkcs1 import pkcs_i2osp, pkcs_os2ip
#
#
#def encode_point(point, point_format=0):
#    """
#    Return a string representation of the Point p, according to point_format.
#    """
#    pLen = len(binrepr(point.curve().p()))
#    x = pkcs_i2osp(point.x(), math.ceil(pLen/8))
#    y = pkcs_i2osp(point.y(), math.ceil(pLen/8))
#    if point_format == 0:
#        frmt = b'\x04'
#    elif point_format == 1:
#        frmt = chr(2 + y%2)
#        y = ''
#    else:
#        raise Exception("No support for point_format %d" % point_format)
#    return frmt + x + y
#
#
#try:
#    import ecdsa
#    ecdsa_support = True
#except ImportError:
#    import logging
#    log_loading = logging.getLogger("scapy.loading")
#    log_loading.info("Can't import python ecdsa lib. No curves.")
#
#
#if ecdsa_support:
#
#    from ecdsa.ellipticcurve import CurveFp, Point
#    from ecdsa.curves import Curve
#    from ecdsa.numbertheory import square_root_mod_prime
#
#
#    def extract_coordinates(g, curve):
#        """
#        Return the coordinates x and y as integers,
#        regardless of the point format of string g.
#        Second expected parameter is a CurveFp.
#        """
#        p = curve.p()
#        point_format = g[0]
#        point = g[1:]
#        if point_format == b'\x04':
#            point_len = len(point)
#            if point_len % 2 != 0:
#                raise Exception("Point length is not even.")
#            x_bytes = point[:point_len>>1]
#            x = pkcs_os2ip(x_bytes) % p
#            y_bytes = point[point_len>>1:]
#            y = pkcs_os2ip(y_bytes) % p
#        elif point_format in [b'\x02', b'\x03']:
#            x_bytes = point
#            x = pkcs_os2ip(x_bytes) % p
#            # perform the y coordinate computation with self.tls_ec
#            y_square = (x*x*x + curve.a()*x + curve.b()) % p
#            y = square_root_mod_prime(y_square, p)
#            y_parity = ord(point_format) % 2    # \x02 means even, \x03 means odd
#            if y % 2 != y_parity:
#                y = -y % p
#        else:
#            raise Exception("Point starts with %s. This encoding "
#                            "is not recognized." % repr(point_format))
#        if not curve.contains_point(x, y):
#            raise Exception("The point we extracted does not belong on the curve!")
#        return x, y
#
#    def import_curve(p, a, b, g, r, name="dummyName", oid=(1, 3, 132, 0, 0xff)):
#        """
#        Create an ecdsa.curves.Curve from the usual parameters.
#        Arguments may be either octet strings or integers,
#        except g which we expect to be an octet string.
#        """
#        if isinstance(p, str):
#            p = pkcs_os2ip(p)
#        if isinstance(a, str):
#            a = pkcs_os2ip(a)
#        if isinstance(b, str):
#            b = pkcs_os2ip(b)
#        if isinstance(r, str):
#            r = pkcs_os2ip(r)
#        curve = CurveFp(p, a, b)
#        x, y = extract_coordinates(g, curve)
#        generator = Point(curve, x, y, r)
#        return Curve(name, curve, generator, oid)


    ### Named curves

    # We always provide _a as a positive integer.

#    _p          = long_converter("""
#                  ffffffff ffffffff ffffffff fffffffe ffffac73""")
#    _a          = 0
#    _b          = 7
#    _Gx         = long_converter("""
#                  3b4c382c e37aa192 a4019e76 3036f4f5 dd4d7ebb""")
#    _Gy         = long_converter("""
#                  938cf935 318fdced 6bc28286 531733c3 f03c4fee""")
#    _r          = long_converter("""01
#                  00000000 00000000 0001b8fa 16dfab9a ca16b6b3""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    SECP160k1   = Curve("SECP160k1", curve, generator,
#                        (1, 3, 132, 0, 9), "secp160k1")

#    _p          = long_converter("""
#                  ffffffff ffffffff ffffffff ffffffff 7fffffff""")
#    _a          = -3 % _p
#    _b          = long_converter("""
#                  1c97befc 54bd7a8b 65acf89f 81d4d4ad c565fa45""")
#    _Gx         = long_converter("""
#                  4a96b568 8ef57328 46646989 68c38bb9 13cbfc82""")
#    _Gy         = long_converter("""
#                  23a62855 3168947d 59dcc912 04235137 7ac5fb32""")
#    _r          = long_converter("""01
#                  00000000 00000000 0001f4c8 f927aed3 ca752257""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    SECP160r1   = Curve("SECP160r1", curve, generator,
#                        (1, 3, 132, 0, 8), "secp160r1")

#    _p          = long_converter("""
#                  ffffffff ffffffff ffffffff fffffffe ffffac73""")
#    _a          = -3 % _p
#    _b          = long_converter("""
#                  b4e134d3 fb59eb8b ab572749 04664d5a f50388ba""")
#    _Gx         = long_converter("""
#                  52dcb034 293a117e 1f4ff11b 30f7199d 3144ce6d""")
#    _Gy         = long_converter("""
#                  feaffef2 e331f296 e071fa0d f9982cfe a7d43f2e""")
#    _r          = long_converter("""01
#                  00000000 00000000 0000351e e786a818 f3a1a16b""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    SECP160r2   = Curve("SECP160r2", curve, generator,
#                        (1, 3, 132, 0, 30), "secp160r2")

#    _p          = long_converter("""
#                  ffffffff ffffffff ffffffff ffffffff fffffffe ffffee37""")
#    _a          = 0
#    _b          = 3
#    _Gx         = long_converter("""
#                  db4ff10e c057e9ae 26b07d02 80b7f434 1da5d1b1 eae06c7d""")
#    _Gy         = long_converter("""
#                  9b2f2f6d 9c5628a7 844163d0 15be8634 4082aa88 d95e2f9d""")
#    _r          = long_converter("""
#                  ffffffff ffffffff fffffffe 26f2fc17 0f69466a 74defd8d""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    SECP192k1   = Curve("SECP192k1", curve, generator,
#                        (1, 3, 132, 0, 31), "secp192k1")

#    _p          = long_converter("""
#                  ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe
#                  ffffe56d""")
#    _a          = 0
#    _b          = 5
#    _Gx         = long_converter("""
#                  a1455b33 4df099df 30fc28a1 69a467e9 e47075a9 0f7e650e
#                  b6b7a45c""")
#    _Gy         = long_converter("""
#                  7e089fed 7fba3442 82cafbd6 f7e319f7 c0b0bd59 e2ca4bdb
#                  556d61a5""")
#    _r          = long_converter("""01
#                  00000000 00000000 00000000 0001dce8 d2ec6184 caf0a971
#                  769fb1f7""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    SECP224k1   = Curve("SECP224k1", curve, generator,
#                        (1, 3, 132, 0, 32), "secp224k1")

#    _p          = long_converter("""
#                  A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028
#                  2013481D 1F6E5377""")
#    _a          = long_converter("""
#                  7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C
#                  E94A4B44 F330B5D9""")
#    _b          = long_converter("""
#                  26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE
#                  6BCCDC18 FF8C07B6""")
#    _Gx         = long_converter("""
#                  8BD2AEB9 CB7E57CB 2C4B482F FC81B7AF B9DE27E1 E3BD23C2
#                  3A4453BD 9ACE3262""")
#    _Gy         = long_converter("""
#                  547EF835 C3DAC4FD 97F8461A 14611DC9 C2774513 2DED8E54
#                  5C1D54C7 2F046997""")
#    _r          = long_converter("""
#                  A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7
#                  901E0E82 974856A7""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    BRNP256r1   = Curve("BRNP256r1", curve, generator,
#                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 7), "brainpoolP256r1")

#    _p          = long_converter("""
#                  8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4
#                  12B1DA19 7FB71123 ACD3A729 901D1A71 87470013 3107EC53""")
#    _a          = long_converter("""
#                  7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787
#                  139165EF BA91F90F 8AA5814A 503AD4EB 04A8C7DD 22CE2826""")
#    _b          = long_converter("""
#                  04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6
#                  2E880EA5 3EEB62D5 7CB43902 95DBC994 3AB78696 FA504C11""")
#    _Gx         = long_converter("""
#                  1D1C64F0 68CF45FF A2A63A81 B7C13F6B 8847A3E7 7EF14FE3
#                  DB7FCAFE 0CBD10E8 E826E034 36D646AA EF87B2E2 47D4AF1E""")
#    _Gy         = long_converter("""
#                  8ABE1D75 20F9C2A4 5CB1EB8E 95CFD552 62B70B29 FEEC5864
#                  E19C054F F9912928 0E464621 77918111 42820341 263C5315""")
#    _r          = long_converter("""
#                  8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3
#                  1F166E6C AC0425A7 CF3AB6AF 6B7FC310 3B883202 E9046565""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    BRNP384r1   = Curve("BRNP384r1", curve, generator,
#                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 11), "brainpoolP384r1")

#    _p          = long_converter("""
#                  AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E
#                  D6639CCA 70330871 7D4D9B00 9BC66842 AECDA12A E6A380E6
#                  2881FF2F 2D82C685 28AA6056 583A48F3""")
#    _a          = long_converter("""
#                  7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610
#                  A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5
#                  7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA""")
#    _b          = long_converter("""
#                  3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9
#                  8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA DC083E67
#                  984050B7 5EBAE5DD 2809BD63 8016F723""")
#    _Gx         = long_converter("""
#                  81AEE4BD D82ED964 5A21322E 9C4C6A93 85ED9F70 B5D916C1
#                  B43B62EE F4D0098E FF3B1F78 E2D0D48D 50D1687B 93B97D5F
#                  7C6D5047 406A5E68 8B352209 BCB9F822""")
#    _Gy         = long_converter("""
#                  7DDE385D 566332EC C0EABFA9 CF7822FD F209F700 24A57B1A
#                  A000C55B 881F8111 B2DCDE49 4A5F485E 5BCA4BD8 8A2763AE
#                  D1CA2B2F A8F05406 78CD1E0F 3AD80892""")
#    _r          = long_converter("""
#                  AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E
#                  D6639CCA 70330870 553E5C41 4CA92619 41866119 7FAC1047
#                  1DB1D381 085DDADD B5879682 9CA90069""")
#    curve       = CurveFp(_p, _a, _b)
#    generator   = Point(curve, _Gx, _Gy, _r)
#    BRNP512r1   = Curve("BRNP512r1", curve, generator,
#                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 13), "brainpoolP512r1")

