...
 
Commits (44)
    https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/c2eb8ce52da2c03ea3932e2e54a37aecda6b7782 basic keystore implementation 2016-12-05T23:18:48-08:00 Jeromy why@ipfs.io License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:why@ipfs.io" title="why@ipfs.io"><img alt="default avatar" src="https://secure.gravatar.com/avatar/485a69ecbf74914bc92d4bc5f8b1efdc?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:why@ipfs.io" title="why@ipfs.io">Jeromy</a> &lt;<a href="mailto:why@ipfs.io" title="why@ipfs.io">why@ipfs.io</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/1bcdb41555eb4723075846b6314ca2663a909310 address comments and add some tests 2016-12-06T11:20:18-08:00 Jeromy why@ipfs.io License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:why@ipfs.io" title="why@ipfs.io"><img alt="default avatar" src="https://secure.gravatar.com/avatar/485a69ecbf74914bc92d4bc5f8b1efdc?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:why@ipfs.io" title="why@ipfs.io">Jeromy</a> &lt;<a href="mailto:why@ipfs.io" title="why@ipfs.io">why@ipfs.io</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/387bce4f9b807a631df77ac3aff8e529378925f1 test: add test for nonexistant key 2016-12-07T08:59:54+01:00 Jakub Sztandera kubuxu@protonmail.ch License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d4dfe1f58343e5354836e797e574c29a?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">Jakub Sztandera</a> &lt;<a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">kubuxu@protonmail.ch</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/79f8956be7122a8f337b58b7639427dd9a00aa80 test: add memkeystore test 2016-12-07T09:02:23+01:00 Jakub Sztandera kubuxu@protonmail.ch License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d4dfe1f58343e5354836e797e574c29a?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">Jakub Sztandera</a> &lt;<a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">kubuxu@protonmail.ch</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/668bab43da04cd97ee9a2640a1c3fd287ae9f2f5 update go-multihash and bubble up deps 2017-02-12T12:25:41-08:00 Jeromy jeromyj@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/4225c034d166af281ac14d50c54b65e3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">Jeromy</a> &lt;<a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">jeromyj@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/beb8ea4e790cdcd9e0a1586b3a8c5d97191d936e update go-libp2p-kad-dht with getclosestpeers fix 2017-03-05T23:06:04-08:00 Jeromy jeromyj@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/4225c034d166af281ac14d50c54b65e3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">Jeromy</a> &lt;<a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">jeromyj@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/c13ce809f7a06f45ef67fe4fb0c018b7442ed5b8 bubble up updates from go-multihash changes 2017-04-20T20:28:04+02:00 Jeromy jeromyj@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/4225c034d166af281ac14d50c54b65e3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">Jeromy</a> &lt;<a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">jeromyj@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/a021dc6492240e19420b1b9b18d591525f59ac18 Add a Has(name) method to the keystore 2017-05-04T17:29:29+09:00 Michael Muré batolettre@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/69b90d53525e035de37ac58976841986?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com">Michael Muré</a> &lt;<a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com">batolettre@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/c06823879c5e8984c570ca5abfce88ee3a81d4b2 Future-proof keystore.Has by returning an error as well 2017-05-08T17:00:00+09:00 Michael Muré batolettre@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/69b90d53525e035de37ac58976841986?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com">Michael Muré</a> &lt;<a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com">batolettre@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/b6968f6a708cf767b2f981b2d2ca32826b68797e Document exported symbols 2017-05-14T21:02:01+09:00 Michael Muré batolettre@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/69b90d53525e035de37ac58976841986?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com">Michael Muré</a> &lt;<a href="mailto:batolettre@gmail.com" title="batolettre@gmail.com">batolettre@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/e0c64913def8a1d01fea7a7de3aaa06d510d8c17 apply the megacheck tool to improve code quality 2017-05-31T16:56:11-04:00 zramsay zach@monax.io License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:zach.ramsay@gmail.com" title="zach.ramsay@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/2da1a6a516788cafb814934e069c3e7f?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:zach.ramsay@gmail.com" title="zach.ramsay@gmail.com">Zach Ramsay</a> &lt;<a href="mailto:zach.ramsay@gmail.com" title="zach.ramsay@gmail.com">zach.ramsay@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/1050cc226f0a76bab5600b0db8967318cfebd7d6 update go-multihash and bubble up changes 2017-07-11T19:27:43-07:00 Jeromy jeromyj@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/4225c034d166af281ac14d50c54b65e3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">Jeromy</a> &lt;<a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">jeromyj@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/797c1f50b9add32cfec7ca92f87bbfe27f605608 keystore interface docs 2018-01-22T11:20:07-08:00 Jeromy jeromyj@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/4225c034d166af281ac14d50c54b65e3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">Jeromy</a> &lt;<a href="mailto:jeromyj@gmail.com" title="jeromyj@gmail.com">jeromyj@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/03d905ad9b8c228dd43b65ef194057311e8c394a Modified keystore to ignore invalid key files inside the keystore directory. 2018-02-15T10:17:29+01:00 matrushka barisgumustas@gmail.com * Has calls the validateName function before checking if we have the file * List filters the returned list of file names by validateName. License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/61a82baad5314535006032491f067dd2?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">matrushka</a> &lt;<a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">barisgumustas@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/fecc54b15b47300c7aa83575141a713e25168f11 Removing the tmp directory after the TestInvalidKeyFiles test. 2018-02-15T10:17:29+01:00 matrushka barisgumustas@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/61a82baad5314535006032491f067dd2?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">matrushka</a> &lt;<a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">barisgumustas@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/c7dda3d68c8bf842f5614341c09d73fc7654433a Added logging for ignored keyfiles in keystore.List and minor improvements. 2018-02-15T10:17:29+01:00 matrushka barisgumustas@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/61a82baad5314535006032491f067dd2?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">matrushka</a> &lt;<a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">barisgumustas@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/9b52e3f303aebf193a9ff15b489dc31d311223a5 Handling requested changes. 2018-02-15T10:17:29+01:00 matrushka barisgumustas@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/61a82baad5314535006032491f067dd2?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">matrushka</a> &lt;<a href="mailto:barisgumustas@gmail.com" title="barisgumustas@gmail.com">barisgumustas@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/47fd52f3015fc18cb58864222ff3d0905e34698d fix error style 2018-03-30T09:43:27+02:00 Łukasz Magiera magik6k@gmail.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:magik6k@gmail.com" title="magik6k@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/c0e7644c009726eef6fce1e9432531de?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:magik6k@gmail.com" title="magik6k@gmail.com">Łukasz Magiera</a> &lt;<a href="mailto:magik6k@gmail.com" title="magik6k@gmail.com">magik6k@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/432500c60b199219faf5620dda08b08175d61ef9 update deps 2018-05-31T17:59:17-07:00 Steven Allen steven@stebalien.com License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:steven@stebalien.com" title="steven@stebalien.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d161f230b3456d0bfd740154ae16e0a3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:steven@stebalien.com" title="steven@stebalien.com">Steven Allen</a> &lt;<a href="mailto:steven@stebalien.com" title="steven@stebalien.com">steven@stebalien.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/becc82c9adc2368499b35caae3313cbc2df036ed gx update go-log, sys, go-crypto 2018-06-08T22:36:24-07:00 Steven Allen steven@stebalien.com * go-log * sys * go-crypto License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:steven@stebalien.com" title="steven@stebalien.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d161f230b3456d0bfd740154ae16e0a3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:steven@stebalien.com" title="steven@stebalien.com">Steven Allen</a> &lt;<a href="mailto:steven@stebalien.com" title="steven@stebalien.com">steven@stebalien.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/95a5cd3ebde8d58c5a2a8965e6c37ff5ab955e37 gx update 2018-06-26T17:11:33-07:00 Steven Allen steven@stebalien.com Updates: * go-kad-dht: Query performance improvements, DHT client fixes, validates records on *local* put. * go-libp2p-swarm/go-libp2p-transport: Timeout improvements. * go-multiaddr-net: Exposes useful Conn methods (CloseWrite, CloseRead, etc.) * go-log: fixes possible panic when enabling/disabling events. * go-multiaddr: fixes possible panic when stringifying malformed multiaddrs, adds support for consuming /p2p/ multiaddrs. fixes #5113 unblocks #4895 License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:steven@stebalien.com" title="steven@stebalien.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d161f230b3456d0bfd740154ae16e0a3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:steven@stebalien.com" title="steven@stebalien.com">Steven Allen</a> &lt;<a href="mailto:steven@stebalien.com" title="steven@stebalien.com">steven@stebalien.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/f71e2d9b0da189872d7528337c3d48c26b231c0c update gogo-protobuf 2018-08-08T18:56:13-07:00 Steven Allen steven@stebalien.com fixes #3214 License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:steven@stebalien.com" title="steven@stebalien.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d161f230b3456d0bfd740154ae16e0a3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:steven@stebalien.com" title="steven@stebalien.com">Steven Allen</a> &lt;<a href="mailto:steven@stebalien.com" title="steven@stebalien.com">steven@stebalien.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/049e8aa8c3b7ca0dc069c6072fb83359a8b6d6fd gx: update go-log go-ipld-cbor 2018-09-24T05:36:29-07:00 Steven Allen steven@stebalien.com (and friends) License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:steven@stebalien.com" title="steven@stebalien.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d161f230b3456d0bfd740154ae16e0a3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:steven@stebalien.com" title="steven@stebalien.com">Steven Allen</a> &lt;<a href="mailto:steven@stebalien.com" title="steven@stebalien.com">steven@stebalien.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/33935f4f62f67439a75f5ccea0cfc2f3990f14fd gx: update go-log and sha256 2018-11-02T21:17:20-07:00 Steven Allen steven@stebalien.com fixes #5709 License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:steven@stebalien.com" title="steven@stebalien.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d161f230b3456d0bfd740154ae16e0a3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:steven@stebalien.com" title="steven@stebalien.com">Steven Allen</a> &lt;<a href="mailto:steven@stebalien.com" title="steven@stebalien.com">steven@stebalien.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/5e1d11f77cfea0319e38a183a7590b0e94cb0033 Update protobuf 2019-02-18T20:46:22+01:00 Jakub Sztandera kubuxu@protonmail.ch License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d4dfe1f58343e5354836e797e574c29a?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">Jakub Sztandera</a> &lt;<a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">kubuxu@protonmail.ch</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/519c2134b72dfab9451ec5fb00ab4f34a99895a8 gx: unrewrite 2019-03-05T18:33:56+01:00 Jakub Sztandera kubuxu@protonmail.ch License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d4dfe1f58343e5354836e797e574c29a?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">Jakub Sztandera</a> &lt;<a href="mailto:kubuxu@protonmail.ch" title="kubuxu@protonmail.ch">kubuxu@protonmail.ch</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/104cf5bfc98d7b419bf26f73c36e53b176d055b8 chore: fix a bunch of issues caught by golangci-lint 2019-03-29T11:57:45+00:00 Steven Allen steven@stebalien.com Most of these are probably harmless but a few looked like they might actually be bugs. Most of them are just faulty tests. License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:steven@stebalien.com" title="steven@stebalien.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/d161f230b3456d0bfd740154ae16e0a3?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:steven@stebalien.com" title="steven@stebalien.com">Steven Allen</a> &lt;<a href="mailto:steven@stebalien.com" title="steven@stebalien.com">steven@stebalien.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/b10263a4cef90848a63d25b02271dbd695a11254 migrate to go-libp2p-core. 2019-05-31T23:23:52-07:00 Raúl Kripalani raul@protocol.ai closes #6391 License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:raul@protocol.ai" title="raul@protocol.ai"><img alt="default avatar" src="https://secure.gravatar.com/avatar/c6b8b900c63d459f969bd877c8a836fb?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:raul@protocol.ai" title="raul@protocol.ai">Raúl Kripalani</a> &lt;<a href="mailto:raul@protocol.ai" title="raul@protocol.ai">raul@protocol.ai</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/54050cb4f9ab6ca3d62027100d6d740bbe130a44 fix: migrate from deprecated warning function 2020-01-28T21:20:21-08:00 Steven Allen steven@stebalien.com https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/5598f9ff89833ecb394d3fff85dce63c01007eb4 Introducing EncodedFSKeystore with base32 encoding (#5947) 2020-03-23T17:05:16-07:00 Adam Uhlir uhlir.a@gmail.com Encoding the key's filename with base32 introduces coherent behaviour across different platforms and their case-sensitive/case-insensitive file-systems. Moreover it allows wider character set to be used for the name of the keys as the original restriction for special FS's characters (e.g. '/', '.') will not apply. License: MIT Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:uhlir.a@gmail.com" title="uhlir.a@gmail.com"><img alt="default avatar" src="https://secure.gravatar.com/avatar/31abd6f587d6189d1412a3a73b173444?s=32&amp;d=identicon" class="avatar s16 avatar-inline"></a><a href="mailto:uhlir.a@gmail.com" title="uhlir.a@gmail.com">Adam Uhlir</a> &lt;<a href="mailto:uhlir.a@gmail.com" title="uhlir.a@gmail.com">uhlir.a@gmail.com</a>&gt;</span> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/5f369fe96c2ebcf8526893f93236a1794331fb69 keystore: finish addressing encodedFSKeystore 2020-03-23T17:05:16-07:00 Hector Sanjuan code@hector.link * Use Go's base32 library * Set repo to version 9 * Resolve linting problems and docs. * Merge EncodedFSKeystore into FSKeystore * Remove name limitations and adjust tests https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/67213bfcb798335e8e7613df8bf2ebf76f62c309 fix(keystore): avoid racy filesystem access 2020-03-25T10:05:16-07:00 Steven Allen steven@stebalien.com Instead of checking then performing a file operation, perform the file operation and check the error. https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/ba3f6ad628c52ff4437b8ac8ac586cebbcedb385 keystore: Switch from Bytes() to MarshalPrivateKey() 2020-03-27T12:57:53+01:00 Hector Sanjuan code@hector.link Bytes is deprecated. https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/a8fef3d240997647efd00ce52c26bb543963de38 keystore: create new keys with 0400 permissions (as spec'ed) 2020-03-27T12:59:10+01:00 Hector Sanjuan code@hector.link Spec is pretty much out of date but specifies this. <a href="https://github.com/ipfs/specs/blob/master/KEYSTORE.md" rel="nofollow noreferrer noopener" target="_blank">https://github.com/ipfs/specs/blob/master/KEYSTORE.md</a> https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/311e4de65464c2e89414e8f008768d0088ed80cf Fix typos and cleanup 2020-04-20T22:00:01+03:00 Dimitris Apostolou dimitris.apostolou@icloud.com https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/3482535a9cc24d44a85e131e0da66ee1df21e688 Add .travis, licenses, readme, gomod 2021-02-19T00:09:56+01:00 Hector Sanjuan code@hector.link https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/1ca81d457701907df63297ad3b2bf4043604b81c Add travis CI flag 2021-02-19T00:12:35+01:00 Hector Sanjuan code@hector.link https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/2d5cf6f274d7e51ed0e69586756233d23750d1f4 Switch badge to travis.com 2021-02-19T00:14:06+01:00 Hector Sanjuan code@hector.link https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/577aba62a0a8524236fc124a51d0b03d0c4edf3c Do not test Gx builds 2021-02-19T00:14:47+01:00 Hector Sanjuan code@hector.link https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/26d3af14055cdf698799e290144477cf7e641a3b README: this module does not use Gx 2021-02-19T00:28:41+01:00 Hector Sanjuan code@hector.link https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/57e438e43d6628e4077ace2f7387440feaa88dce Add link to pkg.go.dev 2021-02-19T18:02:09+01:00 Hector Sanjuan code@hector.link https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/c576c628aea5f46f0542bd638007a2f9d2d486d9 Merge remote-tracking branch 'upstream/master' into reference 2021-05-03T04:51:34-04:00 tavit ohanian tavit@dms3.io https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/a7cbb7f2c0c09a064c69a64816c9b3ae98bf263b initial port 2021-06-17T03:46:53-04:00 tavit ohanian tavit@dms3.io https://gitlab.dms3.io/dms3/go-dms3-keystore/-/commit/42211ef760e17f816d81ed9173d43976875a7539 Merge branch 'port-2021-05-03' into 'master' 2021-06-17T07:52:39+00:00 tavit ohanian tavit@dms3.io Port 2021 05 03 See merge request dms3/public/go-dms3-keystore!1
