@SuppressWarnings(
	{ "rawtypes", "unchecked" })
	public Set<String> getServiceProviders()
	{
		Set<String> result = new HashSet<String>();

		// All providers
		Provider[] providers = Security.getProviders();
		for (int i = 0; i < providers.length; i++)
		{
			// Get services provided by each provider
			Set keys = providers[i].keySet();
			for (Iterator<String> it = keys.iterator(); it.hasNext();)
			{
				String key = (String) it.next();
				key = key.split(" ")[0]; //$NON-NLS-1$

				if (key.startsWith(ALG_PARSE_STRING))
				{
					// Strip the alias
					key = key.substring(10);
				}
				int ix = key.indexOf('.');
				result.add(key.substring(0, ix));
			}
		}
		return result;
	}