You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2018/09/06 16:04:01 UTC

[51/51] [abbrv] mina-sshd git commit: [SSHD-842] Split common utilities code from sshd-core into sshd-common (new artifact)

[SSHD-842] Split common utilities code from sshd-core into sshd-common (new artifact)


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/10de190e
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/10de190e
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/10de190e

Branch: refs/heads/master
Commit: 10de190e7d3f9189deb76b8d08c72334a1fe2df0
Parents: 1e82547
Author: Goldstein Lyor <ly...@cb4.com>
Authored: Wed Sep 5 18:05:53 2018 +0300
Committer: Lyor Goldstein <ly...@gmail.com>
Committed: Thu Sep 6 19:07:54 2018 +0300

----------------------------------------------------------------------
 assembly/pom.xml                                |    5 +
 pom.xml                                         |    1 +
 sshd-cli/pom.xml                                |    7 +
 .../java/org/apache/sshd/cli/CliSupport.java    |    6 +-
 .../sshd/cli/client/SshClientCliSupport.java    |   16 +-
 .../apache/sshd/cli/client/SshKeyScanMain.java  |    4 +-
 .../sshd/cli/server/SshServerCliSupport.java    |    4 +-
 .../apache/sshd/cli/server/SshServerMain.java   |    5 +-
 .../apache/sshd/cli/server/SshFsMounter.java    |   11 +-
 sshd-common/pom.xml                             |  128 ++
 .../org/apache/sshd/sshd-version.properties     |   23 +
 .../auth/AuthenticationIdentitiesProvider.java  |  125 ++
 .../auth/hostbased/HostKeyIdentityProvider.java |   53 +
 .../auth/password/PasswordIdentityProvider.java |  169 +++
 .../client/auth/pubkey/PublicKeyIdentity.java   |   42 +
 .../hosts/ConfigFileHostEntryResolver.java      |  107 ++
 .../DefaultConfigFileHostEntryResolver.java     |   95 ++
 .../client/config/hosts/HostConfigEntry.java    | 1169 ++++++++++++++++++
 .../config/hosts/HostConfigEntryResolver.java   |   60 +
 .../client/config/hosts/HostPatternValue.java   |   97 ++
 .../client/config/hosts/HostPatternsHolder.java |  343 +++++
 .../client/config/hosts/KnownHostDigest.java    |   66 +
 .../client/config/hosts/KnownHostEntry.java     |  276 +++++
 .../client/config/hosts/KnownHostHashValue.java |  170 +++
 .../keys/BuiltinClientIdentitiesWatcher.java    |  106 ++
 .../config/keys/ClientIdentitiesWatcher.java    |  139 +++
 .../sshd/client/config/keys/ClientIdentity.java |  268 ++++
 .../config/keys/ClientIdentityFileWatcher.java  |  141 +++
 .../config/keys/ClientIdentityLoader.java       |   95 ++
 .../config/keys/ClientIdentityProvider.java     |   42 +
 .../keys/DefaultClientIdentitiesWatcher.java    |   66 +
 .../org/apache/sshd/common/AttributeStore.java  |   97 ++
 .../org/apache/sshd/common/BuiltinFactory.java  |   40 +
 .../java/org/apache/sshd/common/Closeable.java  |  126 ++
 .../java/org/apache/sshd/common/Factory.java    |   41 +
 .../org/apache/sshd/common/NamedFactory.java    |   66 +
 .../org/apache/sshd/common/NamedResource.java   |  104 ++
 .../org/apache/sshd/common/OptionalFeature.java |   92 ++
 .../apache/sshd/common/PropertyResolver.java    |  124 ++
 .../sshd/common/PropertyResolverUtils.java      |  482 ++++++++
 .../apache/sshd/common/RuntimeSshException.java |   48 +
 .../org/apache/sshd/common/SshConstants.java    |  245 ++++
 .../org/apache/sshd/common/SshException.java    |   72 ++
 .../apache/sshd/common/SyspropsMapWrapper.java  |  209 ++++
 .../sshd/common/auth/MutableUserHolder.java     |   27 +
 .../apache/sshd/common/auth/UsernameHolder.java |   32 +
 .../apache/sshd/common/cipher/BaseCipher.java   |  113 ++
 .../sshd/common/cipher/BaseRC4Cipher.java       |   54 +
 .../sshd/common/cipher/BuiltinCiphers.java      |  348 ++++++
 .../org/apache/sshd/common/cipher/Cipher.java   |   89 ++
 .../sshd/common/cipher/CipherFactory.java       |   31 +
 .../sshd/common/cipher/CipherInformation.java   |   45 +
 .../apache/sshd/common/cipher/CipherNone.java   |   63 +
 .../org/apache/sshd/common/cipher/ECCurves.java |  580 +++++++++
 .../org/apache/sshd/common/cipher/package.html  |   26 +
 .../common/compression/BaseCompression.java     |   48 +
 .../common/compression/BuiltinCompressions.java |  239 ++++
 .../sshd/common/compression/Compression.java    |   71 ++
 .../compression/CompressionDelayedZlib.java     |   40 +
 .../common/compression/CompressionFactory.java  |   31 +
 .../compression/CompressionInformation.java     |   42 +
 .../common/compression/CompressionNone.java     |   76 ++
 .../common/compression/CompressionZlib.java     |   85 ++
 .../apache/sshd/common/compression/package.html |   25 +
 .../common/config/CompressionConfigValue.java   |   94 ++
 .../common/config/ConfigFileReaderSupport.java  |  230 ++++
 .../common/config/FactoriesListParseResult.java |   51 +
 .../sshd/common/config/ListParseResult.java     |   66 +
 .../sshd/common/config/LogLevelValue.java       |   56 +
 .../config/NamedFactoriesListParseResult.java   |   47 +
 .../config/NamedResourceListParseResult.java    |   57 +
 .../sshd/common/config/SyslogFacilityValue.java |   51 +
 .../sshd/common/config/TimeValueConfig.java     |  180 +++
 .../sshd/common/config/VersionProperties.java   |   98 ++
 .../common/config/keys/AuthorizedKeyEntry.java  |  480 +++++++
 .../common/config/keys/BuiltinIdentities.java   |  212 ++++
 .../config/keys/FilePasswordProvider.java       |   45 +
 .../sshd/common/config/keys/Identity.java       |   42 +
 .../config/keys/IdentityResourceLoader.java     |   49 +
 .../sshd/common/config/keys/IdentityUtils.java  |  159 +++
 .../common/config/keys/KeyEntryResolver.java    |  190 +++
 .../sshd/common/config/keys/KeyRandomArt.java   |  310 +++++
 .../sshd/common/config/keys/KeyUtils.java       |  937 ++++++++++++++
 .../config/keys/PrivateKeyEntryDecoder.java     |  142 +++
 .../config/keys/PrivateKeyEntryResolver.java    |   70 ++
 .../sshd/common/config/keys/PublicKeyEntry.java |  286 +++++
 .../config/keys/PublicKeyEntryDecoder.java      |  114 ++
 .../config/keys/PublicKeyEntryResolver.java     |   70 ++
 .../impl/AbstractIdentityResourceLoader.java    |   62 +
 .../keys/impl/AbstractKeyEntryResolver.java     |   59 +
 .../impl/AbstractPrivateKeyEntryDecoder.java    |   40 +
 .../impl/AbstractPublicKeyEntryDecoder.java     |   41 +
 .../keys/impl/DSSPublicKeyEntryDecoder.java     |  119 ++
 .../keys/impl/ECDSAPublicKeyEntryDecoder.java   |  178 +++
 .../config/keys/impl/RSAPublicKeyDecoder.java   |  117 ++
 .../keys/loader/AESPrivateKeyObfuscator.java    |  110 ++
 .../loader/AbstractKeyPairResourceParser.java   |  181 +++
 .../loader/AbstractPrivateKeyObfuscator.java    |  191 +++
 .../keys/loader/DESPrivateKeyObfuscator.java    |   76 ++
 .../keys/loader/KeyPairResourceLoader.java      |  129 ++
 .../keys/loader/KeyPairResourceParser.java      |  192 +++
 .../loader/PrivateKeyEncryptionContext.java     |  270 ++++
 .../keys/loader/PrivateKeyObfuscator.java       |   64 +
 .../OpenSSHDSSPrivateKeyEntryDecoder.java       |  139 +++
 .../OpenSSHECDSAPrivateKeyEntryDecoder.java     |  164 +++
 .../openssh/OpenSSHKeyPairResourceParser.java   |  358 ++++++
 .../loader/openssh/OpenSSHParserContext.java    |   83 ++
 .../openssh/OpenSSHRSAPrivateKeyDecoder.java    |  135 ++
 .../pem/AbstractPEMResourceKeyPairParser.java   |  167 +++
 .../loader/pem/DSSPEMResourceKeyPairParser.java |  126 ++
 .../pem/ECDSAPEMResourceKeyPairParser.java      |  220 ++++
 .../loader/pem/KeyPairPEMResourceParser.java    |   37 +
 .../keys/loader/pem/PEMResourceParserUtils.java |  109 ++
 .../pem/PKCS8PEMResourceKeyPairParser.java      |  156 +++
 .../loader/pem/RSAPEMResourceKeyPairParser.java |  142 +++
 .../apache/sshd/common/digest/BaseDigest.java   |  156 +++
 .../sshd/common/digest/BuiltinDigests.java      |  166 +++
 .../org/apache/sshd/common/digest/Digest.java   |   36 +
 .../sshd/common/digest/DigestFactory.java       |   32 +
 .../sshd/common/digest/DigestInformation.java   |   36 +
 .../apache/sshd/common/digest/DigestUtils.java  |  228 ++++
 .../org/apache/sshd/common/digest/package.html  |   25 +
 .../sshd/common/future/AbstractSshFuture.java   |  194 +++
 .../apache/sshd/common/future/CloseFuture.java  |   40 +
 .../sshd/common/future/DefaultCloseFuture.java  |   52 +
 .../sshd/common/future/DefaultSshFuture.java    |  236 ++++
 .../future/DefaultVerifiableSshFuture.java      |   30 +
 .../apache/sshd/common/future/SshFuture.java    |   48 +
 .../sshd/common/future/SshFutureListener.java   |   42 +
 .../sshd/common/future/VerifiableFuture.java    |   68 +
 .../sshd/common/future/WaitableFuture.java      |  118 ++
 .../keyprovider/AbstractKeyPairProvider.java    |   32 +
 .../AbstractResourceKeyPairProvider.java        |  234 ++++
 .../ClassLoadableResourceKeyPairProvider.java   |  113 ++
 .../common/keyprovider/FileKeyPairProvider.java |   92 ++
 .../common/keyprovider/KeyIdentityProvider.java |  170 +++
 .../common/keyprovider/KeyPairProvider.java     |  181 +++
 .../keyprovider/KeyPairProviderHolder.java      |   35 +
 .../keyprovider/MappedKeyPairProvider.java      |   97 ++
 .../org/apache/sshd/common/mac/BaseMac.java     |  111 ++
 .../org/apache/sshd/common/mac/BuiltinMacs.java |  273 ++++
 .../java/org/apache/sshd/common/mac/Mac.java    |   52 +
 .../org/apache/sshd/common/mac/MacFactory.java  |   31 +
 .../apache/sshd/common/mac/MacInformation.java  |   41 +
 .../org/apache/sshd/common/mac/package.html     |   25 +
 .../sshd/common/random/AbstractRandom.java      |   34 +
 .../common/random/AbstractRandomFactory.java    |   43 +
 .../apache/sshd/common/random/JceRandom.java    |   60 +
 .../sshd/common/random/JceRandomFactory.java    |   42 +
 .../org/apache/sshd/common/random/Random.java   |   56 +
 .../sshd/common/random/RandomFactory.java       |   31 +
 .../common/random/SingletonRandomFactory.java   |   70 ++
 .../org/apache/sshd/common/random/package.html  |   25 +
 .../common/signature/AbstractSignature.java     |  149 +++
 .../common/signature/BuiltinSignatures.java     |  305 +++++
 .../apache/sshd/common/signature/Signature.java |   88 ++
 .../sshd/common/signature/SignatureDSA.java     |  142 +++
 .../sshd/common/signature/SignatureECDSA.java   |  144 +++
 .../signature/SignatureFactoriesManager.java    |   94 ++
 .../sshd/common/signature/SignatureFactory.java |   31 +
 .../sshd/common/signature/SignatureRSA.java     |   89 ++
 .../apache/sshd/common/signature/package.html   |   25 +
 .../sshd/common/util/EventListenerUtils.java    |  212 ++++
 .../apache/sshd/common/util/EventNotifier.java  |   35 +
 .../apache/sshd/common/util/GenericUtils.java   |  915 ++++++++++++++
 .../sshd/common/util/IgnoringEmptyMap.java      |  128 ++
 .../sshd/common/util/Int2IntFunction.java       |   66 +
 .../org/apache/sshd/common/util/Invoker.java    |  116 ++
 .../apache/sshd/common/util/MapEntryUtils.java  |   51 +
 .../apache/sshd/common/util/NumberUtils.java    |  310 +++++
 .../apache/sshd/common/util/ObjectBuilder.java  |   38 +
 .../org/apache/sshd/common/util/OsUtils.java    |  257 ++++
 .../org/apache/sshd/common/util/Readable.java   |   53 +
 .../sshd/common/util/ReflectionUtils.java       |   53 +
 .../apache/sshd/common/util/SelectorUtils.java  |  805 ++++++++++++
 .../sshd/common/util/SshdEventListener.java     |   44 +
 .../apache/sshd/common/util/ValidateUtils.java  |  216 ++++
 .../apache/sshd/common/util/VersionInfo.java    |  137 ++
 .../apache/sshd/common/util/buffer/Buffer.java  |  798 ++++++++++++
 .../common/util/buffer/BufferException.java     |   30 +
 .../sshd/common/util/buffer/BufferUtils.java    |  604 +++++++++
 .../common/util/buffer/ByteArrayBuffer.java     |  253 ++++
 .../keys/AbstractBufferPublicKeyParser.java     |   88 ++
 .../util/buffer/keys/BufferPublicKeyParser.java |  111 ++
 .../buffer/keys/DSSBufferPublicKeyParser.java   |   52 +
 .../buffer/keys/ECBufferPublicKeyParser.java    |   81 ++
 .../keys/ED25519BufferPublicKeyParser.java      |   47 +
 .../buffer/keys/RSABufferPublicKeyParser.java   |   49 +
 .../util/closeable/AbstractCloseable.java       |  162 +++
 .../util/closeable/AbstractInnerCloseable.java  |   48 +
 .../sshd/common/util/closeable/Builder.java     |  115 ++
 .../common/util/closeable/FuturesCloseable.java |   76 ++
 .../common/util/closeable/IoBaseCloseable.java  |   35 +
 .../util/closeable/ParallelCloseable.java       |   73 ++
 .../util/closeable/SequentialCloseable.java     |   71 ++
 .../common/util/closeable/SimpleCloseable.java  |   71 ++
 .../util/io/CloseableEmptyInputStream.java      |   96 ++
 .../sshd/common/util/io/DirectoryScanner.java   |  380 ++++++
 .../sshd/common/util/io/EmptyInputStream.java   |   66 +
 .../sshd/common/util/io/FileInfoExtractor.java  |   53 +
 .../common/util/io/InputStreamWithChannel.java  |   32 +
 .../org/apache/sshd/common/util/io/IoUtils.java |  556 +++++++++
 .../sshd/common/util/io/LimitInputStream.java   |  113 ++
 .../util/io/LoggingFilterOutputStream.java      |   67 +
 .../common/util/io/ModifiableFileWatcher.java   |  258 ++++
 .../sshd/common/util/io/NoCloseInputStream.java |   47 +
 .../common/util/io/NoCloseOutputStream.java     |   47 +
 .../sshd/common/util/io/NoCloseReader.java      |   46 +
 .../sshd/common/util/io/NoCloseWriter.java      |   46 +
 .../sshd/common/util/io/NullInputStream.java    |   90 ++
 .../sshd/common/util/io/NullOutputStream.java   |   72 ++
 .../common/util/io/OutputStreamWithChannel.java |   32 +
 .../sshd/common/util/io/der/ASN1Class.java      |   93 ++
 .../sshd/common/util/io/der/ASN1Object.java     |  338 +++++
 .../sshd/common/util/io/der/ASN1Type.java       |  118 ++
 .../sshd/common/util/io/der/DERParser.java      |  151 +++
 .../sshd/common/util/io/der/DERWriter.java      |  172 +++
 .../common/util/io/functors/IOFunction.java     |   86 ++
 .../util/logging/AbstractLoggingBean.java       |   72 ++
 .../sshd/common/util/logging/LoggingUtils.java  |  549 ++++++++
 .../sshd/common/util/logging/SimplifiedLog.java |   55 +
 .../sshd/common/util/net/NetworkConnector.java  |   90 ++
 .../sshd/common/util/net/SshdSocketAddress.java |  639 ++++++++++
 .../AbstractSecurityProviderRegistrar.java      |  129 ++
 .../util/security/SecurityEntityFactory.java    |  194 +++
 .../util/security/SecurityProviderChoice.java   |  130 ++
 .../security/SecurityProviderRegistrar.java     |  337 +++++
 .../common/util/security/SecurityUtils.java     |  759 ++++++++++++
 .../BouncyCastleGeneratorHostKeyProvider.java   |   48 +
 .../BouncyCastleKeyPairResourceParser.java      |  130 ++
 .../bouncycastle/BouncyCastleRandom.java        |   88 ++
 .../bouncycastle/BouncyCastleRandomFactory.java |   45 +
 .../BouncyCastleSecurityProviderRegistrar.java  |  128 ++
 .../security/eddsa/Ed25519PublicKeyDecoder.java |   97 ++
 .../eddsa/EdDSASecurityProviderRegistrar.java   |  104 ++
 .../eddsa/EdDSASecurityProviderUtils.java       |  201 +++
 .../OpenSSHEd25519PrivateKeyEntryDecoder.java   |  172 +++
 .../util/security/eddsa/SignatureEd25519.java   |   49 +
 .../util/threads/CloseableExecutorService.java  |   28 +
 .../util/threads/ExecutorServiceCarrier.java    |   31 +
 .../common/util/threads/NoCloseExecutor.java    |  160 +++
 .../util/threads/SshThreadPoolExecutor.java     |  138 +++
 .../common/util/threads/SshdThreadFactory.java  |   78 ++
 .../sshd/common/util/threads/ThreadUtils.java   |  185 +++
 .../AbstractGeneratorHostKeyProvider.java       |  293 +++++
 .../SimpleGeneratorHostKeyProvider.java         |   67 +
 .../password/PasswordIdentityProviderTest.java  |   72 ++
 .../hosts/ConfigFileHostEntryResolverTest.java  |  139 +++
 .../config/hosts/HostConfigEntryTest.java       |  325 +++++
 .../config/hosts/KnownHostHashValueTest.java    |   79 ++
 .../BuiltinClientIdentitiesWatcherTest.java     |  161 +++
 .../keys/ClientIdentityFileWatcherTest.java     |  121 ++
 .../client/config/keys/ClientIdentityTest.java  |  100 ++
 .../apache/sshd/common/SshConstantsTest.java    |   75 ++
 .../sshd/common/VersionPropertiesTest.java      |   45 +
 .../sshd/common/cipher/AES192CTRTest.java       |   41 +
 .../sshd/common/cipher/AES256CBCTest.java       |   41 +
 .../sshd/common/cipher/ARCFOUR128Test.java      |   39 +
 .../sshd/common/cipher/ARCFOUR256Test.java      |   41 +
 .../sshd/common/cipher/BaseCipherTest.java      |   95 ++
 .../apache/sshd/common/cipher/ECCurvesTest.java |  107 ++
 .../compression/BuiltinCompressionsTest.java    |  171 +++
 .../sshd/common/config/TimeValueConfigTest.java |   57 +
 ...AuthorizedKeyEntryLoginOptionsParseTest.java |  124 ++
 .../config/keys/BuiltinIdentitiesTest.java      |  116 ++
 .../common/config/keys/KeyRandomArtTest.java    |  117 ++
 .../common/config/keys/KeyUtilsCloneTest.java   |  120 ++
 .../KeyUtilsFingerprintCaseSensitivityTest.java |   96 ++
 .../keys/KeyUtilsFingerprintGenerationTest.java |  159 +++
 .../sshd/common/config/keys/KeyUtilsTest.java   |  157 +++
 .../common/config/keys/PublicKeyEntryTest.java  |   62 +
 .../loader/AESPrivateKeyObfuscatorTest.java     |   79 ++
 .../OpenSSHKeyPairResourceParserTest.java       |  108 ++
 .../pem/PKCS8PEMResourceKeyPairParserTest.java  |  107 ++
 .../sshd/common/digest/BuiltinDigestsTest.java  |   65 +
 .../common/future/DefaultSshFutureTest.java     |  137 ++
 .../common/keyprovider/KeyPairProviderTest.java |   79 ++
 .../apache/sshd/common/mac/BuiltinMacsTest.java |  166 +++
 .../apache/sshd/common/mac/MacVectorsTest.java  |  311 +++++
 .../sshd/common/random/RandomFactoryTest.java   |   83 ++
 .../common/signature/BuiltinSignaturesTest.java |  149 +++
 .../sshd/common/signature/SignatureDSATest.java |  109 ++
 .../sshd/common/signature/SignatureRSATest.java |  119 ++
 .../common/signature/SignaturesDevelopment.java |   81 ++
 .../common/util/EventListenerUtilsTest.java     |  149 +++
 .../sshd/common/util/GenericUtilsTest.java      |  173 +++
 .../sshd/common/util/Int2IntFunctionTest.java   |  154 +++
 .../sshd/common/util/NumberUtilsTest.java       |   77 ++
 .../apache/sshd/common/util/OsUtilsTest.java    |  135 ++
 .../sshd/common/util/SelectorUtilsTest.java     |  147 +++
 .../sshd/common/util/ThreadUtilsTest.java       |   72 ++
 .../sshd/common/util/ValidateUtilsTest.java     |   44 +
 .../sshd/common/util/VersionInfoTest.java       |   52 +
 .../sshd/common/util/buffer/BufferTest.java     |  103 ++
 .../common/util/buffer/BufferUtilsTest.java     |   73 ++
 .../util/closeable/CloseableUtilsTest.java      |  163 +++
 .../common/util/io/EmptyInputStreamTest.java    |  120 ++
 .../apache/sshd/common/util/io/IoUtilsTest.java |   61 +
 .../common/util/io/LimitInputStreamTest.java    |  118 ++
 .../util/io/ModifiableFileWatcherTest.java      |   82 ++
 .../common/util/io/NoCloseInputStreamTest.java  |   89 ++
 .../common/util/io/NoCloseOutputStreamTest.java |   69 ++
 .../sshd/common/util/io/NoCloseReaderTest.java  |   95 ++
 .../sshd/common/util/io/NoCloseWriterTest.java  |   73 ++
 .../common/util/io/NullInputStreamTest.java     |  118 ++
 .../common/util/io/NullOutputStreamTest.java    |   80 ++
 .../sshd/common/util/io/der/ASN1ClassTest.java  |   67 +
 .../sshd/common/util/io/der/ASN1TypeTest.java   |   67 +
 .../sshd/common/util/io/der/DERParserTest.java  |   61 +
 .../sshd/common/util/io/der/DERWriterTest.java  |   64 +
 .../util/net/SshdSocketIpv6AddressTest.java     |   88 ++
 ...SecurityProviderRegistrarCipherNameTest.java |   75 ++
 .../SecurityProviderRegistrarTestSupport.java   |   62 +
 .../common/util/security/SecurityUtilsTest.java |  231 ++++
 .../util/security/eddsa/EDDSAProviderTest.java  |  126 ++
 .../util/security/eddsa/Ed25519VectorsTest.java |  238 ++++
 .../EdDSASecurityProviderRegistrarTest.java     |   85 ++
 .../AbstractGeneratorHostKeyProviderTest.java   |   83 ++
 .../PEMGeneratorHostKeyProviderTest.java        |  141 +++
 .../SimpleGeneratorHostKeyProviderTest.java     |  133 ++
 .../sshd/util/test/CommonTestSupportUtils.java  |  620 ++++++++++
 .../test/JUnit4ClassRunnerWithParameters.java   |   48 +
 .../JUnit4ClassRunnerWithParametersFactory.java |   58 +
 .../test/JUnit4SingleInstanceClassRunner.java   |   54 +
 .../apache/sshd/util/test/JUnitTestSupport.java |  572 +++++++++
 .../org/apache/sshd/util/test/NoIoTestCase.java |   30 +
 .../test/OutputCountTrackingOutputStream.java   |   56 +
 .../apache/sshd/util/test/TeeOutputStream.java  |   64 +
 sshd-common/src/test/resources/log4j.properties |   38 +
 .../testReadGlobalHostsConfigEntries.config.txt |   22 +
 .../testReadMultipleHostPatterns.config.txt     |    5 +
 .../testReadSimpleHostsConfigEntries.config.txt |    8 +
 .../org/apache/sshd/client/config/keys/id_dsa   |   12 +
 .../org/apache/sshd/client/config/keys/id_ecdsa |    5 +
 .../org/apache/sshd/client/config/keys/id_rsa   |   27 +
 ...OpenSSHKeyPairResourceParserTest-DSA-KeyPair |   21 +
 ...SSHKeyPairResourceParserTest-DSA-KeyPair.pub |    1 +
 ...enSSHKeyPairResourceParserTest-ECDSA-KeyPair |   12 +
 ...HKeyPairResourceParserTest-ECDSA-KeyPair.pub |    1 +
 ...SSHKeyPairResourceParserTest-ED25519-KeyPair |    7 +
 ...eyPairResourceParserTest-ED25519-KeyPair.pub |    1 +
 ...OpenSSHKeyPairResourceParserTest-RSA-KeyPair |   49 +
 ...SSHKeyPairResourceParserTest-RSA-KeyPair.pub |    1 +
 .../EDDSAProviderTest-EDDSA-OpenSSH-KeyPair     |    7 +
 .../EDDSAProviderTest-EDDSA-OpenSSH-KeyPair.pub |    1 +
 .../util/security/SecurityUtilsTest-DSA-KeyPair |   12 +
 .../security/SecurityUtilsTest-DSA-KeyPair.pub  |    1 +
 .../security/SecurityUtilsTest-EC-256-KeyPair   |    5 +
 .../SecurityUtilsTest-EC-256-KeyPair.pub        |    1 +
 .../security/SecurityUtilsTest-EC-384-KeyPair   |    6 +
 .../SecurityUtilsTest-EC-384-KeyPair.pub        |    1 +
 .../security/SecurityUtilsTest-EC-521-KeyPair   |    7 +
 .../SecurityUtilsTest-EC-521-KeyPair.pub        |    1 +
 .../util/security/SecurityUtilsTest-RSA-KeyPair |   27 +
 .../security/SecurityUtilsTest-RSA-KeyPair.pub  |    1 +
 .../super-secret-passphrase-RSA-AES-128-key     |   30 +
 .../super-secret-passphrase-RSA-AES-128-key.pub |    1 +
 .../super-secret-passphrase-RSA-AES-192-key     |   30 +
 .../super-secret-passphrase-RSA-AES-192-key.pub |    1 +
 .../super-secret-passphrase-RSA-AES-256-key     |   30 +
 .../super-secret-passphrase-RSA-AES-256-key.pub |    1 +
 .../super-secret-passphrase-RSA-DES-EDE3-key    |   30 +
 ...super-secret-passphrase-RSA-DES-EDE3-key.pub |    1 +
 sshd-contrib/pom.xml                            |    9 +-
 ...SimpleAccessControlScpEventListenerTest.java |    8 +-
 ...impleAccessControlSftpEventListenerTest.java |   12 +-
 sshd-core/pom.xml                               |   19 +-
 .../org/apache/sshd/sshd-version.properties     |   23 -
 .../java/org/apache/sshd/client/SshClient.java  |   60 +
 .../auth/AuthenticationIdentitiesProvider.java  |  125 --
 .../auth/hostbased/HostKeyIdentityProvider.java |   53 -
 .../keyboard/UserAuthKeyboardInteractive.java   |    3 +-
 .../auth/password/PasswordIdentityProvider.java |  183 ---
 .../client/auth/password/UserAuthPassword.java  |    2 +-
 .../client/auth/pubkey/PublicKeyIdentity.java   |   42 -
 .../auth/pubkey/UserAuthPublicKeyIterator.java  |    2 +-
 .../config/SshClientConfigFileReader.java       |    3 +-
 .../hosts/ConfigFileHostEntryResolver.java      |  107 --
 .../DefaultConfigFileHostEntryResolver.java     |   95 --
 .../client/config/hosts/HostConfigEntry.java    | 1169 ------------------
 .../config/hosts/HostConfigEntryResolver.java   |   60 -
 .../client/config/hosts/HostPatternValue.java   |   97 --
 .../client/config/hosts/HostPatternsHolder.java |  343 -----
 .../client/config/hosts/KnownHostDigest.java    |   66 -
 .../client/config/hosts/KnownHostEntry.java     |  276 -----
 .../client/config/hosts/KnownHostHashValue.java |  170 ---
 .../keys/BuiltinClientIdentitiesWatcher.java    |  106 --
 .../config/keys/ClientIdentitiesWatcher.java    |  139 ---
 .../sshd/client/config/keys/ClientIdentity.java |  325 -----
 .../config/keys/ClientIdentityFileWatcher.java  |  141 ---
 .../config/keys/ClientIdentityLoader.java       |   95 --
 .../config/keys/ClientIdentityProvider.java     |   42 -
 .../keys/DefaultClientIdentitiesWatcher.java    |   66 -
 .../KnownHostsServerKeyVerifier.java            |    6 +-
 .../sshd/client/session/ClientSession.java      |   54 +
 .../client/simple/SimpleClientConfigurator.java |    4 +-
 .../org/apache/sshd/common/AttributeStore.java  |  152 ---
 .../org/apache/sshd/common/BuiltinFactory.java  |   40 -
 .../java/org/apache/sshd/common/Closeable.java  |  126 --
 .../java/org/apache/sshd/common/Factory.java    |   41 -
 .../org/apache/sshd/common/FactoryManager.java  |   16 +
 .../org/apache/sshd/common/NamedFactory.java    |   66 -
 .../org/apache/sshd/common/NamedResource.java   |  104 --
 .../org/apache/sshd/common/OptionalFeature.java |   92 --
 .../apache/sshd/common/PropertyResolver.java    |  124 --
 .../sshd/common/PropertyResolverUtils.java      |  482 --------
 .../apache/sshd/common/RuntimeSshException.java |   48 -
 .../org/apache/sshd/common/SshConstants.java    |  245 ----
 .../org/apache/sshd/common/SshException.java    |   72 --
 .../apache/sshd/common/SyspropsMapWrapper.java  |  209 ----
 .../sshd/common/auth/MutableUserHolder.java     |   27 -
 .../apache/sshd/common/auth/UsernameHolder.java |   32 -
 .../sshd/common/channel/AbstractChannel.java    |    6 -
 .../org/apache/sshd/common/channel/Channel.java |   26 +
 .../apache/sshd/common/cipher/BaseCipher.java   |  113 --
 .../sshd/common/cipher/BaseRC4Cipher.java       |   54 -
 .../sshd/common/cipher/BuiltinCiphers.java      |  348 ------
 .../org/apache/sshd/common/cipher/Cipher.java   |   89 --
 .../sshd/common/cipher/CipherFactory.java       |   31 -
 .../sshd/common/cipher/CipherInformation.java   |   45 -
 .../apache/sshd/common/cipher/CipherNone.java   |   63 -
 .../org/apache/sshd/common/cipher/ECCurves.java |  580 ---------
 .../org/apache/sshd/common/cipher/package.html  |   26 -
 .../common/compression/BaseCompression.java     |   48 -
 .../common/compression/BuiltinCompressions.java |  239 ----
 .../sshd/common/compression/Compression.java    |   71 --
 .../compression/CompressionDelayedZlib.java     |   40 -
 .../common/compression/CompressionFactory.java  |   31 -
 .../compression/CompressionInformation.java     |   42 -
 .../common/compression/CompressionNone.java     |   76 --
 .../common/compression/CompressionZlib.java     |   85 --
 .../apache/sshd/common/compression/package.html |   25 -
 .../common/config/CompressionConfigValue.java   |   94 --
 .../common/config/FactoriesListParseResult.java |   51 -
 .../sshd/common/config/ListParseResult.java     |   66 -
 .../sshd/common/config/LogLevelValue.java       |   56 -
 .../config/NamedFactoriesListParseResult.java   |   47 -
 .../config/NamedResourceListParseResult.java    |   57 -
 .../sshd/common/config/SshConfigFileReader.java |  268 +---
 .../sshd/common/config/SyslogFacilityValue.java |   51 -
 .../sshd/common/config/TimeValueConfig.java     |  180 ---
 .../sshd/common/config/VersionProperties.java   |   98 --
 .../common/config/keys/AuthorizedKeyEntry.java  |  492 --------
 .../common/config/keys/BuiltinIdentities.java   |  212 ----
 .../config/keys/FilePasswordProvider.java       |   45 -
 .../sshd/common/config/keys/Identity.java       |   42 -
 .../config/keys/IdentityResourceLoader.java     |   49 -
 .../sshd/common/config/keys/IdentityUtils.java  |  159 ---
 .../common/config/keys/KeyEntryResolver.java    |  190 ---
 .../sshd/common/config/keys/KeyRandomArt.java   |  310 -----
 .../sshd/common/config/keys/KeyUtils.java       |  937 --------------
 .../config/keys/PrivateKeyEntryDecoder.java     |  142 ---
 .../config/keys/PrivateKeyEntryResolver.java    |   70 --
 .../sshd/common/config/keys/PublicKeyEntry.java |  286 -----
 .../config/keys/PublicKeyEntryDecoder.java      |  114 --
 .../config/keys/PublicKeyEntryResolver.java     |   70 --
 .../impl/AbstractIdentityResourceLoader.java    |   62 -
 .../keys/impl/AbstractKeyEntryResolver.java     |   59 -
 .../impl/AbstractPrivateKeyEntryDecoder.java    |   40 -
 .../impl/AbstractPublicKeyEntryDecoder.java     |   41 -
 .../keys/impl/DSSPublicKeyEntryDecoder.java     |  119 --
 .../keys/impl/ECDSAPublicKeyEntryDecoder.java   |  178 ---
 .../config/keys/impl/RSAPublicKeyDecoder.java   |  117 --
 .../keys/loader/AESPrivateKeyObfuscator.java    |  110 --
 .../loader/AbstractKeyPairResourceParser.java   |  181 ---
 .../loader/AbstractPrivateKeyObfuscator.java    |  191 ---
 .../keys/loader/DESPrivateKeyObfuscator.java    |   76 --
 .../keys/loader/KeyPairResourceLoader.java      |  129 --
 .../keys/loader/KeyPairResourceParser.java      |  192 ---
 .../loader/PrivateKeyEncryptionContext.java     |  270 ----
 .../keys/loader/PrivateKeyObfuscator.java       |   64 -
 .../OpenSSHDSSPrivateKeyEntryDecoder.java       |  139 ---
 .../OpenSSHECDSAPrivateKeyEntryDecoder.java     |  164 ---
 .../openssh/OpenSSHKeyPairResourceParser.java   |  358 ------
 .../loader/openssh/OpenSSHParserContext.java    |   83 --
 .../openssh/OpenSSHRSAPrivateKeyDecoder.java    |  135 --
 .../pem/AbstractPEMResourceKeyPairParser.java   |  167 ---
 .../loader/pem/DSSPEMResourceKeyPairParser.java |  126 --
 .../pem/ECDSAPEMResourceKeyPairParser.java      |  220 ----
 .../loader/pem/KeyPairPEMResourceParser.java    |   37 -
 .../keys/loader/pem/PEMResourceParserUtils.java |  109 --
 .../pem/PKCS8PEMResourceKeyPairParser.java      |  156 ---
 .../loader/pem/RSAPEMResourceKeyPairParser.java |  142 ---
 .../apache/sshd/common/digest/BaseDigest.java   |  156 ---
 .../sshd/common/digest/BuiltinDigests.java      |  166 ---
 .../org/apache/sshd/common/digest/Digest.java   |   36 -
 .../sshd/common/digest/DigestFactory.java       |   32 -
 .../sshd/common/digest/DigestInformation.java   |   36 -
 .../apache/sshd/common/digest/DigestUtils.java  |  228 ----
 .../org/apache/sshd/common/digest/package.html  |   25 -
 .../sshd/common/future/AbstractSshFuture.java   |  194 ---
 .../apache/sshd/common/future/CloseFuture.java  |   40 -
 .../sshd/common/future/DefaultCloseFuture.java  |   52 -
 .../sshd/common/future/DefaultSshFuture.java    |  236 ----
 .../future/DefaultVerifiableSshFuture.java      |   30 -
 .../apache/sshd/common/future/SshFuture.java    |   48 -
 .../sshd/common/future/SshFutureListener.java   |   42 -
 .../sshd/common/future/VerifiableFuture.java    |   68 -
 .../sshd/common/future/WaitableFuture.java      |  118 --
 .../common/helpers/AbstractFactoryManager.java  |    6 -
 .../keyprovider/AbstractKeyPairProvider.java    |   32 -
 .../AbstractResourceKeyPairProvider.java        |  234 ----
 .../ClassLoadableResourceKeyPairProvider.java   |  113 --
 .../common/keyprovider/FileKeyPairProvider.java |   92 --
 .../common/keyprovider/KeyIdentityProvider.java |  204 ---
 .../common/keyprovider/KeyPairProvider.java     |  181 ---
 .../keyprovider/KeyPairProviderHolder.java      |   35 -
 .../keyprovider/MappedKeyPairProvider.java      |   97 --
 .../org/apache/sshd/common/mac/BaseMac.java     |  111 --
 .../org/apache/sshd/common/mac/BuiltinMacs.java |  273 ----
 .../java/org/apache/sshd/common/mac/Mac.java    |   52 -
 .../org/apache/sshd/common/mac/MacFactory.java  |   31 -
 .../apache/sshd/common/mac/MacInformation.java  |   41 -
 .../org/apache/sshd/common/mac/package.html     |   25 -
 .../sshd/common/random/AbstractRandom.java      |   34 -
 .../common/random/AbstractRandomFactory.java    |   43 -
 .../apache/sshd/common/random/JceRandom.java    |   60 -
 .../sshd/common/random/JceRandomFactory.java    |   42 -
 .../org/apache/sshd/common/random/Random.java   |   56 -
 .../sshd/common/random/RandomFactory.java       |   31 -
 .../common/random/SingletonRandomFactory.java   |   70 --
 .../org/apache/sshd/common/random/package.html  |   25 -
 .../org/apache/sshd/common/session/Session.java |   27 +
 .../common/session/helpers/AbstractSession.java |    6 -
 .../common/signature/AbstractSignature.java     |  149 ---
 .../common/signature/BuiltinSignatures.java     |  305 -----
 .../apache/sshd/common/signature/Signature.java |   88 --
 .../sshd/common/signature/SignatureDSA.java     |  142 ---
 .../sshd/common/signature/SignatureECDSA.java   |  144 ---
 .../signature/SignatureFactoriesManager.java    |   94 --
 .../sshd/common/signature/SignatureFactory.java |   31 -
 .../sshd/common/signature/SignatureRSA.java     |   89 --
 .../apache/sshd/common/signature/package.html   |   25 -
 .../sshd/common/util/EventListenerUtils.java    |  212 ----
 .../apache/sshd/common/util/EventNotifier.java  |   35 -
 .../apache/sshd/common/util/GenericUtils.java   |  915 --------------
 .../sshd/common/util/IgnoringEmptyMap.java      |  128 --
 .../sshd/common/util/Int2IntFunction.java       |   66 -
 .../org/apache/sshd/common/util/Invoker.java    |  116 --
 .../apache/sshd/common/util/MapEntryUtils.java  |   51 -
 .../apache/sshd/common/util/NumberUtils.java    |  313 -----
 .../apache/sshd/common/util/ObjectBuilder.java  |   38 -
 .../org/apache/sshd/common/util/OsUtils.java    |  257 ----
 .../org/apache/sshd/common/util/Readable.java   |   53 -
 .../sshd/common/util/ReflectionUtils.java       |   53 -
 .../apache/sshd/common/util/SelectorUtils.java  |  805 ------------
 .../sshd/common/util/SshdEventListener.java     |   44 -
 .../apache/sshd/common/util/ValidateUtils.java  |  216 ----
 .../apache/sshd/common/util/VersionInfo.java    |  137 --
 .../apache/sshd/common/util/buffer/Buffer.java  |  798 ------------
 .../common/util/buffer/BufferException.java     |   30 -
 .../sshd/common/util/buffer/BufferUtils.java    |  604 ---------
 .../common/util/buffer/ByteArrayBuffer.java     |  253 ----
 .../keys/AbstractBufferPublicKeyParser.java     |   88 --
 .../util/buffer/keys/BufferPublicKeyParser.java |  111 --
 .../buffer/keys/DSSBufferPublicKeyParser.java   |   52 -
 .../buffer/keys/ECBufferPublicKeyParser.java    |   81 --
 .../keys/ED25519BufferPublicKeyParser.java      |   47 -
 .../buffer/keys/RSABufferPublicKeyParser.java   |   49 -
 .../util/closeable/AbstractCloseable.java       |  162 ---
 .../util/closeable/AbstractInnerCloseable.java  |   48 -
 .../sshd/common/util/closeable/Builder.java     |  115 --
 .../common/util/closeable/FuturesCloseable.java |   76 --
 .../common/util/closeable/IoBaseCloseable.java  |   35 -
 .../util/closeable/ParallelCloseable.java       |   73 --
 .../util/closeable/SequentialCloseable.java     |   71 --
 .../common/util/closeable/SimpleCloseable.java  |   71 --
 .../util/io/CloseableEmptyInputStream.java      |   96 --
 .../sshd/common/util/io/DirectoryScanner.java   |  380 ------
 .../sshd/common/util/io/EmptyInputStream.java   |   66 -
 .../sshd/common/util/io/FileInfoExtractor.java  |   53 -
 .../common/util/io/InputStreamWithChannel.java  |   32 -
 .../org/apache/sshd/common/util/io/IoUtils.java |  556 ---------
 .../sshd/common/util/io/LimitInputStream.java   |  113 --
 .../util/io/LoggingFilterOutputStream.java      |   67 -
 .../common/util/io/ModifiableFileWatcher.java   |  258 ----
 .../sshd/common/util/io/NoCloseInputStream.java |   47 -
 .../common/util/io/NoCloseOutputStream.java     |   47 -
 .../sshd/common/util/io/NoCloseReader.java      |   46 -
 .../sshd/common/util/io/NoCloseWriter.java      |   46 -
 .../sshd/common/util/io/NullInputStream.java    |   90 --
 .../sshd/common/util/io/NullOutputStream.java   |   72 --
 .../common/util/io/OutputStreamWithChannel.java |   32 -
 .../sshd/common/util/io/der/ASN1Class.java      |   93 --
 .../sshd/common/util/io/der/ASN1Object.java     |  338 -----
 .../sshd/common/util/io/der/ASN1Type.java       |  118 --
 .../sshd/common/util/io/der/DERParser.java      |  151 ---
 .../sshd/common/util/io/der/DERWriter.java      |  172 ---
 .../common/util/io/functors/IOFunction.java     |   86 --
 .../util/logging/AbstractLoggingBean.java       |   72 --
 .../sshd/common/util/logging/LoggingUtils.java  |  549 --------
 .../sshd/common/util/logging/SimplifiedLog.java |   55 -
 .../sshd/common/util/net/NetworkConnector.java  |   90 --
 .../sshd/common/util/net/SshdSocketAddress.java |  639 ----------
 .../AbstractSecurityProviderRegistrar.java      |  129 --
 .../util/security/SecurityEntityFactory.java    |  194 ---
 .../util/security/SecurityProviderChoice.java   |  130 --
 .../security/SecurityProviderRegistrar.java     |  337 -----
 .../common/util/security/SecurityUtils.java     |  759 ------------
 .../BouncyCastleGeneratorHostKeyProvider.java   |   48 -
 .../BouncyCastleKeyPairResourceParser.java      |  130 --
 .../bouncycastle/BouncyCastleRandom.java        |   88 --
 .../bouncycastle/BouncyCastleRandomFactory.java |   45 -
 .../BouncyCastleSecurityProviderRegistrar.java  |  128 --
 .../security/eddsa/Ed25519PublicKeyDecoder.java |   97 --
 .../eddsa/EdDSASecurityProviderRegistrar.java   |  104 --
 .../eddsa/EdDSASecurityProviderUtils.java       |  201 ---
 .../OpenSSHEd25519PrivateKeyEntryDecoder.java   |  172 ---
 .../util/security/eddsa/SignatureEd25519.java   |   49 -
 .../util/threads/CloseableExecutorService.java  |   28 -
 .../util/threads/ExecutorServiceCarrier.java    |   31 -
 .../common/util/threads/NoCloseExecutor.java    |  160 ---
 .../util/threads/SshThreadPoolExecutor.java     |  138 ---
 .../common/util/threads/SshdThreadFactory.java  |   78 --
 .../sshd/common/util/threads/ThreadUtils.java   |  185 ---
 .../auth/pubkey/PublickeyAuthenticator.java     |   17 +
 .../config/SshServerConfigFileReader.java       |   22 +-
 .../keys/AuthorizedKeysAuthenticator.java       |    4 +-
 .../AbstractGeneratorHostKeyProvider.java       |  293 -----
 .../SimpleGeneratorHostKeyProvider.java         |   67 -
 .../java/org/apache/sshd/KeepAliveTest.java     |    6 +-
 .../java/org/apache/sshd/agent/AgentTest.java   |    4 +-
 .../sshd/client/ClientSessionListenerTest.java  |    6 +-
 .../auth/PasswordIdentityProviderTest.java      |   73 --
 .../sshd/client/channel/ChannelExecTest.java    |    6 +-
 .../hosts/ConfigFileHostEntryResolverTest.java  |  139 ---
 .../hosts/HostConfigEntryResolverTest.java      |   11 +-
 .../config/hosts/HostConfigEntryTest.java       |  325 -----
 .../config/hosts/KnownHostHashValueTest.java    |   79 --
 .../BuiltinClientIdentitiesWatcherTest.java     |  161 ---
 .../keys/ClientIdentityFileWatcherTest.java     |  121 --
 .../client/config/keys/ClientIdentityTest.java  |  100 --
 .../org/apache/sshd/client/kex/KexTest.java     |    6 +-
 .../KnownHostsServerKeyVerifierTest.java        |    6 +-
 .../sshd/client/session/ClientSessionTest.java  |    6 +-
 .../client/simple/SimpleSessionClientTest.java  |    6 +-
 .../apache/sshd/common/AttributeStoreTest.java  |   24 +-
 .../sshd/common/PropertyResolverUtilsTest.java  |   24 +-
 .../apache/sshd/common/SshConstantsTest.java    |   75 --
 .../sshd/common/VersionPropertiesTest.java      |   45 -
 .../sshd/common/auth/AuthenticationTest.java    |   18 +-
 .../sshd/common/cipher/AES192CTRTest.java       |   41 -
 .../sshd/common/cipher/AES256CBCTest.java       |   41 -
 .../sshd/common/cipher/ARCFOUR128Test.java      |   39 -
 .../sshd/common/cipher/ARCFOUR256Test.java      |   41 -
 .../sshd/common/cipher/BaseCipherTest.java      |   95 --
 .../apache/sshd/common/cipher/CipherTest.java   |   25 +-
 .../apache/sshd/common/cipher/ECCurvesTest.java |  107 --
 .../compression/BuiltinCompressionsTest.java    |  171 ---
 .../common/compression/CompressionTest.java     |    7 +-
 .../common/config/SshConfigFileReaderTest.java  |   39 +-
 .../sshd/common/config/TimeValueConfigTest.java |   57 -
 ...AuthorizedKeyEntryLoginOptionsParseTest.java |  124 --
 .../config/keys/AuthorizedKeyEntryTest.java     |    6 +-
 .../config/keys/BuiltinIdentitiesTest.java      |  116 --
 .../common/config/keys/KeyRandomArtTest.java    |  117 --
 .../common/config/keys/KeyUtilsCloneTest.java   |  120 --
 .../KeyUtilsFingerprintCaseSensitivityTest.java |   96 --
 .../keys/KeyUtilsFingerprintGenerationTest.java |  159 ---
 .../sshd/common/config/keys/KeyUtilsTest.java   |  157 ---
 .../common/config/keys/PublicKeyEntryTest.java  |   62 -
 .../loader/AESPrivateKeyObfuscatorTest.java     |   79 --
 .../OpenSSHKeyPairResourceParserTest.java       |  108 --
 .../pem/PKCS8PEMResourceKeyPairParserTest.java  |  107 --
 .../sshd/common/digest/BuiltinDigestsTest.java  |   65 -
 .../file/root/RootedFileSystemProviderTest.java |    4 +-
 .../common/forward/PortForwardingLoadTest.java  |    6 +-
 .../sshd/common/forward/PortForwardingTest.java |   14 +-
 .../common/future/DefaultSshFutureTest.java     |  137 --
 .../common/keyprovider/KeyPairProviderTest.java |   79 --
 .../apache/sshd/common/mac/BuiltinMacsTest.java |  166 ---
 .../org/apache/sshd/common/mac/MacTest.java     |    7 +-
 .../apache/sshd/common/mac/MacVectorsTest.java  |  311 -----
 .../sshd/common/random/RandomFactoryTest.java   |   83 --
 .../session/helpers/AbstractSessionTest.java    |    2 +-
 .../common/signature/BuiltinSignaturesTest.java |  149 ---
 .../sshd/common/signature/SignatureDSATest.java |  109 --
 .../signature/SignatureFactoriesTest.java       |    6 +-
 .../sshd/common/signature/SignatureRSATest.java |  119 --
 .../common/signature/SignaturesDevelopment.java |   79 --
 .../common/util/EventListenerUtilsTest.java     |  149 ---
 .../sshd/common/util/GenericUtilsTest.java      |  173 ---
 .../sshd/common/util/Int2IntFunctionTest.java   |  154 ---
 .../sshd/common/util/NumberUtilsTest.java       |   77 --
 .../apache/sshd/common/util/OsUtilsTest.java    |  135 --
 .../sshd/common/util/SecurityUtilsTest.java     |  232 ----
 .../sshd/common/util/SelectorUtilsTest.java     |  147 ---
 .../sshd/common/util/ThreadUtilsTest.java       |   72 --
 .../sshd/common/util/ValidateUtilsTest.java     |   44 -
 .../sshd/common/util/VersionInfoTest.java       |   52 -
 .../sshd/common/util/buffer/BufferTest.java     |  103 --
 .../common/util/buffer/BufferUtilsTest.java     |   73 --
 .../util/closeable/CloseableUtilsTest.java      |  163 ---
 .../common/util/io/EmptyInputStreamTest.java    |  120 --
 .../apache/sshd/common/util/io/IoUtilsTest.java |   61 -
 .../common/util/io/LimitInputStreamTest.java    |  118 --
 .../util/io/ModifiableFileWatcherTest.java      |   82 --
 .../common/util/io/NoCloseInputStreamTest.java  |   89 --
 .../common/util/io/NoCloseOutputStreamTest.java |   69 --
 .../sshd/common/util/io/NoCloseReaderTest.java  |   95 --
 .../sshd/common/util/io/NoCloseWriterTest.java  |   73 --
 .../common/util/io/NullInputStreamTest.java     |  118 --
 .../common/util/io/NullOutputStreamTest.java    |   80 --
 .../sshd/common/util/io/der/ASN1ClassTest.java  |   67 -
 .../sshd/common/util/io/der/ASN1TypeTest.java   |   67 -
 .../sshd/common/util/io/der/DERParserTest.java  |   61 -
 .../sshd/common/util/io/der/DERWriterTest.java  |   64 -
 .../util/net/SshdSocketIpv6AddressTest.java     |   88 --
 ...SecurityProviderRegistrarCipherNameTest.java |   75 --
 .../SecurityProviderRegistrarTestSupport.java   |   62 -
 .../util/security/eddsa/EDDSAProviderTest.java  |  126 --
 .../util/security/eddsa/Ed25519VectorsTest.java |  238 ----
 .../EdDSASecurityProviderRegistrarTest.java     |   85 --
 .../sshd/server/ServerSessionListenerTest.java  |    6 +-
 .../server/auth/WelcomeBannerPhaseTest.java     |    6 +-
 .../sshd/server/auth/WelcomeBannerTest.java     |    6 +-
 .../AbstractGeneratorHostKeyProviderTest.java   |   83 --
 .../PEMGeneratorHostKeyProviderTest.java        |  141 ---
 .../SimpleGeneratorHostKeyProviderTest.java     |  133 --
 .../apache/sshd/util/test/BaseTestSupport.java  |  543 +-------
 .../sshd/util/test/CoreTestSupportUtils.java    |   63 +
 .../test/JUnit4ClassRunnerWithParameters.java   |   48 -
 .../JUnit4ClassRunnerWithParametersFactory.java |   58 -
 .../test/JUnit4SingleInstanceClassRunner.java   |   54 -
 .../org/apache/sshd/util/test/NoIoTestCase.java |   30 -
 .../test/OutputCountTrackingOutputStream.java   |   56 -
 .../apache/sshd/util/test/TeeOutputStream.java  |   64 -
 .../java/org/apache/sshd/util/test/Utils.java   |  652 ----------
 .../testReadGlobalHostsConfigEntries.config.txt |   22 -
 .../testReadMultipleHostPatterns.config.txt     |    5 -
 .../testReadSimpleHostsConfigEntries.config.txt |    8 -
 .../org/apache/sshd/client/config/keys/id_dsa   |   12 -
 .../org/apache/sshd/client/config/keys/id_ecdsa |    5 -
 .../apache/sshd/client/config/keys/id_rsa_key   |   27 -
 ...OpenSSHKeyPairResourceParserTest-DSA-KeyPair |   21 -
 ...SSHKeyPairResourceParserTest-DSA-KeyPair.pub |    1 -
 ...enSSHKeyPairResourceParserTest-ECDSA-KeyPair |   12 -
 ...HKeyPairResourceParserTest-ECDSA-KeyPair.pub |    1 -
 ...SSHKeyPairResourceParserTest-ED25519-KeyPair |    7 -
 ...eyPairResourceParserTest-ED25519-KeyPair.pub |    1 -
 ...OpenSSHKeyPairResourceParserTest-RSA-KeyPair |   49 -
 ...SSHKeyPairResourceParserTest-RSA-KeyPair.pub |    1 -
 .../EDDSAProviderTest-EDDSA-OpenSSH-KeyPair     |    7 -
 .../EDDSAProviderTest-EDDSA-OpenSSH-KeyPair.pub |    1 -
 .../common/util/SecurityUtilsTest-DSA-KeyPair   |   12 -
 .../util/SecurityUtilsTest-DSA-KeyPair.pub      |    1 -
 .../util/SecurityUtilsTest-EC-256-KeyPair       |    5 -
 .../util/SecurityUtilsTest-EC-256-KeyPair.pub   |    1 -
 .../util/SecurityUtilsTest-EC-384-KeyPair       |    6 -
 .../util/SecurityUtilsTest-EC-384-KeyPair.pub   |    1 -
 .../util/SecurityUtilsTest-EC-521-KeyPair       |    7 -
 .../util/SecurityUtilsTest-EC-521-KeyPair.pub   |    1 -
 .../common/util/SecurityUtilsTest-RSA-KeyPair   |   27 -
 .../util/SecurityUtilsTest-RSA-KeyPair.pub      |    1 -
 .../super-secret-passphrase-RSA-AES-128-key     |   30 -
 .../super-secret-passphrase-RSA-AES-128-key.pub |    1 -
 .../super-secret-passphrase-RSA-AES-192-key     |   30 -
 .../super-secret-passphrase-RSA-AES-192-key.pub |    1 -
 .../super-secret-passphrase-RSA-AES-256-key     |   30 -
 .../super-secret-passphrase-RSA-AES-256-key.pub |    1 -
 .../super-secret-passphrase-RSA-DES-EDE3-key    |   30 -
 ...super-secret-passphrase-RSA-DES-EDE3-key.pub |    1 -
 sshd-git/pom.xml                                |    7 +
 .../sshd/git/pack/GitPackCommandTest.java       |    6 +-
 .../apache/sshd/git/pgm/GitPgmCommandTest.java  |    4 +-
 sshd-ldap/pom.xml                               |    7 +
 .../sshd/server/auth/BaseAuthenticatorTest.java |   17 +-
 sshd-mina/pom.xml                               |    7 +
 sshd-netty/pom.xml                              |    7 +
 sshd-scp/pom.xml                                |    9 +-
 .../org/apache/sshd/client/scp/ScpTest.java     |  154 +--
 .../sshd/client/scp/SimpleScpClientTest.java    |   20 +-
 sshd-sftp/pom.xml                               |    9 +-
 .../subsystem/sftp/SftpFileSystemProvider.java  |    8 +-
 .../sftp/AbstractSftpClientTestSupport.java     |    6 +-
 .../sftp/DefaultCloseableHandleTest.java        |    4 +-
 .../subsystem/sftp/SftpFileSystemTest.java      |   30 +-
 .../sshd/client/subsystem/sftp/SftpTest.java    |   78 +-
 .../subsystem/sftp/SftpVersionSelectorTest.java |    4 +-
 .../client/subsystem/sftp/SftpVersionsTest.java |   24 +-
 .../subsystem/sftp/SimpleSftpClientTest.java    |    8 +-
 .../helpers/AbstractCheckFileExtensionTest.java |    8 +-
 .../helpers/AbstractMD5HashExtensionTest.java   |    8 +-
 .../helpers/CopyDataExtensionImplTest.java      |    8 +-
 .../helpers/CopyFileExtensionImplTest.java      |   11 +-
 .../SpaceAvailableExtensionImplTest.java        |    6 +-
 .../openssh/helpers/OpenSSHExtensionsTest.java  |   10 +-
 .../subsystem/sftp/SftpConstantsTest.java       |    4 +-
 .../sftp/SftpUniversalOwnerAndGroupTest.java    |    4 +-
 .../sftp/SftpSubsystemFactoryTest.java          |    4 +-
 sshd-spring-sftp/pom.xml                        |    7 +
 .../sftp/ApacheSshdSftpSessionFactory.java      |    4 +-
 .../sftp/ApacheSshdSftpSessionFactoryTest.java  |   21 +-
 793 files changed, 44627 insertions(+), 44210 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/assembly/pom.xml
