module libnetconf2-netconf-server {
  yang-version 1.1;
  namespace "urn:cesnet:libnetconf2-netconf-server";
  prefix np2;

  import ietf-netconf-server {
    prefix ncs;
  }

  import ietf-crypto-types {
    prefix ct;
  }

  import iana-ssh-public-key-algs {
    prefix sshpka;
  }

  import iana-ssh-key-exchange-algs {
    prefix sshkea;
  }

  import iana-ssh-encryption-algs {
    prefix sshea;
  }

  import iana-ssh-mac-algs {
    prefix sshma;
  }

  import ietf-tls-server {
    prefix tlss;
  }

  revision "2023-09-07" {
    description "Initial revision.";
  }

  /*
  identity ed25519-private-key-format {
    base ct:private-key-format;
    description
      "This identity would indicate that the
       private key is encoded in a ED25519PrivateKey
       format. However no such format is currently
       standardized or even exists.

       If you wish to use a private key that uses
       an ED25519 algorithm, you need to pick either
       the private-key-info-format or
       openssh-private-key-format identity.";
  }
*/

  identity private-key-info-format {
    base ct:private-key-format;
    description
      "Indicates that the private key is encoded
       as a PrivateKeyInfo structure (from RFC 5208).

       The expected header of the private key:
       -----BEGIN PRIVATE KEY-----
       The expected footer of the private key:
       -----END PRIVATE KEY-----

       Supported private key algorithms to use with
       this format are: RSA, EC and ED25519.

       Commonly used public key format for this
       type of private key is represented by the
       SubjectPublicKeyInfo identity.";

    reference
      "RFC 5208: PKCS #8: Private-Key Information
                 Syntax Specification Version 1.2";
  }

  identity openssh-private-key-format {
    base ct:private-key-format;
    description
      "Indicates that the private key is encoded
       in the OpenSSH format.

       The expected header of the private key:
       -----BEGIN OPENSSH PRIVATE KEY-----
       The expected footer of the private key:
       -----END OPENSSH PRIVATE KEY-----

       Supported private key algorithms to use with
       this format are: RSA, EC and ED25519.

       Commonly used public key format for this
       type of private key is either the
       SSH2 public key format (from RFC 4716)
       or the Public key format defined in RFC 4253,
       Section 6.6.";

    reference
      "The OpenSSH Private Key Format:
        https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key

       RFC 4716:
        The Secure Shell (SSH) Public Key File Format

       RFC 4253:
        The Secure Shell (SSH) Transport Layer Protocol";
  }

