Skip to content
Snippets Groups Projects
Commit 87e846b1 authored by Josh Brooks's avatar Josh Brooks
Browse files

Add keyExchange tests and update dependencies

parent 387cc83b
No related branches found
No related tags found
No related merge requests found
......@@ -15,11 +15,11 @@ require (
github.com/spf13/jwalterweatherman v1.1.0
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.6.2
gitlab.com/elixxir/comms v0.0.0-20200922182918-25d056c28b3a
gitlab.com/elixxir/comms v0.0.0-20200923155248-2dd684128da1
gitlab.com/elixxir/crypto v0.0.0-20200921195205-bca0178268ec
gitlab.com/elixxir/ekv v0.1.1
gitlab.com/elixxir/primitives v0.0.0-20200915190719-f4586ec93f50
gitlab.com/xx_network/comms v0.0.0-20200922173551-45ad1fa27175
gitlab.com/elixxir/primitives v0.0.0-20200916172343-37503735c7a1
gitlab.com/xx_network/comms v0.0.0-20200923154925-b8a96380f180
gitlab.com/xx_network/crypto v0.0.0-20200812183430-c77a5281c686
gitlab.com/xx_network/primitives v0.0.0-20200915204206-eb0287ed0031
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a // indirect
......
......@@ -188,8 +188,12 @@ gitlab.com/elixxir/comms v0.0.0-20200916212207-60e7bd5b0913 h1:p4TLPPaMysV//lOJU
gitlab.com/elixxir/comms v0.0.0-20200916212207-60e7bd5b0913/go.mod h1:yBEsOZSPyJQJvDbtlQ5L8ydy1JRgVlRoNgMDy9koQcE=
gitlab.com/elixxir/comms v0.0.0-20200917172539-929fc227eb0c h1:go7/RknV7646Ie+nmQXZAa/aJ5wZBn5bpAYRB+tPens=
gitlab.com/elixxir/comms v0.0.0-20200917172539-929fc227eb0c/go.mod h1:yBEsOZSPyJQJvDbtlQ5L8ydy1JRgVlRoNgMDy9koQcE=
gitlab.com/elixxir/comms v0.0.0-20200922163657-3e723b7170f6 h1:dFgfdATZuiPybonCBh0s4HeLB8Qw3Zm9EoLDRh2Eaaw=
gitlab.com/elixxir/comms v0.0.0-20200922163657-3e723b7170f6/go.mod h1:yBEsOZSPyJQJvDbtlQ5L8ydy1JRgVlRoNgMDy9koQcE=
gitlab.com/elixxir/comms v0.0.0-20200922182918-25d056c28b3a h1:aBBz0LOfUulcQojWFg2sawdI0EkdRNTKU5qlPsmn+Ow=
gitlab.com/elixxir/comms v0.0.0-20200922182918-25d056c28b3a/go.mod h1:uRr8j6yTjCslxZxbRe6k4ixACu9gAeF61JZH36OFFa0=
gitlab.com/elixxir/comms v0.0.0-20200923155248-2dd684128da1 h1:bYdJzis8XR/TNBY3BWlhlRrHPIffVrFZp66gX99nH0Q=
gitlab.com/elixxir/comms v0.0.0-20200923155248-2dd684128da1/go.mod h1:uRr8j6yTjCslxZxbRe6k4ixACu9gAeF61JZH36OFFa0=
gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A=
gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c=
gitlab.com/elixxir/crypto v0.0.0-20200805174804-bdf909f2a16d/go.mod h1:cu6uNoANVLV0J6HyTL6KqVtVyh9SHU1RjJhytYlsbVQ=
......@@ -239,6 +243,7 @@ gitlab.com/elixxir/primitives v0.0.0-20200915190719-f4586ec93f50 h1:J0A2JsYlb0He
gitlab.com/elixxir/primitives v0.0.0-20200915190719-f4586ec93f50/go.mod h1:kNp47yPqja2lHSiS4DddTvFpB/4D9dB2YKnw5c+LJCE=
gitlab.com/elixxir/primitives v0.0.0-20200916172343-37503735c7a1 h1:51FDjTwXKVadID7xRxQxMKequpEjoKAIxaMpAn/YCP0=
gitlab.com/elixxir/primitives v0.0.0-20200916172343-37503735c7a1/go.mod h1:pJx2DZk9s8vVMnLN7x0hIPngDjbNSdOP6kk3RLlRxHg=
gitlab.com/xx_network/comms v0.0.0-20200805174823-841427dd5023 h1:fQPaxyuXyH3vl8qFlFDBEx8rlEzBnXBNy74K8ItFRM4=
gitlab.com/xx_network/comms v0.0.0-20200805174823-841427dd5023/go.mod h1:owEcxTRl7gsoM8c3RQ5KAm5GstxrJp5tn+6JfQ4z5Hw=
gitlab.com/xx_network/comms v0.0.0-20200806235452-3a82720833ba h1:7nozLSNBX0CfP53DDiDNLJx9obhYGfGf5na0/c9rMso=
gitlab.com/xx_network/comms v0.0.0-20200806235452-3a82720833ba/go.mod h1:idLzPGYig57XE7xuU93OlIF9s6NgSJj7OArQvsd5DjY=
......@@ -255,6 +260,8 @@ gitlab.com/xx_network/comms v0.0.0-20200915154643-d533291041b7 h1:lPx1wpkjNpwLaZ
gitlab.com/xx_network/comms v0.0.0-20200915154643-d533291041b7/go.mod h1:+jEkDQKoK51WLl2ZZuxfAZkz6YFbUQ+oZfH0dt2wIF0=
gitlab.com/xx_network/comms v0.0.0-20200922173551-45ad1fa27175 h1:HDmgh2Skbgv/fW1selsLDRr+hvQaK24nsthxv9nAHRM=
gitlab.com/xx_network/comms v0.0.0-20200922173551-45ad1fa27175/go.mod h1:wDPZABTOhqz+uFM75CzpGplQBRIsCQcS1EYXwker6nw=
gitlab.com/xx_network/comms v0.0.0-20200923154925-b8a96380f180 h1:TGamVmJrBj7AvLi6okQ7PQoutaBptCXMAiUqTwoiXRc=
gitlab.com/xx_network/comms v0.0.0-20200923154925-b8a96380f180/go.mod h1:wDPZABTOhqz+uFM75CzpGplQBRIsCQcS1EYXwker6nw=
gitlab.com/xx_network/crypto v0.0.0-20200806202113-978fa1984bbf/go.mod h1:i0df/q6dDCBiscgD51fMoS2U2TBrm6LcyN822JmB5Tw=
gitlab.com/xx_network/crypto v0.0.0-20200806235322-ede3c15881ce h1:gypNBUl2guESEv4MDgH+miwYqR4jPoWM8dLt2Zs5gIs=
gitlab.com/xx_network/crypto v0.0.0-20200806235322-ede3c15881ce/go.mod h1:i0df/q6dDCBiscgD51fMoS2U2TBrm6LcyN822JmB5Tw=
......
package keyExchange
import (
"github.com/golang/protobuf/proto"
"gitlab.com/elixxir/client/context/message"
"gitlab.com/elixxir/client/storage/e2e"
"gitlab.com/xx_network/primitives/id"
"testing"
"time"
)
// Smoke test for handleTrigger
func TestHandleConfirm(t *testing.T) {
aliceContext := InitTestingContextGeneric(t)
bobContext := InitTestingContextGeneric(t)
bobID := id.NewIdFromBytes([]byte("test"), t)
aliceContext.Session.E2e().AddPartner(bobID, bobContext.Session.E2e().GetDHPublicKey(),
e2e.GetDefaultSessionParams(), e2e.GetDefaultSessionParams())
sessionID := GeneratePartnerID(aliceContext, bobContext, genericGroup)
rekey, _ := proto.Marshal(&RekeyConfirm{
SessionID: sessionID.Marshal(),
})
payload := make([]byte, 0)
payload = append(payload, rekey...)
receiveMsg := message.Receive{
Payload: payload,
MessageType: message.NoType,
Sender: bobID,
Timestamp: time.Now(),
Encryption: message.E2E,
}
handleConfirm(aliceContext.Session, receiveMsg)
}
package keyExchange
import (
"github.com/golang/protobuf/proto"
"gitlab.com/elixxir/client/context"
"gitlab.com/elixxir/client/context/message"
"gitlab.com/elixxir/client/storage/e2e"
"gitlab.com/xx_network/primitives/id"
"testing"
"time"
)
var exchangeAliceContext, exchangeBobContext *context.Context
var exchangeAliceId, exchangeBobId *id.ID
func TestFullExchange(t *testing.T) {
exchangeAliceContext = InitTestingContextFullExchange(t)
exchangeBobContext = InitTestingContextFullExchange(t)
exchangeAliceId = id.NewIdFromBytes([]byte("1234"), t)
exchangeBobId = id.NewIdFromBytes([]byte("test"), t)
exchangeAliceContext.Session.E2e().AddPartner(exchangeBobId, exchangeBobContext.Session.E2e().GetDHPublicKey(),
e2e.GetDefaultSessionParams(), e2e.GetDefaultSessionParams())
exchangeBobContext.Session.E2e().AddPartner(exchangeAliceId, exchangeAliceContext.Session.E2e().GetDHPublicKey(),
e2e.GetDefaultSessionParams(), e2e.GetDefaultSessionParams())
Start(exchangeAliceContext.Switchboard, exchangeAliceContext.Session,
exchangeAliceContext.Manager, nil)
Start(exchangeBobContext.Switchboard, exchangeBobContext.Session,
exchangeBobContext.Manager, nil)
sessionID := GeneratePartnerID(exchangeAliceContext, exchangeBobContext, genericGroup)
pubKey := exchangeBobContext.Session.E2e().GetDHPrivateKey().Bytes()
rekeyTrigger, _ := proto.Marshal(&RekeyTrigger{
SessionID: sessionID.Marshal(),
PublicKey: pubKey,
})
payload := make([]byte, 0)
payload = append(payload, rekeyTrigger...)
triggerMsg := message.Receive{
Payload: payload,
MessageType: message.KeyExchangeTrigger,
Sender: exchangeBobId,
Timestamp: time.Now(),
Encryption: message.E2E,
}
exchangeAliceContext.Switchboard.Speak(triggerMsg)
time.Sleep(1*time.Second)
}
......@@ -68,8 +68,9 @@ func handleTrigger(sess *storage.Session, net context.NetworkManager, request me
//get the old session which triggered the exchange
oldSession := partner.GetSendSession(oldSessionID)
if oldSession == nil {
jww.ERROR.Printf("no session %s for partner %s: %s",
err := errors.Errorf("no session %s for partner %s: %s",
oldSession, request.Sender, err)
jww.ERROR.Printf(err.Error())
return err
}
......@@ -129,10 +130,8 @@ func handleTrigger(sess *storage.Session, net context.NetworkManager, request me
roundEvents.AddRoundEventChan(r, sendResults, 1*time.Minute,
states.COMPLETED, states.FAILED)
}
//Wait until the result tracking responds
success, numTimeOut, numRoundFail := utility.TrackResults(sendResults, len(rounds))
// If a single partition of the Key Negotiation request does not
// transmit, the partner will not be able to read the confirmation. If
// such a failure occurs
......@@ -164,6 +163,7 @@ func unmarshalSource(grp *cyclic.Group, payload []byte) (e2e.SessionID,
}
oldSessionID := e2e.SessionID{}
if err := oldSessionID.Unmarshal(msg.SessionID); err != nil {
return e2e.SessionID{}, nil, errors.Errorf("Failed to unmarshal"+
" sessionID: %s", err)
......
package keyExchange
import (
"gitlab.com/elixxir/client/context/message"
"gitlab.com/elixxir/client/storage/e2e"
"gitlab.com/xx_network/primitives/id"
"google.golang.org/protobuf/proto"
"testing"
"time"
)
// Smoke test for handleTrigger
func TestHandleTrigger(t *testing.T) {
aliceContext := InitTestingContextGeneric(t)
bobContext := InitTestingContextGeneric(t)
bobID := id.NewIdFromBytes([]byte("test"), t)
aliceContext.Session.E2e().AddPartner(bobID, bobContext.Session.E2e().GetDHPublicKey(),
e2e.GetDefaultSessionParams(), e2e.GetDefaultSessionParams())
sessionID := GeneratePartnerID(aliceContext, bobContext, genericGroup)
pubKey := bobContext.Session.E2e().GetDHPrivateKey().Bytes()
rekey, _ := proto.Marshal(&RekeyTrigger{
SessionID: sessionID.Marshal(),
PublicKey: pubKey,
})
payload := make([]byte, 0)
payload = append(payload, rekey...)
receiveMsg := message.Receive{
Payload: payload,
MessageType: message.NoType,
Sender: bobID,
Timestamp: time.Now(),
Encryption: message.E2E,
}
err := handleTrigger(aliceContext.Session, aliceContext.Manager, receiveMsg, nil)
if err != nil {
t.Errorf("Handle trigger error: %v", err)
}
}
package keyExchange
import (
"github.com/golang/protobuf/proto"
"gitlab.com/elixxir/client/context"
"gitlab.com/elixxir/client/context/message"
"gitlab.com/elixxir/client/context/params"
"gitlab.com/elixxir/client/context/stoppable"
"gitlab.com/elixxir/client/globals"
"gitlab.com/elixxir/client/storage"
"gitlab.com/elixxir/client/storage/e2e"
"gitlab.com/elixxir/client/switchboard"
"gitlab.com/elixxir/comms/network"
"gitlab.com/elixxir/crypto/csprng"
"gitlab.com/elixxir/crypto/cyclic"
dh "gitlab.com/elixxir/crypto/diffieHellman"
"gitlab.com/elixxir/crypto/fastRNG"
"gitlab.com/elixxir/crypto/hash"
"gitlab.com/elixxir/crypto/large"
"gitlab.com/elixxir/primitives/format"
"gitlab.com/xx_network/comms/connect"
"gitlab.com/xx_network/primitives/id"
"gitlab.com/xx_network/primitives/ndf"
"testing"
"time"
)
// Generate partner ID for two people, used for smoke tests
func GeneratePartnerID(aliceContext, bobContext *context.Context,
group *cyclic.Group) e2e.SessionID {
alicePrivKey := aliceContext.Session.E2e().GetDHPrivateKey()
bobPubKey := bobContext.Session.E2e().GetDHPublicKey()
baseKey := dh.GenerateSessionKey(alicePrivKey, bobPubKey, group)
h, _ := hash.NewCMixHash()
h.Write(baseKey.Bytes())
sid := e2e.SessionID{}
copy(sid[:], h.Sum(nil))
return sid
}
// Contains a test implementation of the networkManager interface. Used to bypass actual sending
// between test clients in testing key exchange
type testNetworkManagerGeneric struct {
ctx *context.Context
instance *network.Instance
}
func (t *testNetworkManagerGeneric) SendE2E(m message.Send, p params.E2E) ([]id.Round, error) {
rounds := []id.Round{id.Round(0),id.Round(1),id.Round(2)}
return rounds, nil
}
func (t *testNetworkManagerGeneric) SendUnsafe(m message.Send, p params.Unsafe) ([]id.Round, error) {
return nil, nil
}
func (t *testNetworkManagerGeneric) SendCMIX(message format.Message, p params.CMIX) (id.Round, error) {
return id.Round(0), nil
}
func (t *testNetworkManagerGeneric) GetInstance() *network.Instance {
return t.instance
}
func (t *testNetworkManagerGeneric) GetHealthTracker() context.HealthTracker {
return nil
}
func (t *testNetworkManagerGeneric) SetContext(ctx *context.Context) {
t.ctx = ctx
}
func (t *testNetworkManagerGeneric) RegisterWithPermissioning(string) ([]byte, error) {
return nil, nil
}
func (t *testNetworkManagerGeneric) GetRemoteVersion() (string, error) {
return "test", nil
}
func (t *testNetworkManagerGeneric) GetStoppable() stoppable.Stoppable {
return &stoppable.Multi{}
}
func InitTestingContextGeneric(i interface{}) *context.Context {
switch i.(type) {
case *testing.T:
break
case *testing.M:
break
case *testing.B:
break
default:
globals.Log.FATAL.Panicf("InitTestingSession is restricted to testing only. Got %T", i)
}
rng := fastRNG.NewStreamGenerator(7, 3, csprng.NewSystemRNG)
thisSession := storage.InitTestingSession(i)
commsManager := connect.NewManagerTesting(i)
instanceComms := &connect.ProtoComms{
Manager: commsManager,
}
_, err := instanceComms.AddHost(&id.Permissioning, "0.0.0.0:420", []byte(pub), connect.GetDefaultHostParams())
if err != nil {
return nil
}
thisInstance, err := network.NewInstanceTesting(instanceComms, def, def, nil, nil, i)
if err != nil {
return nil
}
thisManager := &testNetworkManagerGeneric{instance: thisInstance}
thisContext := &context.Context{
Session: thisSession,
Switchboard: nil,
Manager: thisManager,
Rng: rng,
}
thisManager.SetContext(thisContext)
return thisContext
}
// Contains a test implementation of the networkManager interface. Used to bypass actual sending
// between test clients in testing key exchange
// Separated from Generic to allow for a full stack test that doesn't impact the generic one used in smoke tests
type testNetworkManagerFullExchange struct {
ctx *context.Context
instance *network.Instance
}
// Intended for alice to send to bob
func (t *testNetworkManagerFullExchange) SendE2E(m message.Send, p params.E2E) ([]id.Round, error) {
rounds := []id.Round{id.Round(0),id.Round(1),id.Round(2)}
sessionID := GeneratePartnerID(exchangeAliceContext, exchangeBobContext, genericGroup)
rekeyConfirm, _ := proto.Marshal(&RekeyConfirm{
SessionID: sessionID.Marshal(),
})
payload := make([]byte, 0)
payload = append(payload, rekeyConfirm...)
confirmMessage := message.Receive{
Payload: payload,
MessageType: message.KeyExchangeConfirm,
Sender: exchangeAliceId,
Timestamp: time.Now(),
Encryption: message.E2E,
}
exchangeBobContext.Switchboard.Speak(confirmMessage)
return rounds, nil
}
func (t *testNetworkManagerFullExchange) SendUnsafe(m message.Send, p params.Unsafe) ([]id.Round, error) {
return nil, nil
}
func (t *testNetworkManagerFullExchange) SendCMIX(message format.Message, p params.CMIX) (id.Round, error) {
return id.Round(0), nil
}
func (t *testNetworkManagerFullExchange) GetInstance() *network.Instance {
return t.instance
}
func (t *testNetworkManagerFullExchange) GetHealthTracker() context.HealthTracker {
return nil
}
func (t *testNetworkManagerFullExchange) SetContext(ctx *context.Context) {
t.ctx = ctx
}
func (t *testNetworkManagerFullExchange) RegisterWithPermissioning(string) ([]byte, error) {
return nil, nil
}
func (t *testNetworkManagerFullExchange) GetRemoteVersion() (string, error) {
return "test", nil
}
func (t *testNetworkManagerFullExchange) GetStoppable() stoppable.Stoppable {
return &stoppable.Multi{}
}
func InitTestingContextFullExchange(i interface{}) *context.Context {
switch i.(type) {
case *testing.T:
break
case *testing.M:
break
case *testing.B:
break
default:
globals.Log.FATAL.Panicf("InitTestingSession is restricted to testing only. Got %T", i)
}
rng := fastRNG.NewStreamGenerator(7, 3, csprng.NewSystemRNG)
thisSession := storage.InitTestingSession(i)
commsManager := connect.NewManagerTesting(i)
instanceComms := &connect.ProtoComms{
Manager: commsManager,
}
_, err := instanceComms.AddHost(&id.Permissioning, "0.0.0.0:420", []byte(pub), connect.GetDefaultHostParams())
if err != nil {
return nil
}
thisInstance, err := network.NewInstanceTesting(instanceComms, def, def, nil, nil, i)
if err != nil {
return nil
}
thisManager := &testNetworkManagerFullExchange{instance: thisInstance}
thisContext := &context.Context{
Session: thisSession,
Manager: thisManager,
Switchboard:switchboard.New(),
Rng: rng,
}
thisManager.SetContext(thisContext)
return thisContext
}
type listener struct {
}
func (lst *listener) Hear(item message.Receive) {
}
func (lst *listener) Name() string {
return "test"
}
var pub = "-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n"
var def = getNDF()
var genericGroup = cyclic.NewGroup(
large.NewIntFromString("9DB6FB5951B66BB6FE1E140F1D2CE5502374161FD6538DF1648218642F0B5C48"+
"C8F7A41AADFA187324B87674FA1822B00F1ECF8136943D7C55757264E5A1A44F"+
"FE012E9936E00C1D3E9310B01C7D179805D3058B2A9F4BB6F9716BFE6117C6B5"+
"B3CC4D9BE341104AD4A80AD6C94E005F4B993E14F091EB51743BF33050C38DE2"+
"35567E1B34C3D6A5C0CEAA1A0F368213C3D19843D0B4B09DCB9FC72D39C8DE41"+
"F1BF14D4BB4563CA28371621CAD3324B6A2D392145BEBFAC748805236F5CA2FE"+
"92B871CD8F9C36D3292B5509CA8CAA77A2ADFC7BFD77DDA6F71125A7456FEA15"+
"3E433256A2261C6A06ED3693797E7995FAD5AABBCFBE3EDA2741E375404AE25B", 16),
large.NewIntFromString("5C7FF6B06F8F143FE8288433493E4769C4D988ACE5BE25A0E24809670716C613"+
"D7B0CEE6932F8FAA7C44D2CB24523DA53FBE4F6EC3595892D1AA58C4328A06C4"+
"6A15662E7EAA703A1DECF8BBB2D05DBE2EB956C142A338661D10461C0D135472"+
"085057F3494309FFA73C611F78B32ADBB5740C361C9F35BE90997DB2014E2EF5"+
"AA61782F52ABEB8BD6432C4DD097BC5423B285DAFB60DC364E8161F4A2A35ACA"+
"3A10B1C4D203CC76A470A33AFDCBDD92959859ABD8B56E1725252D78EAC66E71"+
"BA9AE3F1DD2487199874393CD4D832186800654760E1E34C09E4D155179F9EC0"+
"DC4473F996BDCE6EED1CABED8B6F116F7AD9CF505DF0F998E34AB27514B0FFE7", 16))
func getNDF() *ndf.NetworkDefinition {
return &ndf.NetworkDefinition{
E2E: ndf.Group{
Prime: "E2EE983D031DC1DB6F1A7A67DF0E9A8E5561DB8E8D49413394C049B" +
"7A8ACCEDC298708F121951D9CF920EC5D146727AA4AE535B0922C688B55B3DD2AE" +
"DF6C01C94764DAB937935AA83BE36E67760713AB44A6337C20E7861575E745D31F" +
"8B9E9AD8412118C62A3E2E29DF46B0864D0C951C394A5CBBDC6ADC718DD2A3E041" +
"023DBB5AB23EBB4742DE9C1687B5B34FA48C3521632C4A530E8FFB1BC51DADDF45" +
"3B0B2717C2BC6669ED76B4BDD5C9FF558E88F26E5785302BEDBCA23EAC5ACE9209" +
"6EE8A60642FB61E8F3D24990B8CB12EE448EEF78E184C7242DD161C7738F32BF29" +
"A841698978825B4111B4BC3E1E198455095958333D776D8B2BEEED3A1A1A221A6E" +
"37E664A64B83981C46FFDDC1A45E3D5211AAF8BFBC072768C4F50D7D7803D2D4F2" +
"78DE8014A47323631D7E064DE81C0C6BFA43EF0E6998860F1390B5D3FEACAF1696" +
"015CB79C3F9C2D93D961120CD0E5F12CBB687EAB045241F96789C38E89D796138E" +
"6319BE62E35D87B1048CA28BE389B575E994DCA755471584A09EC723742DC35873" +
"847AEF49F66E43873",
Generator: "2",
},
CMIX: ndf.Group{
Prime: "9DB6FB5951B66BB6FE1E140F1D2CE5502374161FD6538DF1648218642F0B5C48" +
"C8F7A41AADFA187324B87674FA1822B00F1ECF8136943D7C55757264E5A1A44F" +
"FE012E9936E00C1D3E9310B01C7D179805D3058B2A9F4BB6F9716BFE6117C6B5" +
"B3CC4D9BE341104AD4A80AD6C94E005F4B993E14F091EB51743BF33050C38DE2" +
"35567E1B34C3D6A5C0CEAA1A0F368213C3D19843D0B4B09DCB9FC72D39C8DE41" +
"F1BF14D4BB4563CA28371621CAD3324B6A2D392145BEBFAC748805236F5CA2FE" +
"92B871CD8F9C36D3292B5509CA8CAA77A2ADFC7BFD77DDA6F71125A7456FEA15" +
"3E433256A2261C6A06ED3693797E7995FAD5AABBCFBE3EDA2741E375404AE25B",
Generator: "5C7FF6B06F8F143FE8288433493E4769C4D988ACE5BE25A0E24809670716C613" +
"D7B0CEE6932F8FAA7C44D2CB24523DA53FBE4F6EC3595892D1AA58C4328A06C4" +
"6A15662E7EAA703A1DECF8BBB2D05DBE2EB956C142A338661D10461C0D135472" +
"085057F3494309FFA73C611F78B32ADBB5740C361C9F35BE90997DB2014E2EF5" +
"AA61782F52ABEB8BD6432C4DD097BC5423B285DAFB60DC364E8161F4A2A35ACA" +
"3A10B1C4D203CC76A470A33AFDCBDD92959859ABD8B56E1725252D78EAC66E71" +
"BA9AE3F1DD2487199874393CD4D832186800654760E1E34C09E4D155179F9EC0" +
"DC4473F996BDCE6EED1CABED8B6F116F7AD9CF505DF0F998E34AB27514B0FFE7",
},
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment