/******************************************************************************
* Copyright (c) 2000-2019  Ericsson AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
*   Gabor Szalai - initial implementation and initial documentation
******************************************************************************/
//
//  File:               TS29503_Nudm_UEAU.ttcn
//  Description:	      Type definitions for 3GPP TS29503
/////////////////////////////////////////////// 
module TS29503_Nudm_UEAU {

  import from TS29571_CommonData all

  external function f_enc_AuthenticationInfoRequest(in AuthenticationInfoRequest pdu) return octetstring 
  with { extension "prototype(convert) encode(JSON)" }

  external function f_dec_AuthenticationInfoRequest(in octetstring stream, out AuthenticationInfoRequest pdu) return integer 
  with { extension "prototype(backtrack) decode(JSON)" }

  external function f_enc_AuthenticationInfoResult(in AuthenticationInfoResult pdu) return octetstring 
  with { extension "prototype(convert) encode(JSON)" }

  external function f_dec_AuthenticationInfoResult(in octetstring stream, out AuthenticationInfoResult pdu) return integer 
  with { extension "prototype(backtrack) decode(JSON)" }

  external function f_enc_AuthEvent(in AuthEvent pdu) return octetstring 
  with { extension "prototype(convert) encode(JSON)" }

  external function f_dec_AuthEvent(in octetstring stream, out AuthEvent pdu) return integer 
  with { extension "prototype(backtrack) decode(JSON)" }


  type set AuthenticationInfoRequest {
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional,
    ServingNetworkName    servingNetworkName,
    ResynchronizationInfo    resynchronizationInfo optional,
    TS29571_CommonData.NfInstanceId    ausfInstanceId
  }

  type set AuthenticationInfoResult {
    AuthType    authType,
    TS29571_CommonData.SupportedFeatures    supportedFeatures optional,
    AuthenticationVector    authenticationVector optional,
    TS29571_CommonData.Supi    supi optional
  }

  type union AuthenticationVector {
    AvEapAkaPrime    avEapAkaPrime,
    Av5GHeAka        av5GHeAka
  } with {
    variant "JSON: as value"
  }


  type set AvEapAkaPrime {
    AvType    avType,
    Rand    rand,
    Xres    xres,
    Autn    autn,
    CkPrime    ckPrime,
    IkPrime    ikPrime
  }

  type set Av5GHeAka {
    AvType    avType,
    Rand    rand,
    XresStar    xresStar,
    Autn    autn,
    Kausf    kausf
  }

  type set ResynchronizationInfo {
    Rand    rand,
    Auts    auts
  }

  type set AuthEvent {
    TS29571_CommonData.NfInstanceId    nfInstanceId,
    Success    success,
    TS29571_CommonData.DateTime    timeStamp,
    AuthType    authType
  }

  type charstring Autn // (pattern "^[A-Fa-f0-9]{32}$")

  type charstring Auts // (pattern "^[A-Fa-f0-9]{28}$")

  type charstring CkPrime // (pattern "^[A-Fa-f0-9]{32}$")

  type charstring IkPrime // (pattern "^[A-Fa-f0-9]{32}$")

  type charstring Kausf // (pattern "^[A-Fa-f0-9]{64}$")

  type charstring Rand // (pattern "^[A-Fa-f0-9]{32}$")

  type charstring Xres // (pattern "^[A-Fa-f0-9]{8,32}$")

  type charstring XresStar // (pattern "^[A-Fa-f0-9]{32}$")

  type charstring SupiOrSuci // (pattern "^(imsi-[0-9]{5,15}|nai-.+| suci-(0-[0-9]{3}-[0-9]{2,3}|[1-7]-.+)-[0-9]{1,4}-(0-0-.+|[a-fA-F1-9]-([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])-[a-fA-F0-9]+)|.+)$")

  type charstring ServingNetworkName // (pattern "^5G:mnc[0-9]{3}[.]mcc[0-9]{3}[.]3gppnetwork[.]org$")

  type boolean Success

  type enumerated AuthType_enum { FIVEG_AKA, EAP_AKA_PRIME, EAP_TLS}
    with {
      variant "text 'FIVEG_AKA' as '5G_AKA' "
    }

  type union AuthType {
    AuthType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated AvType_enum { FIVEG_HE_AKA, EAP_AKA_PRIME}
    with {
      variant "text 'FIVEG_HE_AKA' as '5G_HE_AKA' "
    }

  type union AvType {
    AvType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }






} with {
  encode "JSON"
}
