| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | package mainimport (	"context"	"sync/atomic"	"time"	"git.ali33.ru/fcg-xvii/curve/v2"	"git.ali33.ru/fcg-xvii/curve/v2/tools"	"git.ali33.ru/fcg-xvii/go-tools/containers/concurrent"	"git.ali33.ru/fcg-xvii/go-tools/json")var (	curveStore = &CurveStore{		List: concurrent.NewList(),		cid:  int32(0),	})type Curve struct {	*tools.Curve	id int32}func (s *Curve) Map() json.Map {	res := s.Curve.Map()	res["id"] = s.id	return res}func (s *Curve) MarshalJSON() ([]byte, error) {	return s.Map().JSON(), nil}type CurveStore struct {	*concurrent.List	cid int32}func (s *CurveStore) APICurveInit(mes *Message) {	mData := mes.Data()	a, check := checkBigInt(mes, "a")	if !check {		return	}	b, check := checkBigInt(mes, "b")	if !check {		return	}	p, check := checkBigInt(mes, "p")	if !check {		return	}	ctx, _ := context.WithDeadline(		context.Background(),		time.Now().Add(time.Second*time.Duration(mData.Int("deadline_seconds", 30))),	)	c, err := curve.NewCurve(a, b, p, ctx)	if err != nil {		mes.SendResponse(messageError(err.Error()))		return	}	cur := &Curve{		Curve: c,		id:    atomic.AddInt32(&s.cid, 1),	}	s.PushBack(cur)	mes.SendResponse(json.Map{		"curve": cur.Map(),	})}func (s *CurveStore) APICurves(mes *Message) {	curves := s.List.Slice()	mes.SendResponse(json.Map{		"curves": curves,	})}
 |