in cli/image_cmds.go [298:363]
func runHashableCmd(cmd *cobra.Command, args []string) {
if len(args) < 1 {
ImgmodUsage(cmd, nil)
}
if OptOutFilename == "" {
ImgmodUsage(cmd, errors.Errorf("--outfile (-o) option required"))
}
inFilename := args[0]
outFilename := OptOutFilename
img, err := readImage(inFilename)
if err != nil {
ImgmodUsage(cmd, err)
}
if (img.Header.Flags & image.IMAGE_F_ENCRYPTED) != 0 {
iutil.Printf("warning: extracting hashable content from an encrypted image\n")
}
f, err := os.Create(outFilename)
if err != nil {
ImgmodUsage(nil, errors.Wrapf(err, "failed to create hashable output"))
}
defer f.Close()
err = binary.Write(f, binary.LittleEndian, &img.Header)
if err != nil {
ImgmodUsage(nil, errors.Wrapf(err, "error writing image header"))
}
_, err = f.Write(img.Pad)
if err != nil {
ImgmodUsage(nil, errors.Wrapf(err, "error writing image padding"))
}
_, err = f.Write(img.Body)
if err != nil {
ImgmodUsage(nil, errors.Wrapf(err, "error writing image body"))
}
if len(img.ProtTlvs) > 0 {
trailer := image.ImageTrailer{
Magic: image.IMAGE_PROT_TRAILER_MAGIC,
TlvTotLen: img.Header.ProtSz,
}
err = binary.Write(f, binary.LittleEndian, trailer)
if err != nil {
ImgmodUsage(nil, errors.Wrapf(err, "error writing image protected TLV trailer"))
}
for _, t := range img.ProtTlvs {
err = binary.Write(f, binary.LittleEndian, t.Header)
if err != nil {
ImgmodUsage(nil, errors.Wrapf(err, "error writing image protected TLVs"))
}
_, err = f.Write(t.Data)
if err != nil {
ImgmodUsage(nil, errors.Wrapf(err, "error writing image protected TLVs"))
}
}
}
iutil.Printf("Wrote hashable content to %s\n", outFilename)
}