231 if (isSpi(s)) {
232 return new Delegate(s, t, algorithm);
233 } else {
234 // must be a subclass of Signature, disable dynamic selection
235 try {
236 Instance instance =
237 GetInstance.getInstance(s, SignatureSpi.class);
238 return getInstance(instance, algorithm);
239 } catch (NoSuchAlgorithmException e) {
240 failure = e;
241 }
242 }
243 } while (t.hasNext());
244 throw failure;
245 }
246
247 private static Signature getInstance(Instance instance, String algorithm) {
248 Signature sig;
249 if (instance.impl instanceof Signature) {
250 sig = (Signature)instance.impl;
251 } else {
252 SignatureSpi spi = (SignatureSpi)instance.impl;
253 sig = new Delegate(spi, algorithm);
254 }
255 sig.provider = instance.provider;
256 return sig;
257 }
258
259 private final static Map<String,Boolean> signatureInfo;
260
261 static {
262 signatureInfo = new ConcurrentHashMap<String,Boolean>();
263 Boolean TRUE = Boolean.TRUE;
264 // pre-initialize with values for our SignatureSpi implementations
265 signatureInfo.put("sun.security.provider.DSA$RawDSA", TRUE);
266 signatureInfo.put("sun.security.provider.DSA$SHA1withDSA", TRUE);
267 signatureInfo.put("sun.security.rsa.RSASignature$MD2withRSA", TRUE);
268 signatureInfo.put("sun.security.rsa.RSASignature$MD5withRSA", TRUE);
269 signatureInfo.put("sun.security.rsa.RSASignature$SHA1withRSA", TRUE);
270 signatureInfo.put("sun.security.rsa.RSASignature$SHA256withRSA", TRUE);
|
231 if (isSpi(s)) {
232 return new Delegate(s, t, algorithm);
233 } else {
234 // must be a subclass of Signature, disable dynamic selection
235 try {
236 Instance instance =
237 GetInstance.getInstance(s, SignatureSpi.class);
238 return getInstance(instance, algorithm);
239 } catch (NoSuchAlgorithmException e) {
240 failure = e;
241 }
242 }
243 } while (t.hasNext());
244 throw failure;
245 }
246
247 private static Signature getInstance(Instance instance, String algorithm) {
248 Signature sig;
249 if (instance.impl instanceof Signature) {
250 sig = (Signature)instance.impl;
251 sig.algorithm = algorithm;
252 } else {
253 SignatureSpi spi = (SignatureSpi)instance.impl;
254 sig = new Delegate(spi, algorithm);
255 }
256 sig.provider = instance.provider;
257 return sig;
258 }
259
260 private final static Map<String,Boolean> signatureInfo;
261
262 static {
263 signatureInfo = new ConcurrentHashMap<String,Boolean>();
264 Boolean TRUE = Boolean.TRUE;
265 // pre-initialize with values for our SignatureSpi implementations
266 signatureInfo.put("sun.security.provider.DSA$RawDSA", TRUE);
267 signatureInfo.put("sun.security.provider.DSA$SHA1withDSA", TRUE);
268 signatureInfo.put("sun.security.rsa.RSASignature$MD2withRSA", TRUE);
269 signatureInfo.put("sun.security.rsa.RSASignature$MD5withRSA", TRUE);
270 signatureInfo.put("sun.security.rsa.RSASignature$SHA1withRSA", TRUE);
271 signatureInfo.put("sun.security.rsa.RSASignature$SHA256withRSA", TRUE);
|