4453 |
10 Apr 17 |
nicklas |
1 |
package net.sf.basedb.xfiles.sftp; |
4453 |
10 Apr 17 |
nicklas |
2 |
|
4453 |
10 Apr 17 |
nicklas |
3 |
import java.security.MessageDigest; |
4453 |
10 Apr 17 |
nicklas |
4 |
import java.security.NoSuchAlgorithmException; |
4453 |
10 Apr 17 |
nicklas |
5 |
import java.security.PublicKey; |
4453 |
10 Apr 17 |
nicklas |
6 |
import java.util.Base64; |
7300 |
25 Aug 23 |
nicklas |
7 |
import java.util.Collections; |
7300 |
25 Aug 23 |
nicklas |
8 |
import java.util.List; |
4453 |
10 Apr 17 |
nicklas |
9 |
|
4453 |
10 Apr 17 |
nicklas |
10 |
import net.schmizz.sshj.common.Buffer; |
4453 |
10 Apr 17 |
nicklas |
11 |
import net.schmizz.sshj.common.SSHRuntimeException; |
4453 |
10 Apr 17 |
nicklas |
12 |
import net.schmizz.sshj.transport.verification.HostKeyVerifier; |
4453 |
10 Apr 17 |
nicklas |
13 |
|
4453 |
10 Apr 17 |
nicklas |
14 |
/** |
4453 |
10 Apr 17 |
nicklas |
Verify the connection to a remote host using SHA-256 |
4453 |
10 Apr 17 |
nicklas |
hash of the servers public key. |
4453 |
10 Apr 17 |
nicklas |
17 |
|
4453 |
10 Apr 17 |
nicklas |
@author nicklas |
4453 |
10 Apr 17 |
nicklas |
@since 1.3 |
4453 |
10 Apr 17 |
nicklas |
20 |
*/ |
4453 |
10 Apr 17 |
nicklas |
21 |
public class Sha256Verifier |
4453 |
10 Apr 17 |
nicklas |
22 |
implements HostKeyVerifier |
4453 |
10 Apr 17 |
nicklas |
23 |
{ |
4453 |
10 Apr 17 |
nicklas |
24 |
|
4453 |
10 Apr 17 |
nicklas |
25 |
private final String fingerprint; |
4453 |
10 Apr 17 |
nicklas |
26 |
|
4453 |
10 Apr 17 |
nicklas |
27 |
public Sha256Verifier(String fingerprint) |
4453 |
10 Apr 17 |
nicklas |
28 |
{ |
4453 |
10 Apr 17 |
nicklas |
// Ensure no padding |
4453 |
10 Apr 17 |
nicklas |
30 |
this.fingerprint = fingerprint.replace("=", ""); |
4453 |
10 Apr 17 |
nicklas |
31 |
} |
4453 |
10 Apr 17 |
nicklas |
32 |
|
4453 |
10 Apr 17 |
nicklas |
33 |
@Override |
4453 |
10 Apr 17 |
nicklas |
34 |
public boolean verify(String hostname, int port, PublicKey key) |
4453 |
10 Apr 17 |
nicklas |
35 |
{ |
4453 |
10 Apr 17 |
nicklas |
36 |
try |
4453 |
10 Apr 17 |
nicklas |
37 |
{ |
4453 |
10 Apr 17 |
nicklas |
38 |
MessageDigest digest = MessageDigest.getInstance("SHA-256"); |
4453 |
10 Apr 17 |
nicklas |
39 |
digest.update(new Buffer.PlainBuffer().putPublicKey(key).getCompactData()); |
4453 |
10 Apr 17 |
nicklas |
40 |
byte[] hash = digest.digest(); |
4453 |
10 Apr 17 |
nicklas |
41 |
String b64 = Base64.getEncoder().encodeToString(hash).replace("=", ""); |
4453 |
10 Apr 17 |
nicklas |
42 |
return fingerprint.equals(b64); |
4453 |
10 Apr 17 |
nicklas |
43 |
} |
4453 |
10 Apr 17 |
nicklas |
44 |
catch (NoSuchAlgorithmException ex) |
4453 |
10 Apr 17 |
nicklas |
45 |
{ |
4453 |
10 Apr 17 |
nicklas |
46 |
throw new SSHRuntimeException(ex); |
4453 |
10 Apr 17 |
nicklas |
47 |
} |
4453 |
10 Apr 17 |
nicklas |
48 |
} |
7300 |
25 Aug 23 |
nicklas |
49 |
|
7300 |
25 Aug 23 |
nicklas |
50 |
@Override |
7300 |
25 Aug 23 |
nicklas |
51 |
public List<String> findExistingAlgorithms(String host, int port) |
7300 |
25 Aug 23 |
nicklas |
52 |
{ |
7300 |
25 Aug 23 |
nicklas |
53 |
return Collections.emptyList(); |
7300 |
25 Aug 23 |
nicklas |
54 |
} |
4453 |
10 Apr 17 |
nicklas |
55 |
|
4453 |
10 Apr 17 |
nicklas |
56 |
} |