001 /* 002 * Copyright (C) 2012 eXo Platform SAS. 003 * 004 * This is free software; you can redistribute it and/or modify it 005 * under the terms of the GNU Lesser General Public License as 006 * published by the Free Software Foundation; either version 2.1 of 007 * the License, or (at your option) any later version. 008 * 009 * This software is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * You should have received a copy of the GNU Lesser General Public 015 * License along with this software; if not, write to the Free 016 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 017 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 018 */ 019 package org.crsh.ssh.util; 020 021 import org.bouncycastle.openssl.PEMParser; 022 import org.bouncycastle.util.io.pem.PemReader; 023 import java.io.Reader; 024 025 /** @author <a href="mailto:tuyennt@exoplatform.com">Tuyen Nguyen The</a> */ 026 public class KeyPairUtils { 027 public static Object readKey(Reader reader) throws Exception { 028 try { 029 PEMParser pemParser = new PEMParser(reader); 030 try { 031 return pemParser.readObject(); 032 } finally { 033 pemParser.close(); 034 } 035 } catch (NoClassDefFoundError e) { 036 //. We use reflection here to keep compatible with old library of bouncycastle 037 Class<?> pemReaderClass = Class.forName("org.bouncycastle.openssl.PEMReader"); 038 PemReader r = (PemReader)pemReaderClass.getConstructor(Reader.class).newInstance(reader); 039 try { 040 return pemReaderClass.getMethod("readObject").invoke(r); 041 } finally { 042 r.close(); 043 } 044 } 045 } 046 }