extensions/net.sf.basedb.xfiles/trunk/src/net/sf/basedb/xfiles/sftp/Sha256Verifier.java

Code
Comments
Other
Rev Date Author Line
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 15   Verify the connection to a remote host using SHA-256
4453 10 Apr 17 nicklas 16   hash of the servers public key.
4453 10 Apr 17 nicklas 17
4453 10 Apr 17 nicklas 18   @author nicklas
4453 10 Apr 17 nicklas 19   @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 29     // 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 }