< prev index next >
src/java.base/share/classes/sun/security/ssl/SessionId.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 21,134 ****
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package sun.security.ssl;
import java.security.SecureRandom;
import javax.net.ssl.SSLProtocolException;
/**
! * Encapsulates an SSL session ID. SSL Session IDs are not reused by
! * servers during the lifetime of any sessions it created. Sessions may
! * be used by many connections, either concurrently (for example, two
! * connections to a web server at the same time) or sequentially (over as
! * long a time period as is allowed by a given server).
*
* @author Satish Dharmaraj
* @author David Brownell
*/
! final
! class SessionId
! {
! static int MAX_LENGTH = 32;
! private byte[] sessionId; // max 32 bytes
!
! /** Constructs a new session ID ... perhaps for a rejoinable session */
! SessionId (boolean isRejoinable, SecureRandom generator)
! {
! if (isRejoinable)
! // this will be unique, it's a timestamp plus much randomness
! sessionId = new RandomCookie (generator).random_bytes;
! else
! sessionId = new byte [0];
! }
!
! /** Constructs a session ID from a byte array (max size 32 bytes) */
! SessionId (byte[] sessionId)
! { this.sessionId = sessionId; }
!
! /** Returns the length of the ID, in bytes */
! int length ()
! { return sessionId.length; }
!
! /** Returns the bytes in the ID. May be an empty array. */
! byte[] getId ()
! {
! return sessionId.clone ();
! }
! /** Returns the ID as a string */
! @Override
! public String toString ()
! {
! int len = sessionId.length;
! StringBuilder sb = new StringBuilder (10 + 2 * len);
! sb.append("{");
! for (int i = 0; i < len; i++) {
! sb.append(0x0ff & sessionId[i]);
! if (i != (len - 1))
! sb.append (", ");
}
! sb.append("}");
! return sb.toString ();
}
! /** Returns a value which is the same for session IDs which are equal */
@Override
! public int hashCode ()
! {
! int retval = 0;
! for (int i = 0; i < sessionId.length; i++)
! retval += sessionId [i];
! return retval;
}
! /** Returns true if the parameter is the same session ID */
@Override
! public boolean equals (Object obj)
! {
! if (!(obj instanceof SessionId))
! return false;
! SessionId s = (SessionId) obj;
! byte[] b = s.getId ();
! if (b.length != sessionId.length)
! return false;
! for (int i = 0; i < sessionId.length; i++) {
! if (b [i] != sessionId [i])
! return false;
}
! return true;
}
/**
* Checks the length of the session ID to make sure it sits within
* the range called out in the specification
*/
! void checkLength(ProtocolVersion pv) throws SSLProtocolException {
// As of today all versions of TLS have a 32-byte maximum length.
// In the future we can do more here to support protocol versions
// that may have longer max lengths.
if (sessionId.length > MAX_LENGTH) {
throw new SSLProtocolException("Invalid session ID length (" +
sessionId.length + " bytes)");
}
}
-
}
--- 21,111 ----
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.security.ssl;
import java.security.SecureRandom;
+ import java.util.Arrays;
import javax.net.ssl.SSLProtocolException;
/**
! * Encapsulates an SSL session ID.
*
* @author Satish Dharmaraj
* @author David Brownell
*/
! final class SessionId {
! private static final int MAX_LENGTH = 32;
! private final byte[] sessionId; // max 32 bytes
! // Constructs a new session ID ... perhaps for a rejoinable session
! SessionId(boolean isRejoinable, SecureRandom generator) {
! if (isRejoinable && (generator != null)) {
! sessionId = new RandomCookie(generator).randomBytes;
! } else {
! sessionId = new byte[0];
! }
! }
! // Constructs a session ID from a byte array (max size 32 bytes)
! SessionId(byte[] sessionId) {
! this.sessionId = sessionId.clone();
}
!
! // Returns the length of the ID, in bytes
! int length() {
! return sessionId.length;
}
+ // Returns the bytes in the ID. May be an empty array.
+ byte[] getId() {
+ return sessionId.clone();
+ }
! // Returns the ID as a string
@Override
! public String toString() {
! if (sessionId.length == 0) {
! return "";
! }
! return Utilities.toHexString(sessionId);
}
!
! // Returns a value which is the same for session IDs which are equal
@Override
! public int hashCode() {
! return Arrays.hashCode(sessionId);
! }
! // Returns true if the parameter is the same session ID
! @Override
! public boolean equals (Object obj) {
! if (obj == this) {
! return true;
! }
! if (obj instanceof SessionId) {
! SessionId that = (SessionId)obj;
! return Arrays.equals(this.sessionId, that.sessionId);
}
!
! return false;
}
/**
* Checks the length of the session ID to make sure it sits within
* the range called out in the specification
*/
! void checkLength(int protocolVersion) throws SSLProtocolException {
// As of today all versions of TLS have a 32-byte maximum length.
// In the future we can do more here to support protocol versions
// that may have longer max lengths.
if (sessionId.length > MAX_LENGTH) {
throw new SSLProtocolException("Invalid session ID length (" +
sessionId.length + " bytes)");
}
}
}
< prev index next >