Package com.davfx.ninio.ssh.util

Source Code of com.davfx.ninio.ssh.util.PublicKeyLoader

package com.davfx.ninio.ssh.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.interfaces.DSAPublicKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.DSAPublicKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.util.List;

import com.davfx.ninio.ssh.DssSshPublicKey;
import com.davfx.ninio.ssh.RsaSshPublicKey;
import com.davfx.ninio.ssh.SshPacket;
import com.davfx.ninio.ssh.SshPublicKey;
import com.google.common.base.Charsets;
import com.google.common.base.Splitter;
import com.google.common.io.BaseEncoding;

public final class PublicKeyLoader {
  public final SshPublicKey publicKey;

  public PublicKeyLoader(File file) throws IOException, GeneralSecurityException {
    try (BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charsets.UTF_8))) {
      List<String> l = Splitter.on(' ').splitToList(r.readLine());
      String publicKeyAlgorithm = l.get(0);
      byte[] b = BaseEncoding.base64().decode(l.get(1));
      SshPacket k = new SshPacket(ByteBuffer.wrap(b));
      String s = k.readString();
      if (!s.equals(publicKeyAlgorithm)) {
        throw new IOException("Invalid algorithm: " + s);
      }
      if (publicKeyAlgorithm.equals("ssh-rsa")) {
        byte[] e = k.readBlob();
        byte[] n = k.readBlob();
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        publicKey = new RsaSshPublicKey((RSAPublicKey) keyFactory.generatePublic(new RSAPublicKeySpec(new BigInteger(n), new BigInteger(e))));
      } else if (publicKeyAlgorithm.equals("ssh-dss")) {
        byte[] p = k.readBlob();
        byte[] q = k.readBlob();
        byte[] g = k.readBlob();
        byte[] y = k.readBlob();

        KeyFactory keyFactory = KeyFactory.getInstance("DSA");
        publicKey = new DssSshPublicKey((DSAPublicKey) keyFactory.generatePublic(new DSAPublicKeySpec(new BigInteger(y), new BigInteger(p), new BigInteger(q), new BigInteger(g))));
      } else {
        throw new IOException("Unknown algorithm: " + publicKeyAlgorithm);
      }
      // l.get(2) ignored (comment)
    }
  }
}
TOP

Related Classes of com.davfx.ninio.ssh.util.PublicKeyLoader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.