Exemplo n.º 1
0
    def __init__(self, seed=None, sk=None, vk=None, did=None):
        if (sk is None and vk) or (sk and vk is None):
            raise ValueError('Both private and public keys required')

        if did and sk is None and vk is None:
            raise ValueError('Keys required with did')

        if sk and len(sk) != DidBox.crypto_didbox_SKBYTES or vk and len(
                vk) != DidBox.crypto_didbox_VKBYTES:
            raise ValueError('Invalid key')

        if sk is None and vk is None and seed is None:
            seed = libnacl.randombytes(libnacl.crypto_sign_SEEDBYTES)

            vk, sk = libnacl.crypto_sign_seed_keypair(seed)

            did = didering.didGen(vk)

        if seed and sk is None and vk is None:
            vk, sk = libnacl.crypto_sign_seed_keypair(seed)

            did = didering.didGen(vk)

        if sk and vk and did is None:
            did = didering.didGen(vk)

        self.seed = seed
        self.sk = sk
        self.vk = vk
        self.did = did
Exemplo n.º 2
0
def testDidGenWithMethod():
    vk = b'\xfdv\xae\xeb\xe7\x08Q\xaf\xedY\xcf\x8b"\xfc\xa6\xeb\x1c@\x89}\xdb\xed\x16\xa5\xb6\x88\x18\xc8\x1a%O\x83'
    method = "dad"
    did = didering.didGen(vk, method)

    assert did == "did:dad:_Xau6-cIUa_tWc-LIvym6xxAiX3b7RaltogYyBolT4M="

    method = "igo"
    did = didering.didGen(vk, method)

    assert did == "did:igo:_Xau6-cIUa_tWc-LIvym6xxAiX3b7RaltogYyBolT4M="
Exemplo n.º 3
0
def testDidGen():
    seed = libnacl.randombytes(libnacl.crypto_sign_SEEDBYTES)
    vk, sk = libnacl.crypto_sign_seed_keypair(seed)

    did = didering.didGen(vk)

    assert did == "did:dad:{}".format(gen.keyToKey64u(vk))
Exemplo n.º 4
0
    def open(self, path):
        """
        Safely read keys with perms of 0600
        """
        if not os.path.exists(path):
            raise FileNotFoundError("File does not exist")
        else:
            if (os.stat(path).st_mode & 0o777) != 0o600:
                raise PermissionError("Insecure key file permissions!")

            data = help.parseKeyFile(path)

            self.sk = data['priv']
            self.vk = data['verify']
            self.seed = data['seed']
            self.did = didering.didGen(self.vk)
Exemplo n.º 5
0
def keyGen(seed=None):
    """
    keyGen generates a url-file safe base64 public private key pair.
    If a seed is not provided libnacl's randombytes() function will
    be used to generate a seed.

    :param seed: The seed value used during key generation.
    :return: url-file safe base64 verifier/public key, signing/private key
    """
    if seed is None:
        seed = libnacl.randombytes(libnacl.crypto_sign_SEEDBYTES)

    vk, sk = libnacl.crypto_sign_seed_keypair(seed)

    did = didering.didGen(vk)

    return keyToKey64u(vk), keyToKey64u(sk), did
Exemplo n.º 6
0
def testDidGenWithNone():
    vk = None

    assert didering.didGen(vk) is None