code: public static CryptoFileSystemProperties wrap(Map<String, ?> properties) {
  		if (properties instanceof CryptoFileSystemProperties) {
  			return (CryptoFileSystemProperties) properties;
  		} else {
  			try {
  				return cryptoFileSystemPropertiesFrom(properties).build();
  			} catch (IllegalStateException e) {
  				throw new IllegalArgumentException(e);
  			}
  		}
  	}
docs: Constructs {@code CryptoFileSystemProperties} from a {@link Map}.
  
  @param properties the {@code Map} to convert
  @return the passed in {@code Map} if already of type {@code CryptoFileSystemProperties} or a new {@code CryptoFileSystemProperties} instance holding the values from the {@code Map}
  @throws IllegalArgumentException if a value in the {@code Map} does not have the expected type or if a required value is missing