01: /*
02: * @(#)KeyBuilder.java 1.6 02/07/24 @(#)
03: *
04: * Copyright (c) 2000-2001 Sun Microsystems, Inc. All rights reserved.
05: * PROPRIETARY/CONFIDENTIAL
06: * Use is subject to license terms.
07: */
08:
09: package com.sun.portal.ksecurity;
10:
11: /**
12: * The KeyBuilder class is used to generate key objects for
13: * use in cryptographic operations. It is a key object factory.
14: * This version of the implementation only supports symmetric keys
15: * and RSA keys with modulus lengths upto and including 1024-bits.
16: * DSA keys are not supported.
17: *
18: * @see com.sun.portal.ksecurity.Key
19: */
20: public class KeyBuilder {
21: /** Indicates an RSA public key type. */
22: public static final byte TYPE_RSA_PUBLIC = 1;
23: /** Indicates an RSA private key type. */
24: public static final byte TYPE_RSA_PRIVATE = 2;
25: // and some we define for KSSL
26: /** Indicates an ARCfour key type. */
27: public static final byte TYPE_ARCFOUR = 3;
28: public static final byte TYPE_DES = 4;
29: public static final byte TYPE_TRIPLEDES = 5;
30:
31: /**
32: * Creates cryptographic keys of the specified type and length.
33: * For now, the third argument is ignored -- it is included here only
34: * for compatibility with the javacard.security.KeyBuilder class.
35: * Note that the object returned by this method must be cast to their
36: * appropriate key type interface.
37: * @param kType type of key to be generated
38: * @param kLen the desired size of the key in bits
39: * @param kEnc this parameter is ignored
40: * @return a key with the specified attributes
41: * @exception CryptoException with the NO_SUCH_ALGORITHM reason code if
42: * the requested key type is not supported.
43: */
44: public static Key buildKey(byte kType, short kLen, boolean kEnc)
45: throws CryptoException {
46: if ((kType == TYPE_RSA_PUBLIC) || (kType == TYPE_RSA_PRIVATE))
47: return new RSAKey(kType, kLen);
48: else if ((kType == TYPE_ARCFOUR) || (kType == TYPE_DES)
49: || (kType == TYPE_TRIPLEDES))
50: return new SecretKey(kType, kLen);
51: else
52: throw new CryptoException(CryptoException.NO_SUCH_ALGORITHM);
53: }
54:
55: // These are here only to support toString() methods in SecretKey
56: // and RSAKey
57: /** Hexadecimal character digits (0-f). */
58: private static char[] hc = { '0', '1', '2', '3', '4', '5', '6',
59: '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
60:
61: /**
62: * Converts a byte array into a corresponding string of hexadecimal
63: * digits. This is equivalent to hexEncode(b, 0, b.length).
64: *
65: * @param b byte array to be converted
66: * @return corresponding hexadecimal string
67: */
68: static String hexEncode(byte[] b) {
69: if (b == null)
70: return ("");
71: else {
72: char[] r = new char[b.length << 1];
73: int v;
74: for (int i = 0, j = 0; i < b.length; i++) {
75: v = b[i] & 0xff;
76: r[j++] = hc[v >>> 4];
77: r[j++] = hc[v & 0x0f];
78: }
79: return (new String(r));
80: }
81: }
82: }
|