Skip to content

diffie_hellman

DiffieHellman

Bases: object

key_pair(num_bits=1024, pair_name=None) staticmethod

Generate a primitive root for a big prime number is really slow! Notice the fact that: 1. we don't need the generator to be a primitive element of the group but the one generates a large prime order. 2. There is no security issue with Diffie-Hellman if you reuse previously generated 𝑝 and 𝑔.

We simply use key pairs from RFC 5114 and RFC 2409 @:param pair_name: one of "additional_group_1024_160", "additional_group_2048_224", "additional_group_2048_256", "oakley_group_768_768", "oakley_group_1024_1024" use additional_group_1024_160 as default @:param num_bits: specify size of p @:return p, g, where p is a prime number, g is a generator

Source code in iflearner/communication/peer/diffie_hellman.py
@staticmethod
def key_pair(num_bits=1024, pair_name=None):
    """
    Generate a primitive root for a big prime number is really slow!
    Notice the fact that:
    1. we don't need the generator to be a primitive element of the group
    but the one generates a large prime order.
    2. There is no security issue with Diffie-Hellman if you reuse previously generated 𝑝 and 𝑔.

    We simply use key pairs from RFC 5114 and RFC 2409
    @:param pair_name: one of "additional_group_1024_160", "additional_group_2048_224",
    "additional_group_2048_256", "oakley_group_768_768", "oakley_group_1024_1024"
    use additional_group_1024_160 as default
    @:param num_bits: specify size of p
    @:return p, g, where p is a prime number, g is a generator
    """
    if pair_name is None:
        if num_bits:
            return DiffieHellman._key_pair(num_bits)
        else:
            return DiffieHellman._additional_group_1024_160()

    assert pair_name in {
        "additional_group_1024_160",
        "additional_group_2048_224",
        "additional_group_2048_256",
        "oakley_group_768_768",
        "oakley_group_1024_1024",
    }, "unsupported pair name: {0}".format(pair_name)

    if pair_name == "additional_group_1024_160":
        return DiffieHellman._additional_group_1024_160()
    if pair_name == "additional_group_2048_224":
        return DiffieHellman._additional_group_2048_224()
    if pair_name == "additional_group_2048_256":
        return DiffieHellman._additional_group_2048_256()
    if pair_name == "oakley_group_768_768":
        return DiffieHellman._oakley_group_768_768()
    if pair_name == "oakley_group_1024_1024":
        return DiffieHellman._oakley_group_1024_1024()