01: /*
02: * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
03: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
04: */
05: package com.sun.portal.monitoring.security;
06:
07: import com.sun.portal.monitoring.utilities.PropertyHelper;
08:
09: import java.io.Serializable;
10: import java.io.UnsupportedEncodingException;
11: import java.security.NoSuchAlgorithmException;
12: import java.security.NoSuchProviderException;
13: import java.security.SecureRandom;
14: import java.util.Properties;
15:
16: public class Password implements Serializable {
17: public Password(PropertyHelper propertyHelper) {
18: this .propertyHelper = propertyHelper;
19: if (propertyHelper == null) {
20: this .propertyHelper = new PropertyHelper(new Properties());
21: }
22: }
23:
24: private transient PropertyHelper propertyHelper;
25:
26: public char[] getPassword() {
27: return (char[]) password.clone();
28: }
29:
30: public void setPassword(char[] password) {
31: this .password = (char[]) password.clone();
32: }
33:
34: public void clear() {
35: password = null;
36: }
37:
38: public char[] createPassword(int length) throws SecurityException {
39: byte[] passwordBytes = new byte[length];
40: getSecureRandom().nextBytes(passwordBytes);
41: try {
42: password = new String(passwordBytes, UTF_8).toCharArray();
43: } catch (UnsupportedEncodingException uee) {
44: throw new SecurityException(uee);
45: }
46:
47: return (char[]) password.clone();
48: }
49:
50: private SecureRandom getSecureRandom() throws SecurityException {
51: if (secureRandom == null) {
52: try {
53: secureRandom = SecureRandom
54: .getInstance(
55: propertyHelper
56: .getProperty(
57: Password.class
58: .getName(),
59: PROPERTY_SUFFIX_SECURE_RANDOM_ALGORITHM,
60: SECURE_RANDOM_ALGORITHM),
61: propertyHelper
62: .getProperty(
63: Password.class
64: .getName(),
65: PROPERTY_SUFFIX_SECURE_RANDOM_PROVIDER,
66: SECURE_RANDOM_PROVIDER));
67: } catch (NoSuchAlgorithmException nsae) {
68: throw new SecurityException(nsae);
69: } catch (NoSuchProviderException nspe) {
70: throw new SecurityException(nspe);
71: }
72:
73: secureRandom.generateSeed(NUM_BYTES);
74: }
75:
76: return secureRandom;
77: }
78:
79: private char[] password;
80:
81: private static SecureRandom secureRandom;
82:
83: private static int NUM_BYTES = 128;
84: private static String UTF_8 = "UTF-8";
85:
86: private static String PROPERTY_SUFFIX_SECURE_RANDOM_ALGORITHM = "secure.random.algorithm";
87: private static String SECURE_RANDOM_ALGORITHM = "SHA1PRNG";
88:
89: private static String PROPERTY_SUFFIX_SECURE_RANDOM_PROVIDER = "secure.random.provider";
90: private static String SECURE_RANDOM_PROVIDER = "SUN";
91: }
|