// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.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 "2021-05-10" {
    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;
        }
  }

  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 imsi-range-from {
        type uint64;
        description "Starting IMSI in range to apply this security profile to";
      }

      leaf imsi-range-to {
        type uint64;
        description "Ending IMSI in range to apply this security profile to";
      }

      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";
      }      
    }
  } 
}
