151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage sun.security.internal.spec; 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.security.spec.KeySpec; 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport javax.crypto.SecretKey; 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport javax.crypto.spec.IvParameterSpec; 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * KeySpec class for SSL/TLS key material. 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>Instances of this class are returned by the <code>generateKey()</code> 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method of KeyGenerators of the type "TlsKeyMaterial". 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Instances of this class are immutable. 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.6 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Andreas Sterbenz 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @deprecated Sun JDK internal use only --- WILL BE REMOVED in a future 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * release. 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski@Deprecated 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class TlsKeyMaterialSpec implements KeySpec, SecretKey { 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski static final long serialVersionUID = 812912859129525028L; 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final SecretKey clientMacKey, serverMacKey; 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final SecretKey clientCipherKey, serverCipherKey; 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final IvParameterSpec clientIv, serverIv; 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Constructs a new TlsKeymaterialSpec from the client and server MAC 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * keys. 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This call is equivalent to 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>new TlsKeymaterialSpec(clientMacKey, serverMacKey, 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * null, null, null, null)</code>. 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param clientMacKey the client MAC key 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param serverMacKey the server MAC key 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException if clientMacKey or serverMacKey is null 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public TlsKeyMaterialSpec(SecretKey clientMacKey, SecretKey serverMacKey) { 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(clientMacKey, serverMacKey, null, null, null, null); 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Constructs a new TlsKeymaterialSpec from the client and server MAC 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * keys and client and server cipher keys. 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This call is equivalent to 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>new TlsKeymaterialSpec(clientMacKey, serverMacKey, 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * clientCipherKey, serverCipherKey, null, null)</code>. 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param clientMacKey the client MAC key 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param serverMacKey the server MAC key 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param clientCipherKey the client cipher key (or null) 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param serverCipherKey the server cipher key (or null) 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException if clientMacKey or serverMacKey is null 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public TlsKeyMaterialSpec(SecretKey clientMacKey, SecretKey serverMacKey, 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SecretKey clientCipherKey, SecretKey serverCipherKey) { 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(clientMacKey, serverMacKey, clientCipherKey, null, 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski serverCipherKey, null); 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Constructs a new TlsKeymaterialSpec from the client and server MAC 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * keys, client and server cipher keys, and client and server 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * initialization vectors. 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param clientMacKey the client MAC key 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param serverMacKey the server MAC key 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param clientCipherKey the client cipher key (or null) 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param clientIv the client initialization vector (or null) 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param serverCipherKey the server cipher key (or null) 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param serverIv the server initialization vector (or null) 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException if clientMacKey or serverMacKey is null 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public TlsKeyMaterialSpec(SecretKey clientMacKey, SecretKey serverMacKey, 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SecretKey clientCipherKey, IvParameterSpec clientIv, 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SecretKey serverCipherKey, IvParameterSpec serverIv) { 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if ((clientMacKey == null) || (serverMacKey == null)) { 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new NullPointerException("MAC keys must not be null"); 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.clientMacKey = clientMacKey; 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.serverMacKey = serverMacKey; 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.clientCipherKey = clientCipherKey; 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.serverCipherKey = serverCipherKey; 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.clientIv = clientIv; 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.serverIv = serverIv; 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns <code>TlsKeyMaterial</code>. 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>TlsKeyMaterial</code>. 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String getAlgorithm() { 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return "TlsKeyMaterial"; 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns <code>null</code> because keys of this type have no encoding. 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>null</code> because keys of this type have no encoding. 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String getFormat() { 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return null; 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns <code>null</code> because keys of this type have no encoding. 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>null</code> because keys of this type have no encoding. 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public byte[] getEncoded() { 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return null; 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the client MAC key. 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the client MAC key. 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public SecretKey getClientMacKey() { 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return clientMacKey; 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Return the server MAC key. 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the server MAC key. 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public SecretKey getServerMacKey() { 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return serverMacKey; 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Return the client cipher key (or null). 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the client cipher key (or null). 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public SecretKey getClientCipherKey() { 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return clientCipherKey; 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Return the client initialization vector (or null). 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the client initialization vector (or null). 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public IvParameterSpec getClientIv() { 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return clientIv; 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Return the server cipher key (or null). 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the server cipher key (or null). 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public SecretKey getServerCipherKey() { 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return serverCipherKey; 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Return the server initialization vector (or null). 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the server initialization vector (or null). 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public IvParameterSpec getServerIv() { 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return serverIv; 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 198