12345678910111213141516171819202122232425262728293031323334353637383940 |
- package dhellman
- import (
- "math/big"
- "git.ali33.ru/fcg-xvii/curve/v2/tools"
- "git.ali33.ru/fcg-xvii/go-tools/json"
- )
- func randomCurveKeyPrivate(curve *tools.Curve) (priv *curveKeyPrivate, err error) {
- if err = curve.IsValidP(); err != nil {
- return
- }
- priv = &curveKeyPrivate{
- x: tools.Random(big.NewInt(1), tools.Sub64(curve.P(), 1)),
- }
- return
- }
- type curveKeyPrivate struct {
- x *big.Int
- }
- func (s *curveKeyPrivate) Map() json.Map {
- return json.Map{
- "x": s.x,
- }
- }
- func (s *curveKeyPrivate) MarshalJSON() ([]byte, error) {
- return s.Map().JSON(), nil
- }
- func (s *curveKeyPrivate) secret(pub *curveKeyPublic) (*tools.Point, error) {
- curve := pub.p.Curve()
- if err := curve.IsValidG(); err != nil {
- return nil, err
- }
- return pub.p.Mul(s.x)
- }
|