move utils.go to its own package so that it's available for aeads

This commit is contained in:
Lucas Clemente
2016-04-10 20:23:15 +02:00
parent 07f5daa7ba
commit 4a44e4982e
4 changed files with 32 additions and 20 deletions

View File

@@ -5,6 +5,8 @@ import (
"encoding/binary"
"errors"
"sort"
"github.com/lucas-clemente/quic-go/utils"
)
// A Tag in the QUIC crypto
@@ -116,9 +118,9 @@ func ParseCryptoMessage(data []byte) (Tag, map[Tag][]byte, error) {
// WriteCryptoMessage writes a crypto message
func WriteCryptoMessage(b *bytes.Buffer, messageTag Tag, data map[Tag][]byte) {
writeUint32(b, uint32(messageTag))
writeUint16(b, uint16(len(data)))
writeUint16(b, 0)
utils.WriteUint32(b, uint32(messageTag))
utils.WriteUint16(b, uint16(len(data)))
utils.WriteUint16(b, 0)
// Save current position in the buffer, so that we can update the index in-place later
indexStart := b.Len()
@@ -133,7 +135,7 @@ func WriteCryptoMessage(b *bytes.Buffer, messageTag Tag, data map[Tag][]byte) {
tags[i] = uint32(t)
i++
}
sort.Sort(Uint32Slice(tags))
sort.Sort(utils.Uint32Slice(tags))
offset := uint32(0)
for i, t := range tags {

View File

@@ -3,6 +3,8 @@ package quic
import (
"bytes"
"io/ioutil"
"github.com/lucas-clemente/quic-go/utils"
)
// A StreamFrame of QUIC
@@ -29,20 +31,20 @@ func ParseStreamFrame(r *bytes.Reader) (*StreamFrame, error) {
}
streamIDLen := typeByte&0x03 + 1
sid, err := readUintN(r, streamIDLen)
sid, err := utils.ReadUintN(r, streamIDLen)
if err != nil {
return nil, err
}
frame.StreamID = uint32(sid)
frame.Offset, err = readUintN(r, offsetLen)
frame.Offset, err = utils.ReadUintN(r, offsetLen)
if err != nil {
return nil, err
}
var dataLen uint16
if dataLenPresent {
dataLen, err = readUint16(r)
dataLen, err = utils.ReadUint16(r)
if err != nil {
return nil, err
}
@@ -76,10 +78,10 @@ func WriteStreamFrame(b *bytes.Buffer, f *StreamFrame) {
}
typeByte ^= 0x03 // TODO: Send shorter stream ID if possible
b.WriteByte(typeByte)
writeUint32(b, f.StreamID)
utils.WriteUint32(b, f.StreamID)
if f.Offset != 0 {
writeUint64(b, f.Offset)
utils.WriteUint64(b, f.Offset)
}
writeUint16(b, uint16(len(f.Data)))
utils.WriteUint16(b, uint16(len(f.Data)))
b.Write(f.Data)
}

View File

@@ -3,6 +3,8 @@ package quic
import (
"bytes"
"io"
"github.com/lucas-clemente/quic-go/utils"
)
// The PublicHeader of a QUIC packet
@@ -47,7 +49,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
}
// Connection ID
header.ConnectionID, err = readUintN(b, connectionIDLen)
header.ConnectionID, err = utils.ReadUintN(b, connectionIDLen)
if err != nil {
return nil, err
}
@@ -55,7 +57,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
// Version (optional)
if header.VersionFlag {
var v uint64
v, err = readUintN(b, 4)
v, err = utils.ReadUintN(b, 4)
if err != nil {
return nil, err
}
@@ -63,7 +65,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
}
// Packet number
header.PacketNumber, err = readUintN(b, packetNumberLen)
header.PacketNumber, err = utils.ReadUintN(b, packetNumberLen)
if err != nil {
return nil, err
}

View File

@@ -1,11 +1,12 @@
package quic
package utils
import (
"bytes"
"io"
)
func readUintN(b io.ByteReader, length uint8) (uint64, error) {
// ReadUintN reads N bytes
func ReadUintN(b io.ByteReader, length uint8) (uint64, error) {
var res uint64
for i := uint8(0); i < length; i++ {
bt, err := b.ReadByte()
@@ -17,7 +18,8 @@ func readUintN(b io.ByteReader, length uint8) (uint64, error) {
return res, nil
}
func readUint32(b io.ByteReader) (uint32, error) {
// ReadUint32 reads a uint32
func ReadUint32(b io.ByteReader) (uint32, error) {
var b1, b2, b3, b4 uint8
var err error
if b1, err = b.ReadByte(); err != nil {
@@ -35,7 +37,8 @@ func readUint32(b io.ByteReader) (uint32, error) {
return uint32(b1) + uint32(b2)<<8 + uint32(b3)<<16 + uint32(b4)<<24, nil
}
func readUint16(b io.ByteReader) (uint16, error) {
// ReadUint16 reads a uint16
func ReadUint16(b io.ByteReader) (uint16, error) {
var b1, b2 uint8
var err error
if b1, err = b.ReadByte(); err != nil {
@@ -47,7 +50,8 @@ func readUint16(b io.ByteReader) (uint16, error) {
return uint16(b1) + uint16(b2)<<8, nil
}
func writeUint64(b *bytes.Buffer, i uint64) {
// WriteUint64 writes a uint64
func WriteUint64(b *bytes.Buffer, i uint64) {
b.WriteByte(uint8(i & 0xff))
b.WriteByte(uint8((i >> 8) & 0xff))
b.WriteByte(uint8((i >> 16) & 0xff))
@@ -58,14 +62,16 @@ func writeUint64(b *bytes.Buffer, i uint64) {
b.WriteByte(uint8((i >> 56) & 0xff))
}
func writeUint32(b *bytes.Buffer, i uint32) {
// WriteUint32 writes a uint32
func WriteUint32(b *bytes.Buffer, i uint32) {
b.WriteByte(uint8(i & 0xff))
b.WriteByte(uint8((i >> 8) & 0xff))
b.WriteByte(uint8((i >> 16) & 0xff))
b.WriteByte(uint8((i >> 24) & 0xff))
}
func writeUint16(b *bytes.Buffer, i uint16) {
// WriteUint16 writes a uint16
func WriteUint16(b *bytes.Buffer, i uint16) {
b.WriteByte(uint8(i & 0xff))
b.WriteByte(uint8((i >> 8) & 0xff))
}