Как преобразовать байт типа в Kyber.Scalar в Go
Я использую метод kyber.scalar в Go . Я хотел бы отправить свои данные ( kyber.scalar ) с программированием сокетов и могу прочитать другую программу. Когда я читаю, я не могу снова вернуться к типу kyber.scalar .
Это мой код для отправки
r := suite.Scalar()
r.Mul(x, c_scl).Sub(v, r)
r_by, err := r.MarshalBinary()
_, err = connection.Write(r_by)
defer connection.Close()
Это мой код для чтения
buffer5 := make([]byte, 1024)
mLen5, err := connection.Read(buffer5)
if err != nil {
fmt.Println("Error reading:", err.Error())
}
r := buffer5[:mLen5]
rG := suite.Point().Mul(r, G_pt)
Проблема.
нельзя использовать r (тип []byte) как тип kyber.Scalar в аргументе для suite.Curve.Point().Mul:[]byte не реализует kyber.Scalar (отсутствует метод Add)
Как исправить или есть ли рекомендуемый способ преобразования байтов в kyber.scalar ?
1 ответ
Если вы используетеgo.dedis.ch/kyber
затем ниже приведены некоторые способы достижения ожидаемого
С использованиемSetBytes
suite := suites.MustFind("Ed25519")
a := suite.Scalar().Pick(suite.RandomStream())
a_by, err := a.MarshalBinary()
if err != nil {
log.Fatal("...")
}
// New Scalar
b := suite.Scalar()
b.SetBytes(a_by)
С использованиема такжеsuite.Read
suite.Write
suite := suites.MustFind("Ed25519")
a := suite.Scalar().Pick(suite.RandomStream())
buf := bytes.Buffer{}
suite.Write(&buf, &a)
var c kyber.Scalar
bufBytes := buf.Bytes()
if err := suite.Read(bytes.NewBuffer(bufBytes), &c); err != nil {
log.Fatal("...")
}