1 package org.sapia.util.license; 2 3 import java.security.InvalidKeyException ; 4 import java.security.KeyFactory ; 5 import java.security.KeyPairGenerator ; 6 import java.security.NoSuchAlgorithmException ; 7 import java.security.NoSuchProviderException ; 8 import java.security.PrivateKey ; 9 import java.security.Provider ; 10 import java.security.PublicKey ; 11 import java.security.Signature ; 12 import java.security.spec.EncodedKeySpec ; 13 import java.security.spec.InvalidKeySpecException ; 14 import java.security.spec.PKCS8EncodedKeySpec ; 15 import java.security.spec.X509EncodedKeySpec ; 16 17 28 public class SecurityFactory { 29 30 36 public static final String SECURITY_PROVIDER_CLASS = "org.sapia.license.security.provider"; 37 38 private static Provider _defaultProvider; 39 40 private Provider _provider; 41 42 static{ 43 String providerClass = System.getProperty(SECURITY_PROVIDER_CLASS); 44 if(providerClass != null){ 45 try{ 46 _defaultProvider = (Provider )Class.forName(providerClass).newInstance(); 47 }catch(Throwable t){ 48 System.err.println("*** Could not load provider: " + providerClass); 49 t.printStackTrace(System.err); 50 } 51 } 52 } 53 54 58 public void setProvider(Provider provider){ 59 _provider = provider; 60 } 61 62 66 public Provider getProvider(){ 67 return _provider; 68 } 69 70 78 public static Provider getDefaultProvider(){ 79 return _defaultProvider; 80 } 81 82 97 public Signature newSignature(String algo) throws NoSuchAlgorithmException { 98 if(_provider != null){ 99 return Signature.getInstance(algo, _provider); 100 } 101 else if(_defaultProvider != null){ 102 return Signature.getInstance(algo, _provider); 103 } 104 return Signature.getInstance(algo); 105 } 106 107 118 public Signature newSignature(String algo, String provider) throws NoSuchAlgorithmException , NoSuchProviderException { 119 return Signature.getInstance(algo, provider); 120 } 121 122 137 public KeyPairGenerator newKeyPairGenerator(String algo) throws NoSuchAlgorithmException { 138 if(_provider != null){ 139 return KeyPairGenerator.getInstance(algo, _provider); 140 } 141 else if(_defaultProvider != null){ 142 return KeyPairGenerator.getInstance(algo, _provider); 143 } 144 return KeyPairGenerator.getInstance(algo); 145 } 146 147 158 public KeyPairGenerator newKeyPairGenerator(String algo, String provider) throws NoSuchAlgorithmException , NoSuchProviderException { 159 return KeyPairGenerator.getInstance(algo, provider); 160 } 161 162 public PublicKey generatePublic(byte[] bytes) throws InvalidKeyException , InvalidKeySpecException , NoSuchAlgorithmException { 163 KeyFactory keyFactory; 164 if(_provider != null) 165 keyFactory = KeyFactory.getInstance("DSA", getProvider()); 166 else 167 keyFactory = KeyFactory.getInstance("DSA"); 168 169 EncodedKeySpec spec = new X509EncodedKeySpec (bytes); 170 return keyFactory.generatePublic(spec); 171 } 172 173 public PrivateKey generatePrivate(byte[] bytes) throws InvalidKeyException , InvalidKeySpecException , NoSuchAlgorithmException { 174 KeyFactory keyFactory; 175 if(_provider != null) 176 keyFactory = KeyFactory.getInstance("DSA", getProvider()); 177 else 178 keyFactory = KeyFactory.getInstance("DSA"); 179 180 EncodedKeySpec spec = new PKCS8EncodedKeySpec (bytes); 181 return keyFactory.generatePrivate(spec); 182 } 183 184 185 } 186 | Popular Tags |