/** * Encode the given {@link Password} to a byte array. * * @param password the password to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(Password password) throws NoSuchAlgorithmException, InvalidKeySpecException { return encode(password, INSTALLED_PROVIDERS); }
private void parsePassword(final List<Credential> credentials, final XMLStreamReader streamReader) throws XMLStreamException, RealmUnavailableException { parseCredential(streamReader, (algorithm, format, text) -> { try { if (BASE64_FORMAT.equals(format)) { if (algorithm == null) { throw ElytronMessages.log.fileSystemRealmMissingAttribute("algorithm", path, streamReader.getLocation().getLineNumber(), name); } byte[] passwordBytes = CodePointIterator.ofChars(text.toCharArray()).base64Decode().drain(); PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm); PasswordSpec passwordSpec = BasicPasswordSpecEncoding.decode(passwordBytes); if (passwordSpec != null) { credentials.add(new PasswordCredential(passwordFactory.generatePassword(passwordSpec))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordAlgorithm(algorithm, path, streamReader.getLocation().getLineNumber(), name); } } else if (MCF_FORMAT.equals(format)) { credentials.add(new PasswordCredential(ModularCrypt.decode(text))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordFormat(format, path, streamReader.getLocation().getLineNumber(), name); } } catch (InvalidKeySpecException | NoSuchAlgorithmException e) { throw ElytronMessages.log.fileSystemRealmInvalidContent(path, streamReader.getLocation().getLineNumber(), name); } }); }
/** * Decode the given byte array and create a {@link PasswordSpec} from it. * * @param encoded the byte array representing the encoded password * @return a {@link PasswordSpec} instance created from the encoded password or null if no decoder was capable to decode the given format. */ public static PasswordSpec decode(byte[] encoded) { ByteIterator iterator = ByteIterator.ofBytes(encoded); int identifier; try { identifier = iterator.next(); } catch (Exception e) { throw ElytronMessages.log.couldNotObtainKeySpecEncodingIdentifier(); } switch (identifier) { case CLEAR_PASSWORD_SPEC_ID: return decodeClearPasswordSpec(iterator); case DIGEST_PASSWORD_SPEC_ID: return decodeDigestPasswordSpec(iterator); case HASH_PASSWORD_SPEC_ID: return decodeHashPasswordSpec(iterator); case SALTED_HASH_PASSWORD_SPEC_ID: return decodeSaltedHashPasswordSpec(iterator); case ITERATED_SALTED_HASH_SPEC_ID: return decodeIteratedSaltedHashPasswordSpec(iterator); default: return null; } }
/** * Encode the given {@link PasswordSpec} to a byte array. * * @param passwordSpec the password spec to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(PasswordSpec passwordSpec) throws NoSuchAlgorithmException, InvalidKeySpecException { if (passwordSpec instanceof ClearPasswordSpec) { return encodeClearPasswordSpec((ClearPasswordSpec) passwordSpec); } else if (passwordSpec instanceof DigestPasswordSpec) { return encodeDigestPasswordSpec((DigestPasswordSpec) passwordSpec); } else if (passwordSpec instanceof SaltedHashPasswordSpec) { return encodeSaltedHashPasswordSpec((SaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof IteratedSaltedHashPasswordSpec) { return encodeIteratedSaltedHashSpec((IteratedSaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof HashPasswordSpec) { return encodeHashPasswordSpec((HashPasswordSpec) passwordSpec); } return null; }
/** * Encode the given {@link Password} to a byte array. * * @param password the password to encode * @param providers providers to use with the underlying {@link PasswordFactory} * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(Password password, Supplier<Provider[]> providers) throws NoSuchAlgorithmException, InvalidKeySpecException { PasswordFactory passwordFactory = PasswordFactory.getInstance(password.getAlgorithm(), providers); if (passwordFactory.convertibleToKeySpec(password, ClearPasswordSpec.class)) { return encodeClearPasswordSpec(passwordFactory.getKeySpec(password, ClearPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, DigestPasswordSpec.class)) { return encodeDigestPasswordSpec(passwordFactory.getKeySpec(password, DigestPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, SaltedHashPasswordSpec.class)) { return encodeSaltedHashPasswordSpec(passwordFactory.getKeySpec(password, SaltedHashPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, IteratedSaltedHashPasswordSpec.class)) { return encodeIteratedSaltedHashSpec(passwordFactory.getKeySpec(password, IteratedSaltedHashPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, HashPasswordSpec.class)) { return encodeHashPasswordSpec(passwordFactory.getKeySpec(password, HashPasswordSpec.class)); } return null; }
/** * Encode the given {@link PasswordSpec} to a byte array. * * @param passwordSpec the password spec to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(PasswordSpec passwordSpec) throws NoSuchAlgorithmException, InvalidKeySpecException { if (passwordSpec instanceof ClearPasswordSpec) { return encodeClearPasswordSpec((ClearPasswordSpec) passwordSpec); } else if (passwordSpec instanceof DigestPasswordSpec) { return encodeDigestPasswordSpec((DigestPasswordSpec) passwordSpec); } else if (passwordSpec instanceof SaltedHashPasswordSpec) { return encodeSaltedHashPasswordSpec((SaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof IteratedSaltedHashPasswordSpec) { return encodeIteratedSaltedHashSpec((IteratedSaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof HashPasswordSpec) { return encodeHashPasswordSpec((HashPasswordSpec) passwordSpec); } return null; }
/** * Decode the given byte array and create a {@link PasswordSpec} from it. * * @param encoded the byte array representing the encoded password * @return a {@link PasswordSpec} instance created from the encoded password or null if no decoder was capable to decode the given format. */ public static PasswordSpec decode(byte[] encoded) { ByteIterator iterator = ByteIterator.ofBytes(encoded); int identifier; try { identifier = iterator.next(); } catch (Exception e) { throw ElytronMessages.log.couldNotObtainKeySpecEncodingIdentifier(); } switch (identifier) { case CLEAR_PASSWORD_SPEC_ID: return decodeClearPasswordSpec(iterator); case DIGEST_PASSWORD_SPEC_ID: return decodeDigestPasswordSpec(iterator); case HASH_PASSWORD_SPEC_ID: return decodeHashPasswordSpec(iterator); case SALTED_HASH_PASSWORD_SPEC_ID: return decodeSaltedHashPasswordSpec(iterator); case ITERATED_SALTED_HASH_SPEC_ID: return decodeIteratedSaltedHashPasswordSpec(iterator); default: return null; } }
String algorithm = password.getAlgorithm(); String passwordString; byte[] encoded = BasicPasswordSpecEncoding.encode(password);
private void parsePassword(final List<Credential> credentials, final XMLStreamReader streamReader) throws XMLStreamException, RealmUnavailableException { parseCredential(streamReader, (algorithm, format, text) -> { try { if (BASE64_FORMAT.equals(format)) { if (algorithm == null) { throw ElytronMessages.log.fileSystemRealmMissingAttribute("algorithm", path, streamReader.getLocation().getLineNumber(), name); } byte[] passwordBytes = CodePointIterator.ofChars(text.toCharArray()).base64Decode().drain(); PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm); PasswordSpec passwordSpec = BasicPasswordSpecEncoding.decode(passwordBytes); if (passwordSpec != null) { credentials.add(new PasswordCredential(passwordFactory.generatePassword(passwordSpec))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordAlgorithm(algorithm, path, streamReader.getLocation().getLineNumber(), name); } } else if (MCF_FORMAT.equals(format)) { credentials.add(new PasswordCredential(ModularCrypt.decode(text))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordFormat(format, path, streamReader.getLocation().getLineNumber(), name); } } catch (InvalidKeySpecException | NoSuchAlgorithmException e) { throw ElytronMessages.log.fileSystemRealmInvalidContent(path, streamReader.getLocation().getLineNumber(), name); } }); }
/** * Encode the given {@link PasswordSpec} to a byte array. * * @param passwordSpec the password spec to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(PasswordSpec passwordSpec) throws NoSuchAlgorithmException, InvalidKeySpecException { if (passwordSpec instanceof ClearPasswordSpec) { return encodeClearPasswordSpec((ClearPasswordSpec) passwordSpec); } else if (passwordSpec instanceof DigestPasswordSpec) { return encodeDigestPasswordSpec((DigestPasswordSpec) passwordSpec); } else if (passwordSpec instanceof SaltedHashPasswordSpec) { return encodeSaltedHashPasswordSpec((SaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof IteratedSaltedHashPasswordSpec) { return encodeIteratedSaltedHashSpec((IteratedSaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof HashPasswordSpec) { return encodeHashPasswordSpec((HashPasswordSpec) passwordSpec); } return null; }
/** * Decode the given byte array and create a {@link PasswordSpec} from it. * * @param encoded the byte array representing the encoded password * @return a {@link PasswordSpec} instance created from the encoded password or null if no decoder was capable to decode the given format. */ public static PasswordSpec decode(byte[] encoded) { ByteIterator iterator = ByteIterator.ofBytes(encoded); int identifier; try { identifier = iterator.next(); } catch (Exception e) { throw ElytronMessages.log.couldNotObtainKeySpecEncodingIdentifier(); } switch (identifier) { case CLEAR_PASSWORD_SPEC_ID: return decodeClearPasswordSpec(iterator); case DIGEST_PASSWORD_SPEC_ID: return decodeDigestPasswordSpec(iterator); case HASH_PASSWORD_SPEC_ID: return decodeHashPasswordSpec(iterator); case SALTED_HASH_PASSWORD_SPEC_ID: return decodeSaltedHashPasswordSpec(iterator); case ITERATED_SALTED_HASH_SPEC_ID: return decodeIteratedSaltedHashPasswordSpec(iterator); default: return null; } }
/** * Encode the given {@link Password} to a byte array. * * @param password the password to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(Password password) throws NoSuchAlgorithmException, InvalidKeySpecException { return encode(password, INSTALLED_PROVIDERS); }
private void parsePassword(final List<Credential> credentials, final XMLStreamReader streamReader) throws XMLStreamException, RealmUnavailableException { parseCredential(streamReader, (algorithm, format, text) -> { try { if (BASE64_FORMAT.equals(format)) { if (algorithm == null) { throw ElytronMessages.log.fileSystemRealmMissingAttribute("algorithm", path, streamReader.getLocation().getLineNumber(), name); } byte[] passwordBytes = CodePointIterator.ofChars(text.toCharArray()).base64Decode().drain(); PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm); PasswordSpec passwordSpec = BasicPasswordSpecEncoding.decode(passwordBytes); if (passwordSpec != null) { credentials.add(new PasswordCredential(passwordFactory.generatePassword(passwordSpec))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordAlgorithm(algorithm, path, streamReader.getLocation().getLineNumber(), name); } } else if (MCF_FORMAT.equals(format)) { credentials.add(new PasswordCredential(ModularCrypt.decode(text))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordFormat(format, path, streamReader.getLocation().getLineNumber(), name); } } catch (InvalidKeySpecException | NoSuchAlgorithmException e) { throw ElytronMessages.log.fileSystemRealmInvalidContent(path, streamReader.getLocation().getLineNumber(), name); } }); }
/** * Encode the given {@link PasswordSpec} to a byte array. * * @param passwordSpec the password spec to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(PasswordSpec passwordSpec) throws NoSuchAlgorithmException, InvalidKeySpecException { if (passwordSpec instanceof ClearPasswordSpec) { return encodeClearPasswordSpec((ClearPasswordSpec) passwordSpec); } else if (passwordSpec instanceof DigestPasswordSpec) { return encodeDigestPasswordSpec((DigestPasswordSpec) passwordSpec); } else if (passwordSpec instanceof SaltedHashPasswordSpec) { return encodeSaltedHashPasswordSpec((SaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof IteratedSaltedHashPasswordSpec) { return encodeIteratedSaltedHashSpec((IteratedSaltedHashPasswordSpec) passwordSpec); } else if (passwordSpec instanceof HashPasswordSpec) { return encodeHashPasswordSpec((HashPasswordSpec) passwordSpec); } return null; }
/** * Decode the given byte array and create a {@link PasswordSpec} from it. * * @param encoded the byte array representing the encoded password * @return a {@link PasswordSpec} instance created from the encoded password or null if no decoder was capable to decode the given format. */ public static PasswordSpec decode(byte[] encoded) { ByteIterator iterator = ByteIterator.ofBytes(encoded); int identifier; try { identifier = iterator.next(); } catch (Exception e) { throw ElytronMessages.log.couldNotObtainKeySpecEncodingIdentifier(); } switch (identifier) { case CLEAR_PASSWORD_SPEC_ID: return decodeClearPasswordSpec(iterator); case DIGEST_PASSWORD_SPEC_ID: return decodeDigestPasswordSpec(iterator); case HASH_PASSWORD_SPEC_ID: return decodeHashPasswordSpec(iterator); case SALTED_HASH_PASSWORD_SPEC_ID: return decodeSaltedHashPasswordSpec(iterator); case ITERATED_SALTED_HASH_SPEC_ID: return decodeIteratedSaltedHashPasswordSpec(iterator); default: return null; } }
/** * Encode the given {@link Password} to a byte array. * * @param password the password to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(Password password) throws NoSuchAlgorithmException, InvalidKeySpecException { return encode(password, INSTALLED_PROVIDERS); }
private void parsePassword(final List<Credential> credentials, final XMLStreamReader streamReader) throws XMLStreamException, RealmUnavailableException { parseCredential(streamReader, (algorithm, format, text) -> { try { if (BASE64_FORMAT.equals(format)) { if (algorithm == null) { throw ElytronMessages.log.fileSystemRealmMissingAttribute("algorithm", path, streamReader.getLocation().getLineNumber(), name); } byte[] passwordBytes = CodePointIterator.ofChars(text.toCharArray()).base64Decode().drain(); PasswordFactory passwordFactory = PasswordFactory.getInstance(algorithm); PasswordSpec passwordSpec = BasicPasswordSpecEncoding.decode(passwordBytes); if (passwordSpec != null) { credentials.add(new PasswordCredential(passwordFactory.generatePassword(passwordSpec))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordAlgorithm(algorithm, path, streamReader.getLocation().getLineNumber(), name); } } else if (MCF_FORMAT.equals(format)) { credentials.add(new PasswordCredential(ModularCrypt.decode(text))); } else { throw ElytronMessages.log.fileSystemRealmInvalidPasswordFormat(format, path, streamReader.getLocation().getLineNumber(), name); } } catch (InvalidKeySpecException | NoSuchAlgorithmException e) { throw ElytronMessages.log.fileSystemRealmInvalidContent(path, streamReader.getLocation().getLineNumber(), name); } }); }
/** * Encode the given {@link Password} to a byte array. * * @param password the password to encode * @param providers providers to use with the underlying {@link PasswordFactory} * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(Password password, Supplier<Provider[]> providers) throws NoSuchAlgorithmException, InvalidKeySpecException { PasswordFactory passwordFactory = PasswordFactory.getInstance(password.getAlgorithm(), providers); if (passwordFactory.convertibleToKeySpec(password, ClearPasswordSpec.class)) { return encodeClearPasswordSpec(passwordFactory.getKeySpec(password, ClearPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, DigestPasswordSpec.class)) { return encodeDigestPasswordSpec(passwordFactory.getKeySpec(password, DigestPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, SaltedHashPasswordSpec.class)) { return encodeSaltedHashPasswordSpec(passwordFactory.getKeySpec(password, SaltedHashPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, IteratedSaltedHashPasswordSpec.class)) { return encodeIteratedSaltedHashSpec(passwordFactory.getKeySpec(password, IteratedSaltedHashPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, HashPasswordSpec.class)) { return encodeHashPasswordSpec(passwordFactory.getKeySpec(password, HashPasswordSpec.class)); } return null; }
/** * Encode the given {@link Password} to a byte array. * * @param password the password to encode * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(Password password) throws NoSuchAlgorithmException, InvalidKeySpecException { return encode(password, INSTALLED_PROVIDERS); }
/** * Encode the given {@link Password} to a byte array. * * @param password the password to encode * @param providers providers to use with the underlying {@link PasswordFactory} * @return a byte array representing the encoded password or null if no encoder was capable to encode the given password */ public static byte[] encode(Password password, Supplier<Provider[]> providers) throws NoSuchAlgorithmException, InvalidKeySpecException { PasswordFactory passwordFactory = PasswordFactory.getInstance(password.getAlgorithm(), providers); if (passwordFactory.convertibleToKeySpec(password, ClearPasswordSpec.class)) { return encodeClearPasswordSpec(passwordFactory.getKeySpec(password, ClearPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, DigestPasswordSpec.class)) { return encodeDigestPasswordSpec(passwordFactory.getKeySpec(password, DigestPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, SaltedHashPasswordSpec.class)) { return encodeSaltedHashPasswordSpec(passwordFactory.getKeySpec(password, SaltedHashPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, IteratedSaltedHashPasswordSpec.class)) { return encodeIteratedSaltedHashSpec(passwordFactory.getKeySpec(password, IteratedSaltedHashPasswordSpec.class)); } else if (passwordFactory.convertibleToKeySpec(password, HashPasswordSpec.class)) { return encodeHashPasswordSpec(passwordFactory.getKeySpec(password, HashPasswordSpec.class)); } return null; }