]>
Commit | Line | Data |
---|---|---|
adb403de MC |
1 | # Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. |
2 | # | |
9059ab42 | 3 | # Licensed under the Apache License 2.0 (the "License"). You may not use |
adb403de MC |
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 | ||
8 | use strict; | |
9 | ||
10 | package TLSProxy::CertificateVerify; | |
11 | ||
12 | use vars '@ISA'; | |
13 | push @ISA, 'TLSProxy::Message'; | |
14 | ||
15 | sub new | |
16 | { | |
17 | my $class = shift; | |
18 | my ($server, | |
19 | $data, | |
20 | $records, | |
21 | $startoffset, | |
22 | $message_frag_lens) = @_; | |
23 | ||
24 | my $self = $class->SUPER::new( | |
25 | $server, | |
26 | TLSProxy::Message::MT_CERTIFICATE_VERIFY, | |
27 | $data, | |
28 | $records, | |
29 | $startoffset, | |
30 | $message_frag_lens); | |
31 | ||
32 | $self->{sigalg} = -1; | |
33 | $self->{signature} = ""; | |
34 | ||
35 | return $self; | |
36 | } | |
37 | ||
38 | sub parse | |
39 | { | |
40 | my $self = shift; | |
41 | ||
42 | my $sigalg = -1; | |
43 | my $remdata = $self->data; | |
44 | my $record = ${$self->records}[0]; | |
45 | ||
46 | if (TLSProxy::Proxy->is_tls13() | |
47 | || $record->version() == TLSProxy::Record::VERS_TLS_1_2) { | |
48 | $sigalg = unpack('n', $remdata); | |
49 | $remdata = substr($remdata, 2); | |
50 | } | |
51 | ||
52 | my $siglen = unpack('n', substr($remdata, 0, 2)); | |
53 | my $sig = substr($remdata, 2); | |
54 | ||
55 | die "Invalid CertificateVerify signature length" if length($sig) != $siglen; | |
56 | ||
57 | print " SigAlg:".$sigalg."\n"; | |
58 | print " Signature Len:".$siglen."\n"; | |
59 | ||
60 | $self->sigalg($sigalg); | |
61 | $self->signature($sig); | |
62 | } | |
63 | ||
64 | #Reconstruct the on-the-wire message data following changes | |
65 | sub set_message_contents | |
66 | { | |
67 | my $self = shift; | |
68 | my $data = ""; | |
69 | my $sig = $self->signature(); | |
70 | my $olddata = $self->data(); | |
71 | ||
72 | $data .= pack("n", $self->sigalg()) if ($self->sigalg() != -1); | |
73 | $data .= pack("n", length($sig)); | |
74 | $data .= $sig; | |
75 | ||
76 | $self->data($data); | |
77 | } | |
78 | ||
79 | #Read/write accessors | |
80 | sub sigalg | |
81 | { | |
82 | my $self = shift; | |
83 | if (@_) { | |
84 | $self->{sigalg} = shift; | |
85 | } | |
86 | return $self->{sigalg}; | |
87 | } | |
88 | sub signature | |
89 | { | |
90 | my $self = shift; | |
91 | if (@_) { | |
92 | $self->{signature} = shift; | |
93 | } | |
94 | return $self->{signature}; | |
95 | } | |
96 | 1; |