----------------------------------------------------------------------
diff --git a/assembly/pom.xml b/assembly/pom.xml
index 6efb67a..93011a8 100644
--- a/assembly/pom.xml
+++ b/assembly/pom.xml
@@ -38,6 +38,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.sshd</groupId>
+            <artifactId>sshd-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sshd</groupId>
             <artifactId>sshd-core</artifactId>
             <version>${project.version}</version>
         </dependency>

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 34d245f..a684d78 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1135,6 +1135,7 @@
     </reporting>
 
     <modules>
+        <module>sshd-common</module>
         <module>sshd-core</module>
         <module>sshd-mina</module>
         <module>sshd-netty</module>

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-cli/pom.xml
----------------------------------------------------------------------
diff --git a/sshd-cli/pom.xml b/sshd-cli/pom.xml
index 3fdfb7a..3babf6b 100644
--- a/sshd-cli/pom.xml
+++ b/sshd-cli/pom.xml
@@ -61,6 +61,13 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sshd</groupId>
+            <artifactId>sshd-common</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
             <!-- For the I/O factories -->
         <dependency>
             <groupId>org.apache.sshd</groupId>

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java
----------------------------------------------------------------------
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java b/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java
index 27c6d96..025c209 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/CliSupport.java
@@ -24,8 +24,8 @@ import java.net.SocketAddress;
 import java.util.Map;
 import java.util.Objects;
 
