protected byte[] getAdditionalData(long seqNo, short type, int len) throws IOException { /* * additional_data = seq_num + TLSCompressed.type + TLSCompressed.version + * TLSCompressed.length */ byte[] additional_data = new byte[13]; TlsUtils.writeUint64(seqNo, additional_data, 0); TlsUtils.writeUint8(type, additional_data, 8); TlsUtils.writeVersion(context.getServerVersion(), additional_data, 9); TlsUtils.writeUint16(len, additional_data, 11); return additional_data; } }
protected byte[] getAdditionalData(long seqNo, short type, int len) throws IOException { /* * additional_data = seq_num + TLSCompressed.type + TLSCompressed.version + * TLSCompressed.length */ byte[] additional_data = new byte[13]; TlsUtils.writeUint64(seqNo, additional_data, 0); TlsUtils.writeUint8(type, additional_data, 8); TlsUtils.writeVersion(context.getServerVersion(), additional_data, 9); TlsUtils.writeUint16(len, additional_data, 11); return additional_data; } }
protected byte[] getAdditionalData(long seqNo, short type, int len) throws IOException { /* * additional_data = seq_num + TLSCompressed.type + TLSCompressed.version + * TLSCompressed.length */ byte[] additional_data = new byte[13]; TlsUtils.writeUint64(seqNo, additional_data, 0); TlsUtils.writeUint8(type, additional_data, 8); TlsUtils.writeVersion(context.getServerVersion(), additional_data, 9); TlsUtils.writeUint16(len, additional_data, 11); return additional_data; } }
protected byte[] getAdditionalData(long seqNo, short type, int len) throws IOException { /* * additional_data = seq_num + TLSCompressed.type + TLSCompressed.version + * TLSCompressed.length */ byte[] additional_data = new byte[13]; TlsUtils.writeUint64(seqNo, additional_data, 0); TlsUtils.writeUint8(type, additional_data, 8); TlsUtils.writeVersion(context.getServerVersion(), additional_data, 9); TlsUtils.writeUint16(len, additional_data, 11); return additional_data; } }
TlsUtils.writeVersion(writeVersion, record, TLS_HEADER_VERSION_OFFSET); TlsUtils.writeUint16(ciphertext.length, record, TLS_HEADER_LENGTH_OFFSET); System.arraycopy(ciphertext, 0, record, TLS_HEADER_SIZE, ciphertext.length);
TlsUtils.writeVersion(writeVersion, record, 1); TlsUtils.writeUint16(ciphertext.length, record, 3); System.arraycopy(ciphertext, 0, record, 5, ciphertext.length);
TlsUtils.writeVersion(context.getClientVersion(), premasterSecret, 0);
TlsUtils.writeVersion(context.getClientVersion(), premasterSecret, 0);
TlsUtils.writeVersion(writeVersion, record, 1); TlsUtils.writeUint16(recordEpoch, record, 3); TlsUtils.writeUint48(recordSequenceNumber, record, 5);
private void sendRecord(short contentType, byte[] buf, int off, int len) throws IOException { if (len > this.plaintextLimit) { throw new TlsFatalAlert(AlertDescription.internal_error); } /* * RFC 5264 6.2.1 Implementations MUST NOT send zero-length fragments of Handshake, Alert, * or ChangeCipherSpec content types. */ if (len < 1 && contentType != ContentType.application_data) { throw new TlsFatalAlert(AlertDescription.internal_error); } int recordEpoch = writeEpoch.getEpoch(); long recordSequenceNumber = writeEpoch.allocateSequenceNumber(); byte[] ciphertext = writeEpoch.getCipher().encodePlaintext( getMacSequenceNumber(recordEpoch, recordSequenceNumber), contentType, buf, off, len); // TODO Check the ciphertext length? byte[] record = new byte[ciphertext.length + RECORD_HEADER_LENGTH]; TlsUtils.writeUint8(contentType, record, 0); ProtocolVersion version = discoveredPeerVersion != null ? discoveredPeerVersion : context.getClientVersion(); TlsUtils.writeVersion(version, record, 1); TlsUtils.writeUint16(recordEpoch, record, 3); TlsUtils.writeUint48(recordSequenceNumber, record, 5); TlsUtils.writeUint16(ciphertext.length, record, 11); System.arraycopy(ciphertext, 0, record, RECORD_HEADER_LENGTH, ciphertext.length); transport.send(record, 0, record.length); }
/** * Calculate the MAC for some given data. * * @param type The message type of the message. * @param message A byte-buffer containing the message. * @param offset The number of bytes to skip, before the message starts. * @param length The length of the message. * @return A new byte-buffer containing the MAC value. */ public byte[] calculateMac(long seqNo, short type, byte[] message, int offset, int length) { ProtocolVersion serverVersion = context.getServerVersion(); boolean isSSL = serverVersion.isSSL(); byte[] macHeader = new byte[isSSL ? 11 : 13]; TlsUtils.writeUint64(seqNo, macHeader, 0); TlsUtils.writeUint8(type, macHeader, 8); if (!isSSL) { TlsUtils.writeVersion(serverVersion, macHeader, 9); } TlsUtils.writeUint16(length, macHeader, macHeader.length - 2); mac.update(macHeader, 0, macHeader.length); mac.update(message, offset, length); byte[] result = new byte[mac.getMacSize()]; mac.doFinal(result, 0); return truncate(result); }
/** * Calculate the MAC for some given data. * * @param type The message type of the message. * @param message A byte-buffer containing the message. * @param offset The number of bytes to skip, before the message starts. * @param length The length of the message. * @return A new byte-buffer containing the MAC value. */ public byte[] calculateMac(long seqNo, short type, byte[] message, int offset, int length) { ProtocolVersion serverVersion = context.getServerVersion(); boolean isSSL = serverVersion.isSSL(); byte[] macHeader = new byte[isSSL ? 11 : 13]; TlsUtils.writeUint64(seqNo, macHeader, 0); TlsUtils.writeUint8(type, macHeader, 8); if (!isSSL) { TlsUtils.writeVersion(serverVersion, macHeader, 9); } TlsUtils.writeUint16(length, macHeader, macHeader.length - 2); mac.update(macHeader, 0, macHeader.length); mac.update(message, offset, length); byte[] result = new byte[mac.getMacSize()]; mac.doFinal(result, 0); return truncate(result); }
TlsUtils.writeVersion(client_version, buf);
TlsUtils.writeVersion(client_version, buf);
TlsUtils.writeVersion(state.serverContext.getServerVersion(), buf);
TlsUtils.writeVersion(state.serverContext.getServerVersion(), buf);
getContextAdmin().setServerVersion(server_version); TlsUtils.writeVersion(server_version, message);
getContextAdmin().setServerVersion(server_version); TlsUtils.writeVersion(server_version, message);
TlsUtils.writeVersion(client_version, message);
TlsUtils.writeVersion(client_version, message);