  identity openssh-ssh-ed25519-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "SSH-ED25519-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity openssh-ecdsa-sha2-nistp521-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "ECDSA-SHA2-NISTP521-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity openssh-ecdsa-sha2-nistp384-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "ECDSA-SHA2-NISTP384-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity openssh-ecdsa-sha2-nistp256-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "ECDSA-SHA2-NISTP256-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity openssh-rsa-sha2-512-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "RSA-SHA2-512-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity openssh-rsa-sha2-256-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "RSA-SHA2-256-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity openssh-ssh-rsa-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "SSH-RSA-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity openssh-ssh-dss-cert-v01 {
    base sshpka:public-key-alg-base;
    description
      "SSH-DSS-CERT-V01@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.certkeys:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD";
  }

  identity libssh-curve25519-sha256 {
    base sshkea:key-exchange-alg-base;
    description
      "CURVE25519-SHA256@LIBSSH.ORG";
    reference
      "curve25519-sha256@libssh.org specification:
        https://git.libssh.org/projects/libssh.git/tree/doc/curve25519-sha256@libssh.org.txt";
  }

  identity openssh-chacha20-poly1305 {
    base sshea:encryption-alg-base;
    description
      "CHACHA20-POLY1305@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL.chacha20poly1305:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.chacha20poly1305?annotate=HEAD";
  }

  identity openssh-aes256-gcm {
    base sshea:encryption-alg-base;
    description
      "AES256-GCM@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL, Section 1.6:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL?annotate=HEAD";
  }

  identity openssh-aes128-gcm {
    base sshea:encryption-alg-base;
    description
      "AES128-GCM@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL, Section 1.6:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL?annotate=HEAD";
  }

  identity openssh-hmac-sha2-256-etm {
    base sshma:mac-alg-base;
    description
      "HMAC-SHA2-256-ETM@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL?annotate=HEAD";
  }

  identity openssh-hmac-sha2-512-etm {
    base sshma:mac-alg-base;
    description
      "HMAC-SHA2-512-ETM@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL?annotate=HEAD";
  }

  identity openssh-hmac-sha1-etm {
    base sshma:mac-alg-base;
    description
      "HMAC-SHA1-ETM@OPENSSH.COM";
    reference
      "OpenSSH PROTOCOL:
        https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL?annotate=HEAD";
  }

  augment "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:transport/ncs:ssh/ncs:ssh/ncs:ssh-server-parameters/ncs:client-authentication" {
    leaf auth-attempts {
      type uint16;
      default 3;
      description
        "Represents the number of failed attempts before an authentication is deemed unsuccessful.";
    }

    leaf auth-timeout {
      type uint16;
      default 10;
      units "seconds";
      description
        "Represents the maximum amount of seconds an authentication can go on for.";
    }
  }

  // CH auth-attempts and auth-timeout
  augment "/ncs:netconf-server/ncs:call-home/ncs:netconf-client/ncs:endpoints/ncs:endpoint/ncs:transport/
          ncs:ssh/ncs:ssh/ncs:ssh-server-parameters/ncs:client-authentication" {
    leaf auth-attempts {
      type uint16;
      default 3;
      description
        "Represents the number of failed attempts before an authentication is deemed unsuccessful.";
    }

    leaf auth-timeout {
      type uint16;
      default 10;
      units "seconds";
      description
        "Represents the maximum amount of seconds an authentication can go on for.";
    }
  }

  augment "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:transport/ncs:ssh/
          ncs:ssh/ncs:ssh-server-parameters/ncs:client-authentication/ncs:users/ncs:user" {
    container keyboard-interactive {
      presence "";
      leaf pam-config-file-name {
        type string;
        mandatory true;
      }
      leaf pam-config-file-dir {
        type string;
      }
      description
        "Keyboard interactive SSH authentication method.";
    }
  }

  // CH KB int
  augment "/ncs:netconf-server/ncs:call-home/ncs:netconf-client/ncs:endpoints/ncs:endpoint/ncs:transport/
          ncs:ssh/ncs:ssh/ncs:ssh-server-parameters/ncs:client-authentication/ncs:users/ncs:user" {
    container keyboard-interactive {
      presence "";
      leaf pam-config-file-name {
        type string;
        mandatory true;
      }
      leaf pam-config-file-dir {
        type string;
      }
      description
        "Keyboard interactive SSH authentication method.";
    }
  }

  augment "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:transport" {
    description
      "Defines a new transport called UNIX socket.";
    case unix-socket {
      container unix-socket {
        leaf path {
          type string;
          mandatory true;
        }
        leaf mode {
          type string {
            pattern '[0124567]{3}';
          }
        }
        leaf uid {
          type uint16;
        }
        leaf gid {
          type uint16;
        }
      }
    }
  }

  augment "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:transport/ncs:ssh/ncs:ssh/ncs:ssh-server-parameters/ncs:client-authentication" {
    description
      "Reference to another SSH endpoint's client-authentication container.
       All the users set in the referencing endpoint will be tried first and if and only if
       there is no match, the referenced endpoint's users will be tried. The references can be
       multiple, however there must not be a cycle.";

    leaf endpoint-client-auth {
      type leafref {
        path "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:name";
      }

      must "deref(.)/../*[local-name() = 'ssh']";
    }
  }

  augment "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:transport/ncs:tls/ncs:tls/ncs:tls-server-parameters/ncs:client-authentication" {
    description
      "Reference to another TLS endpoint's client-authentication container.
       All the users set in the referencing endpoint will be tried first and if and only if
       there is no match, the referenced endpoint's users will be tried. The references can be
       multiple, however there must not be a cycle.";

    leaf endpoint-client-auth {
      type leafref {
        path "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:name";
      }

      must "deref(.)/../*[local-name() = 'tls']";
    }
  }

  augment "/ncs:netconf-server/ncs:listen/ncs:endpoint/ncs:transport/ncs:tls/ncs:tls/ncs:tls-server-parameters/ncs:client-authentication" {
    description
      "Indicates that the TLS server is using a Certificate Revocation List
       to authenticate clients or to deny access for certain certificates.
       The given Certificate Revocation List must be PEM or DER encoded.";

    reference
      "RFC 5280:
         Internet X.509 Public Key Infrastructure Certificate
         and Certificate Revocation List (CRL) Profile";

    choice certificate-revocation-list {
      leaf crl-url {
        type string;
        description
          "An URL from which the Certificate Revocation List will be
           downloaded and used. The HTTP protocol works, but other
           protocols, such as FTP, may work as well.";
      }

      leaf crl-path {
        type string;
        description
          "A path to a Certificate Revocation List file.";
      }

      leaf crl-cert-ext {
        type empty;
        description
          "Indicates that the Certificate Revocation List
           Distribution Points extension will be used to fetch
           Certificate Revocation Lists from. This will be done
           for all the configured Certificate Authority certificates.";

        reference
          "RFC 5280:
             Internet X.509 Public Key Infrastructure Certificate
             and Certificate Revocation List (CRL) Profile, Section 4.2.1.13";
      }
    }
  }

  // CH CRL
  augment "/ncs:netconf-server/ncs:call-home/ncs:netconf-client/ncs:endpoints/ncs:endpoint/ncs:transport/
          ncs:tls/ncs:tls/ncs:tls-server-parameters/ncs:client-authentication" {
    description
      "Indicates that the Call Home TLS server is using a Certificate Revocation List
       to authenticate clients or to deny access for certain certificates.
       The given Certificate Revocation List must be PEM or DER encoded.";

    reference
      "RFC 5280:
         Internet X.509 Public Key Infrastructure Certificate
         and Certificate Revocation List (CRL) Profile";

    choice certificate-revocation-list {
      leaf crl-url {
        type string;
        description
          "An URL from which the Certificate Revocation List will be
           downloaded and used. The HTTP protocol works, but other
           protocols, such as FTP, may work as well.";
      }

      leaf crl-path {
        type string;
        description
          "A path to a Certificate Revocation List file.";
      }

      leaf crl-cert-ext {
        type empty;
        description
          "Indicates that the Certificate Revocation List
           Distribution Points extension will be used to fetch
           Certificate Revocation Lists from. This will be done
           for all the configured Certificate Authority certificates.";

        reference
          "RFC 5280:
             Internet X.509 Public Key Infrastructure Certificate
             and Certificate Revocation List (CRL) Profile, Section 4.2.1.13";
      }
    }
  }
}
