|
DESede2KeySpec |
|
1 /* $RCSfile: DESede2KeySpec.java,v $
2 * $Revision: 1.10 $
3 * $Date: 2002/11/23 11:09:57 $
4 * $Author: uwe_guenther $
5 * $State: Exp $
6 *
7 * Created on August 11, 2001 11:18 AM
8 *
9 * Copyright (C) 2001 Uwe Guenther <uwe@cscc.de>
10 *
11 * This file is part of the jhbci JCE-ServiceProvider. The jhbci JCE-
12 * ServiceProvider is a library, written in JavaTM, that should be
13 * used in HBCI banking applications (clients and may be servers),
14 * to do cryptographic operations.
15 *
16 * The jhbci library is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU Lesser General Public
18 * License as published by the Free Software Foundation; either
19 * version 2.1 of the License, or (at your option) any later version.
20 *
21 * The jhbci library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
25 *
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 *
30 */
31
32 package de.cscc.crypto.provider.spec;
33
34 import java.security.InvalidKeyException;
35
36 /**
37 * 2 Key Triple DES secret key specification (112 bit or 128 bit with parity)
38 * class.
39 *
40 * <p>This class is immutable.
41 *
42 * @author <a href=mailto:uwe@cscc.de>Uwe Günther</a>
43 * @version $Revision: 1.10 $
44 */
45 public class DESede2KeySpec implements DESKeySpec, Cloneable {
46
47 /** Key length in bytes. */
48 private static final int DES_EDE_2KEY_LEN = 16;
49
50 /** Internal data representation of key1. */
51 private DES1KeySpec key1;
52
53 /** Internal data representation of key2. */
54 private DES1KeySpec key2;
55
56 /**
57 * Creates a new DESede2KeySpec from a 16 bytes long byte array.
58 * We use the first 16 bytes in key as the key material for the DES key.
59 *
60 * The first (leftmost) DES key (key[0] to key[7]) is key1 and
61 * the second (rightmost) DES key (key[8] to key[15]) is key2.
62 *
63 * @param key the buffer with the two DES keys.
64 * @throws InvalidKeyException if the given key material is shorter
65 * than 16 bytes or the key is weak or semi weak.
66 */
67 public DESede2KeySpec(byte[] key) throws InvalidKeyException {
68 this(key, 0);
69 }
70
71 /**
72 * Creates a new DESede2KeySpec from a 16 bytes long byte array .
73 *
74 * @param key the buffer with the DES keys.
75 * @param offset the offset in key, where the key starts.
76 * @throws InvalidKeyException if the given key material is shorter
77 * than 16 bytes or the key is weak or semi weak.
78 */
79 public DESede2KeySpec(byte[] key, int offset) throws InvalidKeyException {
80 this.key1 = new DES1KeySpec(key, offset+0);
81 this.key2 = new DES1KeySpec(key, offset+8);
82 }
83
84 /**
85 * Creates a new DESede2KeySpec from an existing one.
86 *
87 * @param key DesKeySpec object with a key.
88 */
89 public DESede2KeySpec(DESede2KeySpec key) {
90 this.key1 = new DES1KeySpec(key.key1);
91 this.key2 = new DES1KeySpec(key.key2);
92 }
93
94
95 /**
96 * Creates and returns a deep copy of this object.
97 *
98 * @return a clone of this instance.
99 * @see java.lang.Cloneable
100 * @exception CloneNotSupportedException if the object's class does not
101 * support the <code>Cloneable</code> interface. Subclasses
102 * that override the <code>clone</code> method can also
103 * throw this exception to indicate that an instance cannot
104 * be cloned.
105 */
106 public Object clone() throws CloneNotSupportedException {
107 DESede2KeySpec result = (DESede2KeySpec) super.clone();
108 result.key1 = (DES1KeySpec) this.key1.clone();
109 result.key2 = (DES1KeySpec) this.key2.clone();
110 return result;
111 }
112
113
114 /**
115 * Indicates whether some other object is "equal to" this one.
116 *
117 * @param obj the reference object with which to compare.
118 * @return <code>true</code> if this object is the same as the obj
119 * argument; <code>false</code> otherwise.
120 * @see #hashCode()
121 * @see java.util.Hashtable
122 */
123 public boolean equals(Object obj) {
124 //Only for performance.
125 if (this == obj) {
126 return true;
127 }
128
129 //If obj == null then instanceof returns false, see JLS 15.20.2
130 if (!(obj instanceof DESede2KeySpec)) {
131 return false;
132 }
133
134 DESede2KeySpec other = (DESede2KeySpec)obj;
135 return this.key1.equals(other.key1) &&
136 this.key2.equals(other.key2) ;
137 }
138
139 /**
140 * Returns a hash code value for the object.
141 *
142 * @return a hash code value for this object.
143 * @see #equals(java.lang.Object)
144 * @see java.util.Hashtable
145 */
146 public int hashCode() {
147 int result = 17;
148 result = 37*result + this.key1.hashCode();
149 result = 37*result + this.key2.hashCode();
150 return result;
151 }
152
153
154 /**
155 * Returns a string representation of the object.
156 *
157 * @return a string representation of the object.
158 */
159 public String toString() {
160 return "key1: [" + this.key1 + "] " +
161 "key2: [" + this.key2 + "]";
162 }
163
164
165 /**
166 * Get the DES Key as byte[16].
167 *
168 * @return the DES Key as byte[16].
169 */
170 public byte[] getKey() {
171 byte[] returnValue = new byte[16];
172 System.arraycopy(this.key1.getKey(), 0, returnValue, 0, 8);
173 System.arraycopy(this.key2.getKey(), 0, returnValue, 8, 8);
174 return returnValue;
175 }
176
177 }
178
|
DESede2KeySpec |
|