Skip to content

Commit 23df81f

Browse files
committed
crypto/attachments: fix hash check when decrypting
1 parent 78aea00 commit 23df81f

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

crypto/attachment/attachments.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package attachment
99
import (
1010
"crypto/aes"
1111
"crypto/cipher"
12+
"crypto/hmac"
1213
"crypto/sha256"
1314
"encoding/base64"
1415
"errors"
@@ -217,9 +218,7 @@ func (r *encryptingReader) Close() (err error) {
217218
err = closer.Close()
218219
}
219220
if r.isDecrypting {
220-
var downloadedChecksum [utils.SHAHashLength]byte
221-
r.hash.Sum(downloadedChecksum[:])
222-
if downloadedChecksum != r.file.decoded.sha256 {
221+
if !hmac.Equal(r.hash.Sum(nil), r.file.decoded.sha256[:]) {
223222
return HashMismatch
224223
}
225224
} else {
@@ -274,12 +273,13 @@ func (ef *EncryptedFile) PrepareForDecryption() error {
274273
func (ef *EncryptedFile) DecryptInPlace(data []byte) error {
275274
if err := ef.PrepareForDecryption(); err != nil {
276275
return err
277-
} else if ef.decoded.sha256 != sha256.Sum256(data) {
276+
}
277+
dataHash := sha256.Sum256(data)
278+
if !hmac.Equal(ef.decoded.sha256[:], dataHash[:]) {
278279
return HashMismatch
279-
} else {
280-
utils.XorA256CTR(data, ef.decoded.key, ef.decoded.iv)
281-
return nil
282280
}
281+
utils.XorA256CTR(data, ef.decoded.key, ef.decoded.iv)
282+
return nil
283283
}
284284

285285
// DecryptStream wraps the given io.Reader in order to decrypt the data.
@@ -292,9 +292,10 @@ func (ef *EncryptedFile) DecryptInPlace(data []byte) error {
292292
func (ef *EncryptedFile) DecryptStream(reader io.Reader) io.ReadSeekCloser {
293293
block, _ := aes.NewCipher(ef.decoded.key[:])
294294
return &encryptingReader{
295-
stream: cipher.NewCTR(block, ef.decoded.iv[:]),
296-
hash: sha256.New(),
297-
source: reader,
298-
file: ef,
295+
isDecrypting: true,
296+
stream: cipher.NewCTR(block, ef.decoded.iv[:]),
297+
hash: sha256.New(),
298+
source: reader,
299+
file: ef,
299300
}
300301
}

0 commit comments

Comments
 (0)