+import org.apache.sshd.common.config.ConfigFileReaderSupport;
 import org.apache.sshd.common.config.LogLevelValue;
-import org.apache.sshd.common.config.SshConfigFileReader;
 import org.apache.sshd.common.helpers.AbstractFactoryManager;
 import org.apache.sshd.common.io.BuiltinIoServiceFactoryFactories;
 import org.apache.sshd.common.io.IoAcceptor;
@@ -105,14 +105,14 @@ public abstract class CliSupport {
 
         manager.setIoServiceFactoryFactory(factory.create());
 
-        String levelValue = (options == null) ? null : Objects.toString(options.get(SshConfigFileReader.LOG_LEVEL_CONFIG_PROP), null);
+        String levelValue = (options == null) ? null : Objects.toString(options.get(ConfigFileReaderSupport.LOG_LEVEL_CONFIG_PROP), null);
         if (GenericUtils.isEmpty(levelValue)) {
             return manager;
         }
 
         LogLevelValue level = LogLevelValue.fromName(levelValue);
         if (level == null) {
-            throw new IllegalArgumentException("Unknown " + SshConfigFileReader.LOG_LEVEL_CONFIG_PROP + " option value: " + levelValue);
+            throw new IllegalArgumentException("Unknown " + ConfigFileReaderSupport.LOG_LEVEL_CONFIG_PROP + " option value: " + levelValue);
         }
 
         if ((level != LogLevelValue.FATAL) && (level != LogLevelValue.ERROR) && (level != LogLevelValue.INFO)) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java
----------------------------------------------------------------------
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java
index 0d7d2f5..2d129f6 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshClientCliSupport.java
@@ -65,7 +65,7 @@ import org.apache.sshd.common.cipher.Cipher;
 import org.apache.sshd.common.compression.BuiltinCompressions;
 import org.apache.sshd.common.compression.Compression;
 import org.apache.sshd.common.config.CompressionConfigValue;
-import org.apache.sshd.common.config.SshConfigFileReader;
+import org.apache.sshd.common.config.ConfigFileReaderSupport;
 import org.apache.sshd.common.config.keys.BuiltinIdentities;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.config.keys.PublicKeyEntry;
@@ -236,7 +236,7 @@ public abstract class SshClientCliSupport extends CliSupport {
             }
 
             if (port <= 0) {
-                port = SshConfigFileReader.DEFAULT_PORT;
+                port = ConfigFileReaderSupport.DEFAULT_PORT;
             }
 
             // TODO use a configurable wait time
@@ -424,7 +424,7 @@ public abstract class SshClientCliSupport extends CliSupport {
         }
 
         String strictValue = Objects.toString(options.remove(KnownHostsServerKeyVerifier.STRICT_CHECKING_OPTION), "true");
-        if (!SshConfigFileReader.parseBooleanValue(strictValue)) {
+        if (!ConfigFileReaderSupport.parseBooleanValue(strictValue)) {
             return current;
         }
 
@@ -506,7 +506,7 @@ public abstract class SshClientCliSupport extends CliSupport {
     }
 
     public static List<NamedFactory<Compression>> setupCompressions(PropertyResolver options, PrintStream stderr) {
-        String argVal = PropertyResolverUtils.getString(options, SshConfigFileReader.COMPRESSION_PROP);
+        String argVal = PropertyResolverUtils.getString(options, ConfigFileReaderSupport.COMPRESSION_PROP);
         if (GenericUtils.isEmpty(argVal)) {
             return Collections.emptyList();
         }
@@ -543,10 +543,10 @@ public abstract class SshClientCliSupport extends CliSupport {
     }
 
     public static List<NamedFactory<Mac>> setupMacs(PropertyResolver options, PrintStream stderr) {
-        String argVal = PropertyResolverUtils.getString(options, SshConfigFileReader.MACS_CONFIG_PROP);
+        String argVal = PropertyResolverUtils.getString(options, ConfigFileReaderSupport.MACS_CONFIG_PROP);
         return GenericUtils.isEmpty(argVal)
              ? Collections.emptyList()
-             : setupMacs(SshConfigFileReader.MACS_CONFIG_PROP, argVal, null, stderr);
+             : setupMacs(ConfigFileReaderSupport.MACS_CONFIG_PROP, argVal, null, stderr);
     }
 
     public static List<NamedFactory<Mac>> setupMacs(String argName, String argVal, List<NamedFactory<Mac>> current, PrintStream stderr) {
@@ -571,10 +571,10 @@ public abstract class SshClientCliSupport extends CliSupport {
     }
 
     public static List<NamedFactory<Cipher>> setupCiphers(PropertyResolver options, PrintStream stderr) {
-        String argVal = PropertyResolverUtils.getString(options, SshConfigFileReader.CIPHERS_CONFIG_PROP);
+        String argVal = PropertyResolverUtils.getString(options, ConfigFileReaderSupport.CIPHERS_CONFIG_PROP);
         return GenericUtils.isEmpty(argVal)
              ? Collections.emptyList()
-             : setupCiphers(SshConfigFileReader.CIPHERS_CONFIG_PROP, argVal, null, stderr);
+             : setupCiphers(ConfigFileReaderSupport.CIPHERS_CONFIG_PROP, argVal, null, stderr);
     }
 
     // returns null - e.g., re-specified or no supported cipher found

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java
----------------------------------------------------------------------
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java
index b5350f0..adc120f 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java
@@ -63,7 +63,7 @@ import org.apache.sshd.client.keyverifier.ServerKeyVerifier;
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.cipher.ECCurves;
-import org.apache.sshd.common.config.SshConfigFileReader;
+import org.apache.sshd.common.config.ConfigFileReaderSupport;
 import org.apache.sshd.common.config.keys.BuiltinIdentities;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.config.keys.PublicKeyEntry;
@@ -711,7 +711,7 @@ public class SshKeyScanMain implements Channel, Callable<Void>, ServerKeyVerifie
     public static <S extends SshKeyScanMain> S initializeScanner(S scanner, Collection<String> hosts) throws IOException {
         setInputStream(scanner, hosts);
         if (scanner.getPort() <= 0) {
-            scanner.setPort(SshConfigFileReader.DEFAULT_PORT);
+            scanner.setPort(ConfigFileReaderSupport.DEFAULT_PORT);
         }
 
         if (scanner.getTimeout() <= 0L) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java
----------------------------------------------------------------------
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java b/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java
index 8b392bc..6cdffc8 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerCliSupport.java
@@ -40,7 +40,7 @@ import org.apache.sshd.cli.CliSupport;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.PropertyResolver;
 import org.apache.sshd.common.PropertyResolverUtils;
-import org.apache.sshd.common.config.SshConfigFileReader;
+import org.apache.sshd.common.config.ConfigFileReaderSupport;
 import org.apache.sshd.common.config.keys.BuiltinIdentities;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.keyprovider.KeyPairProvider;
@@ -166,7 +166,7 @@ public abstract class SshServerCliSupport extends CliSupport {
             return subsystems;
         }
 
-        String nameList = (options == null) ? null : options.getString(SshConfigFileReader.SUBSYSTEM_CONFIG_PROP);
+        String nameList = (options == null) ? null : options.getString(ConfigFileReaderSupport.SUBSYSTEM_CONFIG_PROP);
         if ("none".equalsIgnoreCase(nameList)) {
             return Collections.emptyList();
         }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerMain.java
----------------------------------------------------------------------
diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerMain.java b/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerMain.java
index 0740d65..92bd182 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerMain.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/server/SshServerMain.java
@@ -30,6 +30,7 @@ import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.NamedResource;
 import org.apache.sshd.common.PropertyResolver;
 import org.apache.sshd.common.PropertyResolverUtils;
+import org.apache.sshd.common.config.ConfigFileReaderSupport;
 import org.apache.sshd.common.config.SshConfigFileReader;
 import org.apache.sshd.common.keyprovider.KeyPairProvider;
 import org.apache.sshd.common.util.GenericUtils;
@@ -138,7 +139,7 @@ public class SshServerMain extends SshServerCliSupport {
                         keyFiles = new LinkedList<>();
                     }
                     keyFiles.add(optValue);
-                } else if (SshConfigFileReader.PORT_CONFIG_PROP.equals(optName)) {
+                } else if (ConfigFileReaderSupport.PORT_CONFIG_PROP.equals(optName)) {
                     port = Integer.parseInt(optValue);
                 } else {
                     options.put(optName, optValue);
@@ -166,7 +167,7 @@ public class SshServerMain extends SshServerCliSupport {
         setupServerBanner(sshd, resolver);
         sshd.setPort(port);
 
-        String macsOverride = resolver.getString(SshConfigFileReader.MACS_CONFIG_PROP);
+        String macsOverride = resolver.getString(ConfigFileReaderSupport.MACS_CONFIG_PROP);
         if (GenericUtils.isNotEmpty(macsOverride)) {
             SshConfigFileReader.configureMacs(sshd, macsOverride, true, true);
         }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java
----------------------------------------------------------------------
diff --git a/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java b/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java
index 51596b1..37cf8bc 100644
--- a/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java
+++ b/sshd-cli/src/test/java/org/apache/sshd/cli/server/SshFsMounter.java
@@ -35,7 +35,7 @@ import java.util.concurrent.Future;
 
 import org.apache.sshd.common.PropertyResolver;
 import org.apache.sshd.common.PropertyResolverUtils;
-import org.apache.sshd.common.config.SshConfigFileReader;
+import org.apache.sshd.common.config.ConfigFileReaderSupport;
 import org.apache.sshd.common.io.BuiltinIoServiceFactoryFactories;
 import org.apache.sshd.common.io.IoServiceFactory;
 import org.apache.sshd.common.util.GenericUtils;
@@ -56,7 +56,8 @@ import org.apache.sshd.server.scp.ScpCommandFactory;
 import org.apache.sshd.server.session.ServerSession;
 import org.apache.sshd.server.shell.ShellFactory;
 import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory;
-import org.apache.sshd.util.test.Utils;
+import org.apache.sshd.util.test.CommonTestSupportUtils;
+import org.apache.sshd.util.test.CoreTestSupportUtils;
 
 /**
  * A basic implementation to allow remote mounting of the local file system via SFTP
@@ -249,7 +250,7 @@ public final class SshFsMounter extends SshServerCliSupport {
     //////////////////////////////////////////////////////////////////////////
 
     public static void main(String[] args) throws Exception {
-        int port = SshConfigFileReader.DEFAULT_PORT;
+        int port = ConfigFileReaderSupport.DEFAULT_PORT;
         boolean error = false;
         Map<String, Object> options = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
         int numArgs = GenericUtils.length(args);
@@ -296,7 +297,7 @@ public final class SshFsMounter extends SshServerCliSupport {
         }
 
         SshServer sshd = error ? null : setupIoServiceFactory(
-            Utils.setupTestServer(SshFsMounter.class), options, System.out, System.err, args);
+            CoreTestSupportUtils.setupTestServer(SshFsMounter.class), options, System.out, System.err, args);
         if (sshd == null) {
             error = true;
         }
@@ -309,7 +310,7 @@ public final class SshFsMounter extends SshServerCliSupport {
         Map<String, Object> props = sshd.getProperties();
         props.putAll(options);
         PropertyResolver resolver = PropertyResolverUtils.toPropertyResolver(options);
-        File targetFolder = Objects.requireNonNull(Utils.detectTargetFolder(MounterCommandFactory.class), "Failed to detect target folder");
+        File targetFolder = Objects.requireNonNull(CommonTestSupportUtils.detectTargetFolder(MounterCommandFactory.class), "Failed to detect target folder");
         if (SecurityUtils.isBouncyCastleRegistered()) {
             sshd.setKeyPairProvider(SecurityUtils.createGeneratorHostKeyProvider(new File(targetFolder, "key.pem").toPath()));
         } else {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-common/pom.xml
----------------------------------------------------------------------
diff --git a/sshd-common/pom.xml b/sshd-common/pom.xml
new file mode 100644
index 0000000..f893b19
--- /dev/null
+++ b/sshd-common/pom.xml
@@ -0,0 +1,128 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+
+    <!--
+
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version 2.0
+        (the "License"); you may not use this file except in compliance with
+        the License.  You may obtain a copy of the License at
+
+           http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing, software
+        distributed under the License is distributed on an "AS IS" BASIS,
+        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+        See the License for the specific language governing permissions and
+        limitations under the License.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.sshd</groupId>
+        <artifactId>sshd</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>sshd-common</artifactId>
+    <name>Apache Mina SSHD :: Common support utilities</name>
+    <packaging>jar</packaging>
+    <inceptionYear>2018</inceptionYear>
+
+    <properties>
+        <projectRoot>${project.basedir}/..</projectRoot>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpg-jdk15on</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk15on</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+            <!-- For ed25519 support -->
+        <dependency>
+            <groupId>net.i2p.crypto</groupId>
+            <artifactId>eddsa</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+            <!-- test dependencies -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.servicemix.bundles</groupId>
+            <artifactId>org.apache.servicemix.bundles.not-yet-commons-ssl</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/filtered-resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <!-- publish the test-jar since it contains some classes used by other
+                artifacts tests -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                        <configuration>
+                            <includes>
+                                <include>org/apache/sshd/util/test/**/*</include>
+                            </includes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                    <reportsDirectory>${project.build.directory}/surefire-reports-common</reportsDirectory>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-common/src/main/filtered-resources/org/apache/sshd/sshd-version.properties
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/filtered-resources/org/apache/sshd/sshd-version.properties b/sshd-common/src/main/filtered-resources/org/apache/sshd/sshd-version.properties
new file mode 100644
index 0000000..2c32c28
--- /dev/null
+++ b/sshd-common/src/main/filtered-resources/org/apache/sshd/sshd-version.properties
@@ -0,0 +1,23 @@
+##
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##  http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.
+##
+
+groupId=${pom.groupId}
+artifactId=${pom.artifactId}
+version=${pom.version}
+sshd-version=${pom.artifactId}-${pom.version}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-common/src/main/java/org/apache/sshd/client/auth/AuthenticationIdentitiesProvider.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/auth/AuthenticationIdentitiesProvider.java b/sshd-common/src/main/java/org/apache/sshd/client/auth/AuthenticationIdentitiesProvider.java
new file mode 100644
index 0000000..cfd1f85
--- /dev/null
+++ b/sshd-common/src/main/java/org/apache/sshd/client/auth/AuthenticationIdentitiesProvider.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sshd.client.auth;
+
+import java.security.KeyPair;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.sshd.client.auth.password.PasswordIdentityProvider;
+import org.apache.sshd.common.config.keys.KeyUtils;
+import org.apache.sshd.common.keyprovider.KeyIdentityProvider;
+import org.apache.sshd.common.util.GenericUtils;
+
+/**
+ * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
+ */
+public interface AuthenticationIdentitiesProvider extends KeyIdentityProvider, PasswordIdentityProvider {
+
+    /**
+     * Compares 2 password identities - returns zero ONLY if <U>both</U> compared
+     * objects are {@link String}s and equal to each other
+     */
+    Comparator<Object> PASSWORD_IDENTITY_COMPARATOR = (o1, o2) -> {
+        if (!(o1 instanceof String) || !(o2 instanceof String)) {
+            return -1;
+        } else {
+            return ((String) o1).compareTo((String) o2);
+        }
+    };
+
+    /**
+     * Compares 2 {@link KeyPair} identities - returns zero ONLY if <U>both</U> compared
+     * objects are {@link KeyPair}s and equal to each other
+     */
+    Comparator<Object> KEYPAIR_IDENTITY_COMPARATOR = (o1, o2) -> {
+        if ((!(o1 instanceof KeyPair)) || (!(o2 instanceof KeyPair))) {
+            return -1;
+        } else if (KeyUtils.compareKeyPairs((KeyPair) o1, (KeyPair) o2)) {
+            return 0;
+        } else {
+            return 1;
+        }
+    };
+
+    /**
+     * @return All the currently available identities - passwords, keys, etc...
+     */
+    Iterable<?> loadIdentities();
+
+    static int findIdentityIndex(List<?> identities, Comparator<? super Object> comp, Object target) {
+        for (int index = 0; index < identities.size(); index++) {
+            Object value = identities.get(index);
+            if (comp.compare(value, target) == 0) {
+                return index;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * @param identities The {@link Iterable} identities - OK if {@code null}/empty
+     * @return An {@link AuthenticationIdentitiesProvider} wrapping the identities
+     */
+    static AuthenticationIdentitiesProvider wrapIdentities(Iterable<?> identities) {
+        return new AuthenticationIdentitiesProvider() {
+            @Override
+            public Iterable<KeyPair> loadKeys() {
+                return selectIdentities(KeyPair.class);
+            }
+
+            @Override
+            public Iterable<String> loadPasswords() {
+                return selectIdentities(String.class);
+            }
+
+            @Override
+            public Iterable<?> loadIdentities() {
+                return selectIdentities(Object.class);
+            }
+
+            // NOTE: returns a NEW Collection on every call so that the original
+            //      identities remain unchanged
+            private <T> Collection<T> selectIdentities(Class<T> type) {
+                Collection<T> matches = null;
+                for (Iterator<?> iter = GenericUtils.iteratorOf(identities); iter.hasNext();) {
+                    Object o = iter.next();
+                    Class<?> t = o.getClass();
+                    if (!type.isAssignableFrom(t)) {
+                        continue;
+                    }
+
+                    if (matches == null) {
+                        matches = new LinkedList<>();
+                    }
+
+                    matches.add(type.cast(o));
+                }
+
+                return (matches == null) ? Collections.<T>emptyList() : matches;
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java b/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java
new file mode 100644
index 0000000..81c26ca
--- /dev/null
+++ b/sshd-common/src/main/java/org/apache/sshd/client/auth/hostbased/HostKeyIdentityProvider.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sshd.client.auth.hostbased;
+
+import java.security.KeyPair;
+import java.security.cert.X509Certificate;
+import java.util.AbstractMap.SimpleImmutableEntry;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.sshd.common.util.GenericUtils;
+
+/**
+ * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
+ */
+@FunctionalInterface
+public interface HostKeyIdentityProvider {
+    /**
+     * @return The host keys as a {@link java.util.Map.Entry} of key + certificates (which can be {@code null}/empty)
+     */
+    Iterable<? extends Map.Entry<KeyPair, List<X509Certificate>>> loadHostKeys();
+
+    static Iterator<? extends Map.Entry<KeyPair, List<X509Certificate>>> iteratorOf(HostKeyIdentityProvider provider) {
+        return GenericUtils.iteratorOf((provider == null) ? null : provider.loadHostKeys());
+    }
+
+    static HostKeyIdentityProvider wrap(KeyPair... pairs) {
+        return wrap(GenericUtils.asList(pairs));
+    }
+
+    static HostKeyIdentityProvider wrap(Iterable<? extends KeyPair> pairs) {
+        return () -> GenericUtils.wrapIterable(pairs, kp -> new SimpleImmutableEntry<>(kp, Collections.<X509Certificate>emptyList()));
+    }
+}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-common/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java b/sshd-common/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java
new file mode 100644
index 0000000..f075bf8
--- /dev/null
+++ b/sshd-common/src/main/java/org/apache/sshd/client/auth/password/PasswordIdentityProvider.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sshd.client.auth.password;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import org.apache.sshd.common.util.GenericUtils;
+
+/**
+ * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
+ */
+@FunctionalInterface
+public interface PasswordIdentityProvider {
+
+    /**
+     * An &quot;empty&quot implementation of {@link PasswordIdentityProvider} that returns
+     * and empty group of passwords
+     */
+    PasswordIdentityProvider EMPTY_PASSWORDS_PROVIDER = new PasswordIdentityProvider() {
+        @Override
+        public Iterable<String> loadPasswords() {
+            return Collections.emptyList();
+        }
+
+        @Override
+        public String toString() {
+            return "EMPTY";
+        }
+    };
+
+    /**
+     * Invokes {@link PasswordIdentityProvider#loadPasswords()} and returns the result.
+     * Ignores {@code null} providers (i.e., returns an empty iterable instance)
+     */
+    Function<PasswordIdentityProvider, Iterable<String>> LOADER = p ->
+            (p == null) ? Collections.emptyList() : p.loadPasswords();
+
+    /**
+     * @return The currently available passwords - ignored if {@code null}
+     */
+    Iterable<String> loadPasswords();
+
+    /**
+     * Creates a &quot;unified&quot; {@link Iterator} of passwords out of 2 possible
+     * {@link PasswordIdentityProvider}
+     *
+     * @param identities The registered passwords
+     * @param passwords Extra available passwords
+     * @return The wrapping iterator
+     * @see #resolvePasswordIdentityProvider(PasswordIdentityProvider, PasswordIdentityProvider)
+     */
+    static Iterator<String> iteratorOf(PasswordIdentityProvider identities, PasswordIdentityProvider passwords) {
+        return iteratorOf(resolvePasswordIdentityProvider(identities, passwords));
+    }
+
+    /**
+     * Resolves a non-{@code null} iterator of the available passwords
+     *
+     * @param provider The {@link PasswordIdentityProvider} - ignored if {@code null} (i.e.,
+     * return an empty iterator)
+     * @return A non-{@code null} iterator - which may be empty if no provider or no passwords
+     */
+    static Iterator<String> iteratorOf(PasswordIdentityProvider provider) {
+        return GenericUtils.iteratorOf((provider == null) ? null : provider.loadPasswords());
+    }
+
+    /**
+     * <P>Creates a &quot;unified&quot; {@link PasswordIdentityProvider} out of 2 possible ones
+     * as follows:</P></BR>
+     * <UL>
+     *      <LI>If both are {@code null} then return {@code null}.</LI>
+     *      <LI>If either one is {@code null} then use the non-{@code null} one.</LI>
+     *      <LI>If both are the same instance then use it.</U>
+     *      <LI>Otherwise, returns a wrapper that groups both providers.</LI>
+     * </UL>
+     * @param identities The registered passwords
+     * @param passwords The extra available passwords
+     * @return The resolved provider
+     * @see #multiProvider(PasswordIdentityProvider...)
+     */
+    static PasswordIdentityProvider resolvePasswordIdentityProvider(
+            PasswordIdentityProvider identities, PasswordIdentityProvider passwords) {
+        if ((passwords == null) || (identities == passwords)) {
+            return identities;
+        } else if (identities == null) {
+            return passwords;
+        } else {
+            return multiProvider(identities, passwords);
+        }
+    }
+
+    /**
+     * Wraps a group of {@link PasswordIdentityProvider} into a single one
+     *
+     * @param providers The providers - ignored if {@code null}/empty (i.e., returns
+     * {@link #EMPTY_PASSWORDS_PROVIDER}
+     * @return The wrapping provider
+     * @see #multiProvider(Collection)
+     */
+    static PasswordIdentityProvider multiProvider(PasswordIdentityProvider... providers) {
+        return multiProvider(GenericUtils.asList(providers));
+    }
+
+    /**
+     * Wraps a group of {@link PasswordIdentityProvider} into a single one
+     *
+     * @param providers The providers - ignored if {@code null}/empty (i.e., returns
+     * {@link #EMPTY_PASSWORDS_PROVIDER}
+     * @return The wrapping provider
+     */
+    static PasswordIdentityProvider multiProvider(Collection<? extends PasswordIdentityProvider> providers) {
+        return GenericUtils.isEmpty(providers) ? EMPTY_PASSWORDS_PROVIDER : wrapPasswords(iterableOf(providers));
+    }
+
+    /**
+     * Wraps a group of {@link PasswordIdentityProvider} into an {@link Iterable} of their combined passwords
+     *
+     * @param providers The providers - ignored if {@code null}/empty (i.e., returns an empty iterable instance)
+     * @return The wrapping iterable
+     */
+    static Iterable<String> iterableOf(Collection<? extends PasswordIdentityProvider> providers) {
+        Iterable<Supplier<Iterable<String>>> passwordSuppliers =
+                GenericUtils.<PasswordIdentityProvider, Supplier<Iterable<String>>>wrapIterable(providers, p -> p::loadPasswords);
+        return GenericUtils.multiIterableSuppliers(passwordSuppliers);
+    }
+
+    /**
+     * Wraps a group of passwords into a {@link PasswordIdentityProvider}
+     *
+     * @param passwords The passwords - ignored if {@code null}/empty
+     * (i.e., returns {@link #EMPTY_PASSWORDS_PROVIDER})
+     * @return The provider wrapper
+     */
+    static PasswordIdentityProvider wrapPasswords(String... passwords) {
+        return wrapPasswords(GenericUtils.asList(passwords));
+    }
+
+    /**
+     * Wraps a group of passwords into a {@link PasswordIdentityProvider}
+     *
+     * @param passwords The passwords {@link Iterable} - ignored if {@code null}
+     * (i.e., returns {@link #EMPTY_PASSWORDS_PROVIDER})
+     * @return The provider wrapper
+     */
+    static PasswordIdentityProvider wrapPasswords(Iterable<String> passwords) {
+        return (passwords == null) ? EMPTY_PASSWORDS_PROVIDER : () -> passwords;
+    }
+}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/10de190e/sshd-common/src/main/java/org/apache/sshd/client/auth/pubkey/PublicKeyIdentity.java
----------------------------------------------------------------------
diff --git a/sshd-common/src/main/java/org/apache/sshd/client/auth/pubkey/PublicKeyIdentity.java b/sshd-common/src/main/java/org/apache/sshd/client/auth/pubkey/PublicKeyIdentity.java
new file mode 100644
index 0000000..51444ae
--- /dev/null
+++ b/sshd-common/src/main/java/org/apache/sshd/client/auth/pubkey/PublicKeyIdentity.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sshd.client.auth.pubkey;
+
+import java.security.PublicKey;
+
+/**
+ * Represents a public key identity
+ *
+ * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
+ */
+public interface PublicKeyIdentity {
+    /**
+     * @return The {@link PublicKey} identity value
+     */
+    PublicKey getPublicKey();
+
+    /**
+     * Proves the public key identity by signing the given data
+     *
+     * @param data Data to sign
+     * @return Signed data - using the identity
+     * @throws Exception If failed to sign the data
+     */
+    byte[] sign(byte[] data) throws Exception;
+}
\ No newline at end of file