123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package dhellman
- import (
- "context"
- "errors"
- "math/big"
- "git.ali33.ru/fcg-xvii/curve/v2"
- "git.ali33.ru/fcg-xvii/curve/v2/tools"
- "git.ali33.ru/fcg-xvii/go-tools/json"
- )
- type curveKeyPublic struct {
- p *tools.Point
- }
- func (s *curveKeyPublic) Map() json.Map {
- return json.Map{
- "p": s.p,
- }
- }
- func (s *curveKeyPublic) MarshalJSON() ([]byte, error) {
- return s.Map().JSON(), nil
- }
- func (s *curveKeyPublic) Attack(ctx context.Context) (curve.KeyPrivate, error) {
- return s.attack(ctx)
- }
- func (s *curveKeyPublic) attack(ctx context.Context) (*curveKeyPrivate, error) {
- c := s.p.Curve()
- tmp := big.NewInt(1)
- for {
- if tmp.Cmp(tools.Add64(c.P(), -1)) == 0 {
- break
- }
- if pp, err := c.G().Mul(tmp); err == nil && pp.X().Cmp(s.p.X()) == 0 {
- return &curveKeyPrivate{
- x: tmp,
- }, nil
- }
- select {
- case <-ctx.Done():
- return nil, errors.New("атака на метод диффи-хеллмана провалена: время вышло")
- default:
- tmp = tools.Add64(tmp, 1)
- }
- }
- return nil, errors.New("атака на метод диффи-хеллмана провалена: время вышло")
- }
|