go-waku/library/encoding.go

100 lines
2.0 KiB
Go

package main
import (
"encoding/json"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/crypto"
"github.com/status-im/go-waku/waku/v2/node"
"github.com/status-im/go-waku/waku/v2/protocol/pb"
)
func wakuMessage(messageJSON string) (pb.WakuMessage, error) {
var msg pb.WakuMessage
err := json.Unmarshal([]byte(messageJSON), &msg)
msg.Version = 0
return msg, err
}
func wakuMessageSymmetricEncoding(messageJSON string, publicKey string, optionalSigningKey string) (pb.WakuMessage, error) {
msg, err := wakuMessage(messageJSON)
if err != nil {
return msg, err
}
payload := node.Payload{
Data: msg.Payload,
Key: &node.KeyInfo{
Kind: node.Asymmetric,
},
}
keyBytes, err := hexutil.Decode(publicKey)
if err != nil {
return msg, err
}
payload.Key.PubKey, err = unmarshalPubkey(keyBytes)
if err != nil {
return msg, err
}
if optionalSigningKey != "" {
signingKeyBytes, err := hexutil.Decode(optionalSigningKey)
if err != nil {
return msg, err
}
payload.Key.PrivKey, err = crypto.ToECDSA(signingKeyBytes)
if err != nil {
return msg, err
}
}
msg.Version = 1
msg.Payload, err = payload.Encode(1)
return msg, err
}
func wakuMessageAsymmetricEncoding(messageJSON string, publicKey string, optionalSigningKey string) (pb.WakuMessage, error) {
msg, err := wakuMessage(messageJSON)
if err != nil {
return msg, err
}
payload := node.Payload{
Data: msg.Payload,
Key: &node.KeyInfo{
Kind: node.Asymmetric,
},
}
keyBytes, err := hexutil.Decode(publicKey)
if err != nil {
return msg, err
}
payload.Key.PubKey, err = unmarshalPubkey(keyBytes)
if err != nil {
return msg, err
}
if optionalSigningKey != "" {
signingKeyBytes, err := hexutil.Decode(optionalSigningKey)
if err != nil {
return msg, err
}
payload.Key.PrivKey, err = crypto.ToECDSA(signingKeyBytes)
if err != nil {
return msg, err
}
}
msg.Version = 1
msg.Payload, err = payload.Encode(1)
return msg, err
}