// Copyright (c) 2011 DMTF.  All rights reserved.
   [Version ( "2.29.0" ), 
    ClassConstraint { 
       "/* The constraints below aim to efficiently */  /* represent a singular OctetString. Each of the properties*/  /* is a single encoded string, thus only the first element */  /* needs to be populated. */ inv:self.ImportPublicPrivateKeyPair.PublicKey->size()=1 and self.ImportPublicPrivateKeyPair.PrivateKey->size()=1" }, 
    UMLPackagePath ( "CIM::User::SecurityServices" ), 
    Description ( 
       "CIM_KeyBasedCredentialManagementService manages key based "
       "credentials such as symmetric and assymetric key pairs and "
       "certificates. It also manages the infrustracture necessary for "
       "the key based credentials such as key repositories." )]
class CIM_KeyBasedCredentialManagementService : CIM_CredentialManagementService {


      [Description ( 
          "This method is called to request an import of "
          "public/private key pair. The method is used when "
          "assymetric private/public keys are generated elsewhere "
          "but are required by the managed system for creation of "
          "Certificate Signing Requests (CSRs) or self-signed "
          "certificates or any other key based credentials. Upon "
          "the successful execution, the PPKPCredential shall be "
          "the reference to the CIM_UnsignedCredential instance "
          "representing the private/public key pair. The "
          "CIM_UnsignedCredential instance shall be associated "
          "through CIM_MemberOfCollection association with the "
          "instance of CIM_Keystore referenced by the Keystore "
          "parameter, and shall be associated through the "
          "CIM_AffectsElement association with the method "
          "invocation instance of "
          "CIM_KeyBasedCredentialManagementService." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097..32767", "32768..65535" }, 
       Values { "Completed with No Error", "Not Supported", 
          "Error Occured", "Busy", "Invalid Reference", 
          "Invalid Parameter", "Access Denied", "DMTF Reserved", 
          "Job Started", "Method Reserved", "Vendor Specified" }]
   uint32 ImportPublicPrivateKeyPair(
         [Required, IN, Description ( 
             "The DER-encoded raw public key.Only the first "
             "element of the array property shall be populated." ), 
          OctetString]
      string PublicKey[], 
         [Required, IN, Description ( 
             "The DER-encoded raw private key.Only the first "
             "element of the array property shall be populated." ), 
          OctetString]
      string PrivateKey[], 
         [Required, IN, Description ( 
             "The reference to the CIM_Keystore instance "
             "representing the key store, which the "
             "public/private key pair is imported in to." )]
      CIM_Keystore REF Keystore, 
         [IN, Description ( 
             "The managed element that represents the user or "
             "owner or the scoping element of the certificate. "
             "Such managed element could be the web service that "
             "owns the certificate or uses it for verification "
             "or account that the certificate is scoped to." )]
      CIM_ManagedElement REF CredentialContext, 
         [IN, Description ( 
             "The usage of the certificate by the managed "
             "element that the certificate is for or is scoped "
             "to." ), 
          ValueMap { "2", "3", "4", "6", "7", "8", "..", 
             "32768..65535" }, 
          Values { "Owned", "Trusted", 
             "Trusted for Authentication", 
             "Trusted for Authorization", 
             "Trusted for Authentication/Authorization", 
             "Trusted for Third-Party Authentication/Authorization", 
             "DMTF Reserved", "Vendor Reserved" }, 
          ModelCorrespondence { "CIM_CredentialContext.Usage" }]
      uint16 Usage, 
         [IN ( false ), OUT, Description ( 
             "Contains a reference to the ConcreteJob created to "
             "track the execution initiated by the method "
             "invocation. If method returns 4096 - Job Started, "
             "then this parameter shall not be NULL." )]
      CIM_ConcreteJob REF Job, 
         [Required, IN ( false ), OUT, Description ( 
             "The PPKPCredential output parameter references the "
             "instance of CIM_UnsignedCredential that represents "
             "the public/private key pair." )]
      CIM_UnsignedCredential REF PPKPCredential);

      [Description ( 
          "This method is called to request a creation of a "
          "keystore repository to be used for storage of the key "
          "based credentials. Upon the successful execution, the "
          "NewKeystore parameter shall reference to the newly "
          "created instance of CIM_Keystore. The property values of "
          "the newly created instance of the CIM_Keystore shall "
          "match all the non-null, non-key properties of the "
          "Keystore parameter embedded instance. The newly created "
          "CIM_Keystore instance shall be associated to the "
          "instance CIM_System referenced by the OwningSystem "
          "parameter using CIM_OwningCollectionElement association, "
          "shall be associated with the "
          "CIM_KeyBasedCredentialManagementService instance using "
          "the CIM_ServiceAffectsElement association, and shall be "
          "associated to the instances of CIM_Service referenced in "
          "the KeystoreUtilizers using CIM_Dependency association." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "..", "4096", 
          "4097..32767", "32768..65535" }, 
       Values { "Completed with No Error", "Not Supported", 
          "Error Occured", "Busy", "Invalid Reference", 
          "Invalid Parameter", "Access Denied", "DMTF Reserved", 
          "Job Started", "Method Reserved", "Vendor Specified" }]
   uint32 CreateKeystore(
         [Required, IN, Description ( 
             "The Keystore parameter contains the desired "
             "CIM_Keystore instance. The embedded instance shall "
             "contain the ElementName and Usage properties." ), 
          EmbeddedInstance ( "CIM_Keystore" )]
      string Keystore, 
         [Required, IN, Description ( 
             "The OwningSystem parameter references to the "
             "desired CIM_System instance that represents the "
             "owning managed system for the keystore." )]
      CIM_System REF OwningSystem, 
         [IN, Description ( 
             "The KeystoreUtilizers parameter contains an array "
             "of references to the instances of ManagedElement "
             "that represent the managed element that would "
             "utilize the keystore. Such services could be web "
             "services or protocol services that utilize the "
             "credentials stored in the keystore for the "
             "identity verification purposes." )]
      CIM_ManagedElement REF KeystoreUtilizers[], 
         [IN ( false ), OUT, Description ( 
             "Contains a reference to the ConcreteJob created to "
             "track the execution initiated by the method "
             "invocation. If method returns 4096 - Job Started, "
             "then this parameter shall not be NULL." )]
      CIM_ConcreteJob REF Job, 
         [Required, IN ( false ), OUT, Description ( 
             "The NewKeystore output parameter references the "
             "instance of CIM_Keystore that represents the newly "
             "created keystore repository." )]
      CIM_Keystore REF NewKeystore);

};
