@startuml

title Asymmetric classes' Diagram

abstract class AsymmetricKey 

abstract class AsymmetricPrivateKey implements AsymmetricKey {
  + final AsymmetricKey publicKey;
}

class Signature extends ByteList {
  + Signature(List<int> bytes) : super(bytes, bytesLength);
  + static const bytesLength = TweetNaCl.signatureLength;
}

class PublicKey extends ByteList implements AsymmetricKey {
  + static const int keyLength = TweetNaCl.publicKeyLength;
}

class PrivateKey extends ByteList implements AsymmetricPrivateKey {

  + factory PrivateKey.generate();

  + static const seedSize = TweetNaCl.seedSize;
  + static const keyLength = TweetNaCl.secretKeyLength;
  + final PublicKey publicKey;
}

@enduml