Как преобразовать байт типа в 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.Readsuite.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("...")
}
Другие вопросы по тегам