blob: d6ee625883210ed6ac0b541cd5606ccb08a0d5f4 (
plain) (
tree)
|
|
package org.openslx.satellitedaemon;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import org.apache.log4j.Logger;
public class AsymKeyHolder
{
private static final Logger LOG = Logger.getLogger( AsymKeyHolder.class );
private static RSAPrivateKey privKey = null;
private static RSAPublicKey pubKey = null;
public AsymKeyHolder( BigInteger privExp, BigInteger pubExp, BigInteger mod )
throws NoSuchAlgorithmException, InvalidKeySpecException
{
if ( mod == null )
throw new InvalidKeySpecException( "No modulus given!" );
final KeyFactory keyFact;
keyFact = KeyFactory.getInstance( "RSA" );
if ( pubExp != null ) {
RSAPublicKeySpec keySpec = new RSAPublicKeySpec( mod, pubExp );
pubKey = (RSAPublicKey)keyFact.generatePublic( keySpec );
}
if ( privExp != null ) {
RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec( mod, privExp );
privKey = (RSAPrivateKey)keyFact.generatePrivate( keySpec );
}
}
public AsymKeyHolder()
{
generateKey();
}
/**
* Get private key.
*
* @return
*/
public PrivateKey getPrivateKey()
{
return privKey;
}
public PublicKey getPublicKey()
{
return pubKey;
}
private boolean generateKey()
{
KeyPairGenerator kpg;
try {
kpg = KeyPairGenerator.getInstance( "RSA" );
} catch ( NoSuchAlgorithmException e ) {
LOG.error( "NoSuchAlgorithmException", e );
return false;
}
kpg.initialize( 4096 );
KeyPair kp = kpg.generateKeyPair();
privKey = (RSAPrivateKey)kp.getPrivate();
pubKey = (RSAPublicKey)kp.getPublic();
BigInteger pubMod = pubKey.getModulus();
BigInteger privMod = privKey.getModulus();
assert ( pubMod.equals( privMod ) );
return true;
}
public BigInteger getModulus()
{
if ( privKey != null )
return privKey.getModulus();
if ( pubKey != null )
return pubKey.getModulus();
return null; // Should never happen
}
public BigInteger getPrivateExponent()
{
if ( privKey == null )
return null;
return privKey.getPrivateExponent();
}
public BigInteger getPublicExponent()
{
if ( pubKey == null )
return null;
return pubKey.getPublicExponent();
}
}
|