diff --git a/bindings/autheticatedConnection.go b/bindings/autheticatedConnection.go index 6ce0cf71346cee5386414eb1c80c6c8da142d3d5..5e1f78f4e08f813881f01b3695b423a4c1cd2f1e 100644 --- a/bindings/autheticatedConnection.go +++ b/bindings/autheticatedConnection.go @@ -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 { diff --git a/bindings/connect.go b/bindings/connect.go index 85a905be7696960438fa8b8a44cde9b5b33a9f03..8be9e4881ec5f345fd7d80b932e22d8d693ae19f 100644 --- a/bindings/connect.go +++ b/bindings/connect.go @@ -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) diff --git a/bindings/contact.go b/bindings/contact.go index 99a0101c6698c96a4abe231e1c80f956c74f47fa..9f808f66ae7059ee86b698dda93583a9a60a9cae 100644 --- a/bindings/contact.go +++ b/bindings/contact.go @@ -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 diff --git a/bindings/contact_test.go b/bindings/contact_test.go index adbf4d9c2a5d3c48e899ee5ba7f4123f44890034..97af0264f4bd9b76c9fe83017ff09477947b7a3d 100644 --- a/bindings/contact_test.go +++ b/bindings/contact_test.go @@ -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)) } diff --git a/bindings/e2e.go b/bindings/e2e.go index 95ca1960a50a90107d613cae49566681b0a3e1d3..1153f3b0cdd3b2f3c6b5770ce26af5e727ea936b 100644 --- a/bindings/e2e.go +++ b/bindings/e2e.go @@ -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 +} diff --git a/xxdk/cmix.go b/xxdk/cmix.go index 84c1d08201e9d8eb71336eb8222a0bd3275e3e6a..b467bda2fdabd8be7c48bc311eb064d2de58795c 100644 --- a/xxdk/cmix.go +++ b/xxdk/cmix.go @@ -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) diff --git a/xxdk/e2e.go b/xxdk/e2e.go index efe2a01d9465638351017a2ad49b4db94d3e8d9a..57fc30cd74235cb0c777b72dcf8e01c1dfd3dbbc 100644 --- a/xxdk/e2e.go +++ b/xxdk/e2e.go @@ -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