diff options
Diffstat (limited to 'src/main/java/com/google/security/cryptauth/lib/securegcm/D2DHandshakeContext.java')
-rw-r--r-- | src/main/java/com/google/security/cryptauth/lib/securegcm/D2DHandshakeContext.java | 158 |
1 files changed, 0 insertions, 158 deletions
diff --git a/src/main/java/com/google/security/cryptauth/lib/securegcm/D2DHandshakeContext.java b/src/main/java/com/google/security/cryptauth/lib/securegcm/D2DHandshakeContext.java deleted file mode 100644 index 5fc1d7b..0000000 --- a/src/main/java/com/google/security/cryptauth/lib/securegcm/D2DHandshakeContext.java +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.security.cryptauth.lib.securegcm; - -/** - * Describes a cryptographic handshake with arbitrary number of round trips. Some handshake - * messages may also send a payload. - * - * <p>Generic usage for handshake Initiator: - * {@code - * // Handshake Initiator - * D2DHandshakeContext handshake = <specific handshake>.forInitiator(); - * while (!handshake.isHandshakeComplete()) { - * try { - * // Get the next handshake message to send - * byte[] initiatorMessage = handshake.getNextHandshakeMessage(); - * - * // Send the message out and get the response - * socket.send(initiatorMessage); - * byte[] responderMessage = socket.read(); - * - * // Handle the response and obtain the optional payload - * byte[] payload = handshake.parseHandshakeMessage(responderMessage); - * - * // Handle the payload if one was sent - * if (payload.length > 0) { - * handlePayload(payload); - * } - * } catch (HandshakeException e) { - * // Handshake has failed, bail - * Log("Handshake failed!", e); - * return; - * } - * } - * - * ConnectionContext connectionContext; - * try { - * // Upgrade handshake context to a full connection context - * connectionContext = handshake.toConnectionContext(); - * } catch (HandshakeException e) { - * Log("Cannot convert handshake to connection context", e); - * } - * } - * - * <p>Generic usage for handshake Responder: - * {@code - * // Handshake Responder - * D2DHandshakeContext handshake = <specific handshake>.forResponder(); - * - * while (!handshake.isHandshakeComplete()) { - * try { - * // Get the message from the initiator - * byte[] initiatorMessage = socket.read(); - * - * // Handle the message and get the payload if it exists - * byte[] payload = handshake.parseHandshakeMessage(initiatorMessage); - * - * // Handle the payload if one was sent - * if (payload.length > 0) { - * handlePayload(payload); - * } - * - * // Make sure that wasn't the last message - * if (handshake.isHandshakeComplete()) { - * break; - * } - * - * // Get next message to send and send it - * byte[] responderMessage = handshake.getNextHandshakeMessage(); - * socket.send(responderMessage); - * } catch (HandshakeException e) { - * // Handshake has failed, bail - * Log("Handshake failed!", e); - * return; - * } - * } - * - * ConnectionContext connectionContext; - * try { - * // Upgrade handshake context to a full connection context - * connectionContext = handshake.toConnectionContext(); - * } catch (HandshakeException e) { - * Log("Cannot convert handshake to connection context", e); - * } - * } - */ -public interface D2DHandshakeContext { - - /** - * Tells the caller whether the handshake has completed or not. If the handshake is complete, the - * caller may call {@link #toConnectionContext()} to obtain a connection context. - * - * @return true if the handshake is complete, false otherwise - */ - boolean isHandshakeComplete(); - - /** - * Constructs the next message that should be sent in the handshake. - * - * @return the next message - * @throws HandshakeException if the handshake is over or if the next handshake message can't be - * obtained (e.g., there is an internal error) - */ - byte[] getNextHandshakeMessage() throws HandshakeException; - - /** - * Tells the caller whether the next handshake message may carry a payload. If true, caller may - * call {@link #getNextHandshakeMessage(byte[])} instead of the regular - * {@link #getNextHandshakeMessage()}. If false, calling {@link #getNextHandshakeMessage(byte[])} - * will result in a {@link HandshakeException}. - * - * @return true if the next handshake message can carry a payload, false otherwise - */ - boolean canSendPayloadInHandshakeMessage(); - - /** - * Constructs the next message that should be sent in the handshake along with a payload. Caller - * should verify that this method can be called by calling - * {@link #canSendPayloadInHandshakeMessage()}. - * - * @param payload the payload to include in the handshake message - * @return the next message - * @throws HandshakeException if the handshake is over or if the next handshake message can't be - * obtained (e.g., there is an internal error) or if the payload may not be included in this - * message - */ - byte[] getNextHandshakeMessage(byte[] payload) throws HandshakeException; - - /** - * Parses a handshake message and returns the included payload (if any). - * - * @param handshakeMessage message received in the handshake - * @return payload or empty byte[] if no payload was in the handshake message - * @throws HandshakeException if an error occurs in parsing the handshake message - */ - byte[] parseHandshakeMessage(byte[] handshakeMessage) throws HandshakeException; - - /** - * Creates a full {@link D2DConnectionContext}. May only be called if - * {@link #isHandshakeComplete()} returns true. - * - * @return a full {@link D2DConnectionContext} - * @throws HandshakeException if a connection context cannot be created - */ - D2DConnectionContext toConnectionContext() throws HandshakeException; -} |