docs: public static String decode(String encoded_string)
                      throws InvalidPasswordDecodingException, UnsupportedCryptoAlgorithmException {
          /*
           * check input:
           * 
           * -- encoded_string: any string, any length, cannot be null,
           * must start with valid (supported) crypto algorithm tag
           */
  
          if (encoded_string == null) {
              // don't accept null password
              throw new InvalidPasswordDecodingException();
          }
  
          String crypto_algorithm = getCryptoAlgorithm(encoded_string);
  
          if (crypto_algorithm == null) {
              // don't accept decoded password
              throw new InvalidPasswordDecodingException();
          }
  
          // valid input ... decode password
          logger.logp(Level.FINEST, PasswordUtil.class.getName(), "decode", "before invoking decode_password : crypto_algorithm : " + crypto_algorithm + "\nencoded_string : "
                                                                            + encoded_string);
  
          String decoded_string = decode_password(removeCryptoAlgorithmTag(encoded_string), crypto_algorithm);
          if (decoded_string == null) {
              // In order to log the error information when "custom" encryption is invoked prior to the service is activated,
              // this error check was moved to here.
              if (!isValidCryptoAlgorithm(crypto_algorithm)) {
                  // don't accept unsupported crypto algorithm
                  throw new UnsupportedCryptoAlgorithmException();
              } else {
                  throw new InvalidPasswordDecodingException();
              }
          }
  
          return decoded_string;
      }