1 # Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
3 # Licensed under the OpenSSL license (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
10 package TLSProxy::ServerKeyExchange;
13 push @ISA, 'TLSProxy::Message';
22 $message_frag_lens) = @_;
24 my $self = $class->SUPER::new(
26 TLSProxy::Message::MT_SERVER_KEY_EXCHANGE,
35 $self->{pub_key} = "";
45 #Minimal SKE parsing. Only supports DHE at the moment (if its not DHE
46 #the parsing data will be trash...which is ok as long as we don't try to
49 my $p_len = unpack('n', $self->data);
51 my $p = substr($self->data, $ptr, $p_len);
54 my $g_len = unpack('n', substr($self->data, $ptr));
56 my $g = substr($self->data, $ptr, $g_len);
59 my $pub_key_len = unpack('n', substr($self->data, $ptr));
61 my $pub_key = substr($self->data, $ptr, $pub_key_len);
65 my $sig_len = unpack('n', substr($self->data, $ptr));
67 if (defined $sig_len) {
69 $sig = substr($self->data, $ptr, $sig_len);
75 $self->pub_key($pub_key);
80 #Reconstruct the on-the-wire message data following changes
81 sub set_message_contents
86 $data = pack('n', length($self->p));
88 $data .= pack('n', length($self->g));
90 $data .= pack('n', length($self->pub_key));
91 $data .= $self->pub_key;
92 if (length($self->sig) > 0) {
93 $data .= pack('n', length($self->sig));
100 #Read/write accessors
122 $self->{pub_key} = shift;
124 return $self->{pub_key};
130 $self->{sig} = shift;