Skip to content
Snippets Groups Projects
Commit 68ea9755 authored by Jake Taylor's avatar Jake Taylor
Browse files

added bindings for e2e object

parent f21cbc0c
No related branches found
No related tags found
2 merge requests!510Release,!238Hotfix/e2e client
......@@ -23,7 +23,7 @@ func (_ *AuthenticatedConnection) IsAuthenticated() bool {
// ConnectWithAuthentication is called by the client (i.e. the one establishing
// connection with the server). Once a connect.Connection has been established
// with the server and then authenticate their identity to the server.
// accepts a marshalled Identity and contact.Contact object
// accepts a marshalled TransmissionIdentity and contact.Contact object
func (c *Cmix) ConnectWithAuthentication(e2eId int, recipientContact []byte) (*AuthenticatedConnection, error) {
cont, err := contact.Unmarshal(recipientContact)
if err != nil {
......
......@@ -31,7 +31,7 @@ func (c *Connection) GetId() int {
// This function is to be used sender-side and will block until the
// partner.Manager is confirmed.
// recipientContact - marshalled contact.Contact object
// myIdentity - marshalled Identity object
// myIdentity - marshalled TransmissionIdentity object
func (c *Cmix) Connect(e2eId int, recipientContact []byte) (
*Connection, error) {
cont, err := contact.Unmarshal(recipientContact)
......
......@@ -4,14 +4,13 @@ import (
"encoding/json"
"gitlab.com/elixxir/client/xxdk"
"gitlab.com/elixxir/crypto/contact"
"gitlab.com/elixxir/crypto/cyclic"
"gitlab.com/elixxir/primitives/fact"
"gitlab.com/xx_network/crypto/signature/rsa"
"gitlab.com/xx_network/primitives/id"
)
// Identity struct
// Example marshalled Identity:
// TransmissionIdentity struct
// Example marshalled TransmissionIdentity:
// {"ID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", // User ID (base64)
// // RSA Private key (PEM format)
// "RSAPrivatePem":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBNU15dTdhYjBJOS9UL1BFUUxtd2x3ejZHV3FjMUNYemVIVXhoVEc4bmg1WWRWSXMxCmJ2THpBVjNOMDJxdXN6K2s4TVFEWjBtejMzdkswUmhPczZIY0NUSFdzTEpXRkE5WWpzWWlCRi9qTDd1bmd1ckIKL2tvK1JJSnNrWGFWaEZaazRGdERoRXhTNWY4RnR0Qmk1NmNLZmdJQlVKT3ozZi9qQllTMkxzMlJ6cWV5YXM3SApjV2RaME9TclBTT3BiYlViU1FPbS9LWnlweGZHU21yZ2oxRUZuU1dZZ2xGZTdUOTRPbHF5MG14QTV5clVXbHorCk9sK3hHbXpCNUp4WUFSMU9oMFQrQTk4RWMrTUZHNm43L1MraDdzRDgybGRnVnJmbStFTzRCdmFKeTRESGZGMWgKNnp6QnVnY25NUVFGc0dLeDFYWC9COTVMdUpPVjdyeXlDbzZGbHdJREFRQUJBb0lCQVFDaUh6OGNlcDZvQk9RTAphUzBVRitHeU5VMnlVcVRNTWtTWThoUkh1c09CMmFheXoybHZVb3RLUHBPbjZRSWRWVTJrcE4vY2dtY0lSb2x5CkhBMDRUOHJBWVNaRlVqaVlRajkzKzRFREpJYXd2Z0YyVEs1bFoyb3oxVTdreStncU82V0RMR2Z0Q0wvODVQWEIKa210aXhnUXpRV3g1RWcvemtHdm03eURBalQxeDloNytsRjJwNFlBam5kT2xTS0dmQjFZeTR1RXBQd0kwc1lWdgpKQWc0MEFxbllZUmt4emJPbmQxWGNjdEJFN2Z1VDdrWXhoeSs3WXYrUTJwVy9BYmh6NGlHOEY1MW9GMGZwV0czCmlISDhsVXZFTkp2SUZEVHZ0UEpESlFZalBRN3lUbGlGZUdrMXZUQkcyQkpQNExzVzhpbDZOeUFuRktaY1hOQ24KeHVCendiSlJBb0dCQVBUK0dGTVJGRHRHZVl6NmwzZmg3UjJ0MlhrMysvUmpvR3BDUWREWDhYNERqR1pVd1RGVQpOS2tQTTNjS29ia2RBYlBDb3FpL0tOOVBibk9QVlZ3R3JkSE9vSnNibFVHYmJGamFTUzJQMFZnNUVhTC9rT2dUCmxMMUdoVFpIUWk1VUlMM0p4M1Z3T0ZRQ3RQOU1UQlQ0UEQvcEFLbDg3VTJXN3JTY1dGV1ZGbFNkQW9HQkFPOFUKVmhHWkRpVGFKTWVtSGZIdVYrNmtzaUlsam9aUVVzeGpmTGNMZ2NjV2RmTHBqS0ZWTzJNN3NqcEJEZ0w4NmFnegorVk14ZkQzZ1l0SmNWN01aMVcwNlZ6TlNVTHh3a1dRY1hXUWdDaXc5elpyYlhCUmZRNUVjMFBlblVoWWVwVzF5CkpkTC8rSlpQeDJxSzVrQytiWU5EdmxlNWdpcjlDSGVzTlR5enVyckRBb0dCQUl0cTJnN1RaazhCSVFUUVNrZ24Kb3BkRUtzRW4wZExXcXlBdENtVTlyaWpHL2l2eHlXczMveXZDQWNpWm5VVEp0QUZISHVlbXVTeXplQ2g5QmRkegoyWkRPNUdqQVBxVHlQS3NudFlNZkY4UDczZ1NES1VSWWVFbHFDejdET0c5QzRzcitPK3FoN1B3cCtqUmFoK1ZiCkNuWllNMDlBVDQ3YStJYUJmbWRkaXpLbEFvR0JBSmo1dkRDNmJIQnNISWlhNUNJL1RZaG5YWXUzMkVCYytQM0sKMHF3VThzOCtzZTNpUHBla2Y4RjVHd3RuUU4zc2tsMk1GQWFGYldmeVFZazBpUEVTb0p1cGJzNXA1enNNRkJ1bwpncUZrVnQ0RUZhRDJweTVwM2tQbDJsZjhlZXVwWkZScGE0WmRQdVIrMjZ4eWYrNEJhdlZJeld3NFNPL1V4Q3crCnhqbTNEczRkQW9HQWREL0VOa1BjU004c1BCM3JSWW9MQ2twcUV2U0MzbVZSbjNJd3c1WFAwcDRRVndhRmR1ckMKYUhtSE1EekNrNEUvb0haQVhFdGZ2S2tRaUI4MXVYM2c1aVo4amdYUVhXUHRteTVIcVVhcWJYUTlENkxWc3B0egpKL3R4SWJLMXp5c1o2bk9IY1VoUUwyVVF6SlBBRThZNDdjYzVzTThEN3kwZjJ0QURTQUZNMmN3PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==",
......@@ -20,7 +19,7 @@ import (
// // DH Private key
// "DHKeyPrivate":"eyJWYWx1ZSI6NDU2MDgzOTEzMjA0OTIyODA5Njg2MDI3MzQ0MzM3OTA0MzAyODYwMjM2NDk2NDM5NDI4NTcxMTMwNDMzOTQwMzgyMTIyMjY4OTQzNTMyMjIyMzc1MTkzNTEzMjU4MjA4MDA0NTczMDY4MjEwNzg2NDI5NjA1MjA0OTA3MjI2ODI5OTc3NTczMDkxODY0NTY3NDExMDExNjQxNCwiRmluZ2VycHJpbnQiOjE2ODAxNTQxNTExMjMzMDk4MzYzfQ=="
// }
type Identity struct {
type TransmissionIdentity struct {
ID []byte
RSAPrivatePem []byte
Salt []byte
......@@ -38,7 +37,7 @@ func (c *Cmix) MakeIdentity() ([]byte, error) {
return nil, err
}
//create the identity object
I := Identity{
I := TransmissionIdentity{
ID: ident.ID.Marshal(),
RSAPrivatePem: rsa.CreatePrivateKeyPem(ident.RSAPrivatePem),
Salt: ident.Salt,
......@@ -48,19 +47,19 @@ func (c *Cmix) MakeIdentity() ([]byte, error) {
return json.Marshal(&I)
}
// GetContactFromIdentity accepts a marshalled Identity object and returns a marshalled contact.Contact object
// GetContactFromIdentity accepts a marshalled TransmissionIdentity object and returns a marshalled contact.Contact object
func (c *Cmix) GetContactFromIdentity(identity []byte) ([]byte, error) {
uID, _, _, dhKey, err := c.unmarshalIdentity(identity)
unmarshalledIdentity, err := c.unmarshalIdentity(identity)
if err != nil {
return nil, err
}
grp := c.api.GetStorage().GetE2EGroup()
dhPub := grp.ExpG(dhKey, grp.NewInt(1))
dhPub := grp.ExpG(unmarshalledIdentity.DHKeyPrivate, grp.NewInt(1))
ct := contact.Contact{
ID: uID,
ID: unmarshalledIdentity.ID,
DhPubKey: dhPub,
OwnershipProof: nil,
Facts: nil,
......@@ -69,31 +68,34 @@ func (c *Cmix) GetContactFromIdentity(identity []byte) ([]byte, error) {
return ct.Marshal(), nil
}
func (c *Cmix) unmarshalIdentity(marshaled []byte) (*id.ID, *rsa.PrivateKey, []byte,
*cyclic.Int, error) {
I := Identity{}
err := json.Unmarshal(marshaled, &I)
func (c *Cmix) unmarshalIdentity(marshaled []byte) (*xxdk.TransmissionIdentity, error) {
newIdentity := &xxdk.TransmissionIdentity{}
// Unmarshal given identity into TransmissionIdentity object
givenIdentity := TransmissionIdentity{}
err := json.Unmarshal(marshaled, &givenIdentity)
if err != nil {
return nil, nil, nil, nil, err
return nil, err
}
uID, err := id.Unmarshal(I.ID)
newIdentity.ID, err = id.Unmarshal(givenIdentity.ID)
if err != nil {
return nil, nil, nil, nil, err
return nil, err
}
dhkey := c.api.GetStorage().GetE2EGroup().NewInt(1)
err = dhkey.UnmarshalJSON([]byte(I.DHKeyPrivate))
newIdentity.DHKeyPrivate = c.api.GetStorage().GetE2EGroup().NewInt(1)
err = newIdentity.DHKeyPrivate.UnmarshalJSON(givenIdentity.DHKeyPrivate)
if err != nil {
return nil, nil, nil, nil, err
return nil, err
}
rsaPriv, err := rsa.LoadPrivateKeyFromPem([]byte(I.RSAPrivatePem))
newIdentity.RSAPrivatePem, err = rsa.LoadPrivateKeyFromPem(givenIdentity.RSAPrivatePem)
if err != nil {
return nil, nil, nil, nil, err
return nil, err
}
return uID, rsaPriv, I.Salt, dhkey, nil
newIdentity.Salt = givenIdentity.Salt
return newIdentity, nil
}
// GetIDFromContact accepts a marshalled contact.Contact object & returns a marshalled id.ID object
......
......@@ -22,14 +22,14 @@ func TestIdentity_JSON(t *testing.T) {
dhpkJson, _ := dhpk.MarshalJSON()
op := make([]byte, 64)
_, _ = rng.Read(op)
identity := Identity{
identity := TransmissionIdentity{
ID: uid.Marshal(),
RSAPrivatePem: rsa.CreatePrivateKeyPem(pk),
Salt: salt,
DHKeyPrivate: dhpkJson,
}
im, _ := json.Marshal(identity)
t.Log("Marshalled Identity object")
t.Log("Marshalled TransmissionIdentity object")
t.Log(string(im))
}
......
......@@ -21,3 +21,30 @@ type E2e struct {
api *xxdk.E2e
id int
}
// Login creates and returns a new E2e object
// and adds it to the e2eTrackerSingleton
// identity can be left nil such that a new
// TransmissionIdentity will be created automatically
func (e *E2e) Login(cmixId int, identity []byte) (*E2e, error) {
cmix, err := cmixTrackerSingleton.get(cmixId)
if err != nil {
return nil, err
}
newIdentity := &xxdk.TransmissionIdentity{}
if identity == nil {
newIdentity = nil
} else {
newIdentity, err = cmix.unmarshalIdentity(identity)
if err != nil {
return nil, err
}
}
newE2e, err := xxdk.Login(cmix.api, nil, newIdentity)
if err != nil {
return nil, err
}
return e2eTrackerSingleton.make(newE2e), nil
}
......@@ -16,7 +16,6 @@ import (
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/auth"
"gitlab.com/elixxir/client/cmix"
"gitlab.com/elixxir/client/event"
"gitlab.com/elixxir/client/interfaces"
......@@ -268,8 +267,7 @@ func LoadCmix(storageDir string, password []byte, parameters Params) (*Cmix, err
// while replacing the base NDF. This is designed for some specific deployment
// procedures and is generally unsafe.
func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte,
newBaseNdf string, authCallbacks auth.Callbacks,
params Params) (*Cmix, error) {
newBaseNdf string, params Params) (*Cmix, error) {
jww.INFO.Printf("LoginWithNewBaseNDF_UNSAFE()")
def, err := ParseNDF(newBaseNdf)
......
......@@ -24,6 +24,8 @@ import (
"gitlab.com/xx_network/primitives/id"
)
// E2e object bundles a TransmissionIdentity with a Cmix
// and can be used for high level operations such as connections
type E2e struct {
*Cmix
auth auth.State
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment