import os
from .pure25519 import ed25519_oop as ed25519

class Ed25519PrivateKey:
    def __init__(self, seed):
        self.seed = seed
        self.sk = ed25519.SigningKey(self.seed)
        #self.vk = self.sk.get_verifying_key()

    @classmethod
    def generate(cls):
        return cls.from_private_bytes(os.urandom(32))

    @classmethod
    def from_private_bytes(cls, data):
        return cls(seed=data)

    def private_bytes(self):
        return self.seed

    def public_key(self):
        return Ed25519PublicKey.from_public_bytes(self.sk.vk_s)

    def sign(self, message):
        return self.sk.sign(message)


class Ed25519PublicKey:
    def __init__(self, seed):
        self.seed = seed
        self.vk = ed25519.VerifyingKey(self.seed)

    @classmethod
    def from_public_bytes(cls, data):
        return cls(data)

    def public_bytes(self):
        return self.vk.to_bytes()

    def verify(self, signature, message):
        self.vk.verify(signature, message)