module arch.node.engines.encryption_config;

import prelude open;
import arch.node.engines.encryption_messages open;
import arch.node.types.engine open;
import arch.node.types.messages open;
import arch.node.types.identities open;
import arch.system.identity.identity open hiding {ExternalIdentity};

type EncryptionCfg :=
  mk@{
    encryptor
      : Set ReadsForEvidence
        -> ExternalIdentity
        -> Encryptor ByteString Backend Plaintext Ciphertext;
    backend : Backend;
    readsForEngineAddress : EngineID;
  };

module encryption_config_example;
  
  encryptionCfg : EngineCfg EncryptionCfg :=
    EngineCfg.mk@{
      node := PublicKey.Curve25519PubKey "0xabcd1234";
      name := "encryption";
      cfg :=
        EncryptionCfg.mk@{
          encryptor :=
            \{_ _ :=
              Encryptor.mkEncryptor@{
                encrypt := \{_ x := x};
                encryptorHash :=
                  HASH.mkHASH@{
                    ordKey :=
                      OrdKey.mkOrdKey@{
                        compare := Ord.compare;
                      };
                    hash := \{x := "0x1234abcd"};
                  };
              }};
          backend := Backend.LocalMemory;
          readsForEngineAddress := mkPair none "Blah";
        };
    };
end;