private RegistrationOperationStatusParser authenticateWithDPS()

in provisioning/provisioning-device-client/src/main/java/com/microsoft/azure/sdk/iot/provisioning/device/internal/task/RegisterTask.java [278:331]


    private RegistrationOperationStatusParser authenticateWithDPS() throws ProvisioningDeviceClientException, SecurityProviderException
    {
        if (securityProvider.getRegistrationId() == null)
        {
            throw new ProvisioningDeviceClientException(new IllegalArgumentException("registration id cannot be null"));
        }

        try
        {
            SSLContext sslContext = securityProvider.getSSLContext();
            if (sslContext == null)
            {
                throw new ProvisioningDeviceSecurityException("Null SSL Context received from security client");
            }
            authorization.setSslContext(sslContext);


            if (this.securityProvider instanceof SecurityProviderX509)
            {
                RequestData requestData = new RequestData(securityProvider.getRegistrationId(),  sslContext, true, this.provisioningDeviceClientConfig.getPayload());
                log.info("Authenticating with device provisioning service using x509 certificates");
                return this.authenticateWithX509(requestData);
            }
            else if (this.securityProvider instanceof SecurityProviderTpm)
            {
                SecurityProviderTpm securityProviderTpm = (SecurityProviderTpm) securityProvider;
                if (securityProviderTpm.getEndorsementKey() == null || securityProviderTpm.getStorageRootKey() == null)
                {
                    throw new ProvisioningDeviceSecurityException(new IllegalArgumentException("Ek or SRK cannot be null"));
                }

                //SRS_RegisterTask_25_009: [ If the provided security client is for Key then, this method shall save the SSL context to Authorization if it is not null and throw ProvisioningDeviceClientException otherwise. ]
                RequestData requestData = new RequestData(securityProviderTpm.getEndorsementKey(), securityProviderTpm.getStorageRootKey(), securityProvider.getRegistrationId(), sslContext, null, this.provisioningDeviceClientConfig.getPayload());

                log.info("Authenticating with device provisioning service using tpm");
                return this.authenticateWithTPM(requestData);
            }
            else if (this.securityProvider instanceof SecurityProviderSymmetricKey)
            {
                RequestData requestData = new RequestData(securityProvider.getRegistrationId(),  sslContext, null, this.provisioningDeviceClientConfig.getPayload());

                log.info("Authenticating with device provisioning service using symmetric key");
                return this.authenticateWithSasToken(requestData);
            }
            else
            {
                throw new ProvisioningDeviceSecurityException("Unknown Security client received");
            }
        }
        catch (SecurityProviderException | IOException | InterruptedException  e)
        {
            throw new ProvisioningDeviceSecurityException(e);
        }
    }