stages:
- build
- test
variables:
BUILD_DIR: "/tmp/$CI_CONCURRENT_PROJECT_ID"
before_script:
- mkdir -p $BUILD_DIR/src
- cd $BUILD_DIR/src
- if [ -d $CI_PROJECT_DIR ]
- then
- echo "soft link $CI_PROJECT_DIR exists"
- else
- echo "creating soft link $CI_PROJECT_DIR"
- ln -s $CI_PROJECT_DIR
- fi
- cd $CI_PROJECT_DIR
build:
stage: build
tags:
- testing
script:
- echo $CI_JOB_STAGE
- go build
test:
stage: test
tags:
- testing
script:
- echo $CI_JOB_STAGE
- go test -cover
coverage: '/coverage: \d+.\d+% of statements/'
os:
- linux
language: go
go:
- 1.14.x
env:
global:
- GOTFLAGS="-race"
matrix:
- BUILD_DEPTYPE=gomod
# disable travis install
install:
- true
script:
- bash <(curl -s https://raw.githubusercontent.com/ipfs/ci-helpers/master/travis-ci/run-standard-tests.sh)
cache:
directories:
- $GOPATH/src/gx
- $GOPATH/pkg/mod
- $HOME/.cache/go-build
notifications:
email: false
This project is transitioning from an MIT-only license to a dual MIT/Apache-2.0 license.
Unless otherwise noted, all code contributed prior to 2019-05-06 and not contributed by
a user listed in [this signoff issue](https://github.com/ipfs/go-ipfs/issues/6302) is
licensed under MIT-only. All new contributions (and past contributions since 2019-05-06)
are licensed under a dual MIT/Apache-2.0 license.
MIT: https://www.opensource.org/licenses/mit
Apache-2.0: https://www.apache.org/licenses/license-2.0
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
The MIT License (MIT)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
# go-dms3-keystore
# go-ipfs-keystore
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai)
[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/)
[![Travis CI](https://travis-ci.com/ipfs/go-ipfs-keystore.svg?branch=master)](https://travis-ci.com/ipfs/go-ipfs-keystore)
[![Go Reference](https://pkg.go.dev/badge/github.com/ipfs/go-ipfs-keystore.svg)](https://pkg.go.dev/github.com/ipfs/go-ipfs-keystore)
> go-ipfs-keystore implements keystores for ipfs
go-ipfs-keystore provides the Keystore interface for key management. Keystores support adding, retrieving, and deleting keys as well as listing all keys and checking for membership.
## Table of Contents
- [Install](#install)
- [Usage](#usage)
- [Contribute](#contribute)
- [License](#license)
## Install
`go-ipfs-keystore` works like a regular Go module:
```
> go get github.com/ipfs/go-ipfs-keystore
```
## Usage
```
import "github.com/ipfs/go-ipfs-keystore"
```
## Contribute
PRs accepted.
## License
This project is dual-licensed under Apache 2.0 and MIT terms:
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY=
github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I=
github.com/ipfs/go-log v1.0.4 h1:6nLQdX4W8P9yZZFH7mO+X/PzjN8Laozm/lMJ6esdgzY=
github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs=
github.com/ipfs/go-log/v2 v2.0.5 h1:fL4YI+1g5V/b1Yxr1qAiXTMg1H8z9vx/VmJxBuQMHvU=
github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw=
github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc=
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o=
github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs=
github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM=
github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM=
github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs=
github.com/libp2p/go-libp2p-core v0.8.0 h1:5K3mT+64qDTKbV3yTdbMCzJ7O6wbNsavAEb8iqBvBcI=
github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8=
github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA=
github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA=
github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw=
github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI=
github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA=
github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4=
github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM=
github.com/multiformats/go-multiaddr v0.2.2 h1:XZLDTszBIJe6m0zF6ITBrEcZR73OPUhCBBS9rYAuUzI=
github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y=
github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk=
github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc=
github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc=
github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I=
github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc=
github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY=
github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU=
github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
gitlab.dms3.io/dms3/public/go-log v0.0.1 h1:jqz2g8pVdPW+Sy8CCo4rYfGEjktGhCBfgIb3oeY6yx8=
gitlab.dms3.io/dms3/public/go-log v0.0.1/go.mod h1:OsyF7lVYe47r03v1ZCbrmz0byeGUWB0Y219jN1DJx3s=
go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo=
go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
package keystore
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
base32 "encoding/base32"
ci "github.com/libp2p/go-libp2p-core/crypto"
logging "gitlab.dms3.io/dms3/public/go-log"
)
var log = logging.Logger("keystore")
var codec = base32.StdEncoding.WithPadding(base32.NoPadding)
// Keystore provides a key management interface
type Keystore interface {
// Has returns whether or not a key exists in the Keystore
Has(string) (bool, error)
// Put stores a key in the Keystore, if a key with the same name already exists, returns ErrKeyExists
Put(string, ci.PrivKey) error
// Get retrieves a key from the Keystore if it exists, and returns ErrNoSuchKey
// otherwise.
Get(string) (ci.PrivKey, error)
// Delete removes a key from the Keystore
Delete(string) error
// List returns a list of key identifier
List() ([]string, error)
}
// ErrNoSuchKey is an error message returned when no key of a given name was found.
var ErrNoSuchKey = fmt.Errorf("no key by the given name was found")
// ErrKeyExists is an error message returned when a key already exists
var ErrKeyExists = fmt.Errorf("key by that name already exists, refusing to overwrite")
const keyFilenamePrefix = "key_"
// FSKeystore is a keystore backed by files in a given directory stored on disk.
type FSKeystore struct {
dir string
}
// NewFSKeystore returns a new filesystem-backed keystore.
func NewFSKeystore(dir string) (*FSKeystore, error) {
err := os.Mkdir(dir, 0700)
switch {
case os.IsExist(err):
case err == nil:
default:
return nil, err
}
return &FSKeystore{dir}, nil
}
// Has returns whether or not a key exists in the Keystore
func (ks *FSKeystore) Has(name string) (bool, error) {
name, err := encode(name)
if err != nil {
return false, err
}
kp := filepath.Join(ks.dir, name)
_, err = os.Stat(kp)
if os.IsNotExist(err) {
return false, nil
}
return err == nil, err
}
// Put stores a key in the Keystore, if a key with the same name already exists, returns ErrKeyExists
func (ks *FSKeystore) Put(name string, k ci.PrivKey) error {
name, err := encode(name)
if err != nil {
return err
}
b, err := ci.MarshalPrivateKey(k)
if err != nil {
return err
}
kp := filepath.Join(ks.dir, name)
fi, err := os.OpenFile(kp, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0400)
if err != nil {
if os.IsExist(err) {
err = ErrKeyExists
}
return err
}
defer fi.Close()
_, err = fi.Write(b)
return err
}
// Get retrieves a key from the Keystore if it exists, and returns ErrNoSuchKey
// otherwise.
func (ks *FSKeystore) Get(name string) (ci.PrivKey, error) {
name, err := encode(name)
if err != nil {
return nil, err
}
kp := filepath.Join(ks.dir, name)
data, err := ioutil.ReadFile(kp)
if err != nil {
if os.IsNotExist(err) {
return nil, ErrNoSuchKey
}
return nil, err
}
return ci.UnmarshalPrivateKey(data)
}
// Delete removes a key from the Keystore
func (ks *FSKeystore) Delete(name string) error {
name, err := encode(name)
if err != nil {
return err
}
kp := filepath.Join(ks.dir, name)
return os.Remove(kp)
}
// List return a list of key identifier
func (ks *FSKeystore) List() ([]string, error) {
dir, err := os.Open(ks.dir)
if err != nil {
return nil, err
}
dirs, err := dir.Readdirnames(0)
if err != nil {
return nil, err
}
list := make([]string, 0, len(dirs))
for _, name := range dirs {
decodedName, err := decode(name)
if err == nil {
list = append(list, decodedName)
} else {
log.Errorf("Ignoring keyfile with invalid encoded filename: %s", name)
}
}
return list, nil
}
func encode(name string) (string, error) {
if name == "" {
return "", fmt.Errorf("key name must be at least one character")
}
encodedName := codec.EncodeToString([]byte(name))
log.Debugf("Encoded key name: %s to: %s", name, encodedName)
return keyFilenamePrefix + strings.ToLower(encodedName), nil
}
func decode(name string) (string, error) {
if !strings.HasPrefix(name, keyFilenamePrefix) {
return "", fmt.Errorf("key's filename has unexpected format")
}
nameWithoutPrefix := strings.ToUpper(name[len(keyFilenamePrefix):])
decodedName, err := codec.DecodeString(nameWithoutPrefix)
if err != nil {
return "", err
}
log.Debugf("Decoded key name: %s to: %s", name, decodedName)
return string(decodedName), nil
}
package keystore
import (
"fmt"
"io/ioutil"
"math/rand"
"os"
"path/filepath"
"sort"
"testing"
ci "github.com/libp2p/go-libp2p-core/crypto"
)
type rr struct{}
func (rr rr) Read(b []byte) (int, error) {
return rand.Read(b)
}
func privKeyOrFatal(t *testing.T) ci.PrivKey {
priv, _, err := ci.GenerateEd25519Key(rr{})
if err != nil {
t.Fatal(err)
}
return priv
}
func TestKeystoreBasics(t *testing.T) {
tdir, err := ioutil.TempDir("", "keystore-test")
if err != nil {
t.Fatal(err)
}
ks, err := NewFSKeystore(tdir)
if err != nil {
t.Fatal(err)
}
l, err := ks.List()
if err != nil {
t.Fatal(err)
}
if len(l) != 0 {
t.Fatal("expected no keys")
}
k1 := privKeyOrFatal(t)
k2 := privKeyOrFatal(t)
k3 := privKeyOrFatal(t)
k4 := privKeyOrFatal(t)
err = ks.Put("foo", k1)
if err != nil {
t.Fatal(err)
}
err = ks.Put("bar", k2)
if err != nil {
t.Fatal(err)
}
l, err = ks.List()
if err != nil {
t.Fatal(err)
}
sort.Strings(l)
if l[0] != "bar" || l[1] != "foo" {
t.Fatal("wrong entries listed")
}
if err := assertDirContents(tdir, []string{"foo", "bar"}); err != nil {
t.Fatal(err)
}
err = ks.Put("foo", k3)
if err == nil {
t.Fatal("should not be able to overwrite key")
}
if err := assertDirContents(tdir, []string{"foo", "bar"}); err != nil {
t.Fatal(err)
}
exist, err := ks.Has("foo")
if !exist {
t.Fatal("should know it has a key named foo")
}
if err != nil {
t.Fatal(err)
}
exist, err = ks.Has("nonexistingkey")
if exist {
t.Fatal("should know it doesn't have a key named nonexistingkey")
}
if err != nil {
t.Fatal(err)
}
if err := ks.Delete("bar"); err != nil {
t.Fatal(err)
}
if err := assertDirContents(tdir, []string{"foo"}); err != nil {
t.Fatal(err)
}
if err := ks.Put("beep", k3); err != nil {
t.Fatal(err)
}
if err := ks.Put("boop", k4); err != nil {
t.Fatal(err)
}
if err := assertDirContents(tdir, []string{"foo", "beep", "boop"}); err != nil {
t.Fatal(err)
}
if err := assertGetKey(ks, "foo", k1); err != nil {
t.Fatal(err)
}
if err := assertGetKey(ks, "beep", k3); err != nil {
t.Fatal(err)
}
if err := assertGetKey(ks, "boop", k4); err != nil {
t.Fatal(err)
}
if err := ks.Put("..///foo/", k1); err != nil {
t.Fatal(err)
}
if err := ks.Put("", k1); err == nil {
t.Fatal("shouldn't be able to put a key with no name")
}
if err := ks.Put(".foo", k1); err != nil {
t.Fatal(err)
}
}
func TestInvalidKeyFiles(t *testing.T) {
tdir, err := ioutil.TempDir("", "keystore-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tdir)
ks, err := NewFSKeystore(tdir)
if err != nil {
t.Fatal(err)
}
key := privKeyOrFatal(t)
bytes, err := key.Bytes()
if err != nil {
t.Fatal(err)
}
encodedName, err := encode("valid")
if err != nil {
t.Fatal(err)
}
err = ioutil.WriteFile(filepath.Join(ks.dir, encodedName), bytes, 0644)
if err != nil {
t.Fatal(err)
}
err = ioutil.WriteFile(filepath.Join(ks.dir, "z.invalid"), bytes, 0644)
if err != nil {
t.Fatal(err)
}
l, err := ks.List()
if err != nil {
t.Fatal(err)
}
sort.Strings(l)
if len(l) != 1 {
t.Fatal("wrong entry count")
}
if l[0] != "valid" {
t.Fatal("wrong entries listed")
}
exist, err := ks.Has("valid")
if !exist {
t.Fatal("should know it has a key named valid")
}
if err != nil {
t.Fatal(err)
}
}
func TestNonExistingKey(t *testing.T) {
tdir, err := ioutil.TempDir("", "keystore-test")
if err != nil {
t.Fatal(err)
}
ks, err := NewFSKeystore(tdir)
if err != nil {
t.Fatal(err)
}
k, err := ks.Get("does-it-exist")
if err != ErrNoSuchKey {
t.Fatalf("expected: %s, got %s", ErrNoSuchKey, err)
}
if k != nil {
t.Fatalf("Get on nonexistant key should give nil")
}
}
func TestMakeKeystoreNoDir(t *testing.T) {
_, err := NewFSKeystore("/this/is/not/a/real/dir")
if err == nil {
t.Fatal("shouldnt be able to make a keystore in a nonexistant directory")
}
}
func assertGetKey(ks Keystore, name string, exp ci.PrivKey) error {
outK, err := ks.Get(name)
if err != nil {
return err
}
if !outK.Equals(exp) {
return fmt.Errorf("key we got out didn't match expectation")
}
return nil
}
func assertDirContents(dir string, exp []string) error {
finfos, err := ioutil.ReadDir(dir)
if err != nil {
return err
}
if len(finfos) != len(exp) {
return fmt.Errorf("expected %d directory entries", len(exp))
}
var names []string
for _, fi := range finfos {
decodedName, err := decode(fi.Name())
if err != nil {
return err
}
names = append(names, decodedName)
}
sort.Strings(names)
sort.Strings(exp)
if len(names) != len(exp) {
return fmt.Errorf("directory had wrong number of entries in it")
}
for i, v := range names {
if v != exp[i] {
return fmt.Errorf("had wrong entry in directory")
}
}
return nil
}
package keystore
import (
"errors"
ci "github.com/libp2p/go-libp2p-core/crypto"
)
// MemKeystore is an in memory keystore implementation that is not persisted to
// any backing storage.
type MemKeystore struct {
keys map[string]ci.PrivKey
}
// NewMemKeystore creates a MemKeystore.
func NewMemKeystore() *MemKeystore {
return &MemKeystore{make(map[string]ci.PrivKey)}
}
// Has return whether or not a key exists in the Keystore
func (mk *MemKeystore) Has(name string) (bool, error) {
_, ok := mk.keys[name]
return ok, nil
}
// Put store a key in the Keystore
func (mk *MemKeystore) Put(name string, k ci.PrivKey) error {
if name == "" {
return errors.New("key name must be at least one character")
}
_, ok := mk.keys[name]
if ok {
return ErrKeyExists
}
mk.keys[name] = k
return nil
}
// Get retrieve a key from the Keystore
func (mk *MemKeystore) Get(name string) (ci.PrivKey, error) {
k, ok := mk.keys[name]
if !ok {
return nil, ErrNoSuchKey
}
return k, nil
}
// Delete remove a key from the Keystore
func (mk *MemKeystore) Delete(name string) error {
delete(mk.keys, name)
return nil
}
// List return a list of key identifier
func (mk *MemKeystore) List() ([]string, error) {
out := make([]string, 0, len(mk.keys))
for k := range mk.keys {
out = append(out, k)
}
return out, nil
}
package keystore
import (
"sort"
"testing"
)
func TestMemKeyStoreBasics(t *testing.T) {
ks := NewMemKeystore()
l, err := ks.List()
if err != nil {
t.Fatal(err)
}
if len(l) != 0 {
t.Fatal("expected no keys")
}
k1 := privKeyOrFatal(t)
k2 := privKeyOrFatal(t)
k3 := privKeyOrFatal(t)
k4 := privKeyOrFatal(t)
err = ks.Put("foo", k1)
if err != nil {
t.Fatal(err)
}
err = ks.Put("bar", k2)
if err != nil {
t.Fatal(err)
}
l, err = ks.List()
if err != nil {
t.Fatal(err)
}
sort.Strings(l)
if l[0] != "bar" || l[1] != "foo" {
t.Fatal("wrong entries listed")
}
err = ks.Put("foo", k3)
if err == nil {
t.Fatal("should not be able to overwrite key")
}
exist, err := ks.Has("foo")
if !exist {
t.Fatal("should know it has a key named foo")
}
if err != nil {
t.Fatal(err)
}
exist, err = ks.Has("nonexistingkey")
if exist {
t.Fatal("should know it doesn't have a key named nonexistingkey")
}
if err != nil {
t.Fatal(err)
}
if err := ks.Delete("bar"); err != nil {
t.Fatal(err)
}
if err := ks.Put("beep", k3); err != nil {
t.Fatal(err)
}
if err := ks.Put("boop", k4); err != nil {
t.Fatal(err)
}
if err := assertGetKey(ks, "foo", k1); err != nil {
t.Fatal(err)
}
if err := assertGetKey(ks, "beep", k3); err != nil {
t.Fatal(err)
}
if err := assertGetKey(ks, "boop", k4); err != nil {
t.Fatal(err)
}
if err := ks.Put("..///foo/", k1); err != nil {
t.Fatal(err)
}
if err := ks.Put("", k1); err == nil {
t.Fatal("shouldn't be able to put a key with no name")
}
if err := ks.Put(".foo", k1); err != nil {
t.Fatal(err)
}
}