feat: implement PrepareProvideMessage
This commit is contained in:
parent
d734e1a89b
commit
34bb591bfe
|
@ -25,5 +25,6 @@ type P2PService interface {
|
||||||
DownVote(nodeId *encoding.NodeId) error
|
DownVote(nodeId *encoding.NodeId) error
|
||||||
NodeId() *encoding.NodeId
|
NodeId() *encoding.NodeId
|
||||||
SelfConnectionUris() []*url.URL
|
SelfConnectionUris() []*url.URL
|
||||||
|
PrepareProvideMessage(hash *encoding.Multihash, location StorageLocation) []byte
|
||||||
Service
|
Service
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
ed25519p "crypto/ed25519"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.lumeweb.com/LumeWeb/libs5-go/ed25519"
|
"git.lumeweb.com/LumeWeb/libs5-go/ed25519"
|
||||||
|
@ -661,3 +662,45 @@ func (p *P2PImpl) vote(nodeId *encoding.NodeId, upvote bool) error {
|
||||||
func (p *P2PImpl) NodeId() *encoding.NodeId {
|
func (p *P2PImpl) NodeId() *encoding.NodeId {
|
||||||
return p.localNodeID
|
return p.localNodeID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *P2PImpl) PrepareProvideMessage(hash *encoding.Multihash, location interfaces.StorageLocation) []byte {
|
||||||
|
// Initialize the list with the record type.
|
||||||
|
list := []byte{byte(types.RecordTypeStorageLocation)}
|
||||||
|
|
||||||
|
// Append the full bytes of the hash.
|
||||||
|
list = append(list, hash.FullBytes()...)
|
||||||
|
|
||||||
|
// Append the location type.
|
||||||
|
list = append(list, byte(location.Type()))
|
||||||
|
|
||||||
|
// Append the expiry time of the location, encoded as 4 bytes.
|
||||||
|
list = append(list, utils.EncodeEndian(uint64(location.Expiry()), 4)...)
|
||||||
|
|
||||||
|
// Append the number of parts in the location.
|
||||||
|
list = append(list, byte(len(location.Parts())))
|
||||||
|
|
||||||
|
// Iterate over each part in the location.
|
||||||
|
for _, part := range location.Parts() {
|
||||||
|
// Convert part to bytes.
|
||||||
|
bytes := []byte(part)
|
||||||
|
|
||||||
|
// Encode the length of the part as 4 bytes and append.
|
||||||
|
list = append(list, utils.EncodeEndian(uint64(len(bytes)), 4)...)
|
||||||
|
|
||||||
|
// Append the actual part bytes.
|
||||||
|
list = append(list, bytes...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append a null byte at the end of the list.
|
||||||
|
list = append(list, 0)
|
||||||
|
|
||||||
|
// Sign the list using the node's private key.
|
||||||
|
signature := ed25519p.Sign(p.nodeKeyPair.PublicKeyRaw(), list)
|
||||||
|
|
||||||
|
// Append the public key and signature to the list.
|
||||||
|
finalList := append(list, p.nodeKeyPair.PublicKey()...)
|
||||||
|
finalList = append(finalList, signature...)
|
||||||
|
|
||||||
|
// Return the final byte slice.
|
||||||
|
return finalList
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue