1# Copyright 2016-2024 The OpenSSL Project Authors. All Rights Reserved. 2# 3# Licensed under the Apache License 2.0 (the "License"). You may not use 4# this file except in compliance with the License. You can obtain a copy 5# in the file LICENSE in the source distribution or at 6# https://www.openssl.org/source/license.html 7 8use strict; 9 10package TLSProxy::HelloVerifyRequest; 11 12use TLSProxy::Record; 13 14use vars '@ISA'; 15push @ISA, 'TLSProxy::Message'; 16 17 18sub new 19{ 20 my $class = shift; 21 my ($isdtls, 22 $server, 23 $msgseq, 24 $msgfrag, 25 $msgfragoffs, 26 $data, 27 $records, 28 $startoffset, 29 $message_frag_lens) = @_; 30 31 my $self = $class->SUPER::new( 32 $isdtls, 33 $server, 34 TLSProxy::Message::MT_HELLO_VERIFY_REQUEST, 35 $msgseq, 36 $msgfrag, 37 $msgfragoffs, 38 $data, 39 $records, 40 $startoffset, 41 $message_frag_lens); 42 43 $self->{server_version} = 0; 44 $self->{cookie_len} = 0; 45 $self->{cookie} = ""; 46 47 return $self; 48} 49 50sub parse 51{ 52 my $self = shift; 53 54 my ($server_version) = unpack('n', $self->data); 55 my $ptr = 2; 56 my $cookie_len = unpack('C', substr($self->data, $ptr)); 57 $ptr++; 58 my $cookie = substr($self->data, $ptr, $cookie_len); 59 60 $self->server_version($server_version); 61 $self->cookie_len($cookie_len); 62 $self->cookie($cookie); 63 64 $self->process_data(); 65 66 print " Server Version:".$TLSProxy::Record::tls_version{$server_version}."\n"; 67 print " Cookie Len:".$cookie_len."\n"; 68} 69 70#Perform any actions necessary based on the data we've seen 71sub process_data 72{ 73 my $self = shift; 74 #Intentional no-op 75} 76 77#Reconstruct the on-the-wire message data following changes 78sub set_message_contents 79{ 80 my $self = shift; 81 my $data; 82 83 $data = pack('n', $self->server_version); 84 $data .= pack('C', $self->cookie_len); 85 $data .= $self->cookie; 86 87 $self->data($data); 88} 89 90#Read/write accessors 91sub server_version 92{ 93 my $self = shift; 94 if (@_) { 95 $self->{server_version} = shift; 96 } 97 return $self->{server_version}; 98} 99sub cookie_len 100{ 101 my $self = shift; 102 if (@_) { 103 $self->{cookie_len} = shift; 104 } 105 return $self->{cookie_len}; 106} 107sub cookie 108{ 109 my $self = shift; 110 if (@_) { 111 $self->{cookie} = shift; 112 } 113 return $self->{cookie}; 114} 1151; 116