-
Notifications
You must be signed in to change notification settings - Fork 0
/
signpackage.go
70 lines (56 loc) · 1.65 KB
/
signpackage.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
Copyright IBM Corp. 2016 All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chaincode
import (
"fmt"
"io/ioutil"
"github.com/hyperledger/fabric/bccsp"
"github.com/hyperledger/fabric/core/common/ccpackage"
"github.com/hyperledger/fabric/protoutil"
"github.com/spf13/cobra"
)
// signpackageCmd returns the cobra command for signing a package
func signpackageCmd(cf *ChaincodeCmdFactory, cryptoProvider bccsp.BCCSP) *cobra.Command {
spCmd := &cobra.Command{
Use: "signpackage",
Short: "Sign the specified chaincode package",
Long: "Sign the specified chaincode package",
ValidArgs: []string{"2"},
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) < 2 {
return fmt.Errorf("peer chaincode signpackage <inputpackage> <outputpackage>")
}
return signpackage(cmd, args[0], args[1], cf, cryptoProvider)
},
}
return spCmd
}
func signpackage(cmd *cobra.Command, ipackageFile string, opackageFile string, cf *ChaincodeCmdFactory, cryptoProvider bccsp.BCCSP) error {
// Parsing of the command line is done so silence cmd usage
cmd.SilenceUsage = true
var err error
if cf == nil {
cf, err = InitCmdFactory(cmd.Name(), false, false, cryptoProvider)
if err != nil {
return err
}
}
b, err := ioutil.ReadFile(ipackageFile)
if err != nil {
return err
}
env := protoutil.UnmarshalEnvelopeOrPanic(b)
env, err = ccpackage.SignExistingPackage(env, cf.Signer)
if err != nil {
return err
}
b = protoutil.MarshalOrPanic(env)
err = ioutil.WriteFile(opackageFile, b, 0700)
if err != nil {
return err
}
fmt.Printf("Wrote signed package to %s successfully\n", opackageFile)
return nil
}