mirror of
https://github.com/refraction-networking/uquic.git
synced 2025-04-02 19:57:35 +03:00
uTLS is not yet bumped to the new version, so this commit breaks the dependencies relationship by getting rid of the local replace.
146 lines
4.4 KiB
Go
146 lines
4.4 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
|
|
"golang.org/x/exp/rand"
|
|
|
|
"github.com/refraction-networking/uquic/fuzzing/header"
|
|
"github.com/refraction-networking/uquic/fuzzing/internal/helper"
|
|
"github.com/refraction-networking/uquic/internal/protocol"
|
|
"github.com/refraction-networking/uquic/internal/wire"
|
|
)
|
|
|
|
const version = protocol.Version1
|
|
|
|
func getRandomData(l int) []byte {
|
|
b := make([]byte, l)
|
|
rand.Read(b)
|
|
return b
|
|
}
|
|
|
|
func getVNP(src, dest protocol.ArbitraryLenConnectionID, numVersions int) []byte {
|
|
versions := make([]protocol.VersionNumber, numVersions)
|
|
for i := 0; i < numVersions; i++ {
|
|
versions[i] = protocol.VersionNumber(rand.Uint32())
|
|
}
|
|
return wire.ComposeVersionNegotiation(src, dest, versions)
|
|
}
|
|
|
|
func main() {
|
|
headers := []wire.Header{
|
|
{ // Initial without token
|
|
SrcConnectionID: protocol.ParseConnectionID(getRandomData(3)),
|
|
DestConnectionID: protocol.ParseConnectionID(getRandomData(8)),
|
|
Type: protocol.PacketTypeInitial,
|
|
Length: protocol.ByteCount(rand.Intn(1000)),
|
|
Version: version,
|
|
},
|
|
{ // Initial without token, with zero-length src conn id
|
|
DestConnectionID: protocol.ParseConnectionID(getRandomData(8)),
|
|
Type: protocol.PacketTypeInitial,
|
|
Length: protocol.ByteCount(rand.Intn(1000)),
|
|
Version: version,
|
|
},
|
|
{ // Initial with Token
|
|
SrcConnectionID: protocol.ParseConnectionID(getRandomData(10)),
|
|
DestConnectionID: protocol.ParseConnectionID(getRandomData(19)),
|
|
Type: protocol.PacketTypeInitial,
|
|
Length: protocol.ByteCount(rand.Intn(1000)),
|
|
Version: version,
|
|
Token: getRandomData(25),
|
|
},
|
|
{ // Handshake packet
|
|
SrcConnectionID: protocol.ParseConnectionID(getRandomData(5)),
|
|
DestConnectionID: protocol.ParseConnectionID(getRandomData(10)),
|
|
Type: protocol.PacketTypeHandshake,
|
|
Length: protocol.ByteCount(rand.Intn(1000)),
|
|
Version: version,
|
|
},
|
|
{ // Handshake packet, with zero-length src conn id
|
|
DestConnectionID: protocol.ParseConnectionID(getRandomData(12)),
|
|
Type: protocol.PacketTypeHandshake,
|
|
Length: protocol.ByteCount(rand.Intn(1000)),
|
|
Version: version,
|
|
},
|
|
{ // 0-RTT packet
|
|
SrcConnectionID: protocol.ParseConnectionID(getRandomData(8)),
|
|
DestConnectionID: protocol.ParseConnectionID(getRandomData(9)),
|
|
Type: protocol.PacketType0RTT,
|
|
Length: protocol.ByteCount(rand.Intn(1000)),
|
|
Version: version,
|
|
},
|
|
{ // Retry Packet, with empty orig dest conn id
|
|
SrcConnectionID: protocol.ParseConnectionID(getRandomData(8)),
|
|
DestConnectionID: protocol.ParseConnectionID(getRandomData(9)),
|
|
Type: protocol.PacketTypeRetry,
|
|
Token: getRandomData(1000),
|
|
Version: version,
|
|
},
|
|
}
|
|
|
|
for _, h := range headers {
|
|
extHdr := &wire.ExtendedHeader{
|
|
Header: h,
|
|
PacketNumberLen: protocol.PacketNumberLen(rand.Intn(4) + 1),
|
|
PacketNumber: protocol.PacketNumber(rand.Uint64()),
|
|
}
|
|
b, err := extHdr.Append(nil, version)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if h.Type == protocol.PacketTypeRetry {
|
|
b = append(b, []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}...)
|
|
}
|
|
if h.Length > 0 {
|
|
b = append(b, make([]byte, h.Length)...)
|
|
}
|
|
|
|
if err := helper.WriteCorpusFileWithPrefix("corpus", b, header.PrefixLen); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
// short header
|
|
b, err := wire.AppendShortHeader(nil, protocol.ParseConnectionID(getRandomData(8)), 1337, protocol.PacketNumberLen2, protocol.KeyPhaseOne)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := helper.WriteCorpusFileWithPrefix("corpus", b, header.PrefixLen); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
vnps := [][]byte{
|
|
getVNP(
|
|
protocol.ArbitraryLenConnectionID(getRandomData(8)),
|
|
protocol.ArbitraryLenConnectionID(getRandomData(10)),
|
|
4,
|
|
),
|
|
getVNP(
|
|
protocol.ArbitraryLenConnectionID(getRandomData(10)),
|
|
protocol.ArbitraryLenConnectionID(getRandomData(5)),
|
|
0,
|
|
),
|
|
getVNP(
|
|
protocol.ArbitraryLenConnectionID(getRandomData(3)),
|
|
protocol.ArbitraryLenConnectionID(getRandomData(19)),
|
|
100,
|
|
),
|
|
getVNP(
|
|
protocol.ArbitraryLenConnectionID(getRandomData(3)),
|
|
nil,
|
|
20,
|
|
),
|
|
getVNP(
|
|
nil,
|
|
protocol.ArbitraryLenConnectionID(getRandomData(10)),
|
|
5,
|
|
),
|
|
}
|
|
|
|
for _, vnp := range vnps {
|
|
if err := helper.WriteCorpusFileWithPrefix("corpus", vnp, header.PrefixLen); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
}
|