put.go 694 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package bep44
  2. import (
  3. "crypto/ed25519"
  4. "crypto/sha1"
  5. "github.com/anacrolix/torrent/bencode"
  6. )
  7. type Put struct {
  8. V interface{}
  9. K *[32]byte
  10. Salt []byte
  11. Sig [64]byte
  12. Cas int64
  13. Seq int64
  14. }
  15. func (p *Put) ToItem() *Item {
  16. i := &Item{
  17. V: p.V,
  18. Salt: p.Salt,
  19. Sig: p.Sig,
  20. Cas: p.Cas,
  21. Seq: p.Seq,
  22. }
  23. if p.K != nil {
  24. i.K = *p.K
  25. }
  26. return i
  27. }
  28. func (p *Put) Sign(k ed25519.PrivateKey) {
  29. copy(p.Sig[:], Sign(k, p.Salt, p.Seq, bencode.MustMarshal(p.V)))
  30. }
  31. func (i *Put) Target() Target {
  32. if i.IsMutable() {
  33. return MakeMutableTarget(*i.K, i.Salt)
  34. } else {
  35. return sha1.Sum(bencode.MustMarshal(i.V))
  36. }
  37. }
  38. func (s *Put) IsMutable() bool {
  39. return s.K != nil
  40. }