1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-07 21:37:04 +09:00
anytype-heart/space/metadata.go
2025-03-20 12:04:47 +01:00

49 lines
1.1 KiB
Go

package space
import (
"fmt"
"strconv"
"strings"
"github.com/anyproto/any-sync/util/crypto"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
const anytypeMetadataPath = "m/SLIP-0021/anytype/account/metadata"
var deriveMetadata = DeriveAccountMetadata
func DeriveAccountMetadata(acc crypto.PrivKey) (*model.Metadata, crypto.SymKey, error) {
symKey, err := deriveAccountEncKey(acc)
if err != nil {
return nil, nil, err
}
symKeyProto, err := symKey.Marshall()
if err != nil {
return nil, nil, err
}
return &model.Metadata{
Payload: &model.MetadataPayloadOfIdentity{
Identity: &model.MetadataPayloadIdentityPayload{
ProfileSymKey: symKeyProto,
},
},
}, symKey, nil
}
func deriveAccountEncKey(accKey crypto.PrivKey) (crypto.SymKey, error) {
raw, err := accKey.Raw()
if err != nil {
return nil, err
}
return crypto.DeriveSymmetricKey(raw, anytypeMetadataPath)
}
func getRepKey(spaceId string) (uint64, error) {
sepIdx := strings.Index(spaceId, ".")
if sepIdx == -1 {
return 0, fmt.Errorf("space id is incorrect")
}
return strconv.ParseUint(spaceId[sepIdx+1:], 36, 64)
}