// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

module security-profile {
  namespace "http://opennetworking.org/aether/security-profile";
  prefix sec;

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description "To generate JSON from this use command
    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
    Copied from YangUIComponents project";

  revision "2020-11-30" {
    description "An Aether Security Profile. Contains keys and other security items associated with devices. Configured by the operator.";
    reference "RFC 6087";
  }

  typedef security-profile-id {
        type string {
            length 1..32;
        }
    description "The typedef for security-profile-id";
  }

  container security-profile {
    description "The top level container";

    list security-profile {
      key "id";
      description
        "List of security profiles";

      leaf id {
        type security-profile-id;
        description "ID for this security profile.";
      }

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      leaf key {
        type string {
          length 1..32;
        }
        description "Secret key for USIM";
      }

      leaf opc {
        type string {
          length 1..32;
        }
        description "Secret key for Operator";
      }

      leaf sqn {
        type uint32;
        description "sequence number";
      }

      leaf description {
        type string {
          length 1..100;
        }
        description "description of this security profile";
      }
    }
  }
}
