/// <summary>
 /// Updates the vault certificate
 /// </summary>
 /// <param name="args">the certificate update arguments</param>
 /// <returns>Upload Certificate Response</returns>
 public async Task<UploadCertificateResponse> UpdateVaultCertificate(CertificateArgs args)
 {
     return await this.GetSiteRecoveryClient().VaultExtendedInfo.UploadCertificateAsync(args, this.GetRequestHeaders(false));
 }
 /// <summary>
 /// Get the vault extended info.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.SiteRecovery.IVaultExtendedInfoOperations.
 /// </param>
 /// <param name='certificateArgs'>
 /// Required. Upload Vault Certificate input parameters.
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Optional. Request header parameters.
 /// </param>
 /// <returns>
 /// The response model for the upload certificate response
 /// </returns>
 public static Task<UploadCertificateResponse> UploadCertificateAsync(this IVaultExtendedInfoOperations operations, CertificateArgs certificateArgs, CustomRequestHeaders customRequestHeaders)
 {
     return operations.UploadCertificateAsync(certificateArgs, customRequestHeaders, CancellationToken.None);
 }
        /// <summary>
        /// Method to update vault certificate
        /// </summary>
        /// <param name="cert">certificate object </param>
        /// <returns>Upload Certificate Response</returns>
        private async Task<UploadCertificateResponse> UpdateVaultCertificate(X509Certificate2 cert)
        {
            var certificateArgs = new CertificateArgs()
            {
                Certificate = Convert.ToBase64String(cert.GetRawCertData()),
                ContractVersion = "V2012_12"
            };

            UploadCertificateResponse response = await this.UpdateVaultCertificate(certificateArgs);

            return response;
        }
 /// <summary>
 /// Get the vault extended info.
 /// </summary>
 /// <param name='operations'>
 /// Reference to the
 /// Microsoft.WindowsAzure.Management.SiteRecovery.IVaultExtendedInfoOperations.
 /// </param>
 /// <param name='certificateArgs'>
 /// Required. Upload Vault Certificate input parameters.
 /// </param>
 /// <param name='customRequestHeaders'>
 /// Optional. Request header parameters.
 /// </param>
 /// <returns>
 /// The response model for the upload certificate response
 /// </returns>
 public static UploadCertificateResponse UploadCertificate(this IVaultExtendedInfoOperations operations, CertificateArgs certificateArgs, CustomRequestHeaders customRequestHeaders)
 {
     return Task.Factory.StartNew((object s) => 
     {
         return ((IVaultExtendedInfoOperations)s).UploadCertificateAsync(certificateArgs, customRequestHeaders);
     }
     , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }