PageRenderTime 42ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/carrot-jdk7-jnlp-decompile-deploy/src/main/java/com/sun/deploy/security/MozillaMyKeyStore.java

https://github.com/carrot-garden/carrot-jnlper
Java | 374 lines | 339 code | 31 blank | 4 comment | 33 complexity | db280f10ecf261267c9334e0ec40f79c MD5 | raw file
  1. package com.sun.deploy.security;
  2. import com.sun.deploy.trace.Trace;
  3. import java.io.ByteArrayInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.lang.reflect.Field;
  8. import java.lang.reflect.Method;
  9. import java.security.Key;
  10. import java.security.KeyStoreException;
  11. import java.security.KeyStoreSpi;
  12. import java.security.NoSuchAlgorithmException;
  13. import java.security.SecurityPermission;
  14. import java.security.UnrecoverableKeyException;
  15. import java.security.cert.Certificate;
  16. import java.security.cert.CertificateException;
  17. import java.security.cert.CertificateFactory;
  18. import java.security.cert.X509Certificate;
  19. import java.util.ArrayList;
  20. import java.util.Collection;
  21. import java.util.Date;
  22. import java.util.Enumeration;
  23. import java.util.Iterator;
  24. public final class MozillaMyKeyStore extends KeyStoreSpi
  25. {
  26. private Collection keyEntries = new ArrayList();
  27. public Key engineGetKey(String paramString, char[] paramArrayOfChar)
  28. throws NoSuchAlgorithmException, UnrecoverableKeyException
  29. {
  30. if ((paramArrayOfChar != null) && (paramArrayOfChar.length > 0))
  31. throw new UnrecoverableKeyException("Password is not required for Mozilla MY keystore.");
  32. if (!engineIsKeyEntry(paramString))
  33. return null;
  34. Iterator localIterator = this.keyEntries.iterator();
  35. while (localIterator.hasNext())
  36. {
  37. KeyEntry localKeyEntry = (KeyEntry)localIterator.next();
  38. if (paramString.equals(localKeyEntry.getAlias()))
  39. return localKeyEntry.getPrivateKey();
  40. }
  41. return null;
  42. }
  43. public Certificate[] engineGetCertificateChain(String paramString)
  44. {
  45. Iterator localIterator = this.keyEntries.iterator();
  46. while (localIterator.hasNext())
  47. {
  48. KeyEntry localKeyEntry = (KeyEntry)localIterator.next();
  49. if (paramString.equals(localKeyEntry.getAlias()))
  50. {
  51. X509Certificate[] arrayOfX509Certificate1 = localKeyEntry.getCertificateChain();
  52. X509Certificate[] arrayOfX509Certificate2 = (X509Certificate[])(X509Certificate[])arrayOfX509Certificate1.clone();
  53. return arrayOfX509Certificate2;
  54. }
  55. }
  56. return null;
  57. }
  58. public Certificate engineGetCertificate(String paramString)
  59. {
  60. Iterator localIterator = this.keyEntries.iterator();
  61. while (localIterator.hasNext())
  62. {
  63. KeyEntry localKeyEntry = (KeyEntry)localIterator.next();
  64. if (paramString.equals(localKeyEntry.getAlias()))
  65. {
  66. X509Certificate[] arrayOfX509Certificate = localKeyEntry.getCertificateChain();
  67. return arrayOfX509Certificate[0];
  68. }
  69. }
  70. return null;
  71. }
  72. public Date engineGetCreationDate(String paramString)
  73. {
  74. return new Date();
  75. }
  76. public void engineSetKeyEntry(String paramString, Key paramKey, char[] paramArrayOfChar, Certificate[] paramArrayOfCertificate)
  77. throws KeyStoreException
  78. {
  79. throw new KeyStoreException("Cannot assign the given key to the given alias.");
  80. }
  81. public void engineSetKeyEntry(String paramString, byte[] paramArrayOfByte, Certificate[] paramArrayOfCertificate)
  82. throws KeyStoreException
  83. {
  84. throw new KeyStoreException("Cannot assign the given key to the given alias.");
  85. }
  86. public void engineSetCertificateEntry(String paramString, Certificate paramCertificate)
  87. throws KeyStoreException
  88. {
  89. throw new KeyStoreException("Cannot assign the given certificate to the given alias.");
  90. }
  91. public void engineDeleteEntry(String paramString)
  92. throws KeyStoreException
  93. {
  94. throw new KeyStoreException("Mozilla does not support alias removal.");
  95. }
  96. public Enumeration engineAliases()
  97. {
  98. Iterator localIterator = this.keyEntries.iterator();
  99. return new Enumeration(localIterator)
  100. {
  101. private final Iterator val$iter;
  102. public boolean hasMoreElements()
  103. {
  104. return this.val$iter.hasNext();
  105. }
  106. public Object nextElement()
  107. {
  108. MozillaMyKeyStore.KeyEntry localKeyEntry = (MozillaMyKeyStore.KeyEntry)this.val$iter.next();
  109. return localKeyEntry.getAlias();
  110. }
  111. };
  112. }
  113. public boolean engineContainsAlias(String paramString)
  114. {
  115. Enumeration localEnumeration = engineAliases();
  116. while (localEnumeration.hasMoreElements())
  117. {
  118. String str = (String)localEnumeration.nextElement();
  119. if (str.equals(paramString))
  120. return true;
  121. }
  122. return false;
  123. }
  124. public int engineSize()
  125. {
  126. return this.keyEntries.size();
  127. }
  128. public boolean engineIsKeyEntry(String paramString)
  129. {
  130. return (paramString.startsWith("MozillaJSSRSAPrivateKey")) || (paramString.startsWith("MozillaJSSDSAPrivateKey"));
  131. }
  132. public boolean engineIsCertificateEntry(String paramString)
  133. {
  134. return false;
  135. }
  136. public String engineGetCertificateAlias(Certificate paramCertificate)
  137. {
  138. Iterator localIterator = this.keyEntries.iterator();
  139. while (localIterator.hasNext())
  140. {
  141. KeyEntry localKeyEntry = (KeyEntry)localIterator.next();
  142. if ((localKeyEntry.certChain != null) && (localKeyEntry.certChain[0].equals(paramCertificate)))
  143. return localKeyEntry.getAlias();
  144. }
  145. return null;
  146. }
  147. public void engineStore(OutputStream paramOutputStream, char[] paramArrayOfChar)
  148. throws IOException, NoSuchAlgorithmException, CertificateException
  149. {
  150. throw new IOException("Mozilla cert store cannot be stored into stream.");
  151. }
  152. public void engineLoad(InputStream paramInputStream, char[] paramArrayOfChar)
  153. throws IOException, NoSuchAlgorithmException, CertificateException
  154. {
  155. SecurityManager localSecurityManager = System.getSecurityManager();
  156. if (localSecurityManager != null)
  157. localSecurityManager.checkPermission(new SecurityPermission("authProvider.SunDeploy-MozillaJSS"));
  158. if (paramInputStream != null)
  159. throw new IOException("Mozilla cert store cannot be loaded from stream.");
  160. this.keyEntries.clear();
  161. try
  162. {
  163. Class localClass = Class.forName("org.mozilla.jss.CryptoManager", true, ClassLoader.getSystemClassLoader());
  164. Object localObject1 = BrowserKeystore.getJSSCryptoManager();
  165. Method localMethod1 = localClass.getMethod("getInternalKeyStorageToken", null);
  166. Object localObject2 = localMethod1.invoke(localObject1, null);
  167. generateKeyAndCertificateFromToken(localObject1, localObject2);
  168. Method localMethod2 = localClass.getMethod("getExternalTokens", null);
  169. Enumeration localEnumeration = (Enumeration)localMethod2.invoke(localObject1, null);
  170. while (localEnumeration.hasMoreElements())
  171. {
  172. Object localObject3 = localEnumeration.nextElement();
  173. generateKeyAndCertificateFromToken(localObject1, localObject3);
  174. }
  175. }
  176. catch (Throwable localThrowable)
  177. {
  178. localThrowable.printStackTrace();
  179. }
  180. }
  181. private void generateKeyAndCertificateFromToken(Object paramObject1, Object paramObject2)
  182. throws Throwable
  183. {
  184. Class localClass1 = Class.forName("org.mozilla.jss.CryptoManager", true, ClassLoader.getSystemClassLoader());
  185. Class localClass2 = Class.forName("org.mozilla.jss.crypto.CryptoToken", true, ClassLoader.getSystemClassLoader());
  186. Method localMethod1 = localClass2.getMethod("getCryptoStore", null);
  187. Object localObject1 = localMethod1.invoke(paramObject2, null);
  188. Class localClass3 = Class.forName("org.mozilla.jss.crypto.CryptoStore", true, ClassLoader.getSystemClassLoader());
  189. Method localMethod2 = localClass3.getMethod("getCertificates", null);
  190. Object[] arrayOfObject1 = (Object[])(Object[])localMethod2.invoke(localObject1, null);
  191. for (int i = 0; i < arrayOfObject1.length; i++)
  192. {
  193. Class localClass4 = Class.forName("org.mozilla.jss.crypto.X509Certificate", true, ClassLoader.getSystemClassLoader());
  194. Method localMethod3 = localClass4.getMethod("getNickname", null);
  195. String str = (String)localMethod3.invoke(arrayOfObject1[i], null);
  196. if (str == null)
  197. continue;
  198. Class localClass5 = Class.forName("org.mozilla.jss.CryptoManager$CertUsage", true, ClassLoader.getSystemClassLoader());
  199. Class[] arrayOfClass1 = { String.class, Boolean.TYPE, localClass5 };
  200. Method localMethod4 = localClass1.getMethod("isCertValid", arrayOfClass1);
  201. Field localField1 = localClass5.getField("SSLClient");
  202. Object[] arrayOfObject2 = new Object[3];
  203. arrayOfObject2[0] = str;
  204. arrayOfObject2[1] = Boolean.FALSE;
  205. arrayOfObject2[2] = localField1.get(arrayOfObject1[i]);
  206. Boolean localBoolean = (Boolean)localMethod4.invoke(paramObject1, arrayOfObject2);
  207. if (!localBoolean.booleanValue())
  208. continue;
  209. try
  210. {
  211. Class[] arrayOfClass2 = { localClass4 };
  212. Method localMethod5 = localClass1.getMethod("findPrivKeyByCert", arrayOfClass2);
  213. Object[] arrayOfObject3 = { arrayOfObject1[i] };
  214. Object localObject2 = localMethod5.invoke(paramObject1, arrayOfObject3);
  215. Class localClass6 = Class.forName("org.mozilla.jss.crypto.PrivateKey", true, ClassLoader.getSystemClassLoader());
  216. Method localMethod6 = localClass6.getMethod("getType", null);
  217. Object localObject3 = localMethod6.invoke(localObject2, null);
  218. Class localClass7 = Class.forName("org.mozilla.jss.crypto.PrivateKey$Type", true, ClassLoader.getSystemClassLoader());
  219. Field localField2 = localClass7.getField("RSA");
  220. Field localField3 = localClass7.getField("DSA");
  221. Object localObject4 = localField2.get(null);
  222. Object localObject5 = localField3.get(null);
  223. if ((!localObject3.equals(localObject4)) && (!localObject3.equals(localObject5)))
  224. continue;
  225. Class[] arrayOfClass3 = { localClass4 };
  226. Method localMethod7 = localClass1.getMethod("buildCertificateChain", arrayOfClass3);
  227. Object[] arrayOfObject4 = { arrayOfObject1[i] };
  228. Object[] arrayOfObject5 = (Object[])(Object[])localMethod7.invoke(paramObject1, arrayOfObject4);
  229. ArrayList localArrayList = new ArrayList();
  230. for (int j = 0; j < arrayOfObject5.length; j++)
  231. {
  232. localObject6 = localClass4.getMethod("getEncoded", null);
  233. Object localObject7 = ((Method)localObject6).invoke(arrayOfObject5[j], null);
  234. generateCertificate((byte[])(byte[])localObject7, localArrayList);
  235. }
  236. Method localMethod8 = localClass6.getMethod("getStrength", null);
  237. Object localObject6 = (Integer)localMethod8.invoke(localObject2, null);
  238. if (localObject3.equals(localObject4))
  239. generateRSAKeyAndCertificateChain(localObject2, ((Integer)localObject6).intValue(), localArrayList, this.keyEntries);
  240. else
  241. generateDSAKeyAndCertificateChain(localObject2, ((Integer)localObject6).intValue(), localArrayList, this.keyEntries);
  242. }
  243. catch (Throwable localThrowable)
  244. {
  245. Trace.msgSecurityPrintln("mozillamykeystore.priv.notfound", new Object[] { str });
  246. }
  247. }
  248. }
  249. private void generateRSAKeyAndCertificateChain(Object paramObject, int paramInt, Collection paramCollection1, Collection paramCollection2)
  250. {
  251. try
  252. {
  253. X509Certificate[] arrayOfX509Certificate = new X509Certificate[paramCollection1.size()];
  254. int i = 0;
  255. Object localObject = paramCollection1.iterator();
  256. while (((Iterator)localObject).hasNext())
  257. {
  258. arrayOfX509Certificate[i] = ((X509Certificate)((Iterator)localObject).next());
  259. i++;
  260. }
  261. localObject = new KeyEntry(new MozillaJSSRSAPrivateKey(paramObject, paramInt), arrayOfX509Certificate);
  262. paramCollection2.add(localObject);
  263. }
  264. catch (Throwable localThrowable)
  265. {
  266. localThrowable.printStackTrace();
  267. }
  268. }
  269. private void generateDSAKeyAndCertificateChain(Object paramObject, int paramInt, Collection paramCollection1, Collection paramCollection2)
  270. {
  271. try
  272. {
  273. X509Certificate[] arrayOfX509Certificate = new X509Certificate[paramCollection1.size()];
  274. int i = 0;
  275. Object localObject = paramCollection1.iterator();
  276. while (((Iterator)localObject).hasNext())
  277. {
  278. arrayOfX509Certificate[i] = ((X509Certificate)((Iterator)localObject).next());
  279. i++;
  280. }
  281. localObject = new KeyEntry(new MozillaJSSDSAPrivateKey(paramObject, paramInt), arrayOfX509Certificate);
  282. paramCollection2.add(localObject);
  283. }
  284. catch (Throwable localThrowable)
  285. {
  286. localThrowable.printStackTrace();
  287. }
  288. }
  289. private void generateCertificate(byte[] paramArrayOfByte, Collection paramCollection)
  290. {
  291. try
  292. {
  293. ByteArrayInputStream localByteArrayInputStream = new ByteArrayInputStream(paramArrayOfByte);
  294. CertificateFactory localCertificateFactory = CertificateFactory.getInstance("X.509");
  295. Collection localCollection = localCertificateFactory.generateCertificates(localByteArrayInputStream);
  296. Iterator localIterator = localCollection.iterator();
  297. while (localIterator.hasNext())
  298. {
  299. X509Certificate localX509Certificate = (X509Certificate)localIterator.next();
  300. paramCollection.add(localX509Certificate);
  301. }
  302. }
  303. catch (CertificateException localCertificateException)
  304. {
  305. localCertificateException.printStackTrace();
  306. }
  307. catch (Throwable localThrowable)
  308. {
  309. localThrowable.printStackTrace();
  310. }
  311. }
  312. protected String getName()
  313. {
  314. return "MY";
  315. }
  316. class KeyEntry
  317. {
  318. private MozillaJSSPrivateKey privateKey;
  319. private X509Certificate[] certChain;
  320. KeyEntry(MozillaJSSPrivateKey paramArrayOfX509Certificate, X509Certificate[] arg3)
  321. {
  322. this.privateKey = paramArrayOfX509Certificate;
  323. Object localObject;
  324. this.certChain = localObject;
  325. }
  326. String getAlias()
  327. {
  328. return this.privateKey.toString();
  329. }
  330. Key getPrivateKey()
  331. {
  332. return this.privateKey;
  333. }
  334. X509Certificate[] getCertificateChain()
  335. {
  336. return this.certChain;
  337. }
  338. }
  339. }
  340. /* Location: /opt/sun/java32/jdk1.7.0_04/jre/lib/deploy.jar
  341. * Qualified Name: com.sun.deploy.security.MozillaMyKeyStore
  342. * JD-Core Version: 0.6.0
  343. */