This is an automated email from the ASF dual-hosted git repository.

agross pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-artifact.git


The following commit(s) were added to refs/heads/master by this push:
     new 64169ed  Fix encrypted image support
     new 21a0320  Merge pull request #31 from utzig/fix-encrypted-images
64169ed is described below

commit 64169ed99ee78ce7b12445fd389907199470d808
Author: Fabio Utzig <[email protected]>
AuthorDate: Mon Mar 15 20:13:49 2021 -0300

    Fix encrypted image support
    
    When encrypting images, the hash was being calculated using the
    encrypted image body. This is invalid for MCUboot, the hash must be
    calculated first from the plain body and afterwards this body must be
    encrypted. This commit fixes the behavior.
    
    Signed-off-by: Fabio Utzig <[email protected]>
---
 image/create.go | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/image/create.go b/image/create.go
index 129baaa..0217f2c 100644
--- a/image/create.go
+++ b/image/create.go
@@ -553,19 +553,28 @@ func (ic *ImageCreator) Create() (Image, error) {
        img.Header.ProtSz = calcProtSize(img.ProtTlvs)
 
        // Followed by data.
+       var hashBytes []byte
+       var err error
        if ic.PlainSecret != nil {
+               // For encrypted images, must calculate the hash with the plain
+               // body and encrypt the payload afterwards
+               img.Body = append(img.Body, ic.Body...)
+               hashBytes, err = img.CalcHash(ic.InitialHash)
+               if err != nil {
+                       return img, err
+               }
                encBody, err := sec.EncryptAES(ic.Body, ic.PlainSecret, 
ic.Nonce)
                if err != nil {
                        return img, err
                }
+               img.Body = nil
                img.Body = append(img.Body, encBody...)
        } else {
                img.Body = append(img.Body, ic.Body...)
-       }
-
-       hashBytes, err := img.CalcHash(ic.InitialHash)
-       if err != nil {
-               return img, err
+               hashBytes, err = img.CalcHash(ic.InitialHash)
+               if err != nil {
+                       return img, err
+               }
        }
 
        // Hash TLV.

Reply via email to