mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-11-03 20:15:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			37 lines
		
	
	
		
			983 B
		
	
	
	
		
			Scala
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			983 B
		
	
	
	
		
			Scala
		
	
	
	
	
	
package ssh
 | 
						|
 | 
						|
import java.security.PublicKey
 | 
						|
import org.slf4j.LoggerFactory
 | 
						|
import org.apache.commons.codec.binary.Base64
 | 
						|
import org.eclipse.jgit.lib.Constants
 | 
						|
import org.apache.sshd.common.util.{KeyUtils, Buffer}
 | 
						|
 | 
						|
object SshUtil {
 | 
						|
 | 
						|
  private val logger = LoggerFactory.getLogger(SshUtil.getClass)
 | 
						|
 | 
						|
  def str2PublicKey(key: String): Option[PublicKey] = {
 | 
						|
    // TODO RFC 4716 Public Key is not supported...
 | 
						|
    val parts = key.split(" ")
 | 
						|
    if (parts.size < 2) {
 | 
						|
      logger.debug(s"Invalid PublicKey Format: ${key}")
 | 
						|
      return None
 | 
						|
    }
 | 
						|
    try {
 | 
						|
      val encodedKey = parts(1)
 | 
						|
      val decode = Base64.decodeBase64(Constants.encodeASCII(encodedKey))
 | 
						|
      Some(new Buffer(decode).getRawPublicKey)
 | 
						|
    } catch {
 | 
						|
      case e: Throwable =>
 | 
						|
        logger.debug(e.getMessage, e)
 | 
						|
        None
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  def fingerPrint(key: String): Option[String] = str2PublicKey(key) match {
 | 
						|
    case Some(publicKey) => Some(KeyUtils.getFingerPrint(publicKey))
 | 
						|
    case None => None
 | 
						|
  }
 | 
						|
 | 
						|
}
 |