Lines Matching +full:data +full:- +full:shift
1 # Copyright 2016-2024 The OpenSSL Project Authors. All Rights Reserved.
96 # https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-signaturescheme
138 my $messlen = -1;
140 my $startoffset = -1;
153 $messlen = -1;
154 $startoffset = -1;
167 my $class = shift;
168 my $serverin = shift;
169 my $record = shift;
176 die "Changed peer, but we still have fragment data\n";
180 if ($record->content_type == TLSProxy::Record::RT_CCS) {
183 die "CCS received before message data complete\n";
185 if (!TLSProxy::Proxy->is_tls13()) {
187 TLSProxy::Record->server_encrypting(1);
189 TLSProxy::Record->client_encrypting(1);
192 } elsif ($record->content_type == TLSProxy::Record::RT_HANDSHAKE) {
193 if ($record->len == 0 || $record->len_real == 0) {
209 if (length($payload) + $record->decrypt_len >= $messlen) {
211 $recoffset = $messlen - length($payload);
212 $payload .= substr($record->decrypt_data, 0, $recoffset);
221 $payload .= $record->decrypt_data;
222 $recoffset = $record->decrypt_len;
223 push @message_frag_lens, $record->decrypt_len;
225 print " Partial message data read: ".$recoffset." bytes\n";
228 while ($record->decrypt_len > $recoffset) {
230 if ($record->decrypt_len - $recoffset < 4) {
238 substr($record->decrypt_data,
247 if ($recoffset <= $record->decrypt_len) {
248 #Some payload data is present in this record
249 if ($record->decrypt_len - $recoffset >= $messlen) {
251 $payload .= substr($record->decrypt_data, $recoffset,
262 $payload .= substr($record->decrypt_data, $recoffset,
263 $record->decrypt_len - $recoffset);
264 $recoffset = $record->decrypt_len;
270 } elsif ($record->content_type == TLSProxy::Record::RT_APPLICATION_DATA) {
271 print " [ENCRYPTED APPLICATION DATA]\n";
272 print " [".$record->decrypt_data."]\n";
278 } elsif ($record->content_type == TLSProxy::Record::RT_ALERT) {
279 my ($alertlev, $alertdesc) = unpack('CC', $record->decrypt_data);
291 $alert = TLSProxy::Alert->new(
293 $record->encrypted,
301 #Function to work out which sub-class we need to create and then
305 my ($server, $mt, $data, $startoffset) = @_;
311 $message = TLSProxy::ClientHello->new(
313 $data,
318 $message->parse();
320 $message = TLSProxy::ServerHello->new(
322 $data,
327 $message->parse();
329 $message = TLSProxy::EncryptedExtensions->new(
331 $data,
336 $message->parse();
338 $message = TLSProxy::Certificate->new(
340 $data,
345 $message->parse();
347 $message = TLSProxy::CertificateRequest->new(
349 $data,
354 $message->parse();
356 $message = TLSProxy::CertificateVerify->new(
358 $data,
363 $message->parse();
365 $message = TLSProxy::ServerKeyExchange->new(
367 $data,
372 $message->parse();
374 $message = TLSProxy::NewSessionTicket->new(
376 $data,
381 $message->parse();
383 $message = TLSProxy::NextProto->new(
385 $data,
390 $message->parse();
393 $message = TLSProxy::Message->new(
396 $data,
408 my $class = shift;
413 my $class = shift;
418 my $class = shift;
429 my $class = shift;
432 $data,
439 data => $data,
444 dupext => -1
452 my $class = shift;
454 $ciphersuite = shift;
459 #Update all the underlying records with the modified data from this message
463 my $self = shift;
466 my $numrecs = $#{$self->records};
468 $self->set_message_contents();
473 $lenlo = length($self->data) & 0xff;
474 $lenhi = length($self->data) >> 8;
475 $msgdata = pack('CnC', $self->mt, $lenhi, $lenlo).$self->data;
479 my ($rec) = @{$self->records};
480 my $recdata = $rec->decrypt_data;
484 # We use empty message_frag_lens to indicates that pre-repacking,
487 if (@{$self->message_frag_lens}) {
488 $old_length = ${$self->message_frag_lens}[0] +
494 my $prefix = substr($recdata, 0, $self->startoffset);
495 my $suffix = substr($recdata, $self->startoffset + $old_length);
497 $rec->decrypt_data($prefix.($msgdata).($suffix));
498 # TODO(openssl-team): don't keep explicit lengths.
501 $rec->decrypt_len(length($rec->decrypt_data));
502 # Only support re-encryption for TLSv1.3 and ETM.
503 if ($rec->encrypted()) {
504 if (TLSProxy::Proxy->is_tls13()) {
506 $rec->data($rec->decrypt_data
508 } elsif ($rec->etm()) {
509 my $data = $rec->decrypt_data;
511 my $padval = length($data) % 16;
512 $padval = 15 - $padval;
514 $data .= pack("C", $padval);
519 $data .= pack("C", $macval);
522 if ($rec->version() >= TLSProxy::Record::VERS_TLS_1_1) {
524 $data = ("\0"x16).$data;
526 $rec->data($data);
531 $rec->data($rec->decrypt_data);
533 $rec->len(length($rec->data));
536 ${$self->message_frag_lens}[0] = length($msgdata)
537 - TLS_MESSAGE_HEADER_LENGTH;
544 foreach my $rec (@{$self->records}) {
545 my $recdata = $rec->decrypt_data;
548 my $remainlen = length($recdata) - $self->startoffset;
549 $rec->data(substr($recdata, 0, $self->startoffset)
554 $rec->data(substr($msgdata, $datadone));
557 $rec->data(substr($msgdata, $datadone, length($rec->data)));
558 $datadone += length($rec->data);
564 #To be overridden by sub-classes
572 my $self = shift;
573 return $self->{server};
579 my $self = shift;
581 $self->{mt} = shift;
583 return $self->{mt};
585 sub data subroutine
587 my $self = shift;
589 $self->{data} = shift;
591 return $self->{data};
595 my $self = shift;
597 $self->{records} = shift;
599 return $self->{records};
603 my $self = shift;
605 $self->{startoffset} = shift;
607 return $self->{startoffset};
611 my $self = shift;
613 $self->{message_frag_lens} = shift;
615 return $self->{message_frag_lens};
619 my $self = shift;
620 return TLS_MESSAGE_HEADER_LENGTH + length($self->data);
624 my $self = shift;
626 $self->{dupext} = shift;
628 return $self->{dupext};
632 my $class = shift;
634 $successondata = shift;