From a379a56cd1780002516c2604875cbe79793419a1 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 2 Aug 2022 17:30:59 +0200 Subject: [PATCH] Add nodes generation --- cmd/nodesgen/gen.go | 95 +++++++++++++++ config/nodes.go | 13 +++ etc/account.yaml | 2 - etc/config.yml | 3 +- etc/nodes.yml | 22 ++++ etc/x509/cert.pem | 30 ----- etc/x509/key.pem | 52 --------- pkg/acl/acltree/acltree_test.go | 14 --- service/account/service.go | 33 +++--- service/node/service.go | 130 +++++++++++++++++++++ util/keys/asymmetric/encryptionkey/rsa.go | 8 ++ util/keys/asymmetric/signingkey/ed25519.go | 9 ++ util/keys/decoder.go | 16 +-- 13 files changed, 306 insertions(+), 121 deletions(-) create mode 100644 cmd/nodesgen/gen.go create mode 100644 config/nodes.go delete mode 100644 etc/account.yaml create mode 100644 etc/nodes.yml delete mode 100644 etc/x509/cert.pem delete mode 100644 etc/x509/key.pem create mode 100644 service/node/service.go diff --git a/cmd/nodesgen/gen.go b/cmd/nodesgen/gen.go new file mode 100644 index 00000000..fbb571fa --- /dev/null +++ b/cmd/nodesgen/gen.go @@ -0,0 +1,95 @@ +package main + +import ( + "flag" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey" + "gopkg.in/yaml.v3" + "math/rand" + "os" + "time" +) + +var ( + flagAccountConfigFile = flag.String("a", "etc/nodes.yml", "path to account file") + flagBaseAddress = flag.String("ba", "127.0.0.1:4430", "base ip for each node (you should change it later)") + flagNodeCount = flag.Int("nc", 5, "the count of nodes for which we create the keys") +) + +func main() { + rand.Seed(time.Now().UnixNano()) + flag.Parse() + + if *flagNodeCount <= 0 { + panic("node count should not be zero or less") + } + + encryptionDecoder := encryptionkey.NewRSAPrivKeyDecoder() + signingDecoder := signingkey.NewEDPrivKeyDecoder() + + var nodes []*config.Node + for i := 0; i < *flagNodeCount; i++ { + node, err := genRandomNodeKeys(*flagBaseAddress, encryptionDecoder, signingDecoder) + if err != nil { + panic(fmt.Sprintf("could not generate keys for node: %v", err)) + } + nodes = append(nodes, node) + } + nodeInfo := config.NodeInfo{ + CurrentAlias: nodes[0].Alias, + Nodes: nodes, + } + bytes, err := yaml.Marshal(nodeInfo) + if err != nil { + panic(fmt.Sprintf("could not marshal the keys: %v", err)) + } + + err = os.WriteFile(*flagAccountConfigFile, bytes, 0644) + if err != nil { + panic(fmt.Sprintf("could not write the generated nodes to file: %v", err)) + } +} + +func genRandomNodeKeys(address string, encKeyDecoder keys.Decoder, signKeyDecoder keys.Decoder) (*config.Node, error) { + encKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048) + if err != nil { + return nil, err + } + + signKey, _, err := signingkey.GenerateRandomEd25519KeyPair() + if err != nil { + return nil, err + } + + encEncKey, err := encKeyDecoder.EncodeToString(encKey) + if err != nil { + return nil, err + } + + encSignKey, err := signKeyDecoder.EncodeToString(signKey) + if err != nil { + return nil, err + } + + return &config.Node{ + Alias: randString(5), + Address: address, + SigningKey: encSignKey, + EncryptionKey: encEncKey, + }, nil +} + +func randString(n int) string { + const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + + b := make([]byte, n) + for i := 0; i < n; i++ { + idx := rand.Intn(len(letterBytes)) + b[i] = letterBytes[idx] + } + + return string(b) +} diff --git a/config/nodes.go b/config/nodes.go new file mode 100644 index 00000000..510c97c5 --- /dev/null +++ b/config/nodes.go @@ -0,0 +1,13 @@ +package config + +type Node struct { + Alias string `yaml:"alias"` + Address string `yaml:"address"` + SigningKey string `yaml:"signingKey"` + EncryptionKey string `yaml:"encryptionKey"` +} + +type NodeInfo struct { + CurrentAlias string `yaml:"currentAlias"` + Nodes []*Node `yaml:"nodes"` +} diff --git a/etc/account.yaml b/etc/account.yaml deleted file mode 100644 index 5a9a0330..00000000 --- a/etc/account.yaml +++ /dev/null @@ -1,2 +0,0 @@ -signingKey: 3iT1Ue7xNejwKhZ4L8SJCKZw7RLaMy5Vh9fkWFD43ZDTg5kRV3zGPuKCzWL8d2k57EMrFCk39ddknzRVhVFC6fgi77iA -encryptionKey: 51HYzTYh5uokpYWp8EyPeTJRm6AYe2ZoZBPCLUzMR3kMijkKvEJ4bjGBdU3MxgHo4e3Dg1AFnapEZPMMHp4d3hyMB6469ZWHeGPUWh94jhB7WiRL9BtydyazQHqZQhfihK2qaTw9wgx4pq7XnydCrYS1SiQLVCGCitCLH79cHSXZNn3hrNYCz9Z3GQHX12hSKA55uzKyumZiwiiddDQ3Ufzs49hPhNuRU1QtyDYETGNCFafA2MyDv86KbdeXSgQFcghDz97A1KL2FsvfjpMBawok5NKKPmd2P1PR6cZXb1UTHRaMbAGpDuEjQNu74TsFbQQoBEahWYBgSy8Mg92JuaTjeGhLFDh5QsVF89Xj7qYK7T6CRTKuuJEgCyDYL9zbsqnZg7tXESGfazhcCYdUXXZVq3N11NDkEWz7SrNCdLscPKgqcFidBFRdVUqM2v8kGbeXQQCGTGSDsUi9yweB8xrpBdLRhJzJmKrN9xsUT8UeVjdBA4hKc8DKdV9oSxpkcJMMiCuL7EPYBA9uRMXzzeJw3HnZvFemv5QLqcPKc55q5oZp364xDwV86PMokVVGGCu67kuurertyFGKDWsfyRje7g9dy4o1t9D3pTuVmNH5Jjhb432kq38AEx8ndpAzvYPLpni44mBWutreYMg6ASDMYa19NkSRLrvjMHfF8uoP7VLitpyeWsx7mfjsQS5qms3xpTJRDJYjHN1ZPEYdxBCXPjofYyFExHH4kc27gejLMwhKMnTkGuEdnvaBSvJLwq6BUM3NsMMnqZcXFDMwarSbi67F8KyFspmYJ2jsJfEiAHzkSk65ZnppccxQjCAJgniMDQh9NwcuSG3n1Mt4VvW1B7sNrcWdFhTVnZFjBodarLJJfNYXeJDweZgwAs9Y1Ce1BbJQok1u31aJmY9ATnhKS2Bb3eDDf2kvG8q6DDcUiM5HHNqdMZbrt9jevNfR59B19C5j92DNAsCvcTmnWrSfPyphAWjJD5yTZRNdMYL1XaywncrhouSXUS7Crfpsm1yPnRQDYu6LB26vgnc35cLSNYqyX2oXfh3o4WyC2SPPCJ7LP5T8ff34hsKo78GZtc7mGreHuxieYCnJ3kYEW5WpVJ4TqQLTrnqzF2WL244V5pmUHQVF4q4ztzrG5edZS4Ah6Kq389UkU4Qo7srjMQ5KJnDpUAvJmdqdWJWftbqB5qMhRekHS3MXbgDrDL6JrpR2PcLLPPKhQHatPdhKnwgg7NABzTAxNqgb99LjsPFDhPDiK4BpWX7RbvjWm4WSZmozcRvJz75w2t3y4zvhBfNTgu8iZjE1bTL8wLpBrFMZesK5waspBP9N7uYaBKwRfb8VoUNoLWJtERwH592vqHKyg9B1mBHeH3YCQLu9NcS4qUsa5tSKmn24q9i9yBkoeVP1bFiDy3JxHUyQcaCwVgE2kWZApDw6w2T8FUp5ftWDCLb2ewGjj52cRNXb4pjgRuyLZdSa7wgn6SsQdhuAiTaKECmaEpZMoKFL9JRD9iTcAq1HNJBzP8hnaeF88UNdz8TBLr7d5Bnujpcr9mqQSj28JrRzxLNJQfWo6sWLao8LpaRzdP8QNUcv3SDMiLT9Vdb31iFvSesUzi6YG5XY95ceA7xJRzW \ No newline at end of file diff --git a/etc/config.yml b/etc/config.yml index 245199a3..bcf84db6 100644 --- a/etc/config.yml +++ b/etc/config.yml @@ -6,5 +6,4 @@ grpcServer: - "127.0.0.1:4430" - "127.0.0.1:4431" tls: false - tlsKeyFile: "etc/x509/key.pem" - tlsCertFile: "etc/x509/cert.pem" + diff --git a/etc/nodes.yml b/etc/nodes.yml new file mode 100644 index 00000000..7c3008b6 --- /dev/null +++ b/etc/nodes.yml @@ -0,0 +1,22 @@ +currentAlias: ULSsy +nodes: + - alias: ULSsy + address: 127.0.0.1:4430 + signingKey: 3hvsvs4FSnU1p6MFJFVaHFfTfTrD7efGbacacAcYbnWMcXcAQd7k6V7PgLbHddabQH18a1TnNKHQ3Z7yRinXohAzY8HT + encryptionKey: udNkNsbKtm7eu1Bqt5d1jyhFAxd26wjema4tDqRiZ72xdCcBZvK6WBdpXWzb5w75FHEz8DDo7qoFLB9xAQA6GuNzoDTsWJjPX9vQHz2m9rCK5FcotjZF5WWCrgeg1FhyVcnF2zTSnw8kQFejMv4iCLnhjTC8op3U1eUpZ4GVxWQ1oLTg6dBS5MQsry7TU4gX77rJQF5gY2CnG9wK3Lv127vJZ6sphQXKQ3T5E7EfDoacGphH9ondtUgd7JRUices5PS7QMPXGVxqHjn2XR4SfRu6tN3USWVBMH5TbPfJbHvhGCHogbzj3ZXt3VidJKyHk2qnXASh9akFRAvgHpf7uhK4Eet3keXV93t9yeLZfttb5HdQ6PtapdMiYYAxPscd761daY5EdhmmBJWBRGSH2TephjcZDjYY1ZwFpNteXmyiWdvodA64cvHHbtFDQtbCu8oZ1GKvM6vq53rKkVvaJT58qrCoThFGVT3xXTFDSTAiKrLxXdiJikdk87mygvPyShdhASNH95be7co9HMrpit6V1Uyk92VcSWqb84bKDhYAsn5PEJSqNtrxRZjG2Zwzd8gFMwgGvcD8iZfhXUA1PWttZ2hwp2kaEanKsSh8sEA7qkJPpvi1f23fYPhhsxjK3DRauZStbaXHoFzWXQUwtDJnitMCwu9k3A7cJmxy9R5YjTnpivgsrivMcy5cHtDXVAKv4UT2DwSgN3d6phT4jzso2sXrmbNjCnrbJjP1A7UztBuwfefHgw4kKnimB4ZyGBWbtSLY42Lt2hSWcoQPcUXkVMTabEaMY8VKApSiRFVcZX9LyiN3vYMoLgFEFs6pnc6TGVRuMP5DfdyogyEyYHSK9iumSy8iVhftjvBc1xtvv4C8q3G3yipRawKiz9FymufgXBZgnHopo1aWaMsHsr5SwQWtaGapy1rNPX51rE9fLY3a4PhBT31a6XwFxJu7pdgWjXYxeN4rioRrfQUGy4D4PW81UTkqpkVZr3bUMWxUorW6tGpSm2irTwk2KM2a62pxErbTFMZUXdcT5zeZeYTFFpVMocaixGgBS4nYvviYXqeXvQ28uNLeWAiE1PTyur32ShHf8uvtoPfVXKhCfNmTkCBh9Met9b6NYoQwk9VTUAP9E3t9DPAAtyPigkLNdERtPEje4NAoV3wsa1WNXSKNU15dpYh3B6Qcvp95YfX253eucQmVjb71Synb4RkSBdnghZzsBYvhQewAkT3432i7hwnjyTWooDgbXMiHd3UaTTFsHS7EYSJxgCe94UEHUF2SL3Wqno1ReZ95678KLLdFwEPbbXWfvAnGU1KvEiMh9y6b7WMtTwx1kdwCghpwgDhE9ktMZNc6ypyWWLYA6473ge5WKrbnR3ugCoLaEpRAWmZBhc52zP9f7SZS1PgwF4fPtuxLtEJTTBkTkdPPwhQVTwfT8viggbdPVQG4iEhdRoEUBE46HC3MK4tchz8ev8CKJMQp4GH8zweGP3JKTNbNG6b7v6kTxHnvG5LbMJMGrq1tDfADDD8NwgL2Luhoe4y9JfAysK5UHkSWaQw9L7TsxUPgj3otgrwSjGFLvfc2D6zNddfGELcoWzNLzXoFZqAyQUvFdAqUcMYanepAQJke717Wv + - alias: NpBrA + address: 127.0.0.1:4430 + signingKey: 3ixAJXFCYUu366ywFxsvNzAFQkVPyDKRiis1nCviHXUu5i3PkDP9FJFPGs5WZUMe83mEYVaipiW2ntiQXaxHYyYys6wp + encryptionKey: JgG4CcCbae1qEpe7mL9SrVoZim2d7ydWKL1KV6dMtgKcnb62MVgezmTyTPrcx29ZF4wecMxKmQNcdYhAN1t7vDQTBgUrGdCbkCUYu3sLaQYuitCEM6nykS1WWTsKSkFS1HiAVoWeSpQTzVwDNM2VDkVyS5Vbmg9gnE8qt8EnebiD3Cg64YwWi3HgEyVRauygAktmanFJNRtkBsriTPFZn9RDh4mMxSa1Q4iTx4Gxuq6avw6WACWV3x7RpbwrkWh54d8abXUdWxFZGCfe87o9v4UrxcujhWzE4F4tbGyrPBNy7abamb3sVqzRZPAikLeAKeb3s8K5JpUKXTVEiKCNpijaBFBKSLf7znowdJ9NGTMsJCSwTpsznANsBMhaz5uGaL4ur8CK6u4VXQbH1yUpKrnnVVjzoXVqh4vAeUaA7sanWKdPwGcaS6oDwwWp9Mi7qrqYocWQ6EtaeAQhbQ4qRPygujnBdThGnXFLrriYH6Yzb3BJsEG9S5gXEDHytFKAYudmYd77xYcu1rN5k6V35c8EaNp8AWZbkCpkefsSPCc1dTG4Fgg9GnBwdJvrXLV6CrE6SQtjUgPcpiLGK65sEutgApbkfkyasPdpyBBp8xND4woihHpANkTx5Lxn68rDj2bk5NTLgZLJgixJRoNPLXtCWSnQU97xvtjU8UnT195KwkCTm8X62syiRE6jkR3seVWUrwLZ8qojdZkm3bS1yUyYAPaCapUwppTT4SSgTrhCjGjGkYJarJPsxinedwTEvCPzujRcNofq4nF1RedgfSimvkjHPaztQv8h8YmxX1iRZ99AoLzuSw3uohoPvDsQMt97uQFCEZt5gLmzZSXpQpNDmAX6xpwbmuHuLgP2fJ5XrygnZo1jFGPPcfTurx4aghyrBGhbVB1XBcLvrzr6XA5WtU9HwriFYx27TVfiKJFG4ZdsbSUgLSQcYKJz1cZTm2QntLaCMpiG4jEkQtaEPANgp9oARvrh6kizpkGMpuMfVbcfE4cNiYDKwkj4cHa1NRmZHzxUyKiwTzwxh2YKra28NQnFZCnbqm3kBAaf8RiJkjb489uMtDo1nQ3cFhH6X68BqnfAmx2QEWMDHeT1XLPPEAwMhJ3tqrb6nMx9oEjcof8GMxv2GyyMtsAUHFY3KE3NAvfwbgWh35V2kKiyZEmmMWrs5TuMncKCMib85ymwmfa79igHERnhH9dJhKn2HcbhUxSX3SUB1CRihDNnXLT4rExwJfQmZfUhJmAK2BjkfaEGwNwxfcLE3KWMi6BRAiXnYhBiLHeM47poNhc5c9wE5krvis6Mh3HeLxbwjLZxoLWEonQzxstSrRKz6FSzkqXWQKaavELLsiVvo7s7Ga9gMoTvLqmCK9Ksk2u1ZKkgwsp26JAfDkWpvx7UtnomdztpGbMFSiPFvHzEwhKz8qohCyBWDgN7ZjdN4doRyG98MR9wweRyKuneUE6qxXpBhCAGWSUdBYtd3EFtmpGfYscYKQazGNBw3YsfK3UADQQsWMPXqCWGqpi4mpqRsKrZv3niZB1XHHP6kNUGN75awEjh4soKhHwhpBdUx9NXYAx5BDQWR6CeZS3pzUVTnMNAcizm3SJoN6HhmhvBt7LNFEcphPtotM5f + - alias: aVIrA + address: 127.0.0.1:4430 + signingKey: 3hwxb9marr5HkvtWrDkXmE82mBQrNUUxeqMbrBbUjXFJuENrAe6JwqftFjLFmHvTN3r9SELsxujsaehxv1b7VcXXf3ay + encryptionKey: 2M2HT8EVmV3H4KkqzeTUAgw4okcbPbBpUxBMg6kLKpoiJPjg1fHZtZuZjc3HEHn5n7mihCs23uJVDGhtCjQXnpwWZUn2ezBzA1t4ZjURJUDCp7FzL7kKoFETtCuxrdh4j7RcbmA73in2C5YgXeUuEpMn39ApAXTxASMcdSzm9Tk9KMqVXNNMezfu836jDG5cj72wkJgzPFKhviEZTzYjPAeqe9qMnnGLPWqwDCarj2xeqx9n15zA1Ld2KfY5JDQQDj4WBohC5N4kLTzmNjiVnKBbZzLwfW42Nypz7AWxVeKYAZVPmKbTPtJRWGAtMjY3QC36SX8YqnkxV9cHUbCo7cWbEKctsDjJjMFxR5aXsiftqTo5REaVvu8RMQXx2QPshqxFBdJiGpfyrfBnjC6KbdszBTpdSQqiAEhNkoNuvniY8DTdrNWiH1n8CPuuzx3diQVSAaX1CnJzPqXhke2pBQBZWGsiMWFVFDUjZqH9PHe2BWZ3nMaKFxKAggiVhzpRFdC5xW4DbWsfaw9m2atKC5atWaaSs1uPkjtmURGP3DvFdWGdQfiEm5WBfMCR4sd9w5Y23SBFwPvMTJCHbKsAt5iqp9BwvnnX1D4sKxP2FA9Db16aZFczfzvWfsvWGRmZwt9y8dW8axBgCL526YYap9gihFPJbEEgABZpzrLzSTeVuJfsKuwXjwKBqEiGsJaAnKzEK7KwRhsJvz2e31MYx27E2u143njA7aD5AW3civNaDzbqkeTWJYwvXXavsJ94i3FAiG6FF8yARkcPxV76FV87QFwCfN6dz8ZJthmhEDMkLgTYcsVKkhzhGWnAYB2ayJjbmL28ewGDtQtFEAosdoVs6FYjKPUDVvahWiQWmGGnnF3FwY67JCkwnYzPB96kLSQcvjE366s8x8SFwZWy32u1JwwcCwAMBKJTN3RSc1KAa2VazM5knjgtyqyFeF3EJQZLHcLGrusSWpXFqBhMbnbn7Z4GuNNwuzjEDGKK2bJ97o9xtx1pgHjjvRoK6wfJ7zTDtFWXkJqCY6CtC2cwrkw4TuyhaBz1fCnD2Nu9jz2YWu5Ery7wGJkaiVW7wfPHK3ks9VLwXViF2kHDEB1c2AzabRyTWrgGb9JU1kt9PVQM8TPyKHbBvhp6pr4jmU188PMdHKkca8Nx6mTEWhn3QbTzqPxYBzmHSFrvVVKtwyU2J2izvHfbURQ3a9psDYriZVVFeDHRCN64RFku11JREa6ddjTupEoJmBpb9VBkqzmuXFw6diTruRVNQurgm38MVCKKswTLz4BxHGMSrZh5R3YJzFJScRCDkLVy8NgZeydY1h6iE53GCZDaP1Y68XREVqkaNRnrqkaTgL6Vvr9pV1oMSrKfwAUhcCaxS9n9fxSmy8xt1p1k8VYFV91FbkTZU1r2RMQKeWA1tPCDjs9Cd65GgRkvUgJ8zHi1x6GE9CneqmqTuUqXt1xiM6Ha2eZvcGFH99xpqcskCkTkP7GAJsddb3GUuoVgGzSkXBpMSt1ghSQHp8TArzuVYkLrVViygustEXp2YtJREu6c9NWFDnCyXKDUCcGMHtS6GK1entBMr5BWK6szHys3GPLr2mK76TNWX2Xqrm1C3rCkiARhhgTLqqu8zKhJFu + - alias: JDBbe + address: 127.0.0.1:4430 + signingKey: 3i7vzUsjAfsaShNzUY4GQNWP6283s6HudHsWjKf55NoKBtVgcLhkVw7jA1nxt9fswtFsXGNLcpgyAScYUR3mHDZoD2Pk + encryptionKey: 51HYzTYh5uokpYWp8EscYm3wA7Z7J2SQXirK8kjW1kkshSx3EBrkceia4jHcwbqMHSgFxBRBmuTRJAVqKPpLJ12CfEFfdcM3A2iiWJx65iacQmnFtCMvEuFrF4xKxYUyLMWXeoT5BCpLC4Vr6EDZuatvdQHER9T8fCqrBhm4ZSzyJfyzM6Vqj2pXwAMgnLN7hydUjYoxiR23E56zPva8eu1cuFuicMrmPUCwkpZohLE7wbytnkHESQvXNdbJTps3BZ7LP1K66RzwdLFvem3RC6ZxPTrNQfPeMa3KmYkaNtVPcMhbVtj2pTuLJ4EhKNx3WNLVr61UyR91n9EeQxA1G7mts7zeHN2sZbJfonJJkuxN8ppN3MeDfy8tWFRb1DQhgMwmojqhGNFQmJmbM79BHe2zSnySLNU5VtCbDobvsid2g4ZfdVgDqbBYdVaRHzgU8psDX6JiEhxZxEHu2VUy16S4PrWFa92yEpAsXQ1NLD5wg5e1utvVoWHAf4D8PyiNvy3FPwUZg42rmVbj8mWRoerDArQ4ey38SJgSX5LNddYyb6hpQQC8TQzFKTLXGgHsPsyXm8C6xdHnvtEVVNDAejbKHsDsEuom1g4EwgGdEZUYR6WKng8A9K2HP3B8fJA4qvdcnX5BgzGwGYFu5auin3doEKz6zmHmSKyWk7YMCAmeQ4UheTpBFzzW4ynRrKYQHbfRNh69skQmfJR8ANtVXcUX5VvrK8vampSxDZHMcbJKSTyh8D648HiFvoNZk77Q7K4XMiYY2ENjVfXABW29j7sLV6M3qwxqXxqerBmLRFeVZKvhrtqqG13xbQRMYqdxhSvFzcbauPE4RuLukdKiSRDh7nQrvhjp53trWLeHgECsrk4spBrsQXfn5MFJxzrt7xpcRkj4cwgiwobXfVj2z8YEakWC8965ZSr78GJgx4xDBtxJfYcxmXykysRhZd3rqfev47y9q9R5qPgZFy4PxGKsXkwFT6nwDmyghXLfVQYXsJXun2f4xwzJ7D23t825JiwwnUNrzCcEtG3fMRF3tm9yCXBB6iPRtgqwK1Uwpyu81Y9c2ztDw8zuScbMD1SAgeGcuZkA52VT7duqBLu2GAK2dddx8b4aDVZ44fGXSsmZ3bNQNPY4YtQb923hrSoPhNmwVjSLdiXWHWbszvBzMpxRKSnnNjG79St8h3Ydw9GAAuQjRkurpxWUKnhVUBUUBJ2ZvPaVADMqWzRyhKATHTSmGKtdHjX5uN8djjp6xt8FmUteQyKX9LxokMUneExp1nvQvgQxGUGdFqRqmBh2PjWvCXwsWZMaK1cFtriyqJVGr3NdsS1xCNhdxHkot2RxMeMAfzPRRsbHyR8LtJk9zcsCjWDJfpM5YBbgtrLzkuxMNPPCtMJdndyQbiW9ewY4n1WiXgH5mVkZcggrG6e78zu7jre9haC6MRKpNacsvvAUxvJLFqUFfWra48RU4MBp13Ad3JEaQkQgkKYj6qmoDK9mcaYxK3Pi8EeofAUta4kU2WBMnhsAzRCKnG2mdutsjkvTdFkEs9Nms7kvNDFdcdG6ZVQgDHdogpsSEfaXNYnoHdwNmiVGQvYEnBfgVgg4KihoBZMY5D5ZFv8amuj4mVeA9fyym1L + - alias: PqyLS + address: 127.0.0.1:4430 + signingKey: 3hwkRSkxTpC96DnUM9wWKRuxwLZS7CrKzXCGuWTdnhVHT644XMEEYoSiapATVMcE6Dhbmsqmpzop6ox1bqUXiyuCLbha + encryptionKey: JgG4CcCbae1qEpe7mKhXWxXceQPz4hkU4XurwrRAoczMzDmkfpgnVtemFhuHyQqsBbEdeLrEBjxMyqu8TgtiZMD6cX4X7nPcmYRiyjq2dgeZtr7iw2syG7Zpxs5yL51jJCqbmRkJ4HCnGASFR7NWYwUGaEVKCRbgqGHwwNSBr7nKhrmm6ZHs5m6YSyXQbpqA8SxPce5GGGs6JesBzoBEh7f8S95SchThpqAKCFRFisTUFJBjbpuJTZ3T7GbR6tgVMcQTodZf2TAweStvkMzCtHpbLiDqkHxjEAB68p2KLwWN5PR9GuZQtupuKPDMVtmh3e7yvdrSF49ACL6nRSpRiB6ARMgTxb4X5sPR3CFiTVNqo7KK81KB1PyaytNkSHJ2WgURJrAafqt85BiCLney6Pk9xfGiSXve2FMY8mmzzLjccZa4PJER9WXGoFjd7QyfEkQcBEQpk77cKEeT5xc8mZEwg7sKkBGRZypMKkTd3vM3RVXRqavuq9GgW8oL1kPAZ7cknwveyZ4F446thVutK5ieXTwDikY5QpsJuJTKszpeK56EL1GWL9AV4z2xfPmsSVwvPYSi4mC5mSWgesVAatUXpWKCX5mwgw3U1D8WXhosCbnJTvtuAWKsmnyBUQWVxS3pGsb3wWZjHvnt294mUdqTbGAoS9PEGNGxEYqc7zf5i2vRfbCXAEHg9bi8qd4vMxpbxptT7s1MiTgDntFyLeKQLZ1aNkWtpfL2P3tT8VtzReEH72WQd8nMCdtFo3MiGZycqcFsSvpmofmq8DWLU6r7ZYJq5CXekrcyVBDHSbhf62KW2DMV3Z8htkUjZojwk5qVyeLNNBgDHFAFA4puZBMFVnjsn6hmwbUMqSY8kjrEsDqCXa2cLrSWu48Mm9LPLCaxsNAxVTAGAxHPBXww7cecJSWrFcfuK1iLNYg37fzU9ZYgGQ17wVMw35GL5xdq1ZC5tAdte8xYYoW4AfNoajPfnVMEHZMh7EpGLN9K4p4yr5dD9gsxtaBE8ZKJtMx5tyePS3BeajhB4Fsr7fb1CpssneCmJkXqzxqFy7U2wjaaW7FyJfwu4e5sa4KgAoNUyLHumD2F4AjDqBw7hCahut8Ua5Qo12WSjASxUAwoazPQyuech7xh71DGVPZGmzmcMamc8ek7rBWeWrxXPeTCfwXavW4F7aZDXqCHRDDjHkCaHYNyrYRhNY263Vy5VRDdKb8iHDfLToe1uf8z4BAaLQ7nYMWgZoHjum8TGQkGqCM5Jk4HpJY2mbahD4bjMueQcZH9ks82ttsrg7mFmALAUoyVjkub4KYyXhR6GqRDRLFaDUv7toM9gZ3L3p5n1RwJr7hFr2sRwjTGJ7hdSCzgNPk3NUGK3vnojpjQoKXNPgCXYyRJgTr2y7UoZWj15Gm8H1QnrK5Ar76i663RV1zu3MhghweFGnh7WE14j2NqJ4vkfe37AJmntwF19j4JdUpTtDY9b7DZT9ohSSeRkmoSuPsy9Vpai3JyFpfAWom8CmkYkDA2GR9Uwxmg2UuqWSoxxcsdn1dZJdfYWrrXodjK9PGsJ8YPLMTSZz2Ye4vshmW4znLam5B6Yh11vtivD8njej9cm8eCP2SvPcUvMyFb7ZW9p6ByeWSq diff --git a/etc/x509/cert.pem b/etc/x509/cert.pem deleted file mode 100644 index 0ddaa01e..00000000 --- a/etc/x509/cert.pem +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFJTCCAw2gAwIBAgIUNiBcO8wV6YezcDQ+cLpZe/iXbGYwDQYJKoZIhvcNAQEL -BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTIyMDcxMzE5NDgwNFoXDTMyMDcx -MDE5NDgwNFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEAt+6cVBVkEe9I3CRmPuAqZGnLq48DTXaRH7xz6u4ld7tU -cpDaXw+aURRYKGfYIvcfQav/i+mYUxTQDFbfN8SULis/DckTqeBEaGgUbJJZ6w73 -kkB8BuCiIjh3W9hyUHr+WbdF9wU8K1G6GmjimBJ+qlBBewQm0kzqosVwjQVWarN4 -aEhgiyjnLF9XVYQZRVqGxKzP/MssEU7YjSPPfBEsmi6pAqiDYuZ3+sVlKuDrki0d -r1XOcV/dcSJa4NRazxiWME+GJQ/x7gA2GlC5FbQyhrOs1sNWaBsaWQGl4oHB90T7 -b0GxKOTqI7oCMho+Ajt7eB4zN0fqeCw0nwFyzok3f/GKFk0vLnecFt+gCLyMyS6X -Dqf/DAlvoP41UeFI/rheOwc0UcZbU0HZ2zYrzOYR4eHMHSYKma2DHvIyOYZIV0Uw -tkyOFnoEQGSXK3TMOb7oWyrs4gl+5euPEDKqDuP28xBr4GsFbNq7/7Kd9rKwXb3L -iyy3kot2Vf5QqDFGdyOLDFFKF7MgMrUiEX8onW+fSmjooqUq7ZyLAs8W0uim4moQ -52t7CGUuglaTHYMi2rfoAS5qPXT76jiwu7H351Psca6EIY4V+dIiElvbYryhTNsV -4eDdWGJoZUyGACUhPdfO9l7Wp2+Yy/HGfPWm6mKX8VPHO4llYvwgGzm6Is/pFmUC -AwEAAaNvMG0wHQYDVR0OBBYEFKl07s6kNnGmJN/ASYQTml5UkK0AMB8GA1UdIwQY -MBaAFKl07s6kNnGmJN/ASYQTml5UkK0AMA8GA1UdEwEB/wQFMAMBAf8wGgYDVR0R -BBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4ICAQBs5JmRhddd -KuyhkSWd6T/HqAQISgP72ZUAr3gt2j34GLrhDYcvKFZwcoJFCFjG3pVmvJCORVGO -x2TYt2ntsmIyFCZlGE/TpLxbSgsykoUVBnc8ySDnTQTDJr6S7AyWQsznSD6j1/FA -a9E8ZrsyopqIn2eZy9/Asgy1qeJVO4F1kIq+19HUDR2z1rXqVSycOQEJkF84Kgvd -+nDJQ5W3EdamYuDQOhTOeEFfZy1HyM3APhR9JyFHHnZ2D3vsoys/LIWolBJPOq6B -o5JjXgLrA1e12TVXlnTqZ3986vGOyjfut7o2NPO1Se5OeGr6XFwO1nhIJ4gj8OTv -2XuBcslLXI5+6UIsXtFHXAfH7eYErkBCQGiwjYj0V8Kb4M7UZ0seqjK+gMKfvM4Z -hAPlKP2AUNYS7TNyqW3t8SA0c52ASdAezzh/OklCO5vyzxQT4wXTQt5Bub83m9uY -Jnrv6Kg5UPQMrTpo9usJ2zAyj+qkk8KubKOA7grtblmCTvyJFDwyiWZkr0nuvNTV -BsKis/DbJ2hneF+2D/B2pGKxyEP1LCIV/JDTUGX3F8ljTgSihZay/ZZnPUZpbCa0 -czodlAQk4wkGxJWSH6SSkq4dD+JnBQpufBMLa1qShfUn+N1N02yiDPq9XxJytoOR -+vHqqrPS0PcTk1x2Og0xLn6kN+MH0+jRNQ== ------END CERTIFICATE----- diff --git a/etc/x509/key.pem b/etc/x509/key.pem deleted file mode 100644 index 84d64a5e..00000000 --- a/etc/x509/key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -3XcrP5qofkzfgz1calZv6phIGJdHLQ== ------END PRIVATE KEY----- diff --git a/pkg/acl/acltree/acltree_test.go b/pkg/acl/acltree/acltree_test.go index 3a0d8e5b..8d89bac3 100644 --- a/pkg/acl/acltree/acltree_test.go +++ b/pkg/acl/acltree/acltree_test.go @@ -65,20 +65,6 @@ func TestACLTree_UserJoinUpdate_Append(t *testing.T) { Decoder: signingkey.NewEd25519PubKeyDecoder(), } - // Use this for key generation - //encryptionDecoder := keys.NewKeyDecoder(func(bytes []byte) (keys.Key, error) { - // return encryptionkey.NewEncryptionRsaPrivKeyFromBytes(bytes) - //}) - //encodedEncryptionKey, _ := encryptionDecoder.EncodeToString(keychain.EncryptionKeys["A"]) - // - //signingDecoder := keys.NewKeyDecoder(func(bytes []byte) (keys.Key, error) { - // return signingkey.NewSigningEd25519PrivKeyFromBytes(bytes) - //}) - //encodedSigningKey, _ := signingDecoder.EncodeToString(keychain.SigningKeys["A"]) - // - //fmt.Println(encodedEncryptionKey) - //fmt.Println(encodedSigningKey) - listener := &mockListener{} tree, err := BuildACLTree(thr, accountData, listener) if err != nil { diff --git a/service/account/service.go b/service/account/service.go index 67adf192..b5b7b8ee 100644 --- a/service/account/service.go +++ b/service/account/service.go @@ -2,9 +2,10 @@ package account import ( "context" + "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey" "gopkg.in/yaml.v3" @@ -31,32 +32,38 @@ type StaticAccount struct { } func NewFromFile(path string) (app.Component, error) { - acc := &StaticAccount{} + nodeInfo := &config.NodeInfo{} data, err := ioutil.ReadFile(path) if err != nil { return nil, err } - if err = yaml.Unmarshal(data, acc); err != nil { + if err = yaml.Unmarshal(data, nodeInfo); err != nil { return nil, err } - privateEncryptionDecoder := keys.NewKeyDecoder(func(bytes []byte) (keys.Key, error) { - return encryptionkey.NewEncryptionRsaPrivKeyFromBytes(bytes) - }) - privateSigningDecoder := keys.NewKeyDecoder(func(bytes []byte) (keys.Key, error) { - return signingkey.NewSigningEd25519PrivKeyFromBytes(bytes) - }) - // TODO: Convert this to new decoder - publicSigningDecoder := signingkey.NewEd25519PubKeyDecoder() + privateEncryptionDecoder := encryptionkey.NewRSAPrivKeyDecoder() + privateSigningDecoder := signingkey.NewEDPrivKeyDecoder() + publicSigningDecoder := signingkey.NewEDPubKeyDecoder() + + var acc *config.Node + for _, node := range nodeInfo.Nodes { + if node.Alias == nodeInfo.CurrentAlias { + acc = node + break + } + } + if acc == nil { + return nil, fmt.Errorf("the node should have a defined alias") + } decodedEncryptionKey, err := privateEncryptionDecoder.DecodeFromString(acc.EncryptionKey) if err != nil { return nil, err } - decodedSiginingKey, err := privateSigningDecoder.DecodeFromString(acc.EncryptionKey) + decodedSigningKey, err := privateSigningDecoder.DecodeFromString(acc.SigningKey) if err != nil { return nil, err } - signKey := decodedSiginingKey.(signingkey.PrivKey) + signKey := decodedSigningKey.(signingkey.PrivKey) identity, err := publicSigningDecoder.EncodeToString(signKey.GetPublic()) if err != nil { return nil, err diff --git a/service/node/service.go b/service/node/service.go new file mode 100644 index 00000000..065740dd --- /dev/null +++ b/service/node/service.go @@ -0,0 +1,130 @@ +package node + +import ( + "context" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey" + "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p-core/peer" + "gopkg.in/yaml.v3" + "io/ioutil" +) + +const CName = "NodesService" + +type Node struct { + Address string + PeerId string + SigningKey signingkey.PubKey + EncryptionKey encryptionkey.PubKey + SigningKeyString string + EncryptionKeyString string +} + +func NewFromFile(path string) (app.Component, error) { + nodeInfo := &config.NodeInfo{} + data, err := ioutil.ReadFile(path) + if err != nil { + return nil, err + } + if err = yaml.Unmarshal(data, nodeInfo); err != nil { + return nil, err + } + + var nodes []*Node + privateEncryptionDecoder := encryptionkey.NewRSAPrivKeyDecoder() + privateSigningDecoder := signingkey.NewEDPrivKeyDecoder() + for _, n := range nodeInfo.Nodes { + // ignoring ourselves + if n.Alias == nodeInfo.CurrentAlias { + continue + } + newNode, err := nodeFromYamlNode(n, privateSigningDecoder, privateEncryptionDecoder) + if err != nil { + return nil, fmt.Errorf("failed to parse node: %w", err) + } + nodes = append(nodes, newNode) + } + + return &service{nodes: nodes}, nil +} + +type Service interface { + Nodes() []*Node +} + +type service struct { + nodes []*Node +} + +func (s *service) Init(ctx context.Context, a *app.App) (err error) { + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Run(ctx context.Context) (err error) { + return nil +} + +func (s *service) Close(ctx context.Context) (err error) { + return nil +} + +func (s *service) Nodes() []*Node { + return s.nodes +} + +func nodeFromYamlNode( + n *config.Node, + privateSigningDecoder keys.Decoder, + privateEncryptionDecoder keys.Decoder) (*Node, error) { + decodedSigningKey, err := privateSigningDecoder.DecodeFromString(n.SigningKey) + if err != nil { + return nil, err + } + + decodedEncryptionKey, err := privateEncryptionDecoder.DecodeFromString(n.EncryptionKey) + if err != nil { + return nil, err + } + + rawSigning, err := decodedSigningKey.Raw() + if err != nil { + return nil, err + } + + libp2pKey, err := crypto.UnmarshalEd25519PrivateKey(rawSigning) + if err != nil { + return nil, err + } + + peerId, err := peer.IDFromPublicKey(libp2pKey.GetPublic()) + if err != nil { + return nil, err + } + + encKeyString, err := privateEncryptionDecoder.EncodeToString( + decodedEncryptionKey.(encryptionkey.PrivKey).GetPublic()) + if err != nil { + return nil, err + } + + signKeyString, err := privateSigningDecoder.EncodeToString( + decodedSigningKey.(signingkey.PrivKey).GetPublic()) + + return &Node{ + Address: n.Address, + PeerId: peerId.String(), + SigningKey: decodedSigningKey.(signingkey.PrivKey).GetPublic(), + EncryptionKey: decodedEncryptionKey.(encryptionkey.PrivKey).GetPublic(), + SigningKeyString: signKeyString, + EncryptionKeyString: encKeyString, + }, nil +} diff --git a/util/keys/asymmetric/encryptionkey/rsa.go b/util/keys/asymmetric/encryptionkey/rsa.go index 6c733488..4e70091a 100644 --- a/util/keys/asymmetric/encryptionkey/rsa.go +++ b/util/keys/asymmetric/encryptionkey/rsa.go @@ -107,6 +107,14 @@ func NewEncryptionRsaPubKeyFromBytes(bytes []byte) (PubKey, error) { return &EncryptionRsaPubKey{pubKey: *pk}, nil } +func NewRSAPrivKeyDecoder() keys.Decoder { + return keys.NewKeyDecoder(NewEncryptionRsaPrivKeyFromBytes) +} + +func NewRSAPubKeyDecoder() keys.Decoder { + return keys.NewKeyDecoder(NewEncryptionRsaPubKeyFromBytes) +} + func keyEquals(k1, k2 keys.Key) bool { a, err := k1.Raw() if err != nil { diff --git a/util/keys/asymmetric/signingkey/ed25519.go b/util/keys/asymmetric/signingkey/ed25519.go index 135b6864..90763e67 100644 --- a/util/keys/asymmetric/signingkey/ed25519.go +++ b/util/keys/asymmetric/signingkey/ed25519.go @@ -148,6 +148,7 @@ func UnmarshalEd25519PrivateKey(data []byte) (PrivKey, error) { }, nil } +// TODO: remove this one in favor of new one type Ed25519SigningPubKeyDecoder struct{} func NewEd25519PubKeyDecoder() PubKeyDecoder { @@ -178,3 +179,11 @@ func (e *Ed25519SigningPubKeyDecoder) EncodeToString(pubkey PubKey) (string, err } return strkey.Encode(0x5b, raw) } + +func NewEDPrivKeyDecoder() keys.Decoder { + return keys.NewKeyDecoder(NewSigningEd25519PrivKeyFromBytes) +} + +func NewEDPubKeyDecoder() keys.Decoder { + return keys.NewKeyDecoder(NewSigningEd25519PubKeyFromBytes) +} diff --git a/util/keys/decoder.go b/util/keys/decoder.go index 2a55872b..0b194794 100644 --- a/util/keys/decoder.go +++ b/util/keys/decoder.go @@ -2,21 +2,21 @@ package keys import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/strkey" -type keyDecoder struct { - create func([]byte) (Key, error) +type keyDecoder[T Key] struct { + create func([]byte) (T, error) } -func NewKeyDecoder(create func(bytes []byte) (Key, error)) Decoder { - return &keyDecoder{ +func NewKeyDecoder[T Key](create func(bytes []byte) (T, error)) Decoder { + return &keyDecoder[T]{ create: create, } } -func (e *keyDecoder) DecodeFromBytes(bytes []byte) (Key, error) { +func (e *keyDecoder[T]) DecodeFromBytes(bytes []byte) (Key, error) { return e.create(bytes) } -func (e *keyDecoder) DecodeFromString(identity string) (Key, error) { +func (e *keyDecoder[T]) DecodeFromString(identity string) (Key, error) { pubKeyRaw, err := strkey.Decode(0x5b, identity) if err != nil { return nil, err @@ -25,11 +25,11 @@ func (e *keyDecoder) DecodeFromString(identity string) (Key, error) { return e.DecodeFromBytes(pubKeyRaw) } -func (e *keyDecoder) DecodeFromStringIntoBytes(identity string) ([]byte, error) { +func (e *keyDecoder[T]) DecodeFromStringIntoBytes(identity string) ([]byte, error) { return strkey.Decode(0x5b, identity) } -func (e *keyDecoder) EncodeToString(key Key) (string, error) { +func (e *keyDecoder[T]) EncodeToString(key Key) (string, error) { raw, err := key.Raw() if err != nil { return "", err