30 lines
759 B
Go
30 lines
759 B
Go
|
package handshake
|
||
|
|
||
|
import "encoding/binary"
|
||
|
|
||
|
func decodeCipherSuiteIDs(buf []byte) ([]uint16, error) {
|
||
|
if len(buf) < 2 {
|
||
|
return nil, errBufferTooSmall
|
||
|
}
|
||
|
cipherSuitesCount := int(binary.BigEndian.Uint16(buf[0:])) / 2
|
||
|
rtrn := make([]uint16, cipherSuitesCount)
|
||
|
for i := 0; i < cipherSuitesCount; i++ {
|
||
|
if len(buf) < (i*2 + 4) {
|
||
|
return nil, errBufferTooSmall
|
||
|
}
|
||
|
|
||
|
rtrn[i] = binary.BigEndian.Uint16(buf[(i*2)+2:])
|
||
|
}
|
||
|
return rtrn, nil
|
||
|
}
|
||
|
|
||
|
func encodeCipherSuiteIDs(cipherSuiteIDs []uint16) []byte {
|
||
|
out := []byte{0x00, 0x00}
|
||
|
binary.BigEndian.PutUint16(out[len(out)-2:], uint16(len(cipherSuiteIDs)*2))
|
||
|
for _, id := range cipherSuiteIDs {
|
||
|
out = append(out, []byte{0x00, 0x00}...)
|
||
|
binary.BigEndian.PutUint16(out[len(out)-2:], id)
|
||
|
}
|
||
|
return out
|
||
|
}
|