review3 renames
This commit is contained in:
		
							
								
								
									
										24
									
								
								asymcrypt.go
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								asymcrypt.go
									
									
									
									
									
								
							@@ -37,8 +37,8 @@ func NewKeyPair() KeyPair {
 | 
			
		||||
	return kp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (keyPair *KeyPair) GetCryptoKeyObject() *crypto.Key {
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(keyPair.Private)
 | 
			
		||||
func (Kp *KeyPair) GetCryptoKeyObject() *crypto.Key {
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(Kp.Private)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Create key from armoured b64 failed")
 | 
			
		||||
	}
 | 
			
		||||
@@ -49,8 +49,8 @@ func (keyPair *KeyPair) GetCryptoKeyObject() *crypto.Key {
 | 
			
		||||
	return key
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Encrypt(publicKey string, data []byte) ([]byte, error) {
 | 
			
		||||
	pub, err := base64.StdEncoding.DecodeString(publicKey)
 | 
			
		||||
func Encrypt(PublicKey string, data []byte) ([]byte, error) {
 | 
			
		||||
	pub, err := base64.StdEncoding.DecodeString(PublicKey)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Message encryption b64 failed")
 | 
			
		||||
	}
 | 
			
		||||
@@ -61,8 +61,8 @@ func Encrypt(publicKey string, data []byte) ([]byte, error) {
 | 
			
		||||
	return []byte(armor), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Decrypt(privateKey string, data []byte) ([]byte, error) {
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(privateKey)
 | 
			
		||||
func Decrypt(PrivateKey string, data []byte) ([]byte, error) {
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(PrivateKey)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Message decryption b64 failed")
 | 
			
		||||
	}
 | 
			
		||||
@@ -73,12 +73,12 @@ func Decrypt(privateKey string, data []byte) ([]byte, error) {
 | 
			
		||||
	return []byte(decrypted), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func EncryptAndSign(publicEncKey string, privateSignKey string, data []byte) ([]byte, []byte, error) {
 | 
			
		||||
	pub, err := base64.StdEncoding.DecodeString(publicEncKey)
 | 
			
		||||
func EncryptAndSign(PublicEncryptionKey string, PrivateSignatureKey string, data []byte) ([]byte, []byte, error) {
 | 
			
		||||
	pub, err := base64.StdEncoding.DecodeString(PublicEncryptionKey)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Message encryption and sign b64 failed")
 | 
			
		||||
	}
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(privateSignKey)
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(PrivateSignatureKey)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Message encryption and sign b64 failed")
 | 
			
		||||
	}
 | 
			
		||||
@@ -89,16 +89,16 @@ func EncryptAndSign(publicEncKey string, privateSignKey string, data []byte) ([]
 | 
			
		||||
	return []byte(encrypted), []byte(signature), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DecryptAndCheck(MyPrivateEncryptionKey string, peerContactPublicKey string, data []byte, signature []byte) (DecryptedMessage []byte, err error) {
 | 
			
		||||
func DecryptAndCheck(MyPrivateEncryptionKey string, MyContactPublicKey string, data []byte, Signature []byte) (DecryptedMessage []byte, err error) {
 | 
			
		||||
	pub, err := base64.StdEncoding.DecodeString(MyPrivateEncryptionKey)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Message decryption and sign b64 failed")
 | 
			
		||||
	}
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(peerContactPublicKey)
 | 
			
		||||
	priv, err := base64.StdEncoding.DecodeString(MyContactPublicKey)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Message decryption and sign b64 failed")
 | 
			
		||||
	}
 | 
			
		||||
	DecryptedMessage, err = helper.DecryptVerifyBinaryDetached(string(pub), string(priv), nil, data, string(signature))
 | 
			
		||||
	DecryptedMessage, err = helper.DecryptVerifyBinaryDetached(string(pub), string(priv), nil, data, string(Signature))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error().Msg("Message decryption and sign failed")
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,8 +12,7 @@ const key = "3pw0c8#6ZG8{75b5;3?fe80$2"
 | 
			
		||||
 | 
			
		||||
type Identity struct {
 | 
			
		||||
	Nickname       string             `json:"nickname,omitempty"`
 | 
			
		||||
	PublicKey      string             `json:"public_key,omitempty"`
 | 
			
		||||
	PrivateKey     string             `json:"private_key,omitempty"`
 | 
			
		||||
	RootKp         meowlib.KeyPair    `json:"id_kp,omitempty"`
 | 
			
		||||
	Status         string             `json:"status,omitempty"`
 | 
			
		||||
	Peers          PeerList           `json:"peers,omitempty"`
 | 
			
		||||
	KnownServers   InternalServerList `json:"known_servers,omitempty"`
 | 
			
		||||
@@ -23,24 +22,22 @@ type Identity struct {
 | 
			
		||||
func CreateIdentity(nickname string) *Identity {
 | 
			
		||||
	var id Identity
 | 
			
		||||
	id.Nickname = nickname
 | 
			
		||||
	kp := meowlib.NewKeyPair()
 | 
			
		||||
	id.PublicKey = kp.Public
 | 
			
		||||
	id.PrivateKey = kp.Private
 | 
			
		||||
	id.RootKp = meowlib.NewKeyPair()
 | 
			
		||||
	return &id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (id *Identity) InvitePeer(myName string, contactName string, messageServerIdxs []int) (*Peer, *meowlib.ContactCard) {
 | 
			
		||||
func (id *Identity) InvitePeer(MyName string, ContactName string, MessageServerIdxs []int) (*Peer, *meowlib.ContactCard) {
 | 
			
		||||
	var peer Peer
 | 
			
		||||
	var myContactCard meowlib.ContactCard
 | 
			
		||||
	peer.Me = meowlib.NewKeyPair()
 | 
			
		||||
	peer.EncryptionKp = meowlib.NewKeyPair()
 | 
			
		||||
	peer.LookupKp = meowlib.NewKeyPair()
 | 
			
		||||
	peer.Name = contactName
 | 
			
		||||
	for _, i := range messageServerIdxs {
 | 
			
		||||
	peer.Name = ContactName
 | 
			
		||||
	for _, i := range MessageServerIdxs {
 | 
			
		||||
		srv := id.MessageServers.Servers[i].ServerData
 | 
			
		||||
		myContactCard.PullServers = append(myContactCard.PullServers, &srv)
 | 
			
		||||
	}
 | 
			
		||||
	myContactCard.Name = myName
 | 
			
		||||
	myContactCard.Name = MyName
 | 
			
		||||
	myContactCard.ContactPublicKey = peer.Me.Public
 | 
			
		||||
	myContactCard.EncryptionPublicKey = peer.EncryptionKp.Public
 | 
			
		||||
	myContactCard.LookupPublicKey = peer.LookupKp.Public
 | 
			
		||||
@@ -50,8 +47,8 @@ func (id *Identity) InvitePeer(myName string, contactName string, messageServerI
 | 
			
		||||
	return &id.Peers[len(id.Peers)-1], &myContactCard
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*Identity) FinalizeInvitation(peer *Peer, receivedContact *meowlib.ContactCard) {
 | 
			
		||||
	peer.Contact = *receivedContact
 | 
			
		||||
func (*Identity) FinalizeInvitation(peer *Peer, ReceivedContact *meowlib.ContactCard) {
 | 
			
		||||
	peer.Contact = *ReceivedContact
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,16 +7,6 @@ import (
 | 
			
		||||
	"forge.redroom.link/yves/meowlib"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
type ContactCard struct {
 | 
			
		||||
	Name                string           `json:"name,omitempty"`
 | 
			
		||||
	ContactPublicKey    string           `json:"contact_public_key,omitempty"`
 | 
			
		||||
	EncryptionPublicKey string           `json:"encryption_public_key,omitempty"`
 | 
			
		||||
	LookupPublicKey     string           `json:"lookup_public_key,omitempty"`
 | 
			
		||||
	PullServers         []meowlib.Server `json:"pull_servers,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
type Peer struct {
 | 
			
		||||
	Name string `json:"name,omitempty"`
 | 
			
		||||
	//	Conversation        []InternalMessage `json:"conversation,omitempty"`
 | 
			
		||||
@@ -61,23 +51,23 @@ func (pl *PeerList) GetFromName(name string) *Peer {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Peer) AsymEncryptMessage(Message []byte) (lookupK string, EncryptedMsg []byte, Signature []byte, Servers []*meowlib.Server, err error) {
 | 
			
		||||
	// prepares a message to send to a specific peer contact
 | 
			
		||||
	EncryptedMsg, Signature, err = meowlib.EncryptAndSign(p.Contact.EncryptionPublicKey, p.Me.Private, Message)
 | 
			
		||||
// AsymEncryptMessage prepares a message to send to a specific peer contact
 | 
			
		||||
func (p *Peer) AsymEncryptMessage(Message []byte) (LookupPublicKey string, EncryptedMessage []byte, Signature []byte, Servers []*meowlib.Server, err error) {
 | 
			
		||||
	EncryptedMessage, Signature, err = meowlib.EncryptAndSign(p.Contact.EncryptionPublicKey, p.Me.Private, Message)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err.Error())
 | 
			
		||||
		return "", nil, nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return p.LookupKp.Public, EncryptedMsg, Signature, p.Contact.PullServers, err
 | 
			
		||||
	return p.LookupKp.Public, EncryptedMessage, Signature, p.Contact.PullServers, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Peer) AsymDecryptMessage(Message []byte, Signature []byte) (DecryptedMsg []byte, err error) {
 | 
			
		||||
	// reads a message from a specific peer contact
 | 
			
		||||
	DecryptedMsg, err = meowlib.DecryptAndCheck(p.Me.Private, p.Contact.ContactPublicKey, Message, Signature)
 | 
			
		||||
// AsymDecryptMessage reads a message from a specific peer contact
 | 
			
		||||
func (p *Peer) AsymDecryptMessage(Message []byte, Signature []byte) (DecryptedMessage []byte, err error) {
 | 
			
		||||
	DecryptedMessage, err = meowlib.DecryptAndCheck(p.Me.Private, p.Contact.ContactPublicKey, Message, Signature)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err.Error())
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return DecryptedMsg, err
 | 
			
		||||
	return DecryptedMessage, err
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -34,22 +34,22 @@ func (sl *InternalServerList) AddUrls(urls []string) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ints *InternalServer) AsymEncryptMessage(Message []byte) (EncryptedMsg []byte, Signature []byte, err error) {
 | 
			
		||||
	// prepares a message to send to a specific internal server
 | 
			
		||||
	EncryptedMsg, Signature, err = meowlib.EncryptAndSign(ints.ServerData.PublicKey, ints.Me.Private, Message)
 | 
			
		||||
// AsymEncryptMessage prepares a message to send to a specific internal server
 | 
			
		||||
func (ints *InternalServer) AsymEncryptMessage(Message []byte) (EncryptedMessage []byte, Signature []byte, err error) {
 | 
			
		||||
	EncryptedMessage, Signature, err = meowlib.EncryptAndSign(ints.ServerData.PublicKey, ints.Me.Private, Message)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err.Error())
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return EncryptedMsg, Signature, err
 | 
			
		||||
	return EncryptedMessage, Signature, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ints *InternalServer) AsymDecryptMessage(Message []byte, Signature []byte) (DecryptedMsg []byte, err error) {
 | 
			
		||||
	// reads a message from a specific internal server
 | 
			
		||||
	DecryptedMsg, err = meowlib.DecryptAndCheck(ints.Me.Private, ints.ServerData.PublicKey, Message, Signature)
 | 
			
		||||
// AsymDecryptMessage reads a message from a specific internal server
 | 
			
		||||
func (ints *InternalServer) AsymDecryptMessage(Message []byte, Signature []byte) (DecryptedMessage []byte, err error) {
 | 
			
		||||
	DecryptedMessage, err = meowlib.DecryptAndCheck(ints.Me.Private, ints.ServerData.PublicKey, Message, Signature)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err.Error())
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return DecryptedMsg, err
 | 
			
		||||
	return DecryptedMessage, err
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -20,14 +20,14 @@ func ServerFromUrl(url string) *Server {
 | 
			
		||||
	return &s
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (contact *ContactCard) AddUrls(urls []string) {
 | 
			
		||||
func (Contact *ContactCard) AddUrls(urls []string) {
 | 
			
		||||
	for _, url := range urls {
 | 
			
		||||
		contact.PullServers = append(contact.PullServers, ServerFromUrl(url))
 | 
			
		||||
		Contact.PullServers = append(Contact.PullServers, ServerFromUrl(url))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (contact *ContactCard) WritePng(filename string) {
 | 
			
		||||
	jsonContact, _ := json.Marshal(contact)
 | 
			
		||||
func (Contact *ContactCard) WritePng(filename string) {
 | 
			
		||||
	jsonContact, _ := json.Marshal(Contact)
 | 
			
		||||
	//imgdata := base64.StdEncoding.EncodeToString(jsonContact)
 | 
			
		||||
	size := int(math.Sqrt(float64(len(jsonContact))/3)) + 1
 | 
			
		||||
	println(size)
 | 
			
		||||
@@ -65,8 +65,8 @@ func (contact *ContactCard) WritePng(filename string) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (contact *ContactCard) WriteQr(filename string) {
 | 
			
		||||
	jsonContact, _ := json.Marshal(contact)
 | 
			
		||||
func (Contact *ContactCard) WriteQr(FileName string) {
 | 
			
		||||
	jsonContact, _ := json.Marshal(Contact)
 | 
			
		||||
	qwriter := qrcode.NewQRCodeWriter()
 | 
			
		||||
	code, err := qwriter.Encode(string(jsonContact), gozxing.BarcodeFormat_QR_CODE, 512, 512, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -81,8 +81,8 @@ func (contact *ContactCard) WriteQr(filename string) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ReadQr(fielname string) ContactCard {
 | 
			
		||||
	var contact ContactCard
 | 
			
		||||
func ReadQr(FileName string) ContactCard {
 | 
			
		||||
	var Contact ContactCard
 | 
			
		||||
	// open and decode image file
 | 
			
		||||
	file, _ := os.Open("qrcode.jpg")
 | 
			
		||||
	img, _, _ := image.Decode(file)
 | 
			
		||||
@@ -95,5 +95,5 @@ func ReadQr(fielname string) ContactCard {
 | 
			
		||||
	result, _ := qrReader.Decode(bmp, nil)
 | 
			
		||||
 | 
			
		||||
	fmt.Println(result)
 | 
			
		||||
	return contact
 | 
			
		||||
	return Contact
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,21 +15,21 @@ func TestEndToEnd(t *testing.T) {
 | 
			
		||||
	// Create my own identity
 | 
			
		||||
	//
 | 
			
		||||
	fmt.Println("Trying to load identity from file.")
 | 
			
		||||
	me, err := client.LoadIdentity("id.enc")
 | 
			
		||||
	Me, err := client.LoadIdentity("id.enc")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println("Failed : creating New identity...")
 | 
			
		||||
		me = client.CreateIdentity("myname")
 | 
			
		||||
		Me = client.CreateIdentity("myname")
 | 
			
		||||
 | 
			
		||||
		//
 | 
			
		||||
		// define my preferences (servers)
 | 
			
		||||
		//
 | 
			
		||||
		me.MessageServers.Name = "Message Servers"
 | 
			
		||||
		me.MessageServers.AddUrls([]string{"http://127.0.0.1/meow/", "mqtt://127.0.0.1", "meow://127.0.0.1"})
 | 
			
		||||
		Me.MessageServers.Name = "Message Servers"
 | 
			
		||||
		Me.MessageServers.AddUrls([]string{"http://127.0.0.1/meow/", "mqtt://127.0.0.1", "meow://127.0.0.1"})
 | 
			
		||||
		//
 | 
			
		||||
		// create an invitation for a friend, I want him/her to know me as Bender
 | 
			
		||||
		//
 | 
			
		||||
		fmt.Println("Creating an invitation for the first friend...")
 | 
			
		||||
		myFirstFriend, invitation := me.InvitePeer("Bender", "myfirstfriend", []int{1, 2})
 | 
			
		||||
		MyFirstFriend, invitation := Me.InvitePeer("Bender", "myfirstfriend", []int{1, 2})
 | 
			
		||||
		// print my invitation
 | 
			
		||||
		a, _ := json.Marshal(invitation)
 | 
			
		||||
		fmt.Println(string(a))
 | 
			
		||||
@@ -38,17 +38,17 @@ func TestEndToEnd(t *testing.T) {
 | 
			
		||||
		//
 | 
			
		||||
		// Simulate peer invitation response : generate the friend's keypair
 | 
			
		||||
		fmt.Println("Simulating first friend answer...")
 | 
			
		||||
		var receivedContact meowlib.ContactCard
 | 
			
		||||
		var ReceivedContact meowlib.ContactCard
 | 
			
		||||
 | 
			
		||||
		// Friend simulated invitation
 | 
			
		||||
		firstFriendContactKp := meowlib.NewKeyPair()
 | 
			
		||||
		firstFriendEncryptionKp := meowlib.NewKeyPair()
 | 
			
		||||
		firstFriendLookupKp := meowlib.NewKeyPair()
 | 
			
		||||
		receivedContact.Name = "I'm the friend"
 | 
			
		||||
		receivedContact.ContactPublicKey = firstFriendContactKp.Public
 | 
			
		||||
		receivedContact.EncryptionPublicKey = firstFriendEncryptionKp.Public
 | 
			
		||||
		receivedContact.LookupPublicKey = firstFriendLookupKp.Public
 | 
			
		||||
		receivedContact.AddUrls([]string{"http://myfriend.org/meow/"})
 | 
			
		||||
		FirstFriendContactKp := meowlib.NewKeyPair()
 | 
			
		||||
		FirstFriendEncryptionKp := meowlib.NewKeyPair()
 | 
			
		||||
		FirstFriendLookupKp := meowlib.NewKeyPair()
 | 
			
		||||
		ReceivedContact.Name = "I'm the friend"
 | 
			
		||||
		ReceivedContact.ContactPublicKey = FirstFriendContactKp.Public
 | 
			
		||||
		ReceivedContact.EncryptionPublicKey = FirstFriendEncryptionKp.Public
 | 
			
		||||
		ReceivedContact.LookupPublicKey = FirstFriendLookupKp.Public
 | 
			
		||||
		ReceivedContact.AddUrls([]string{"http://myfriend.org/meow/"})
 | 
			
		||||
		// end Friend simulated invitation
 | 
			
		||||
 | 
			
		||||
		// End simulating contact invitation response
 | 
			
		||||
@@ -57,19 +57,19 @@ func TestEndToEnd(t *testing.T) {
 | 
			
		||||
		//
 | 
			
		||||
		// Finalize the contact with the invitation response
 | 
			
		||||
		//
 | 
			
		||||
		me.FinalizeInvitation(myFirstFriend, &receivedContact)
 | 
			
		||||
		err = me.Save("id.enc")
 | 
			
		||||
		Me.FinalizeInvitation(MyFirstFriend, &ReceivedContact)
 | 
			
		||||
		err = Me.Save("id.enc")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		a, _ = json.Marshal(me)
 | 
			
		||||
		a, _ = json.Marshal(Me)
 | 
			
		||||
		ioutil.WriteFile("id.json", a, 0644)
 | 
			
		||||
		fmt.Println(string(a))
 | 
			
		||||
 | 
			
		||||
		// create message to simulated friend
 | 
			
		||||
		sentmessage := "Hello friend!"
 | 
			
		||||
		lookupK, EncMsg, MsgSignature, Servers, err := myFirstFriend.CreateMessage([]byte(sentmessage))
 | 
			
		||||
		lookupK, EncMsg, Signature, Servers, err := MyFirstFriend.AsymEncryptMessage([]byte(sentmessage))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
@@ -81,12 +81,33 @@ func TestEndToEnd(t *testing.T) {
 | 
			
		||||
		// simulates if peer can decrypt my message
 | 
			
		||||
		//Message := "toto"
 | 
			
		||||
		//Signature := "test"
 | 
			
		||||
		decMess, err2 := meowlib.DecryptAndCheck(myFirstFriend.EncryptionKp.Private, myFirstFriend.Contact.EncryptionPublicKey, []byte(EncMsg), MsgSignature)
 | 
			
		||||
		decMess, err2 := MyFirstFriend.AsymDecryptMessage([]byte(EncMsg), Signature)
 | 
			
		||||
		if err2 != nil {
 | 
			
		||||
			fmt.Println(err2.Error())
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Println(decMess)
 | 
			
		||||
		//
 | 
			
		||||
		fmt.Println("--- myFriend.decryptedMess = ", string(decMess))
 | 
			
		||||
 | 
			
		||||
		// simulates a new server to send a message to
 | 
			
		||||
		var intS1 client.InternalServer
 | 
			
		||||
		intS1.ServerData.Name = "IntS1"
 | 
			
		||||
		intS1.ServerData.Description = "Internal Serveur 1"
 | 
			
		||||
		intS1.Me = meowlib.NewKeyPair()
 | 
			
		||||
		intS1.ServerData.Url = "http://myfriend.org/meow/"
 | 
			
		||||
		KP := meowlib.NewKeyPair()
 | 
			
		||||
		intS1.ServerData.PublicKey = KP.Public
 | 
			
		||||
 | 
			
		||||
		// sends a message to server 1
 | 
			
		||||
		SrvEncrypted, SrvSign, err3 := intS1.AsymEncryptMessage([]byte(sentmessage))
 | 
			
		||||
		if err3 != nil {
 | 
			
		||||
			fmt.Println(err3.Error())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// tests simulated server decrypted message
 | 
			
		||||
		SrvDecrypted, err4 := intS1.AsymDecryptMessage(SrvEncrypted, SrvSign)
 | 
			
		||||
		if err4 != nil {
 | 
			
		||||
			fmt.Println(err4.Error())
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Println("--- SrvDecryptedMess = ", string(SrvDecrypted))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										478
									
								
								id.enc
									
									
									
									
									
								
							
							
						
						
									
										478
									
								
								id.enc
									
									
									
									
									
								
							@@ -1,243 +1,243 @@
 | 
			
		||||
-----BEGIN PGP MESSAGE-----
 | 
			
		||||
Comment: https://gopenpgp.org
 | 
			
		||||
Version: GopenPGP 2.2.4
 | 
			
		||||
Comment: https://gopenpgp.org
 | 
			
		||||
 | 
			
		||||
wy4ECQMIY2ILWmkTKZ3gEBHjp5QyF+9sL3U/bV8QzCkfmQHVRz/gWPYqk5VzHHJ8
 | 
			
		||||
0u0B+18piB+b4wbrfEfnULF1eLssc+EI6PDl4CoWhk7rncXR6sxQ93CEtCstSgtW
 | 
			
		||||
c8+k8oMXFlFxbqjGQs7vFM3NoNB6da6wN83N+WtT6fQgxpq4IatOU4eG9Lyr9kVP
 | 
			
		||||
mNzazv0yzRwY7B1WfOAgs+s7wjPh6KPqlDJWizsWqyrPXMcdbFt+x5IuBXYOa4J/
 | 
			
		||||
G0cKHrwyon3LKup8+zvitklzuVpiLNg4C6F2BZU7EVNYVPzwetnI+srTZkUAQ4O+
 | 
			
		||||
iXLiiESt16JIVZjLVfxAsDRkwZyeP788Ey7JA2bvxD8rnwoDf5hmZAte96TeIQxa
 | 
			
		||||
kxQ9n7sWbDEcZVjiS33ViQYua76hzBc4yKUyMOWYd7PYjwd1eY/+m7jKHncVxj0l
 | 
			
		||||
c2RwV0OBKZl9xCk5ASO/vG6U25BtuFBf8nUs0Pit3eoviMePbFKm1FxrDnPYh3EA
 | 
			
		||||
kP7qyLSLpMPY65S88muuh+uyI7KM9T0Gz8ZG/ZVBiAQ+Ujbyghg27Med1DllxJ5W
 | 
			
		||||
qUQ6FAv4GSVY06FF471kKIFtU46K4YzLo2d/H2wI+MGIIL9QnZ0GL79g1pj9yYRX
 | 
			
		||||
EScgZvHXg722xdIe1XisPh0pzvUWpDwoad9RO+Ht0QfEKxLRGBZ+OZcVbQSALhs7
 | 
			
		||||
jdgCKGYdLbALrTJ8QJ7hdSU+iEQMrz+dYZ0BxdcClN4/3inUirjyzv53VCb3kBt6
 | 
			
		||||
P53yHg8PoeqLOsdohynQVX+C0KB0ahuFeWe7NvcG0+zCzF1r6vjCPDwakqhy2Sce
 | 
			
		||||
edsj/Op599Rkwaw1Yy06axr+aoPqpnMX/YSnZ/tXfqFT2UbKjp5Jh7ag0IcKCwWB
 | 
			
		||||
wZmtnYtc/C0yKMD+NE3LdnH8axGQpjWVExJjAwKuwtLK+fDnAVh/gKZNU9QOH+vM
 | 
			
		||||
oGDdnhGqBWyhZlWPA7lva03XO5uG2vBkVDmpcFBKOy4cCKWy5WDw3X4lXxCM5fsP
 | 
			
		||||
Porub2ryixeM0nFoso3n+35Y0XZ87MjFpkgZRKUn4qLOYO7nS0RCtj6ZRXfgO9o9
 | 
			
		||||
iCjnuXpdTCXN2290ot088UOdH5bcpcneE/23onVWHVZchXYkQqZF5M/lAj6ftNOl
 | 
			
		||||
VupADVqsLh9vZXFSrWhS/qrk+ybOkVACdFCPSp35zBldJjsijfBKpmsRJ+6UTEus
 | 
			
		||||
Ko1suYy23LrcfwN2unaFtJ1Aw+emOnHqUlhQOD4ntHHYEAJP4Dl5bfpimpEpU1Bz
 | 
			
		||||
n58nz0/p59kpP+HDypOka0jhLf6BDEry42qrawmpZPhpCtAABvJgeFEXn3pUk88w
 | 
			
		||||
TAXSouW21YY6iBXjaUNygCdXEZuSW9t4uAfSMTHpS99PfKHw+ljnsYDdb80ArdXf
 | 
			
		||||
KEzq6UsgXB1fYr/rDnY7iis7VkX1xP29BQiOe/bIUcuruL+n/W/dxdxGVkB9ULET
 | 
			
		||||
FeeBOhdaTbaZefAbkTctNNFz0dw32t6N2qPXrUo3dsZWRQNRLljpVlCn+3L1QOm5
 | 
			
		||||
/KGG1Fm23MaYRExl4c0I31QeO8sXe2dZzXng59tC244IeM84Ra/lB3zmzGr2cL5w
 | 
			
		||||
ABv94Ok3ITmKUVmtfeCpxp9tdpqXdv5Upn2ONEXjCGR/Ps21TW2IHKZHUQY+a9AP
 | 
			
		||||
fCi92UYFH97LxLC1jBbGP82D1aBFzFFRsHO05Mc7bSzNV0ZslQz+CfJHz8k26qTT
 | 
			
		||||
kR9tSAbC/pKBzKScVCSblbrDnsINuGQqkdhx+XMzbE+504B9N57wyFiW2XpCLOd3
 | 
			
		||||
+dtoMVBqi0jVTrlrciOuhocO53UldXiNh1rk/aWALsnC6RysAA7cXvxdq1r58Kin
 | 
			
		||||
Sn6zH1VT6mlaUdyeYkrsCIc7B5ukCeJUYUKxbb2Qj94XQhU2Uw33f+9dgxdVosij
 | 
			
		||||
zhFNFNSgfI3kKV68u4g8IT/rBjSlCE6P0sbm67JuMhE+ClEk/wRfxivEL9kOf4eC
 | 
			
		||||
EydRzA0mqfZbNzfRSYuTAnf274f9dcZ+OZtTarcAelXbFqh6j80iMAaNQSaKExi7
 | 
			
		||||
t5GBgGq/z/1xkH+18yKuHZbHijkB7MWMbfu1wMAqbXVrjZpC0+OCprMFgIICDCnn
 | 
			
		||||
aBS+N2fCewSl+cKOuEKqdOOlqTzCPwLThSa5XQ/u83P/cgaMrsIdCzmiUiZG5lgN
 | 
			
		||||
WASEUQbSBUm/dVDcvQspUCjRbXtd2GJEqoCWVNSZCthQ5fgGxGx5UPvoFu54OW0J
 | 
			
		||||
Am9MyjhCdkipnqLRKmHU5DHnAklhMhC3NSnbDFhAEwpfsFwFzbYTMG87ZYJIqwv9
 | 
			
		||||
ugp6Z88mUYx5K3BZigMeNA3sFCQkZG6vmvBKdCqy43YJ4MaR0BsuUFAYLq06r5Gd
 | 
			
		||||
WX/cEtnbnvVLbMOTnj4vyEbXJkQJES8SfxTVXdUi1uGAT+rmjohbR2saoRcbaMi7
 | 
			
		||||
dj0ZvJOnYivqC2Eu3XkmC/dVUKMlWzhcCeXJKdgSU7geKWXyYvsaaaqMty5Hla6T
 | 
			
		||||
V3JUnaG/kjwu77H97zzUYhLEIv/AYJAUPEOll44V8OBa1nyfKGTKVmc/VjvXNPh7
 | 
			
		||||
o+gua4W6rFn9sgqSfzChV/mWzozPQwdbQ3RMTFRQcDlnXaoATPuwrK+K75KLYh2T
 | 
			
		||||
WVO+6Irw74ROGokSU3yo9Vkr7PLw4XIFScrqd90en9YRfRTYeznsf9q1h2HUml5C
 | 
			
		||||
whoLY/czjW4Mr7s20kUnbieVRxx0QLADVz6d4FrVCw092PReJGWzdxbzu6FDRs2E
 | 
			
		||||
0uq1Xr5KhnWvTIbppSsyotcbuvMLwrh/bZmnwsjbr+Yb7kpmVrK++sJAmG7XFoj9
 | 
			
		||||
qoZpEV3Oq+vK+vWiNE4qgzas+W1NCde8Zv3hmc/OtWfRZLUy8RDf3kcIiDr6/5Vd
 | 
			
		||||
tCnmzJznLI/N3MoETeGVrHu3C2e9UthOUIVp7qP4mltwduLK00Nd7nXbt+FzwQq4
 | 
			
		||||
cwmdZsmGLVAgoQoYWlDnIcgbyRH5wnlZVh/A21lrFrR+JHu30oF7yyRAkJlAETr6
 | 
			
		||||
YIg8E17RJI6J9HpsN2BL7AgPPnwF81fKDGjs3wwm48wQLuUeJEkwMUVDwKJUS/dm
 | 
			
		||||
DzxOYbynMp4yL57I11UhB0z9FHWgpwiuG8zhMjSZ+jP9Vn4+qLCklKHf8Pe8/I2f
 | 
			
		||||
mwmeXMNmJzBt6EZYAGM9251iMyJkBXX/4SdOWh0FzRWCC5secuYyL8/8L5oHoyaK
 | 
			
		||||
cmkeavyxmHA4A37G3Mi8wXh/bf86/fmVlLu/+tYuXaErn3kW+oqr/REnNKClAjqf
 | 
			
		||||
LvmSqPRMzrfUXAcCo4XV68SQ1rapAX4yhts0OlgVkn/s0YggbJnUvyhhS+Y+oRLl
 | 
			
		||||
HTvTVOEfjLRJYvTfxtR5HGPp9ejJIKFtjnBpvEHgfYwrheUGW3Zws4i85IDyNB8y
 | 
			
		||||
LvfAKf6GCvkrlGPjtCTkGh4tMEQeLgF0IGHmR+TyuaAzP8bDfYhLfzpoY/c/OecO
 | 
			
		||||
kdgS558aLvQTXjzddXDEqBvBU1QVJZp6UjbleKHVjwlFVI7NAF4EZKXg4OSF1whu
 | 
			
		||||
5Ez8fbHGdsuDWZ0rLoyzUiUZIsiS3YYxcQCjsO24C8ogq8017wCnYW5nfGiw09dF
 | 
			
		||||
hU++rL/gwn7S2VFlcfLbCz3qG/rr9mfhLLWYDRlxJyvBHjX9AuY4l28E3NL9vuXM
 | 
			
		||||
tjrAO9g/9osIbMkHo12j0AeEjn7Bm4AIviZCUTHFUUqePMo1h6dzxRoGe8gfElRY
 | 
			
		||||
ONNYP+e6gmR97U8kpB7cZo9JRqXEzKBvDg+novRmttuk2EBsKjkVBx9gnvynQBT7
 | 
			
		||||
T9eOngSn8NSJ6zt0412Ffn5I7W4JT8OQ05m47Kreo0rH5RKXTt78OCkV+dYOkqN7
 | 
			
		||||
Q0y/Wk6TZK2OUBpW1ZHCJ9OsRdIBRx0LBDlxWv9UiA39zP3cS6cmbp9ybl+8o11m
 | 
			
		||||
rNDk4yA4Zkav8iF0urlf7v0oEp92vA6/6sREqZGmrvd/lgNheu8G+5S9PWUhB3p+
 | 
			
		||||
ksVKzp1zNCnoEBs9Rm8BmlxIg/nFEbTk+ca6GU8Re1UN/6TdEH4fpXTPZk5RX/lr
 | 
			
		||||
n/JTQVQ/p683CoEAynBYsNWu+XKo2shw01O8n+Lk1MyhtTJexUP9u9bKkiXEFN0w
 | 
			
		||||
cpkLKUf96mgF6CPhDErHoOLrQDDjuD3LlldfRh6I51LkXBciQ7v/658XalNqIZcZ
 | 
			
		||||
9YlYS/y0XF1JFuis/fqakaPYl6ZbHqh0+G5rV7nCuMrkQK8gRisQgVlg6wuH/uhD
 | 
			
		||||
V491p5EWodJokZ8rUw5tGlfcWE/gn7nzOdQI/Dv5D3i8Ixrg9mojP4WIKUAdNsCD
 | 
			
		||||
IBIlyLhehjISTYxH2EB9vSkkqcgYRhDoPdACZLx7yFWweU9xvt9UEHi5zVmurDBl
 | 
			
		||||
Xua0av6z/Nwit2ZEUn1qNUs9N5neh1ETowwGW+M8/CzvcNQx40PSyR58ShofAQrt
 | 
			
		||||
eF4cOY4eQynBxBY3FMNOiB23l6eeLlPPG1AIe8HGJcYwNZ93jA5EjctgyboURpWL
 | 
			
		||||
Y6fEF6AxA8qjkbuI5fM18cfXdY/4MrHQuuJxJEKaxdE2j/4uL/4MrLaamn8TUJiT
 | 
			
		||||
ylqdw7ya45WDsFYpyvz1SiKr8uXNvDn5j0SjS8Vz2qI0J+eODQ9JsGApJOUFzj8p
 | 
			
		||||
zHz/iGDxjJCG4S7TnMJcpwor98cD8ZhJz06hVMYVspD7OzluCTbW9y29/QuHDcHj
 | 
			
		||||
YeGhdHHGlS9mc3KtoxyJwIfOYS8Raj6GEhpnhdvmf3suKRn8jMx5NV7dK914NN2/
 | 
			
		||||
QM59OlK+1CN6z9fDiiaVGO0W/FlXA8SmH8zPWf+O+k7lCsRVXS6vtDOI6QuHF88M
 | 
			
		||||
Ch34g0XKh+NYUqWTkT8AhcFxNyAVYgNI+4ozzvDZEr+dmAhatNVjQ9ZeX5oBCtO0
 | 
			
		||||
mcMZQn9y5IxKOJgFstC0W2nZQuAu+dbZDipKAyY2moUqfgqnKMi1NFrJ/Od3ll0i
 | 
			
		||||
LVoOHnb6FcrQ/hhCb5yT0YpftgtgQAW199HZIM1g8gv32afWiLpxn2ggQe+MrPZF
 | 
			
		||||
mOPe3ZJGCCut6mLvGWV1IoCpbTBRjnmNNY4CT99xKpa3cbC2HFzd9JOm2sJb5EsJ
 | 
			
		||||
+b2joPQJ8Ak7dYBRENNZhRl0ueQq+UghzXe8oJe5F/IX5u7IaWktkR/bJx79d407
 | 
			
		||||
riaPDGkKF0O/hgbL60NRjBsA0UjTvw5UEeWlEQvXjRQ1tM4AeAI/SNgS3oD9Lmai
 | 
			
		||||
ko5q8DOmQZkmnEQZT6vxZU4VyzyI4kW57eDpNEt5rMAh3rR/HADZqaJS3wrw2hfo
 | 
			
		||||
VRrS5nU8q+oz1XQ01+PkL+utbT/k6QZ1pYJyZUZL+aRnV5E5XgYwPT7KkWClIR5h
 | 
			
		||||
O0FS8C6ZAmujlqvhW0GBZA2Y1nHGeu9TL8Cn+SnIfKSq2t8ep2c4F4TmlPKpNYgR
 | 
			
		||||
VnJ7cBzylqaUvwHcuMpohKaRQLTKoxrHVwhh75tCn/5Gtp9ihrZ4+c/wGlYSaukB
 | 
			
		||||
c83KcN9caBmkmzoeioO+Cfnhsf4QjC060Cw3NSqUMVFqZj1dbxx6/ez8FDlaHhe0
 | 
			
		||||
Cb7wJsGk86HnQo46XGgTJCxLWEqC03ZvajHOVARENhwIFPWfVcomUAszxxW33n/k
 | 
			
		||||
zRQub0QI4O37wE2BVerYOhiwG63mzGndcFz2/7AKlBsBWJmWdvD4cb2uwe9jo1hN
 | 
			
		||||
NWjo/i/C8KwMrGfJpWYTAcVg09Npu6IjHZ8C5DfzPN3vjG7Xee/vhf4JQtDLWlTF
 | 
			
		||||
gdVnVKxvdoS5IZqTsuRXOnolZZEybX89RecXNyURGLZdTCwBaj8OTcgBRHryOpcv
 | 
			
		||||
I0U1Cei4zJkdHHqgOLSR65xdr1fek9uz/mbLew87YQnUwiAgxu1M74Y8vK0I8GUM
 | 
			
		||||
qCOYh7+vD+9uPBauaO32j8OLgRc28OeV0hWAXlx0huokpp9HUGVgyBu4rNXrNFi7
 | 
			
		||||
7xJvt4XSmnbfFWjB8wbrhZD6Kh3aX8/y0EQoXQoncpL0rJULRcuyjfwIMt28dA24
 | 
			
		||||
i07upCfPpk0pI775TB0VJ87HTmKJO16ZvYLJKoJelre9OjqkBizmCwesOtIYOtVa
 | 
			
		||||
fgGsDSktm5ESyvDpqVoyshSFwHTpxR3ChtdizMQ7XVqBjyJTb4BKQYKcCZ7T46Sw
 | 
			
		||||
TFviqROZl+gQmzLET3Q0i9puF9dtmnkJaZoOBIogqYw+8unp/60g1zp8P+C/8+eb
 | 
			
		||||
EukZOW1b1su8TdTfprWBFXGGqxx7eF7lTCA9A0o3rCX3rHSVP+uLw0f0tYNv7FI0
 | 
			
		||||
GKWpBVwgouzJGjh360FOqrTklSw1k+ja1+uruvep1DvY3PNLPFt2KAQ5zdjW1rwx
 | 
			
		||||
AlIEV+gHyDTm2lJJJq+UsIFEGupfsXUbf+Vfr0STAQEfGftk1XaOHWfaqdMYCkpk
 | 
			
		||||
4jPsVrd/LDV7ZB9JDMi5GwaY9cBBexP0shl3x24O8dbg0uZYa/O6Lk9dHvX5rTdM
 | 
			
		||||
Gt2vl3GYcNIFGCw0//BJOPiw+UV2ZylNwgdfJ5xKFHFM1Sz1Zbq3Vc83/YqYY5ou
 | 
			
		||||
2gE2+8p1+h+MyY1JCsDmtYVblgimA9Vo4j+L9wymjQPuS5LaqHNkjy9vLYl1T4t/
 | 
			
		||||
AmEPpygdFl9sZxTMgdzM5GZbdHdDlfphR1SWCY+Gzmhw9OSPasS3pznsvxrgVUCf
 | 
			
		||||
aH0Mfymw6fva7wKTrN0TuEVtuSH+30qJ47jFfSEssCV07QwrGd76Jrd4KmdyRxaX
 | 
			
		||||
s7EvX+9W60oFSb/MCmk3qQBpreu9yDE2wWsbMJyM/qtQtuqZTiBxIYx2WCvPuuCx
 | 
			
		||||
LS6vz6aDqWtXYCQyhv/EfK/+ldYAqEaZKSWUEMsr63C3ywHu88r4vnCKqohAaGiv
 | 
			
		||||
6nYmCl9IlIurn+FC2jx2vO7Kd8AuWUT6MRgxpaDm+E44ADM5+FGuhgZu47KRDncD
 | 
			
		||||
Vf2x7dzsDF6os0bU0wKGTnlMy8I6ifBgglQ9CYkEx0EjspEXNDFuY4qdNrLKxuq9
 | 
			
		||||
0ujJQJZ/jNScnWMAkobe3GOVlo95RbvyAwdjIMcMbKb8bzgb1d6u3b5mUTfUWytC
 | 
			
		||||
SMRVBswSV6DbsruMQiRUAK2CBig1bmly2KUHqGh3YVIizhJAsAcLsnZ0WUkX3wJm
 | 
			
		||||
qn6GD0mgT9r0HSzEqaoJocnIMKZZtmqSiD1TVUyc/u6TOhVVuQtXWrIyharDE7fQ
 | 
			
		||||
XnXTYvUFVDFVoafrFcKWP6Lupjf7rDdO1+GT2nwcfllkuYr4a0sxuQlOvvUm5HHC
 | 
			
		||||
+HQnFJZnC4Z+Itu0wFCHJYrgkljoGpb5xyljvbWsjqr1rNpkmU2JCsXi0LLNlZzn
 | 
			
		||||
Hy91rFW7SwOUVHcfWu2xwwhLQOCgPfgxS8FDfiwC9uTyn0C5DRCvlnS6+NuoVF5x
 | 
			
		||||
uz7Szp97GZvYmGiWeWd/LXhUR3i7gHyKvfxu9+WGnZd6pARXq6r2bxuf2PyEvui4
 | 
			
		||||
Xxyb40TKRTmEcmIwLFRzML61z7Gc19BwG3RK4uHebk+vwQHDLMPqI1XqkAB05jJu
 | 
			
		||||
QOgNrYMrp72O2OZNkN3tMn2hirobQexWXi1jGL7X0vSNDanH/kWEKDNUKCgpe8o+
 | 
			
		||||
JVtEM1hGdme2yyoWHt3bF1E3qpVVU140JIlz8zXzuJ7j0mcHUKlHdajBcdqWJKY1
 | 
			
		||||
+H4GRSZPOvx9+ROb/wozY3bkct9SzAAiCsR3MA+qCv7MOsZ8kYWYU0iwhSGLcK9f
 | 
			
		||||
L6QQb2vB4Me0hw+rjoqc5Bs0JlYdt0F/a41G6FOX8RWX7uB8i/7DOtcOr2SGm1sz
 | 
			
		||||
ka4ikfrtqogSL69iVE4e8yX4xyKYAE0V4klac0Lotd1a2iK/oM1N/gY6onovPjAU
 | 
			
		||||
/Cm9XRmfqd1UlOKDS6OTXMlQA/Z9ipgL/Y/a041e2gtb3EqGhZkDgsOYbXpuapbp
 | 
			
		||||
ae2cjdP1GDU0VYEYtJo/6iIrWyzJyhIP9HnWooYZI6Xpe1bn+svCSoJegXqcQxqV
 | 
			
		||||
7lsDSvM0bQ5l7Rpx3uK2Z5lKsM4kfwQwGKvTalYnqXgxAY12O52uYrT8fra0DSSX
 | 
			
		||||
Gkmuz63DyddjXLSRO4nWt62GdNxQNNT4AX0SjITPJamhfn6Eb0sTKhXTU0sT+IA7
 | 
			
		||||
jMIP7cLsHxnC9Qsp+CkE1BRKMcfjsuosgeVmRUkI9AUn9yXd8r0Bva1XLl4JVyJF
 | 
			
		||||
8hxEACin9eRVQ2N+IawnpYNgE2S1ZbUA/swQqV5cMLQ9/Afyq1ZZAldPm5LBQiaU
 | 
			
		||||
nfCT7nURoXqc/EKmkG1nk0R5BO5lBouZM3OERe3S6DnPWvTeC0yNMk1SzPwpTwO+
 | 
			
		||||
ROnEoiNKlPMQ2nENJskrbsETqaT8oprIymeC7xujz7T742Tk6ZjM8bvAKePL7aUR
 | 
			
		||||
ywWeiRu6sWJEaxX+J3VMgLSvmTWvwp0k6cfi3wx+LstjLc+pW7A6hsQKfspdC7Ta
 | 
			
		||||
uz8sGDRkc5S87oSa++UHG7zKXLxXiIQ49kTKZQVlvOJkiDpvpj4+5OP/1dyzoLmy
 | 
			
		||||
F6CGqW+eBXMFiiUu8Kc69u5JUdUsZcL9cOvyd+J4oUGBpP4aJFqh6CHAdIRJRwDK
 | 
			
		||||
AAg6rIZmH0zRl05e5OIgmN58gyW33kyK/QhhpE4MnNvT0BJDq45j3dSvotE84AU2
 | 
			
		||||
qGXNtNQrEn/aV9CVm4u5tdi6lOjrSK3YJWPMDTe/fBfr12NaKPfa1UDBsxiU6ShK
 | 
			
		||||
EqUy87DIkHrPrWHZWNAXaiis3ZXqmOI/FvgJW832dtPJt5Sczue5pnplICFnpwLZ
 | 
			
		||||
D7TGmJIUMFIBeVO+6qRMhivP/veA2V6lv4fRTdjRtKoKHyYpjT7MsBJVk/MlzMaU
 | 
			
		||||
mLzlShLQ1wfXsfsI27OZxYy6u3ED3KVCel37jilBxuHBe2FgwYXTfFgMMi0A8851
 | 
			
		||||
vfwZ2WxiIRl8xro7CgcpqoA8NMHhiAUYn9YtB9OyuLEI4ha7J74PK1LnsQyyvFyG
 | 
			
		||||
1KBNp77NuNq1L8vHWgd0tXsRdcxOluYQ64zxI3FEpD0NIzrSLOSMKNa2uyDGPA/n
 | 
			
		||||
gRse2I1qUzoICGOOyXN3PYLsQpLD0dL4HVHHHoyceu02U0n8kzjnkmbn83A3OqBc
 | 
			
		||||
++A9dNKi5mwq7AocShCcZ+vSWz86Dy4aTOO7JmP3VYOGKNMoYfktAHpjKLDrIgDX
 | 
			
		||||
pOKY6iqMwlNr6KJhzaLXKDa3vOti9jdWOqgHWAWqDDMYsfehuovk8XnOT3vSvaZx
 | 
			
		||||
4/q+bP6wuuYFtxF1LsB6Yxu2VGNbEELd/6+KrV2Y4yl5ArojQZ3XuYm1oj6U4Kkn
 | 
			
		||||
lns30S4yuvdmtg9IGs+KrpLAH1DR/1X10VqUGdvutp73RUkaU6K5jffEEBe8RciB
 | 
			
		||||
VnLdWk3vR3UhiPyEGYfopQ+G8KvD8MbYRT+ftDTTnu04uoJ5sYHBQDNc7/AvJEhc
 | 
			
		||||
VzhQMsgb2VQ7EPXSVIJqrePGM7eDeAtXWWRl/UCDKuZPSub4w32cLLtXjQA+T5sI
 | 
			
		||||
7heW+m4uoDyfiv68n9FZKWSh12/849Pc6eQJXVw+ojj7w1Py6DDbU9F0lvgVWqe9
 | 
			
		||||
SvJ0W1VlVFnL6mVmpPrspkE+DGK+LNr+sRFpYu1dzSx4HyWEXMcFFS17IZkFTfK/
 | 
			
		||||
IXYqXr7k7ar5C5LzP/ZfoANZghcaaK8FhK4Hjdv2M4gj9iWFxkUxY6eDC41v79dS
 | 
			
		||||
iU6Y3iwgwDkgU8uI1cA+kGS/kHLZ1Sfd7GCXPpKD36F9geF7SNstOqDzJ0GqPuJj
 | 
			
		||||
SxTupLQCx+Tr2NWVx/Psq0s2FdQnlW9dtFCAJGAbB+UR+QH4yjFexnOSR/Y0v7ns
 | 
			
		||||
GLk/mSuoA4EJ0d8BFLtcgog1w5Uz3VE/jpBtCfqv+GgYhFdHTlpznoFiIXQKC8KW
 | 
			
		||||
82x1t3NJIVD5Z1pFVktQowtq7Q3EiWCwICvrTdxN+d8jWRnZ+u728f35rM+ndU7E
 | 
			
		||||
MkGMak4/4jSu2TDXtVmsUqDxOho/i6xi1z6FNA1Z+mZ4UPAA4u6QRUcwotszH6/K
 | 
			
		||||
JSWmQ6xQ7QBREujCz9rYmW9laXmEHyFcTQgNccqI7NqEr+Sem0T37DVvr+LpvKE8
 | 
			
		||||
m6CSunmIwGPXo3s1WmJZnvd5apeZX2WwyTDfQX8oneaG65bR7yoGWnk81IWXmSBj
 | 
			
		||||
sMyzwCw3M7NHGcFebSczyWF1cMjVBmzguhfpytTqUsLPKKynvaZOMOzJJ7JvAv/7
 | 
			
		||||
0erT7ePotcBgk5NNezIv8+5zPZhudEMAwx7VXvmf+BZ/f1fNxtO9jV0CM55zgD2h
 | 
			
		||||
DVxUZdgZvPAuYwLuygPmrfc5UZYWI6ZEK1BAZftMos/A6U7GWf5+iLDT85Ojqc2m
 | 
			
		||||
6C4PqtMfMUFddkv4LTclFjPDk61Oo73Tc/C1bmdk8VI5AW5cKerI4E+eBRq7os1x
 | 
			
		||||
lYzh8vc3RTpGv7BQNt7lPyAMRDmPoTQHRmoillqa35XP+apxPXBlY11FWjLuc8wv
 | 
			
		||||
2oUNSpViW39aiFZfpZCZqIVOxKtEH3W/4kHGE/JqFoBEzxUlRs5Tv5cBGdI7pH0D
 | 
			
		||||
VBpdg3uIeolbk27Y5J7nSCwP9mTXhY4d40cp8Kf/RJP5jt4Lo8YQZLJNb8dijz1C
 | 
			
		||||
OS+Pj3oxFxNi1BVcASZ7D2XbfAjgWaH1Ikh4/GmDnErWs0hziN2eKatjnejI/imm
 | 
			
		||||
roAKbTLYHIIN41tJdYogfVhZVEbvfysvq3MBF8dbypraxdcWFZY5cjboG/Pfss7y
 | 
			
		||||
EfYhNNPYZC8SY5im3MfQkw2fnLGscXUdbzeBGrnnggP/uUlej2EE4QU0O6sK9VNC
 | 
			
		||||
5tr1NvQLkMsgY9d0+izxW/7L3QvrYa/L7TNkR68sS9r+991kr9GpVAXvjO3GcsZP
 | 
			
		||||
4QmtRDyV5xoale+YHzoAcCCY8xkcOp15qb6+WzEYCquMfn18IXoQ6vHaj9ZvG58H
 | 
			
		||||
IBnBhppaRPcqB/f+YTCovNEdiY/xAHWncjOGmadatnMarbNSXv/hPiya4A6BWLCO
 | 
			
		||||
PdThBRjR+eREFAWx7W5PK00fbwndK41QirML+yzm6vHLinbLNqu0UwGzoeVty4Md
 | 
			
		||||
oqA+lkI366qkXEpXVTTxTn1btEdzb6Pl53kS02u1Yt2KZLKcXKd5i5OConxuXLfx
 | 
			
		||||
id4zC5yMylrdiimmwmUxa897ByP2TIOWeRTK+P+TFwjoQct8LSoIJMF6WNZVq28J
 | 
			
		||||
LQ1aAm8ZliiKNNmfYlPuqKdS3/EEblv9SzKl9M0JEfl5UvRp5jLGTFad1VyFAxvj
 | 
			
		||||
lnEwOT3wdSd1XIYSnMTf3RCUbJaM40LCN+hToLkjZC3xmOEiU69LK8T6cx2hyWB9
 | 
			
		||||
fiZJImlc3NMtRdpt21GYGSc5CQyPkIQXm1A7LkSOsbbMcTpn3lCY6mVrrTBx4Y5q
 | 
			
		||||
tTkrYK8iVEOiMHNDHiwRAsnZbKZozfldJ/Bgs0G3AwUGjmOpmKlV3tgnX/AuWWxD
 | 
			
		||||
HID5hBIbXXRhKUa/Je/GgarC2VsJoLGrW4mZIgA5PPwn2bs0WRFtWL1QIvhNncK3
 | 
			
		||||
BcNjd7exuQfLJmtn91LaT/h3azTsk4uD8ntWVpxFpIgZTpLCwSJqT9qtovKHUPpu
 | 
			
		||||
Xug5Oe+rVr403jdBD+FWPspGZcGdRADyD+MHOPdN80V8KealvUzQdaOElTdaDFxe
 | 
			
		||||
eq1rZwOCim6UkgxTkWkXIwprDz62YuZNhcgc3+HsSLeoErhURUMIdN5dblseG/qu
 | 
			
		||||
Byf/ncdnsARZuoZDJRbLs2N8WJDmd4UCbFAKGrcQsMB+5BFgBhZt08HTlK0sIiiX
 | 
			
		||||
y2yfaJK48BG9JAj4d4XWqzaH2V/GtM84uapeJCc+Bj+vbWYwGCE8rwxoOQTLuWOp
 | 
			
		||||
7uxnNxcT1EwEdUsDN3oWVvetd5v0ZoQVYKUJQyzpK6lWZcGtVBsGb+H3toEwhfUz
 | 
			
		||||
uxrGpuQ8fbt+uB5+JpEMvjRO1wQ2XHf45niHT9rbuHrvcC9t/hZtuRdbIVUNA3j0
 | 
			
		||||
aLZsCuEq+JqIhZhZE2XuXN/RYxAeN8zcX35zd7i6jkkm83Gwx87bSsrMaFTQKV0/
 | 
			
		||||
C5aabMF76IlxJgTS5nQ+5hbfJvn34NWr93QhxyjAO59XpwEbhsLsMMIqePldRsjN
 | 
			
		||||
xBSaNehjxQb86uyLYWBAn8Bb+k+20+4BdCPpX9efz9/q8Oiom0Ox75Q6sYZcn2wX
 | 
			
		||||
/1nRw7/GOVXJeoddWcUPZtRtXPlHTYqML8A6B7UuTZLUWF893K7f1IQhIxYtQzsb
 | 
			
		||||
Gs7xfFMkQnP9b2bEfXFZN1XeeM/iVSyw/J1f4Vv6WFoFLn4GAFs49rMg4Ramy17U
 | 
			
		||||
BrP6Jv3oaX/UXTte0Pe2njMiy1RW6uJnvtvcvNKTb8/Qk6dWUUb5ZeiCVWvjwRA1
 | 
			
		||||
U3iQwWLo2hu7JwyDi+WP+OESsXtbs95SIyOAtbss67VxjdTAg/5fMeWruYOtN49U
 | 
			
		||||
v/j+1btovNmYUcpRbGqqGjkXBPMAWfuiqzRnfKOOdibHMLWXMm4r3Ybg65wCBnH9
 | 
			
		||||
08NQdpV54/lKEX42JChYF9F3wh7Q6JbsTtCEeWkpckfOzOfSndYwiU2r7cCcHpMX
 | 
			
		||||
EQny2VXHrAoTN8BavNczsncQ5BArzRp7A2j5pFXdlgem/okco/bXCYANyOsl3L/R
 | 
			
		||||
WHKs/MCt8b/v/Z7ICnrYvFHDvuK9vgiRtroWY2PTgGIiwRnWt7Pxd3GBVBaf7SZk
 | 
			
		||||
FTdOyNhsp1svMwmelksy8C3Iwx4IxVlmymI1PQ8FbBquKL23BL5YAQkCX0wQlTrH
 | 
			
		||||
RhkrEQ1Ngsw4Jm38Pq1UgqsVL07wviIaNxYgBSJJbbNkFpOVUapLqjjJU8wRlybu
 | 
			
		||||
YshsYo5L0ZeknhbkTmQOVPvI4JBkOQ0jFp9PecTYqsqwAq84N012zUcgd+E7YTx5
 | 
			
		||||
nq6qwoftVcdmW8MyD3MwYE2NXQwy13YF6FTqsINMsg77XEkmPR7NhwdQWkVszbdi
 | 
			
		||||
HziojBN6/Cb+79oM4MjBMbeicOF8vW+4DnCDNqxmEreKC/9SndxbunjXRK4pHi6u
 | 
			
		||||
Icj07QWvUoI+1+QDRvS9RNrs4KaYYgb/UL9NnSumnhAWEm6TpH9h2hK7tH9H5iDA
 | 
			
		||||
vbNgGrFPzVBzOtKWQwBVVvM5P5lKapsQNBupYTgERFyoah5XjOb+dUKFv31jpCuI
 | 
			
		||||
Rxu5j9G5tzLWNrP0iNKrRzPYoYY0k/6K7lCQ2tKBBTIddTx1uLVbQ35bZrqomm+W
 | 
			
		||||
kq9+KXcosegH1bE6PUrDfyxTelHq0/wNo0ddloC2pVTvXzoc6eXbAo+wChr8IQAP
 | 
			
		||||
AIN83sTtq96HMnqrTPqgLntNPnInilSblSU9Yrt5AmJ0QnuR3rta0UrjTLmD1WNX
 | 
			
		||||
VbgeZciqfOwkdrn5P1PDPZfVRP7Qk9mRjp62eIhr3LHOxM3bGnIJw1es1HnMZX30
 | 
			
		||||
+SV4JRVcSNPPhD3NtOyTBzboWjETH/SUKC3ZoiQQVmkxLioY3iCRh10bLgHl9iXe
 | 
			
		||||
cgGiXrtFKnT8lP7nrBp2cwI/09UInCopqsGUrH4YL+2bGJ8i4+3dl72cDxiefqvE
 | 
			
		||||
vv05g7BmV4N+P/O4Sb6euZouLQUHaOIn4NVDgEnVzwVzOI545ziOo9fI4kwzX+1Z
 | 
			
		||||
Zvc3XrUTJa1SipuOaFNFgr45uo3tHJNlYfitQmKfxAeLtFm8OE04HsHP3LNtxPm6
 | 
			
		||||
UHymksc6/lL/sxaRejbrMnn+rM6OGu9gYFhT+GbsA+CVvDMPEaxFMU02rWJonmyS
 | 
			
		||||
xkPuX8vSQwjly5z8+fV+YJULBpKpZY8HpmAAxWZTjFg1ABMUJAeXQg8UADbng4Lk
 | 
			
		||||
OKDu3cfzmc5om3kstjUvmAjbiqHRgYO+xOCuwI1WCw8oBfpmumToWPWEbkd5XaCA
 | 
			
		||||
hvU5A1YC5Br7n0k6WJya58yAeQ+4aPXDdsZnx1ohf0M9+vyFc1B9If++sPkyi3kL
 | 
			
		||||
YV1BUPJ8qpYAztFwj3imjI1hZZ4vX+jkhGgMcMkaRePIYI5K9J9CgzEArTuLmFRv
 | 
			
		||||
HTQUkYpFHk206Y5URsFdfbUcc4/x8yZcv8w5dSNTd4hh7lOds1+Apj++7Q6RB4Vy
 | 
			
		||||
ZuyGLhd0r81Gk2CxBd8YqELdKfnWJb2lxDFdI054igi/4FLPqDJ8HS0tqHcfW2ir
 | 
			
		||||
3h09gr8Knd0tRUKQ2EMKyKgzt0/qpTtveM8+S7pGKRfVhKQ/mT7Nt+lWKYMOTKhZ
 | 
			
		||||
RQbadW8NsMIQYymWHwVdbdIXWmqmdAkaKewZ8GFQrkqT+TnoTAW6NNz4ndKZCH2E
 | 
			
		||||
vPo7+HopGuiwVRPV5FwaHtSlBXMG+3N8ZrAqbsaVVrS9QtacYdFj119oy9cKoSp/
 | 
			
		||||
uQc2Z9wSRH46CiPcq1Gyaa4yosu839+37N83CaPkloWc4poWbcO4mX2lQJashlIr
 | 
			
		||||
QFBFoE9/N0+8MArhALYqEvL2VXV3G+0bQsEUvic9/hr5DU86JZN3s37Rkq94aDkm
 | 
			
		||||
q3boHdJ0F/F/6IMMnuG6ETdwqhyfj6EhB/Kz9rvAxtaihf9hNzqkh1dL2WaN+O+E
 | 
			
		||||
tdViv2N4RFWPf9WcViPuAQjNMzoxVIlvlx5j0J8/LPqXtKFmEdxxdiIMKb//U5kc
 | 
			
		||||
nv3Fui5I1ECFcDWNlOTWKL1lbnQWADx8cMy+8cdozb4LOxHRCXrrrQgFgsoV0RAf
 | 
			
		||||
zxFiB92FWjz2iT9iahGhKTH+otqRKLD35qsNNIBnOXDHZoLuHvmB7sSCxuVjnNWt
 | 
			
		||||
2amcUTIhUq0LjMFLAXOx3/hK+ZmuEp9clZBAIihiekxKpQXmEA10aNiO7rKBx6BU
 | 
			
		||||
uZ5ybCFZa/EoFFPqEHK3pW1S2ImFQmUGePD5bM+BUnsJy0spJqelgP6SrOiVV4Ux
 | 
			
		||||
YW8v4V3ezVoe1X3AYEN+cdLELxznQXZUCGFdNH0XZGLjmglJM3AhKO5ONQx5/kTw
 | 
			
		||||
QdS07ukMEJyKG83ptFUOmFsDuDqIs2Tp5xWoenm7V6MdWUzUb1Cd/w3wm4LvJP2+
 | 
			
		||||
f1QGjkAC56yVDYFOkFq8U7DEvtLxhd0cG5RZWxXe8aoq3cix6uejc2jYNOIXUVNs
 | 
			
		||||
kZzuqwxnA/t29H3NlSwkbaBYmqG/TI6RuSqzWtiAP4zICKoSAJE9b8VY7WgrzqG3
 | 
			
		||||
8lUuzPb0bLC839TajiFwUZ5A6Y/hQiDAcpvqtyxFWvw//npGcXMFalJVTLeGQXRb
 | 
			
		||||
PwsItw+yWfSckKI/AK/5+UyYLRve7AQGLe6YiPsB6PnzUwjfLIMVdzz6Q43SAhM5
 | 
			
		||||
cHtjeg1H2RE0jxYX8xRLnhIRP9LfIfPGC/aZcPPh+y9BbYcmnWpfKMGAO/O8imCo
 | 
			
		||||
GqyH27tYewa7CLcI5NnSy2libOcMXOjcjyCZe/dDb2jWVeIrIIiYQX9IuJv+8y8b
 | 
			
		||||
2/2QEV69AiUkQll33Wn5yhlGjbBJai/xFGn+abMi0+/RcsCNileIQTtHGFWyRDCr
 | 
			
		||||
=zCs9
 | 
			
		||||
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
 | 
			
		||||
=ibSW
 | 
			
		||||
-----END PGP MESSAGE-----
 | 
			
		||||
							
								
								
									
										447
									
								
								messages.pb.go
									
									
									
									
									
								
							
							
						
						
									
										447
									
								
								messages.pb.go
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.26.0
 | 
			
		||||
// 	protoc        v3.6.1
 | 
			
		||||
// 	protoc-gen-go v1.28.1
 | 
			
		||||
// 	protoc        v3.21.5
 | 
			
		||||
// source: messages.proto
 | 
			
		||||
 | 
			
		||||
package meowlib
 | 
			
		||||
@@ -26,9 +26,9 @@ type PackedServerMessage struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	From      string `protobuf:"bytes,1,opt,name=From,proto3" json:"From,omitempty"`
 | 
			
		||||
	Payload   []byte `protobuf:"bytes,2,opt,name=Payload,proto3" json:"Payload,omitempty"`
 | 
			
		||||
	Signature []byte `protobuf:"bytes,3,opt,name=Signature,proto3" json:"Signature,omitempty"`
 | 
			
		||||
	From      string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"`
 | 
			
		||||
	Payload   []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
 | 
			
		||||
	Signature []byte `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *PackedServerMessage) Reset() {
 | 
			
		||||
@@ -162,13 +162,13 @@ type ToServerMessage struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Type          string                                 `protobuf:"bytes,1,opt,name=Type,proto3" json:"Type,omitempty"`                 // Type
 | 
			
		||||
	ServerPubKey  string                                 `protobuf:"bytes,2,opt,name=ServerPubKey,proto3" json:"ServerPubKey,omitempty"` // My pub key for the server to send me an encrypter answer
 | 
			
		||||
	Payload       []byte                                 `protobuf:"bytes,3,opt,name=Payload,proto3" json:"Payload,omitempty"`           // optional payload for server
 | 
			
		||||
	PullRequest   []*ToServerMessage_ConversationRequest `protobuf:"bytes,7,rep,name=PullRequest,proto3" json:"PullRequest,omitempty"`
 | 
			
		||||
	Messages      []*ToServerMessage_PostedMessage       `protobuf:"bytes,9,rep,name=Messages,proto3" json:"Messages,omitempty"`
 | 
			
		||||
	NextServerKey string                                 `protobuf:"bytes,10,opt,name=NextServerKey,proto3" json:"NextServerKey,omitempty"`
 | 
			
		||||
	Url           string                                 `protobuf:"bytes,11,opt,name=Url,proto3" json:"Url,omitempty"`
 | 
			
		||||
	Type            string                                 `protobuf:"bytes,1,opt,name=Type,proto3" json:"Type,omitempty"`                       // Type
 | 
			
		||||
	ServerPublicKey string                                 `protobuf:"bytes,2,opt,name=ServerPublicKey,proto3" json:"ServerPublicKey,omitempty"` // My pub key for the server to send me an encrypter answer
 | 
			
		||||
	Payload         []byte                                 `protobuf:"bytes,3,opt,name=Payload,proto3" json:"Payload,omitempty"`                 // optional payload for server
 | 
			
		||||
	PullRequest     []*ToServerMessage_ConversationRequest `protobuf:"bytes,7,rep,name=PullRequest,proto3" json:"PullRequest,omitempty"`
 | 
			
		||||
	Messages        []*ToServerMessage_PostedMessage       `protobuf:"bytes,9,rep,name=Messages,proto3" json:"Messages,omitempty"`
 | 
			
		||||
	NextServerKey   string                                 `protobuf:"bytes,10,opt,name=NextServerKey,proto3" json:"NextServerKey,omitempty"`
 | 
			
		||||
	Url             string                                 `protobuf:"bytes,11,opt,name=Url,proto3" json:"Url,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ToServerMessage) Reset() {
 | 
			
		||||
@@ -210,9 +210,9 @@ func (x *ToServerMessage) GetType() string {
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ToServerMessage) GetServerPubKey() string {
 | 
			
		||||
func (x *ToServerMessage) GetServerPublicKey() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.ServerPubKey
 | 
			
		||||
		return x.ServerPublicKey
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
@@ -448,10 +448,10 @@ type ContactCard struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Name                string    `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
 | 
			
		||||
	ContactPublicKey    string    `protobuf:"bytes,2,opt,name=contactPublicKey,proto3" json:"contactPublicKey,omitempty"`
 | 
			
		||||
	EncryptionPublicKey string    `protobuf:"bytes,3,opt,name=encryptionPublicKey,proto3" json:"encryptionPublicKey,omitempty"`
 | 
			
		||||
	LookupPublicKey     string    `protobuf:"bytes,4,opt,name=lookupPublicKey,proto3" json:"lookupPublicKey,omitempty"`
 | 
			
		||||
	Name                string    `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
 | 
			
		||||
	ContactPublicKey    string    `protobuf:"bytes,2,opt,name=ContactPublicKey,proto3" json:"ContactPublicKey,omitempty"`
 | 
			
		||||
	EncryptionPublicKey string    `protobuf:"bytes,3,opt,name=EncryptionPublicKey,proto3" json:"EncryptionPublicKey,omitempty"`
 | 
			
		||||
	LookupPublicKey     string    `protobuf:"bytes,4,opt,name=LookupPublicKey,proto3" json:"LookupPublicKey,omitempty"`
 | 
			
		||||
	PullServers         []*Server `protobuf:"bytes,5,rep,name=PullServers,proto3" json:"PullServers,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -527,8 +527,8 @@ type MinimalContact struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Name           string    `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
 | 
			
		||||
	PublicKey      string    `protobuf:"bytes,2,opt,name=publicKey,proto3" json:"publicKey,omitempty"`
 | 
			
		||||
	Name           string    `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
 | 
			
		||||
	PublicKey      string    `protobuf:"bytes,2,opt,name=PublicKey,proto3" json:"PublicKey,omitempty"`
 | 
			
		||||
	TrustedServers []*Server `protobuf:"bytes,3,rep,name=TrustedServers,proto3" json:"TrustedServers,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -590,13 +590,13 @@ type UserMessage struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Destination string                          `protobuf:"bytes,1,opt,name=Destination,proto3" json:"Destination,omitempty"`
 | 
			
		||||
	From        string                          `protobuf:"bytes,2,opt,name=From,proto3" json:"From,omitempty"`
 | 
			
		||||
	Type        string                          `protobuf:"bytes,3,opt,name=Type,proto3" json:"Type,omitempty"`
 | 
			
		||||
	Data        []byte                          `protobuf:"bytes,4,opt,name=Data,proto3" json:"Data,omitempty"`
 | 
			
		||||
	Status      *UserMessage_ConversationStatus `protobuf:"bytes,5,opt,name=Status,proto3" json:"Status,omitempty"`
 | 
			
		||||
	Contact     *MinimalContact                 `protobuf:"bytes,6,opt,name=contact,proto3" json:"contact,omitempty"`
 | 
			
		||||
	Group       *UserMessage_Group              `protobuf:"bytes,7,opt,name=group,proto3" json:"group,omitempty"`
 | 
			
		||||
	Destination      string                          `protobuf:"bytes,1,opt,name=Destination,proto3" json:"Destination,omitempty"`
 | 
			
		||||
	From             string                          `protobuf:"bytes,2,opt,name=From,proto3" json:"From,omitempty"`
 | 
			
		||||
	Type             string                          `protobuf:"bytes,3,opt,name=Type,proto3" json:"Type,omitempty"`
 | 
			
		||||
	Data             []byte                          `protobuf:"bytes,4,opt,name=Data,proto3" json:"Data,omitempty"`
 | 
			
		||||
	Status           *UserMessage_ConversationStatus `protobuf:"bytes,5,opt,name=Status,proto3" json:"Status,omitempty"`
 | 
			
		||||
	Contact          *MinimalContact                 `protobuf:"bytes,6,opt,name=Contact,proto3" json:"Contact,omitempty"`
 | 
			
		||||
	DestinationGroup *UserMessage_Group              `protobuf:"bytes,7,opt,name=DestinationGroup,proto3" json:"DestinationGroup,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage) Reset() {
 | 
			
		||||
@@ -673,9 +673,9 @@ func (x *UserMessage) GetContact() *MinimalContact {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage) GetGroup() *UserMessage_Group {
 | 
			
		||||
func (x *UserMessage) GetDestinationGroup() *UserMessage_Group {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Group
 | 
			
		||||
		return x.DestinationGroup
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
@@ -685,10 +685,10 @@ type ToServerMessage_ConversationRequest struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	LookupKey        string `protobuf:"bytes,1,opt,name=lookupKey,proto3" json:"lookupKey,omitempty"`               // lookup key for a conversation
 | 
			
		||||
	LookupKey        string `protobuf:"bytes,1,opt,name=LookupKey,proto3" json:"LookupKey,omitempty"`               // lookup key for a conversation
 | 
			
		||||
	LastServerUuidOK string `protobuf:"bytes,2,opt,name=LastServerUuidOK,proto3" json:"LastServerUuidOK,omitempty"` // Last Server message UUID received (send me all after that one)
 | 
			
		||||
	PublishOnline    bool   `protobuf:"varint,3,opt,name=PublishOnline,proto3" json:"PublishOnline,omitempty"`      // ?? Publish my online status for that contact ?
 | 
			
		||||
	LookupSignature  string `protobuf:"bytes,4,opt,name=lookupSignature,proto3" json:"lookupSignature,omitempty"`   // prove that I own the private key by signing that block
 | 
			
		||||
	LookupSignature  string `protobuf:"bytes,4,opt,name=LookupSignature,proto3" json:"LookupSignature,omitempty"`   // prove that I own the private key by signing that block
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ToServerMessage_ConversationRequest) Reset() {
 | 
			
		||||
@@ -756,7 +756,7 @@ type ToServerMessage_PostedMessage struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	LookupKey string               `protobuf:"bytes,1,opt,name=lookupKey,proto3" json:"lookupKey,omitempty"`
 | 
			
		||||
	LookupKey string               `protobuf:"bytes,1,opt,name=LookupKey,proto3" json:"LookupKey,omitempty"`
 | 
			
		||||
	Messages  []*PackedUserMessage `protobuf:"bytes,2,rep,name=Messages,proto3" json:"Messages,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -858,7 +858,7 @@ type FromServerMessage_PostedMessage struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	LookupKey string               `protobuf:"bytes,1,opt,name=lookupKey,proto3" json:"lookupKey,omitempty"`
 | 
			
		||||
	LookupKey string               `protobuf:"bytes,1,opt,name=LookupKey,proto3" json:"LookupKey,omitempty"`
 | 
			
		||||
	Messages  []*PackedUserMessage `protobuf:"bytes,2,rep,name=Messages,proto3" json:"Messages,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -913,17 +913,17 @@ type UserMessage_ConversationStatus struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	LocalUuid      string `protobuf:"bytes,1,opt,name=LocalUuid,proto3" json:"LocalUuid,omitempty"`
 | 
			
		||||
	LocalSequence  uint64 `protobuf:"varint,2,opt,name=LocalSequence,proto3" json:"LocalSequence,omitempty"`
 | 
			
		||||
	Sent           uint64 `protobuf:"varint,3,opt,name=Sent,proto3" json:"Sent,omitempty"`
 | 
			
		||||
	Received       uint64 `protobuf:"varint,4,opt,name=Received,proto3" json:"Received,omitempty"`
 | 
			
		||||
	Processed      uint64 `protobuf:"varint,5,opt,name=Processed,proto3" json:"Processed,omitempty"`
 | 
			
		||||
	NextCkey       string `protobuf:"bytes,6,opt,name=NextCkey,proto3" json:"NextCkey,omitempty"`              // contact key
 | 
			
		||||
	NextCkeyAck    bool   `protobuf:"varint,7,opt,name=NextCkeyAck,proto3" json:"NextCkeyAck,omitempty"`       // false when proposing a new id, true for accepting it
 | 
			
		||||
	NextEkey       string `protobuf:"bytes,8,opt,name=NextEkey,proto3" json:"NextEkey,omitempty"`              // encryption key
 | 
			
		||||
	NextKeyEkeyAck bool   `protobuf:"varint,9,opt,name=NextKeyEkeyAck,proto3" json:"NextKeyEkeyAck,omitempty"` // false when proposing a new key, true for accpeting it
 | 
			
		||||
	NextLkey       string `protobuf:"bytes,10,opt,name=NextLkey,proto3" json:"NextLkey,omitempty"`             // lookup key
 | 
			
		||||
	NextLkeyAck    bool   `protobuf:"varint,11,opt,name=NextLkeyAck,proto3" json:"NextLkeyAck,omitempty"`      // false when proposing a new id, true for accepting it
 | 
			
		||||
	LocalUuid               string `protobuf:"bytes,1,opt,name=LocalUuid,proto3" json:"LocalUuid,omitempty"`
 | 
			
		||||
	LocalSequence           uint64 `protobuf:"varint,2,opt,name=LocalSequence,proto3" json:"LocalSequence,omitempty"`
 | 
			
		||||
	Sent                    uint64 `protobuf:"varint,3,opt,name=Sent,proto3" json:"Sent,omitempty"`
 | 
			
		||||
	Received                uint64 `protobuf:"varint,4,opt,name=Received,proto3" json:"Received,omitempty"`
 | 
			
		||||
	Processed               uint64 `protobuf:"varint,5,opt,name=Processed,proto3" json:"Processed,omitempty"`
 | 
			
		||||
	NextContactKey          string `protobuf:"bytes,6,opt,name=NextContactKey,proto3" json:"NextContactKey,omitempty"`                    // contact key
 | 
			
		||||
	NextCcontactKeyAck      bool   `protobuf:"varint,7,opt,name=NextCcontactKeyAck,proto3" json:"NextCcontactKeyAck,omitempty"`           // false when proposing a new id, true for accepting it
 | 
			
		||||
	NextEncryptionKey       string `protobuf:"bytes,8,opt,name=NextEncryptionKey,proto3" json:"NextEncryptionKey,omitempty"`              // encryption key
 | 
			
		||||
	NextKeyEncryptionKeyAck bool   `protobuf:"varint,9,opt,name=NextKeyEncryptionKeyAck,proto3" json:"NextKeyEncryptionKeyAck,omitempty"` // false when proposing a new key, true for accpeting it
 | 
			
		||||
	NextLookupKey           string `protobuf:"bytes,10,opt,name=NextLookupKey,proto3" json:"NextLookupKey,omitempty"`                     // lookup key
 | 
			
		||||
	NextLookupKeyAck        bool   `protobuf:"varint,11,opt,name=NextLookupKeyAck,proto3" json:"NextLookupKeyAck,omitempty"`              // false when proposing a new id, true for accepting it
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_ConversationStatus) Reset() {
 | 
			
		||||
@@ -993,44 +993,44 @@ func (x *UserMessage_ConversationStatus) GetProcessed() uint64 {
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextCkey() string {
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextContactKey() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.NextCkey
 | 
			
		||||
		return x.NextContactKey
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextCkeyAck() bool {
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextCcontactKeyAck() bool {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.NextCkeyAck
 | 
			
		||||
		return x.NextCcontactKeyAck
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextEkey() string {
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextEncryptionKey() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.NextEkey
 | 
			
		||||
		return x.NextEncryptionKey
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextKeyEkeyAck() bool {
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextKeyEncryptionKeyAck() bool {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.NextKeyEkeyAck
 | 
			
		||||
		return x.NextKeyEncryptionKeyAck
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextLkey() string {
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextLookupKey() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.NextLkey
 | 
			
		||||
		return x.NextLookupKey
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextLkeyAck() bool {
 | 
			
		||||
func (x *UserMessage_ConversationStatus) GetNextLookupKeyAck() bool {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.NextLkeyAck
 | 
			
		||||
		return x.NextLookupKeyAck
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
@@ -1040,8 +1040,8 @@ type UserMessage_Group struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Name    string            `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
 | 
			
		||||
	Members []*MinimalContact `protobuf:"bytes,2,rep,name=members,proto3" json:"members,omitempty"`
 | 
			
		||||
	Name    string            `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
 | 
			
		||||
	Members []*MinimalContact `protobuf:"bytes,2,rep,name=Members,proto3" json:"Members,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *UserMessage_Group) Reset() {
 | 
			
		||||
@@ -1096,11 +1096,11 @@ var file_messages_proto_rawDesc = []byte{
 | 
			
		||||
	0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 | 
			
		||||
	0x12, 0x07, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x22, 0x61, 0x0a, 0x13, 0x50, 0x61, 0x63,
 | 
			
		||||
	0x6b, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
			
		||||
	0x12, 0x12, 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
 | 
			
		||||
	0x46, 0x72, 0x6f, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18,
 | 
			
		||||
	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c,
 | 
			
		||||
	0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x81, 0x01, 0x0a,
 | 
			
		||||
	0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
 | 
			
		||||
	0x66, 0x72, 0x6f, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18,
 | 
			
		||||
	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c,
 | 
			
		||||
	0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x81, 0x01, 0x0a,
 | 
			
		||||
	0x11, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61,
 | 
			
		||||
	0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
 | 
			
		||||
	0x52, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e,
 | 
			
		||||
@@ -1109,163 +1109,170 @@ var file_messages_proto_rawDesc = []byte{
 | 
			
		||||
	0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f,
 | 
			
		||||
	0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18,
 | 
			
		||||
	0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
 | 
			
		||||
	0x22, 0xc8, 0x04, 0x0a, 0x0f, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73,
 | 
			
		||||
	0x22, 0xce, 0x04, 0x0a, 0x0f, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73,
 | 
			
		||||
	0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
 | 
			
		||||
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07,
 | 
			
		||||
	0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50,
 | 
			
		||||
	0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4e, 0x0a, 0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65,
 | 
			
		||||
	0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x65,
 | 
			
		||||
	0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
 | 
			
		||||
	0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x52,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
			
		||||
	0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x2e, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61,
 | 
			
		||||
	0x67, 0x65, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
			
		||||
	0x52, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4e, 0x65,
 | 
			
		||||
	0x78, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x09, 0x52, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79,
 | 
			
		||||
	0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55,
 | 
			
		||||
	0x72, 0x6c, 0x1a, 0xaf, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74,
 | 
			
		||||
	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f,
 | 
			
		||||
	0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c,
 | 
			
		||||
	0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x4c, 0x61, 0x73, 0x74,
 | 
			
		||||
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64, 0x4f, 0x4b, 0x18, 0x02, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x10, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75,
 | 
			
		||||
	0x69, 0x64, 0x4f, 0x4b, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4f,
 | 
			
		||||
	0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x50, 0x75, 0x62,
 | 
			
		||||
	0x6c, 0x69, 0x73, 0x68, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f,
 | 
			
		||||
	0x6f, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61,
 | 
			
		||||
	0x74, 0x75, 0x72, 0x65, 0x1a, 0x65, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18,
 | 
			
		||||
	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e,
 | 
			
		||||
	0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
			
		||||
	0x65, 0x52, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x92, 0x05, 0x0a, 0x11,
 | 
			
		||||
	0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
			
		||||
	0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50,
 | 
			
		||||
	0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72,
 | 
			
		||||
	0x76, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79,
 | 
			
		||||
	0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c,
 | 
			
		||||
	0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x63,
 | 
			
		||||
	0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x53, 0x65, 0x72,
 | 
			
		||||
	0x76, 0x65, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53,
 | 
			
		||||
	0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64, 0x12, 0x50, 0x0a, 0x0c, 0x50,
 | 
			
		||||
	0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x46, 0x72, 0x6f, 0x6d,
 | 
			
		||||
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x75,
 | 
			
		||||
	0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
 | 
			
		||||
	0x0c, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a,
 | 
			
		||||
	0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32,
 | 
			
		||||
	0x28, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65,
 | 
			
		||||
	0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x6f, 0x73, 0x74,
 | 
			
		||||
	0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61,
 | 
			
		||||
	0x67, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65,
 | 
			
		||||
	0x72, 0x4b, 0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4e, 0x65, 0x78, 0x74,
 | 
			
		||||
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c,
 | 
			
		||||
	0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x1a, 0x3a, 0x0a, 0x14, 0x43,
 | 
			
		||||
	0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
 | 
			
		||||
	0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x75,
 | 
			
		||||
	0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61,
 | 
			
		||||
	0x67, 0x65, 0x55, 0x75, 0x69, 0x64, 0x73, 0x1a, 0x70, 0x0a, 0x11, 0x50, 0x75, 0x6c, 0x6c, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
 | 
			
		||||
	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45,
 | 
			
		||||
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e,
 | 
			
		||||
	0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
 | 
			
		||||
	0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05,
 | 
			
		||||
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x0d, 0x50, 0x6f, 0x73,
 | 
			
		||||
	0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f,
 | 
			
		||||
	0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c,
 | 
			
		||||
	0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73,
 | 
			
		||||
	0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6f,
 | 
			
		||||
	0x77, 0x6c, 0x69, 0x62, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x09, 0x52, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4e, 0x0a, 0x0b,
 | 
			
		||||
	0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x54, 0x6f, 0x53, 0x65,
 | 
			
		||||
	0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52,
 | 
			
		||||
	0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x08,
 | 
			
		||||
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26,
 | 
			
		||||
	0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x65,
 | 
			
		||||
	0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x4d,
 | 
			
		||||
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73,
 | 
			
		||||
	0x22, 0x98, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x4e,
 | 
			
		||||
	0x12, 0x24, 0x0a, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65,
 | 
			
		||||
	0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x65, 0x72,
 | 
			
		||||
	0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0b, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x1a, 0xaf, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6e,
 | 
			
		||||
	0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x2a,
 | 
			
		||||
	0x0a, 0x10, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64,
 | 
			
		||||
	0x4f, 0x4b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65,
 | 
			
		||||
	0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64, 0x4f, 0x4b, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75,
 | 
			
		||||
	0x62, 0x6c, 0x69, 0x73, 0x68, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x08, 0x52, 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65,
 | 
			
		||||
	0x12, 0x28, 0x0a, 0x0f, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74,
 | 
			
		||||
	0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x4c, 0x6f, 0x6f, 0x6b, 0x75,
 | 
			
		||||
	0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x1a, 0x65, 0x0a, 0x0d, 0x50, 0x6f,
 | 
			
		||||
	0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4c,
 | 
			
		||||
	0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
 | 
			
		||||
	0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x08, 0x4d, 0x65, 0x73,
 | 
			
		||||
	0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65,
 | 
			
		||||
	0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72,
 | 
			
		||||
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
			
		||||
	0x73, 0x22, 0x92, 0x05, 0x0a, 0x11, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
 | 
			
		||||
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18,
 | 
			
		||||
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53,
 | 
			
		||||
	0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12,
 | 
			
		||||
	0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c,
 | 
			
		||||
	0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x65, 0x72,
 | 
			
		||||
	0x76, 0x65, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x04, 0x52, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
 | 
			
		||||
	0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64, 0x18,
 | 
			
		||||
	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x75, 0x69,
 | 
			
		||||
	0x64, 0x12, 0x50, 0x0a, 0x0c, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
 | 
			
		||||
	0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69,
 | 
			
		||||
	0x62, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73,
 | 
			
		||||
	0x61, 0x67, 0x65, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
 | 
			
		||||
	0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18,
 | 
			
		||||
	0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e,
 | 
			
		||||
	0x46, 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
			
		||||
	0x65, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
 | 
			
		||||
	0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4e, 0x65, 0x78,
 | 
			
		||||
	0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
 | 
			
		||||
	0x52, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12,
 | 
			
		||||
	0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72,
 | 
			
		||||
	0x6c, 0x1a, 0x3a, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
 | 
			
		||||
	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x65, 0x73,
 | 
			
		||||
	0x73, 0x61, 0x67, 0x65, 0x55, 0x75, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x75, 0x69, 0x64, 0x73, 0x1a, 0x70, 0x0a,
 | 
			
		||||
	0x11, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x45, 0x6e, 0x74,
 | 
			
		||||
	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x46, 0x72,
 | 
			
		||||
	0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
 | 
			
		||||
	0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
 | 
			
		||||
	0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
 | 
			
		||||
	0x65, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
			
		||||
	0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x36,
 | 
			
		||||
	0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
 | 
			
		||||
	0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65,
 | 
			
		||||
	0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x4d, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65,
 | 
			
		||||
	0x72, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x63,
 | 
			
		||||
	0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69,
 | 
			
		||||
	0x63, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x75, 0x62, 0x6c,
 | 
			
		||||
	0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x66, 0x69,
 | 
			
		||||
	0x64, 0x65, 0x6e, 0x63, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
 | 
			
		||||
	0x52, 0x0f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x4c, 0x65, 0x76, 0x65,
 | 
			
		||||
	0x6c, 0x22, 0xdc, 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x43, 0x61, 0x72,
 | 
			
		||||
	0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74,
 | 
			
		||||
	0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
 | 
			
		||||
	0x79, 0x12, 0x30, 0x0a, 0x13, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50,
 | 
			
		||||
	0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13,
 | 
			
		||||
	0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x0f, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x50, 0x75, 0x62,
 | 
			
		||||
	0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x4c, 0x6f,
 | 
			
		||||
	0x6f, 0x6b, 0x75, 0x70, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a,
 | 
			
		||||
	0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03,
 | 
			
		||||
	0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x53, 0x65, 0x72,
 | 
			
		||||
	0x76, 0x65, 0x72, 0x52, 0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x22, 0x7b, 0x0a, 0x0e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61,
 | 
			
		||||
	0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
 | 
			
		||||
	0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69,
 | 
			
		||||
	0x63, 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x0e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x53,
 | 
			
		||||
	0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d,
 | 
			
		||||
	0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x0e, 0x54,
 | 
			
		||||
	0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x22, 0xb2, 0x06,
 | 
			
		||||
	0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a,
 | 
			
		||||
	0x0b, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
 | 
			
		||||
	0x12, 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46,
 | 
			
		||||
	0x72, 0x6f, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18,
 | 
			
		||||
	0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x06, 0x53,
 | 
			
		||||
	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x65,
 | 
			
		||||
	0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
			
		||||
	0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
 | 
			
		||||
	0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x0a, 0x07,
 | 
			
		||||
	0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
 | 
			
		||||
	0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x43,
 | 
			
		||||
	0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12,
 | 
			
		||||
	0x46, 0x0a, 0x10, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72,
 | 
			
		||||
	0x6f, 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6f, 0x77,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
 | 
			
		||||
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x10, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69,
 | 
			
		||||
	0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0xb8, 0x03, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c,
 | 
			
		||||
	0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x09, 0x52, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x0d,
 | 
			
		||||
	0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x04, 0x52, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e,
 | 
			
		||||
	0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04,
 | 
			
		||||
	0x52, 0x04, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76,
 | 
			
		||||
	0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76,
 | 
			
		||||
	0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18,
 | 
			
		||||
	0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64,
 | 
			
		||||
	0x12, 0x26, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x43, 0x6f,
 | 
			
		||||
	0x6e, 0x74, 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x4e, 0x65, 0x78, 0x74,
 | 
			
		||||
	0x43, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x6b, 0x18, 0x07,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x4e, 0x65, 0x78, 0x74, 0x43, 0x63, 0x6f, 0x6e, 0x74, 0x61,
 | 
			
		||||
	0x63, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x11, 0x4e, 0x65, 0x78, 0x74,
 | 
			
		||||
	0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x11, 0x4e, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
 | 
			
		||||
	0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x17, 0x4e, 0x65, 0x78, 0x74, 0x4b, 0x65,
 | 
			
		||||
	0x79, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63,
 | 
			
		||||
	0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x4e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79,
 | 
			
		||||
	0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x6b,
 | 
			
		||||
	0x12, 0x24, 0x0a, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65,
 | 
			
		||||
	0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6f, 0x6f,
 | 
			
		||||
	0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6f,
 | 
			
		||||
	0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08,
 | 
			
		||||
	0x52, 0x10, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x41,
 | 
			
		||||
	0x63, 0x6b, 0x1a, 0x4e, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x4e,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12,
 | 
			
		||||
	0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
 | 
			
		||||
	0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x03,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12,
 | 
			
		||||
	0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72,
 | 
			
		||||
	0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x4c,
 | 
			
		||||
	0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x43, 0x6f, 0x6e, 0x66,
 | 
			
		||||
	0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xdc, 0x01, 0x0a, 0x0b,
 | 
			
		||||
	0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x43, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
 | 
			
		||||
	0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61,
 | 
			
		||||
	0x63, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x65,
 | 
			
		||||
	0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x28, 0x0a,
 | 
			
		||||
	0x0f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
 | 
			
		||||
	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x50, 0x75,
 | 
			
		||||
	0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x53,
 | 
			
		||||
	0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d,
 | 
			
		||||
	0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x0b, 0x50,
 | 
			
		||||
	0x75, 0x6c, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x22, 0x7b, 0x0a, 0x0e, 0x4d, 0x69,
 | 
			
		||||
	0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04,
 | 
			
		||||
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x37,
 | 
			
		||||
	0x0a, 0x0e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62,
 | 
			
		||||
	0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x0e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64,
 | 
			
		||||
	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x22, 0xca, 0x05, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72,
 | 
			
		||||
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x69,
 | 
			
		||||
	0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x72, 0x6f,
 | 
			
		||||
	0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x12, 0x0a,
 | 
			
		||||
	0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70,
 | 
			
		||||
	0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52,
 | 
			
		||||
	0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
 | 
			
		||||
	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e,
 | 
			
		||||
	0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
 | 
			
		||||
	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63,
 | 
			
		||||
	0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69,
 | 
			
		||||
	0x62, 0x2e, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74,
 | 
			
		||||
	0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x67, 0x72, 0x6f,
 | 
			
		||||
	0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x47,
 | 
			
		||||
	0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0xe6, 0x02, 0x0a, 0x12,
 | 
			
		||||
	0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
 | 
			
		||||
	0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x75, 0x69, 0x64, 0x18,
 | 
			
		||||
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x75, 0x69, 0x64,
 | 
			
		||||
	0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
 | 
			
		||||
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65,
 | 
			
		||||
	0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x03,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65,
 | 
			
		||||
	0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x52, 0x65,
 | 
			
		||||
	0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
 | 
			
		||||
	0x73, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x43, 0x6b, 0x65, 0x79,
 | 
			
		||||
	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x43, 0x6b, 0x65, 0x79,
 | 
			
		||||
	0x12, 0x20, 0x0a, 0x0b, 0x4e, 0x65, 0x78, 0x74, 0x43, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x6b, 0x18,
 | 
			
		||||
	0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x4e, 0x65, 0x78, 0x74, 0x43, 0x6b, 0x65, 0x79, 0x41,
 | 
			
		||||
	0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x45, 0x6b, 0x65, 0x79, 0x18, 0x08,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x45, 0x6b, 0x65, 0x79, 0x12, 0x26,
 | 
			
		||||
	0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x45, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x6b,
 | 
			
		||||
	0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x45,
 | 
			
		||||
	0x6b, 0x65, 0x79, 0x41, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6b,
 | 
			
		||||
	0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6b,
 | 
			
		||||
	0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6b, 0x65, 0x79, 0x41, 0x63,
 | 
			
		||||
	0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x6b, 0x65,
 | 
			
		||||
	0x79, 0x41, 0x63, 0x6b, 0x1a, 0x4e, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a,
 | 
			
		||||
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
 | 
			
		||||
	0x65, 0x12, 0x31, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03,
 | 
			
		||||
	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x4d, 0x69, 0x6e,
 | 
			
		||||
	0x69, 0x6d, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x6d, 0x65, 0x6d,
 | 
			
		||||
	0x62, 0x65, 0x72, 0x73, 0x42, 0x21, 0x5a, 0x1f, 0x66, 0x6f, 0x72, 0x67, 0x65, 0x2e, 0x72, 0x65,
 | 
			
		||||
	0x64, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x2f, 0x79, 0x76, 0x65, 0x73, 0x2f,
 | 
			
		||||
	0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
	0x31, 0x0a, 0x07, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
 | 
			
		||||
	0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6f, 0x77, 0x6c, 0x69, 0x62, 0x2e, 0x4d, 0x69, 0x6e, 0x69, 0x6d,
 | 
			
		||||
	0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x4d, 0x65, 0x6d, 0x62, 0x65,
 | 
			
		||||
	0x72, 0x73, 0x42, 0x21, 0x5a, 0x1f, 0x66, 0x6f, 0x72, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x64, 0x72,
 | 
			
		||||
	0x6f, 0x6f, 0x6d, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x2f, 0x79, 0x76, 0x65, 0x73, 0x2f, 0x6d, 0x65,
 | 
			
		||||
	0x6f, 0x77, 0x6c, 0x69, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@@ -1306,12 +1313,12 @@ var file_messages_proto_depIdxs = []int32{
 | 
			
		||||
	4,  // 4: meowlib.ContactCard.PullServers:type_name -> meowlib.Server
 | 
			
		||||
	4,  // 5: meowlib.MinimalContact.TrustedServers:type_name -> meowlib.Server
 | 
			
		||||
	13, // 6: meowlib.UserMessage.Status:type_name -> meowlib.UserMessage.ConversationStatus
 | 
			
		||||
	6,  // 7: meowlib.UserMessage.contact:type_name -> meowlib.MinimalContact
 | 
			
		||||
	14, // 8: meowlib.UserMessage.group:type_name -> meowlib.UserMessage.Group
 | 
			
		||||
	6,  // 7: meowlib.UserMessage.Contact:type_name -> meowlib.MinimalContact
 | 
			
		||||
	14, // 8: meowlib.UserMessage.DestinationGroup:type_name -> meowlib.UserMessage.Group
 | 
			
		||||
	1,  // 9: meowlib.ToServerMessage.PostedMessage.Messages:type_name -> meowlib.PackedUserMessage
 | 
			
		||||
	10, // 10: meowlib.FromServerMessage.PullResponseEntry.value:type_name -> meowlib.FromServerMessage.ConversationResponse
 | 
			
		||||
	1,  // 11: meowlib.FromServerMessage.PostedMessage.Messages:type_name -> meowlib.PackedUserMessage
 | 
			
		||||
	6,  // 12: meowlib.UserMessage.Group.members:type_name -> meowlib.MinimalContact
 | 
			
		||||
	6,  // 12: meowlib.UserMessage.Group.Members:type_name -> meowlib.MinimalContact
 | 
			
		||||
	13, // [13:13] is the sub-list for method output_type
 | 
			
		||||
	13, // [13:13] is the sub-list for method input_type
 | 
			
		||||
	13, // [13:13] is the sub-list for extension type_name
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
package client
 | 
			
		||||
package server
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
 | 
			
		||||
	"forge.redroom.link/yves/meowlib"
 | 
			
		||||
@@ -11,27 +12,24 @@ import (
 | 
			
		||||
const key = "3pw0c8#6ZG8{75b5;3?fe80$2"
 | 
			
		||||
 | 
			
		||||
type Identity struct {
 | 
			
		||||
	ServerName string `json:"servername,omitempty"`
 | 
			
		||||
	ServerDesc string `json:"servername,omitempty"`
 | 
			
		||||
	PublicKey  string `json:"public_key,omitempty"`
 | 
			
		||||
	PrivateKey string `json:"private_key,omitempty"`
 | 
			
		||||
	Status     string `json:"status,omitempty"`
 | 
			
		||||
	ServerName string          `json:"servername,omitempty"`
 | 
			
		||||
	ServerDesc string          `json:"serverdesc,omitempty"`
 | 
			
		||||
	ServerKp   meowlib.KeyPair `json:"server_kp,omitempty"`
 | 
			
		||||
	Status     string          `json:"status,omitempty"`
 | 
			
		||||
	//	KnownServers ServerList `json:"known_servers,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func CreateIdentity(servername string, serverdesc string) *Identity {
 | 
			
		||||
func CreateIdentity(ServerName string, ServerDesc string) *Identity {
 | 
			
		||||
	var id Identity
 | 
			
		||||
	id.ServerName = servername
 | 
			
		||||
	id.ServerDesc = serverdesc
 | 
			
		||||
	kp := meowlib.NewKeyPair()
 | 
			
		||||
	id.PublicKey = kp.Public
 | 
			
		||||
	id.PrivateKey = kp.Private
 | 
			
		||||
	id.ServerName = ServerName
 | 
			
		||||
	id.ServerDesc = ServerDesc
 | 
			
		||||
	id.ServerKp = meowlib.NewKeyPair()
 | 
			
		||||
	return &id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func LoadIdentity(file string) (*Identity, error) {
 | 
			
		||||
func LoadIdentity(File string) (*Identity, error) {
 | 
			
		||||
	var id Identity
 | 
			
		||||
	indata, err := ioutil.ReadFile(file)
 | 
			
		||||
	indata, err := ioutil.ReadFile(File)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -52,3 +50,23 @@ func (id *Identity) Save(file string) error {
 | 
			
		||||
	err = ioutil.WriteFile(file, []byte(armor), 0644)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AsymEncryptMessage prepares a message to send to a specific client contact
 | 
			
		||||
func (id *Identity) AsymEncryptMessage(ClientPublicKey string, Message []byte) (EncryptedMsg []byte, Signature []byte, err error) {
 | 
			
		||||
	EncryptedMsg, Signature, err = meowlib.EncryptAndSign(ClientPublicKey, id.ServerKp.Private, Message)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err.Error())
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return EncryptedMsg, Signature, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AsymDecryptMessage reads a message from a specific client contact
 | 
			
		||||
func (id *Identity) AsymDecryptMessage(ClientPublicKey string, Message []byte, Signature []byte) (DecryptedMsg []byte, err error) {
 | 
			
		||||
	DecryptedMsg, err = meowlib.DecryptAndCheck(id.ServerKp.Private, ClientPublicKey, Message, Signature)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err.Error())
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return DecryptedMsg, err
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user