mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-07-09 21:58:42 +02:00
07c8adaf76
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
44 lines
958 B
Go
44 lines
958 B
Go
package clienthellod
|
|
|
|
import "bytes"
|
|
|
|
type QUICClientHello struct {
|
|
ClientHello
|
|
}
|
|
|
|
func ParseQUICClientHello(p []byte) (*QUICClientHello, error) {
|
|
// patch TLS record header to make it a valid TLS record
|
|
record := make([]byte, 5+len(p))
|
|
record[0] = 0x16 // TLS handshake
|
|
record[1] = 0x00 // Dummy TLS version MSB
|
|
record[2] = 0x00 // Dummy TLS version LSB
|
|
record[3] = byte(len(p) >> 8)
|
|
record[4] = byte(len(p))
|
|
copy(record[5:], p)
|
|
|
|
// parse TLS record
|
|
r := bytes.NewReader(record)
|
|
ch, err := ReadClientHello(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err = ch.ParseClientHello(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if ch.qtp == nil {
|
|
return nil, ErrNotQUICInitialPacket
|
|
}
|
|
|
|
if ch.qtp.ParseError() != nil {
|
|
return nil, ch.qtp.ParseError()
|
|
}
|
|
|
|
return &QUICClientHello{ClientHello: *ch}, nil
|
|
}
|
|
|
|
func (qch *QUICClientHello) Raw() []byte {
|
|
return qch.ClientHello.Raw()[5:] // strip TLS record header which is added by ParseQUICClientHello
|
|
}
|