Remove all dependencies on the newt repo
The imgmod tool was using the util package in the newt repo
(mynewt.apache.org/newt/util). This commit removes this dependency.
diff --git a/cli/image_cmds.go b/cli/image_cmds.go
index 2b5852e..a010f1b 100644
--- a/cli/image_cmds.go
+++ b/cli/image_cmds.go
@@ -25,16 +25,17 @@
"io/ioutil"
"os"
"sort"
+ "strconv"
- "github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
+ "github.com/apache/mynewt-artifact/errors"
"github.com/apache/mynewt-artifact/image"
"github.com/apache/mynewt-artifact/manifest"
"github.com/apache/mynewt-artifact/sec"
"mynewt.apache.org/imgmod/iimg"
- "mynewt.apache.org/newt/util"
+ "mynewt.apache.org/imgmod/iutil"
)
func tlvStr(tlv image.ImageTlv) string {
@@ -62,21 +63,21 @@
return err
}
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Wrote image %s\n", filename)
+ iutil.Printf("Wrote image %s\n", filename)
return nil
}
func parseTlvArgs(typeArg string, filenameArg string) (image.ImageTlv, error) {
- tlvType, err := util.AtoiNoOct(typeArg)
+ tlvType, err := strconv.Atoi(typeArg)
if err != nil || tlvType < 0 {
- return image.ImageTlv{}, util.FmtNewtError(
- "Invalid TLV type integer: %s", typeArg)
+ return image.ImageTlv{}, errors.Errorf(
+ "invalid TLV type integer: %s", typeArg)
}
data, err := ioutil.ReadFile(filenameArg)
if err != nil {
- return image.ImageTlv{}, util.FmtNewtError(
- "Error reading TLV data file: %s", err.Error())
+ return image.ImageTlv{}, errors.Wrapf(err,
+ "error reading TLV data file")
}
return image.ImageTlv{
@@ -103,7 +104,7 @@
if err != nil {
ImgmodUsage(nil, err)
}
- fmt.Printf("%s\n", s)
+ iutil.Printf("%s\n", s)
}
func runBriefCmd(cmd *cobra.Command, args []string) {
@@ -121,15 +122,15 @@
ImgmodUsage(nil, err)
}
- fmt.Printf("%8d| Header\n", offsets.Header)
- fmt.Printf("%8d| Body\n", offsets.Body)
- fmt.Printf("%8d| Trailer\n", offsets.Trailer)
+ iutil.Printf("%8d| Header\n", offsets.Header)
+ iutil.Printf("%8d| Body\n", offsets.Body)
+ iutil.Printf("%8d| Trailer\n", offsets.Trailer)
for i, tlv := range img.Tlvs {
- fmt.Printf("%8d| TLV%d: type=%s(%d)\n",
+ iutil.Printf("%8d| TLV%d: type=%s(%d)\n",
offsets.Tlvs[i], i, image.ImageTlvTypeName(tlv.Header.Type),
tlv.Header.Type)
}
- fmt.Printf("Total=%d\n", offsets.TotalSize)
+ iutil.Printf("Total=%d\n", offsets.TotalSize)
}
func runSignCmd(cmd *cobra.Command, args []string) {
@@ -155,8 +156,8 @@
hash, err := img.Hash()
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Failed to read hash from specified image: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err,
+ "failed to read hash from specified image"))
}
tlvs, err := image.BuildSigTlvs(keys, hash)
@@ -189,8 +190,8 @@
tlvArgs := args[1:]
if len(tlvArgs)%2 != 0 {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Invalid argument count; each TLV requires two arguments"))
+ ImgmodUsage(cmd, errors.Errorf(
+ "invalid argument count; each TLV requires two arguments"))
}
tlvs := []image.ImageTlv{}
@@ -229,20 +230,20 @@
tlvIndices := []int{}
idxMap := map[int]struct{}{}
for _, arg := range args[1:] {
- idx, err := util.AtoiNoOct(arg)
+ idx, err := strconv.Atoi(arg)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError("Invalid TLV index: %s", arg))
+ ImgmodUsage(cmd, errors.Errorf("invalid TLV index: %s", arg))
}
if idx < 0 || idx >= len(img.Tlvs) {
- ImgmodUsage(nil, util.FmtNewtError(
+ ImgmodUsage(nil, errors.Errorf(
"TLV index %s out of range; "+
"must be in range [0, %d] for this image",
arg, len(img.Tlvs)-1))
}
if _, ok := idxMap[idx]; ok {
- ImgmodUsage(nil, util.FmtNewtError(
+ ImgmodUsage(nil, errors.Errorf(
"TLV index %d specified more than once", idx))
}
idxMap[idx] = struct{}{}
@@ -254,8 +255,7 @@
sort.Sort(sort.Reverse(sort.IntSlice(tlvIndices)))
for _, idx := range tlvIndices {
tlv := img.Tlvs[idx]
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Removing TLV%d: %s\n", idx, tlvStr(tlv))
+ iutil.Printf("Removing TLV%d: %s\n", idx, tlvStr(tlv))
img.Tlvs = append(img.Tlvs[0:idx], img.Tlvs[idx+1:]...)
}
@@ -301,7 +301,7 @@
}
if OptOutFilename == "" {
- ImgmodUsage(cmd, util.FmtNewtError("--outfile (-o) option required"))
+ ImgmodUsage(cmd, errors.Errorf("--outfile (-o) option required"))
}
inFilename := args[0]
@@ -313,28 +313,25 @@
}
if (img.Header.Flags & image.IMAGE_F_ENCRYPTED) != 0 {
- util.StatusMessage(util.VERBOSITY_QUIET,
+ fmt.Fprintf(os.Stderr,
"* Warning: extracting hashable content from an encrypted image\n")
}
f, err := os.Create(outFilename)
if err != nil {
- ImgmodUsage(nil, util.ChildNewtError(err))
+ ImgmodUsage(nil, errors.Wrapf(err, "failed to create hashable output"))
}
defer f.Close()
if err := binary.Write(f, binary.LittleEndian, &img.Header); err != nil {
- ImgmodUsage(nil, util.FmtNewtError(
- "Error writing image header: %s", err.Error()))
+ ImgmodUsage(nil, errors.Wrapf(err, "error writing image header"))
}
_, err = f.Write(img.Body)
if err != nil {
- ImgmodUsage(nil, util.FmtNewtError(
- "Error writing image body: %s", err.Error()))
+ ImgmodUsage(nil, errors.Wrapf(err, "error writing image body"))
}
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Wrote hashable content to %s\n", outFilename)
+ iutil.Printf("Wrote hashable content to %s\n", outFilename)
}
func runAddsigCmd(cmd *cobra.Command, args []string) {
@@ -346,12 +343,11 @@
keyFilename := args[1]
sigFilename := args[2]
- sigType, err := util.AtoiNoOct(args[3])
+ sigType, err := strconv.Atoi(args[3])
if err != nil || sigType < 0 || sigType > 255 ||
!image.ImageTlvTypeIsSig(uint8(sigType)) {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Invalid signature type: %s", args[3]))
+ ImgmodUsage(cmd, errors.Errorf("invalid signature type: %s", args[3]))
}
outFilename, err := CalcOutFilename(imgFilename)
@@ -366,14 +362,12 @@
keyData, err := ioutil.ReadFile(keyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Error reading key file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "error reading key file"))
}
sigData, err := ioutil.ReadFile(sigFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Error reading signature file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "error reading signature file"))
}
// ECDSA256 signatures need to be padded out to >=72 bytes.
@@ -386,8 +380,7 @@
// Build and append key hash TLV.
keyHashTlv := image.BuildKeyHashTlv(keyData)
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Adding TLV%d (%s)\n",
- len(img.Tlvs), tlvStr(keyHashTlv))
+ iutil.Printf("Adding TLV%d (%s)\n", len(img.Tlvs), tlvStr(keyHashTlv))
img.Tlvs = append(img.Tlvs, keyHashTlv)
// Build and append signature TLV.
@@ -398,8 +391,7 @@
},
Data: sigData,
}
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Adding TLV%d (%s)\n",
- len(img.Tlvs), tlvStr(sigTlv))
+ iutil.Printf("Adding TLV%d (%s)\n", len(img.Tlvs), tlvStr(sigTlv))
img.Tlvs = append(img.Tlvs, sigTlv)
if err := writeImage(img, outFilename); err != nil {
@@ -427,8 +419,7 @@
keyBytes, err := ioutil.ReadFile(keyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Error reading key file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "error reading key file"))
}
img, err = iimg.DecryptImage(img, keyBytes)
@@ -461,8 +452,7 @@
keyBytes, err := ioutil.ReadFile(keyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Error reading key file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "error reading key file"))
}
img, err = iimg.DecryptImageFull(img, keyBytes)
@@ -494,8 +484,7 @@
keyBytes, err := ioutil.ReadFile(keyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Error reading key file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "error reading key file"))
}
img, err = iimg.EncryptImage(img, keyBytes)
@@ -528,8 +517,7 @@
keyBytes, err := ioutil.ReadFile(keyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Error reading key file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "error reading key file"))
}
img, err = iimg.EncryptImageFull(img, keyBytes)
@@ -588,8 +576,7 @@
iss, err := sec.ReadPubSignKeys(OptSignKeys)
if err != nil {
- ImgmodUsage(nil, errors.Wrapf(err,
- "error reading signing key file"))
+ ImgmodUsage(nil, errors.Wrapf(err, "error reading signing key file"))
}
sigs, err := img.CollectSigs()
@@ -627,10 +614,10 @@
}
}
- fmt.Printf(" structure: %s\n", st)
- fmt.Printf(" hash: %s\n", ha)
- fmt.Printf("signatures: %s\n", si)
- fmt.Printf(" manifest: %s\n", ma)
+ iutil.Printf(" structure: %s\n", st)
+ iutil.Printf(" hash: %s\n", ha)
+ iutil.Printf("signatures: %s\n", si)
+ iutil.Printf(" manifest: %s\n", ma)
if anyFails {
os.Exit(94) // EBADMSG
diff --git a/cli/mfg_cmds.go b/cli/mfg_cmds.go
index 9ce7108..1cd95fc 100644
--- a/cli/mfg_cmds.go
+++ b/cli/mfg_cmds.go
@@ -25,6 +25,7 @@
"io/ioutil"
"os"
"sort"
+ "strconv"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
@@ -35,7 +36,7 @@
"github.com/apache/mynewt-artifact/mfg"
"github.com/apache/mynewt-artifact/sec"
"mynewt.apache.org/imgmod/imfg"
- "mynewt.apache.org/newt/util"
+ "mynewt.apache.org/imgmod/iutil"
)
const MAX_SIG_LEN = 1024 // Bytes.
@@ -43,8 +44,7 @@
func readMfgBin(filename string) ([]byte, error) {
bin, err := ioutil.ReadFile(filename)
if err != nil {
- return nil, util.FmtChildNewtError(err,
- "Failed to read manufacturing image: %s", err.Error())
+ return nil, errors.Wrapf(err, "failed to read manufacturing image")
}
return bin, nil
@@ -89,13 +89,13 @@
areas := flash.SortFlashAreasByDevOff(mman.FlashAreas)
if len(areas) == 0 {
- ImgmodUsage(nil, util.FmtNewtError(
+ ImgmodUsage(nil, errors.Errorf(
"Boot loader manifest does not contain flash map"))
}
overlaps, conflicts := flash.DetectErrors(areas)
if len(overlaps) > 0 || len(conflicts) > 0 {
- return nil, util.NewNewtError(flash.ErrorText(overlaps, conflicts))
+ return nil, errors.New(flash.ErrorText(overlaps, conflicts))
}
if err := imfg.VerifyAreas(areas); err != nil {
@@ -115,8 +115,8 @@
filename := fmt.Sprintf("%s/%s.bin", binDir, area.Name)
bin, err := readMfgBin(filename)
if err != nil {
- if !util.IsNotExist(err) {
- return nil, util.ChildNewtError(err)
+ if !os.IsNotExist(errors.Cause(err)) {
+ return nil, errors.Wrapf(err, "could not read mfgimage binary")
}
} else {
mm[area.Name] = bin
@@ -132,10 +132,9 @@
}
inFilename := args[0]
- metaEndOff, err := util.AtoiNoOct(args[1])
+ metaEndOff, err := strconv.Atoi(args[1])
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "invalid meta offset \"%s\"", args[1]))
+ ImgmodUsage(cmd, errors.Errorf("invalid meta offset \"%s\"", args[1]))
}
bin, err := readMfgBin(inFilename)
@@ -149,16 +148,15 @@
}
if m.Meta == nil {
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Manufacturing image %s does not contain an MMR\n", inFilename)
+ iutil.Printf("Manufacturing image %s does not contain an MMR\n",
+ inFilename)
} else {
s, err := m.Meta.Json(metaEndOff)
if err != nil {
ImgmodUsage(nil, err)
}
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Manufacturing image %s contains an MMR with "+
- "the following properties:\n%s\n", inFilename, s)
+ iutil.Printf("Manufacturing image %s contains an MMR with "+
+ "the following properties:\n%s\n", inFilename, s)
}
}
@@ -191,7 +189,7 @@
}
if err := os.Mkdir(outDir, os.ModePerm); err != nil {
- ImgmodUsage(nil, util.ChildNewtError(err))
+ ImgmodUsage(nil, errors.Wrapf(err, "failed to make output directory"))
}
for name, data := range nbmap {
@@ -215,11 +213,6 @@
splitDir := args[0]
outDir := args[1]
- if util.NodeExist(outDir) {
- ImgmodUsage(nil, util.FmtNewtError(
- "Destination \"%s\" already exists", outDir))
- }
-
mm, err := readManifest(splitDir + "/mfg")
if err != nil {
ImgmodUsage(cmd, err)
@@ -246,8 +239,8 @@
infos, err := ioutil.ReadDir(splitDir + "/mfg")
if err != nil {
- ImgmodUsage(nil, util.FmtNewtError(
- "Error reading source mfg directory: %s", err.Error()))
+ ImgmodUsage(nil, errors.Wrapf(err,
+ "Error reading source mfg directory: %s"))
}
for _, info := range infos {
if info.Name() != mfg.MFG_BIN_IMG_FILENAME {
@@ -291,20 +284,18 @@
bin, err := readMfgBin(mfgimgFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Failed to read mfgimg file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err,
+ "failed to read mfgimg file: %s"))
}
okey, err := ioutil.ReadFile(okeyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Failed to read old key der: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "failed to read old key der: %s"))
}
nkey, err := ioutil.ReadFile(nkeyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Failed to read new key der: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "failed to read new key der: %s"))
}
if isKek {
@@ -335,7 +326,7 @@
}
if OptOutFilename == "" {
- ImgmodUsage(cmd, util.FmtNewtError("--outfile (-o) option required"))
+ ImgmodUsage(cmd, errors.Errorf("--outfile (-o) option required"))
}
mfgDir := args[0]
@@ -475,18 +466,16 @@
// Read public key.
keyBytes, err := ioutil.ReadFile(keyFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError(
- "Error reading key file: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "error reading key file"))
}
// Read signature.
sig, err := ioutil.ReadFile(sigFilename)
if err != nil {
- ImgmodUsage(cmd, util.FmtChildNewtError(err,
- "Failed to read signature: %s", err.Error()))
+ ImgmodUsage(cmd, errors.Wrapf(err, "failed to read signature"))
}
if len(sig) > MAX_SIG_LEN {
- ImgmodUsage(nil, util.FmtNewtError(
+ ImgmodUsage(nil, errors.Errorf(
"signature larger than arbitrary maximum length (%d > %d)",
len(sig), MAX_SIG_LEN))
}
@@ -539,20 +528,20 @@
tlvIndices := []int{}
idxMap := map[int]struct{}{}
for _, arg := range args[1:] {
- idx, err := util.AtoiNoOct(arg)
+ idx, err := strconv.Atoi(arg)
if err != nil {
- ImgmodUsage(cmd, util.FmtNewtError("Invalid TLV index: %s", arg))
+ ImgmodUsage(cmd, errors.Errorf("invalid TLV index: %s", arg))
}
if idx < 0 || idx >= numTlvs {
- ImgmodUsage(nil, util.FmtNewtError(
+ ImgmodUsage(nil, errors.Errorf(
"TLV index %s out of range; "+
"must be in range [0, %d] for this mfgimage",
arg, numTlvs-1))
}
if _, ok := idxMap[idx]; ok {
- ImgmodUsage(nil, util.FmtNewtError(
+ ImgmodUsage(nil, errors.Errorf(
"TLV index %d specified more than once", idx))
}
idxMap[idx] = struct{}{}
@@ -564,8 +553,7 @@
sort.Sort(sort.Reverse(sort.IntSlice(tlvIndices)))
for _, idx := range tlvIndices {
tlv := m.Meta.Tlvs[idx]
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Removing TLV%d: %s\n", idx, mfgTlvStr(tlv))
+ iutil.Printf("Removing TLV%d: %s\n", idx, mfgTlvStr(tlv))
tlvSz := mfg.META_TLV_HEADER_SZ + len(tlv.Data)
m.MetaOff += tlvSz
@@ -622,8 +610,7 @@
iss, err := sec.ReadPubSignKeys(OptSignKeys)
if err != nil {
- ImgmodUsage(nil, errors.Wrapf(err,
- "error reading signing key file"))
+ ImgmodUsage(nil, errors.Wrapf(err, "error reading signing key file"))
}
si := ""
@@ -641,9 +628,9 @@
}
}
- fmt.Printf(" structure: %s\n", st)
- fmt.Printf("signatures: %s\n", si)
- fmt.Printf(" manifest: %s\n", ma)
+ iutil.Printf(" structure: %s\n", st)
+ iutil.Printf("signatures: %s\n", si)
+ iutil.Printf(" manifest: %s\n", ma)
if anyFails {
os.Exit(94) // EBADMSG
diff --git a/cli/util.go b/cli/util.go
index 74d8ebf..ae934fd 100644
--- a/cli/util.go
+++ b/cli/util.go
@@ -24,10 +24,11 @@
"io/ioutil"
"os"
+ "github.com/apache/mynewt-artifact/errors"
+ "github.com/otiai10/copy"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
-
- "mynewt.apache.org/newt/util"
+ "mynewt.apache.org/imgmod/iutil"
)
var OptOutFilename string
@@ -43,7 +44,7 @@
}
if cmd != nil {
- fmt.Printf("%s - ", cmd.Name())
+ fmt.Fprintf(os.Stderr, "%s - ", cmd.Name())
cmd.Help()
}
os.Exit(1)
@@ -52,7 +53,7 @@
func CalcOutFilename(inFilename string) (string, error) {
if OptOutFilename != "" {
if OptInPlace {
- return "", util.FmtNewtError(
+ return "", errors.Errorf(
"Only one of --outfile (-o) or --inplace (-i) options allowed")
}
@@ -60,7 +61,7 @@
}
if !OptInPlace {
- return "", util.FmtNewtError(
+ return "", errors.Errorf(
"--outfile (-o) or --inplace (-i) option required")
}
@@ -68,14 +69,12 @@
}
func CopyDir(src string, dst string) error {
- if err := util.CopyDir(src, dst); err != nil {
- return util.FmtNewtError(
- "Failed to copy directory \"%s\" to \"%s\": %s",
- src, dst, err.Error())
+ if err := copy.Copy(src, dst); err != nil {
+ return errors.Wrapf(err,
+ "failed to copy directory \"%s\" to \"%s\"", src, dst)
}
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Copied directory \"%s\" to \"%s\"\n", src, dst)
+ iutil.Printf("Copied directory \"%s\" to \"%s\"\n", src, dst)
return nil
}
@@ -91,23 +90,20 @@
}
func CopyFile(src string, dst string) error {
- if err := util.CopyFile(src, dst); err != nil {
- return util.FmtNewtError(
- "Failed to copy file \"%s\" to \"%s\": %s",
- src, dst, err.Error())
+ if err := copy.Copy(src, dst); err != nil {
+ return errors.Wrapf(err,
+ "failed to copy file \"%s\" to \"%s\"", src, dst)
}
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Copied file \"%s\" to \"%s\"\n", src, dst)
+ iutil.Printf("Copied file \"%s\" to \"%s\"\n", src, dst)
return nil
}
func WriteFile(data []byte, filename string) error {
if err := ioutil.WriteFile(filename, data, os.ModePerm); err != nil {
- return util.FmtNewtError(
- "Failed to write file \"%s\": %s", filename, err.Error())
+ return errors.Wrapf(err, "failed to write file \"%s\"")
}
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Wrote file \"%s\"\n", filename)
+ iutil.Printf("Wrote file \"%s\"\n", filename)
return nil
}
diff --git a/go.mod b/go.mod
index 795ba11..dd3a838 100644
--- a/go.mod
+++ b/go.mod
@@ -1,10 +1,9 @@
module mynewt.apache.org/imgmod
require (
- github.com/apache/mynewt-artifact v0.0.2
+ github.com/apache/mynewt-artifact v0.0.3
+ github.com/otiai10/copy v1.0.1
github.com/pkg/errors v0.8.1
- github.com/sirupsen/logrus v1.4.0
- github.com/spf13/cobra v0.0.3
- github.com/spf13/pflag v1.0.3 // indirect
- mynewt.apache.org/newt v0.0.0-20190529170335-75b2c282a77d
+ github.com/sirupsen/logrus v1.4.2
+ github.com/spf13/cobra v0.0.5
)
diff --git a/go.sum b/go.sum
index 6df6f34..fc13c8d 100644
--- a/go.sum
+++ b/go.sum
@@ -1,37 +1,67 @@
+bou.ke/monkey v1.0.1/go.mod h1:FgHuK96Rv2Nlf+0u1OOVDpCMdsWyOFmeeketDHE7LIg=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/NickBall/go-aes-key-wrap v0.0.0-20170929221519-1c3aa3e4dfc5 h1:5BIUS5hwyLM298mOf8e8TEgD3cCYqc86uaJdQCYZo/o=
github.com/NickBall/go-aes-key-wrap v0.0.0-20170929221519-1c3aa3e4dfc5/go.mod h1:w5D10RxC0NmPYxmQ438CC1S07zaC1zpvuNW7s5sUk2Q=
github.com/apache/mynewt-artifact v0.0.2 h1:2tBlf84kyAifrEilcw1kQFQ8kpq4wBSudXpO8BEOXhw=
github.com/apache/mynewt-artifact v0.0.2/go.mod h1:vFUd47t74KPQMzSBhQ2qp5Hc7D29OU/Tl3xHtFwN3k8=
+github.com/apache/mynewt-artifact v0.0.3 h1:760wpGruGSOPjslEo0fgs9PYJ58IAvyjuJqno1t4iOc=
+github.com/apache/mynewt-artifact v0.0.3/go.mod h1:vFUd47t74KPQMzSBhQ2qp5Hc7D29OU/Tl3xHtFwN3k8=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
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/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/otiai10/copy v1.0.1 h1:gtBjD8aq4nychvRZ2CyJvFWAw0aja+VHazDdruZKGZA=
+github.com/otiai10/copy v1.0.1/go.mod h1:8bMCJrAqOtN/d9oyh5HR7HhLQMvcGMpGdwRDYsfOCHc=
+github.com/otiai10/mint v1.2.3/go.mod h1:YnfyPNhBvnY8bW4SGQHCs/aAFhkgySlMZbrF5U0bOVw=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
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/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.4.0 h1:yKenngtzGh+cUSSh6GWbxW2abRqhYUSR/t/6+2QqNvE=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 h1:u+LnwYTOOW7Ukr/fppxEb1Nwz0AtPflrblfvUudpo+I=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/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-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -41,9 +71,14 @@
golang.org/x/sys v0.0.0-20180707002001-3c6ecd8f22c6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 h1:I6FyU15t786LL7oL/hn43zqTuEGr4PN7F4XJ1p4E3Y8=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/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 h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
mynewt.apache.org/newt v0.0.0-20190529170335-75b2c282a77d h1:dnv0EBSSD88NahC0Pow+5DOH7gy4D5xj5n1iCIxA2NY=
mynewt.apache.org/newt v0.0.0-20190529170335-75b2c282a77d/go.mod h1:lFsPYOHxMMWA11pydOeh0GVFiXtx0A9VnzOQ6SiRR88=
diff --git a/iimg/iimg.go b/iimg/iimg.go
index 29dd8a2..d4e7c9a 100644
--- a/iimg/iimg.go
+++ b/iimg/iimg.go
@@ -27,7 +27,6 @@
"github.com/apache/mynewt-artifact/errors"
"github.com/apache/mynewt-artifact/image"
"github.com/apache/mynewt-artifact/sec"
- "mynewt.apache.org/newt/util"
)
func GetDupSigs(img image.Image) []string {
@@ -77,7 +76,7 @@
}
if len(errStrs) > 0 {
- return util.FmtNewtError("%s", strings.Join(errStrs, "\n"))
+ return errors.New(strings.Join(errStrs, "\n"))
}
return nil
@@ -98,7 +97,7 @@
s += fmt.Sprintf("\n %s", d)
}
- return util.FmtNewtError("%s", s)
+ return errors.New(s)
}
return nil
@@ -106,7 +105,7 @@
func PadEcdsa256Sig(sig []byte) ([]byte, error) {
if len(sig) < 70 {
- return nil, util.FmtNewtError(
+ return nil, errors.Errorf(
"Invalid ECDSA256 signature; length (%d) less than 70", len(sig))
}
@@ -121,7 +120,7 @@
func ExtractSecret(img *image.Image) ([]byte, error) {
tlvs := img.RemoveTlvsWithType(image.IMAGE_TLV_ENC_RSA)
if len(tlvs) != 1 {
- return nil, util.FmtNewtError(
+ return nil, errors.Errorf(
"Image contains invalid count of ENC_RSA TLVs: %d; must contain 1",
len(tlvs))
}
diff --git a/imfg/imfg.go b/imfg/imfg.go
index 28dab7a..93a0187 100644
--- a/imfg/imfg.go
+++ b/imfg/imfg.go
@@ -26,9 +26,10 @@
"sort"
"strings"
+ "github.com/apache/mynewt-artifact/errors"
"github.com/apache/mynewt-artifact/flash"
"github.com/apache/mynewt-artifact/mfg"
- "mynewt.apache.org/newt/util"
+ "mynewt.apache.org/imgmod/iutil"
)
type NameBlobMap map[string][]byte
@@ -43,7 +44,7 @@
args ...interface{}) error {
suffix := fmt.Sprintf(format, args...)
- return util.FmtNewtError("Invalid flash area \"%s\": %s", areaName, suffix)
+ return errors.Errorf("invalid flash area \"%s\": %s", areaName, suffix)
}
func verifyArea(area flash.FlashArea, minOffset int) error {
@@ -84,7 +85,7 @@
for _, area := range areas {
if _, ok := mm[area.Name]; ok {
- return nil, util.FmtNewtError(
+ return nil, errors.Errorf(
"two or more flash areas with same name: \"%s\"", area.Name)
}
@@ -136,8 +137,7 @@
if len(bin) >= 4 {
binstr = fmt.Sprintf("%x", bin[:4])
}
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "inserting %s (%s) at offset %d (0x%x)\n",
+ iutil.Printf("inserting %s (%s) at offset %d (0x%x)\n",
area.Name, binstr, len(joined), len(joined))
joined = append(joined, bin...)
}
@@ -151,7 +151,7 @@
}
sort.Strings(names)
- return nil, util.FmtNewtError(
+ return nil, errors.Errorf(
"unprocessed flash areas: %s", strings.Join(names, ", "))
}
@@ -163,23 +163,22 @@
func replaceKey(mfgBin []byte, okey []byte, nkey []byte) (int, error) {
if len(okey) > len(mfgBin) {
- return 0, util.FmtNewtError(
+ return 0, errors.Errorf(
"key longer than flash section (%d > %d)", len(okey), len(mfgBin))
}
idx := bytes.Index(mfgBin, okey)
if idx == -1 {
- return 0, util.FmtNewtError("old key not present in flash section")
+ return 0, errors.Errorf("old key not present in flash section")
}
lastIdx := bytes.LastIndex(mfgBin, okey)
if idx != lastIdx {
- return 0, util.FmtNewtError(
+ return 0, errors.Errorf(
"multiple instances of old key in flash section")
}
- util.StatusMessage(util.VERBOSITY_VERBOSE,
- "Replacing key at offset %d\n", idx)
+ iutil.PrintfVerbose("Replacing key at offset %d\n", idx)
copy(mfgBin[idx:idx+len(okey)], nkey)
@@ -188,7 +187,7 @@
func ReplaceIsk(mfgBin []byte, okey []byte, nkey []byte) error {
if len(nkey) != len(okey) {
- return util.FmtNewtError(
+ return errors.Errorf(
"key lengths differ (%d != %d)", len(nkey), len(okey))
}
@@ -201,7 +200,7 @@
func ReplaceKek(mfgBin []byte, okey []byte, nkey []byte) error {
if len(nkey) > len(okey) {
- return util.FmtNewtError(
+ return errors.Errorf(
"new key longer than old key (%d > %d)", len(nkey), len(okey))
}
@@ -215,11 +214,11 @@
klIdx := keyIdx - 4
buf := bytes.NewBuffer(mfgBin[klIdx : klIdx+4])
if err := binary.Read(buf, binary.LittleEndian, &kl); err != nil {
- return util.ChildNewtError(err)
+ return errors.Wrapf(err, "failed to read key length")
}
if int(kl) != len(okey) {
- return util.FmtNewtError(
+ return errors.Errorf(
"embedded key length (off=%d) has unexpected value; "+
"want=%d have=%d",
klIdx, len(okey), kl)
@@ -228,7 +227,7 @@
buf = &bytes.Buffer{}
kl = uint32(len(nkey))
if err := binary.Write(buf, binary.LittleEndian, kl); err != nil {
- return util.ChildNewtError(err)
+ return errors.Wrapf(err, "failed to write key length")
}
copy(mfgBin[klIdx:klIdx+4], buf.Bytes())
diff --git a/imgmod.go b/imgmod.go
index 1677525..14f3692 100644
--- a/imgmod.go
+++ b/imgmod.go
@@ -20,19 +20,14 @@
package main
import (
- "fmt"
-
+ "github.com/apache/mynewt-artifact/errors"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"mynewt.apache.org/imgmod/cli"
- "mynewt.apache.org/newt/util"
+ "mynewt.apache.org/imgmod/iutil"
)
-var ImgmodLogLevel log.Level
-var imgmodSilent bool
-var imgmodQuiet bool
-var imgmodVerbose bool
var imgmodVersion = "0.0.2"
func main() {
@@ -46,24 +41,11 @@
Long: imgmodHelpText,
Example: imgmodHelpEx,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
- verbosity := util.VERBOSITY_DEFAULT
- if imgmodSilent {
- verbosity = util.VERBOSITY_SILENT
- } else if imgmodQuiet {
- verbosity = util.VERBOSITY_QUIET
- } else if imgmodVerbose {
- verbosity = util.VERBOSITY_VERBOSE
- }
-
logLevel, err := log.ParseLevel(logLevelStr)
if err != nil {
- cli.ImgmodUsage(nil, util.ChildNewtError(err))
+ cli.ImgmodUsage(nil, errors.Wrapf(err, "failed to parse log level"))
}
- ImgmodLogLevel = logLevel
-
- if err := util.Init(ImgmodLogLevel, "", verbosity); err != nil {
- cli.ImgmodUsage(nil, err)
- }
+ log.SetLevel(logLevel)
},
Run: func(cmd *cobra.Command, args []string) {
@@ -71,12 +53,10 @@
},
}
- imgmodCmd.PersistentFlags().BoolVarP(&imgmodVerbose, "verbose", "v", false,
+ imgmodCmd.PersistentFlags().BoolVarP(&iutil.Verbose, "verbose", "v", false,
"Enable verbose output when executing commands")
- imgmodCmd.PersistentFlags().BoolVarP(&imgmodQuiet, "quiet", "q", false,
+ imgmodCmd.PersistentFlags().BoolVarP(&iutil.Quiet, "quiet", "q", false,
"Be quiet; only display error output")
- imgmodCmd.PersistentFlags().BoolVarP(&imgmodSilent, "silent", "s", false,
- "Be silent; don't output anything")
imgmodCmd.PersistentFlags().StringVarP(&logLevelStr, "loglevel", "l",
"WARN", "Log level")
@@ -88,7 +68,7 @@
Long: versHelpText,
Example: versHelpEx,
Run: func(cmd *cobra.Command, args []string) {
- fmt.Printf("%s\n", imgmodVersion)
+ iutil.Printf("%s\n", imgmodVersion)
},
}
imgmodCmd.AddCommand(versCmd)
diff --git a/iutil/iutil.go b/iutil/iutil.go
new file mode 100644
index 0000000..4e07607
--- /dev/null
+++ b/iutil/iutil.go
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package iutil
+
+import "fmt"
+
+var Quiet bool
+var Verbose bool
+
+func Printf(format string, args ...interface{}) {
+ if !Quiet {
+ fmt.Printf(format, args...)
+ }
+}
+
+func PrintfVerbose(format string, args ...interface{}) {
+ if Verbose {
+ fmt.Printf(format, args...)
+ }
+}