package elgamal import ( "context" "fmt" "math/big" "git.ali33.ru/fcg-xvii/curve/v2/tools" "git.ali33.ru/fcg-xvii/go-tools/json" ) func NewCurve(c *tools.Curve, ctx context.Context) (*Curve, error) { cc := &Curve{ Curve: c, } return cc, cc.setupDataTable(ctx) } type Curve struct { *tools.Curve dTable map[byte]*tools.Point } func (s *Curve) Map() json.Map { return json.Map{ "curve": s.Curve.Map(), "d-table": s.dTable, } } func (s *Curve) bytePoint(p *tools.Point) (byte, error) { for key, val := range s.dTable { if val.IsEqual(p) { return key, nil } } return 0, fmt.Errorf("Не найден символ, соответствующий точке %v", p) } // Заполнение таблицы байт -> точка на кривой func (s *Curve) setupDataTable(ctx context.Context) error { s.dTable = make(map[byte]*tools.Point) /* dx := big.NewInt(1) for i := byte(0); i <= 254; i++ { // поиск точки p, _, err := s.SearchClosePoints(dx, ctx) if err != nil { return err } // check already exists - todo dx = tools.Add64(p.X(), 2) s.dTable[i] = p log.Println(i, p) } */ g := s.G() for i := int64(0); i <= 254; i++ { p, _ := g.Mul(big.NewInt(i + 1)) s.dTable[byte(i)] = p } return nil }