aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/swarm/access_test.go44
-rw-r--r--cmd/swarm/main.go24
2 files changed, 64 insertions, 4 deletions
diff --git a/cmd/swarm/access_test.go b/cmd/swarm/access_test.go
index ed589f9f4..384d25630 100644
--- a/cmd/swarm/access_test.go
+++ b/cmd/swarm/access_test.go
@@ -145,7 +145,9 @@ func TestAccessPassword(t *testing.T) {
if a.KdfParams == nil {
t.Fatal("manifest access kdf params is nil")
}
-
+ if a.Publisher != "" {
+ t.Fatal("should be empty")
+ }
client := swarm.NewClient(cluster.Nodes[0].URL)
hash, err := client.UploadManifest(&m, false)
@@ -222,7 +224,7 @@ func TestAccessPassword(t *testing.T) {
// the test will fail if the proxy's given private key is not granted on the ACT.
func TestAccessPK(t *testing.T) {
// Setup Swarm and upload a test file to it
- cluster := newTestCluster(t, 1)
+ cluster := newTestCluster(t, 2)
defer cluster.Shutdown()
// create a tmp file
@@ -302,6 +304,20 @@ func TestAccessPK(t *testing.T) {
t.Fatalf("stdout not matched")
}
+ //get the public key from the publisher directory
+ publicKeyFromDataDir := runSwarm(t,
+ "--bzzaccount",
+ publisherAccount.Address.String(),
+ "--password",
+ passFile.Name(),
+ "--datadir",
+ publisherDir,
+ "print-keys",
+ "--compressed",
+ )
+ _, publicKeyString := publicKeyFromDataDir.ExpectRegexp(".+")
+ publicKeyFromDataDir.ExpectExit()
+ pkComp := strings.Split(publicKeyString[0], "=")[1]
var m api.Manifest
err = json.Unmarshal([]byte(matches[0]), &m)
@@ -335,7 +351,9 @@ func TestAccessPK(t *testing.T) {
if a.KdfParams != nil {
t.Fatal("manifest access kdf params should be nil")
}
-
+ if a.Publisher != pkComp {
+ t.Fatal("publisher key did not match")
+ }
client := swarm.NewClient(cluster.Nodes[0].URL)
hash, err := client.UploadManifest(&m, false)
@@ -499,6 +517,22 @@ func testAccessACT(t *testing.T, bogusEntries int) {
if len(matches) == 0 {
t.Fatalf("stdout not matched")
}
+
+ //get the public key from the publisher directory
+ publicKeyFromDataDir := runSwarm(t,
+ "--bzzaccount",
+ publisherAccount.Address.String(),
+ "--password",
+ passFile.Name(),
+ "--datadir",
+ publisherDir,
+ "print-keys",
+ "--compressed",
+ )
+ _, publicKeyString := publicKeyFromDataDir.ExpectRegexp(".+")
+ publicKeyFromDataDir.ExpectExit()
+ pkComp := strings.Split(publicKeyString[0], "=")[1]
+
hash := matches[0]
m, _, err := client.DownloadManifest(hash)
if err != nil {
@@ -531,7 +565,9 @@ func testAccessACT(t *testing.T, bogusEntries int) {
if a.KdfParams != nil {
t.Fatal("manifest access kdf params should be nil")
}
-
+ if a.Publisher != pkComp {
+ t.Fatal("publisher key did not match")
+ }
httpClient := &http.Client{}
// all nodes except the skipped node should be able to decrypt the content
diff --git a/cmd/swarm/main.go b/cmd/swarm/main.go
index 637ae06e9..e65440937 100644
--- a/cmd/swarm/main.go
+++ b/cmd/swarm/main.go
@@ -18,6 +18,7 @@ package main
import (
"crypto/ecdsa"
+ "encoding/hex"
"fmt"
"io/ioutil"
"os"
@@ -208,6 +209,10 @@ var (
Name: "data",
Usage: "Initializes the resource with the given hex-encoded data. Data must be prefixed by 0x",
}
+ SwarmCompressedFlag = cli.BoolFlag{
+ Name: "compressed",
+ Usage: "Prints encryption keys in compressed form",
+ }
)
//declare a few constant error messages, useful for later error check comparisons in test
@@ -253,6 +258,14 @@ func init() {
Description: "The output of this command is supposed to be machine-readable",
},
{
+ Action: keys,
+ CustomHelpTemplate: helpTemplate,
+ Name: "print-keys",
+ Flags: []cli.Flag{SwarmCompressedFlag},
+ Usage: "Print public key information",
+ Description: "The output of this command is supposed to be machine-readable",
+ },
+ {
Action: upload,
CustomHelpTemplate: helpTemplate,
Name: "up",
@@ -580,6 +593,17 @@ func main() {
}
}
+func keys(ctx *cli.Context) error {
+ privateKey := getPrivKey(ctx)
+ pub := hex.EncodeToString(crypto.FromECDSAPub(&privateKey.PublicKey))
+ pubCompressed := hex.EncodeToString(crypto.CompressPubkey(&privateKey.PublicKey))
+ if !ctx.Bool(SwarmCompressedFlag.Name) {
+ fmt.Println(fmt.Sprintf("publicKey=%s", pub))
+ }
+ fmt.Println(fmt.Sprintf("publicKeyCompressed=%s", pubCompressed))
+ return nil
+}
+
func version(ctx *cli.Context) error {
fmt.Println(strings.Title(clientIdentifier))
fmt.Println("Version:", sv.VersionWithMeta)