Closed
Description
Good time of the day,
with go 1.15 release it seems there is some regression issue introduced with respect to crypto/hmac
package.
Was troubleshooting dvsekhvalnov/jose2go#26 and found that hmac.Reset()
is no longer behave same way as it was before (at least when called first), crafted minimal test case:
package main
import (
"crypto/hmac"
"crypto/sha256"
"fmt"
"hash"
)
func main() {
sha := sha256.New()
hmac := hmac.New(func() hash.Hash { return sha }, []byte("anything"))
hmac.Reset() // if you try to comment / uncomment that line, go 1.15 will produce different results
hmac.Write([]byte("salt"))
test := hmac.Sum(nil)
fmt.Printf("test = %v\n", test)
}
Is it producing output:
[169 238 50 31 23 163 57 12 228 112 77 219 51 95 12 6 185 17 156 244 116 243 186 227 89 79 64 19 227 242 86 186]
on go v1.15[213 21 105 177 57 151 62 247 23 137 16 75 59 26 241 187 229 148 88 219 30 222 223 77 186 120 81 74 247 237 232 66]
on go v.14 and below
, more over toggling leading hmac.Reset()
will produce different results with 1.15 vs. previous versions.
It seems change was introduced by 97240d5
So will tag @magical and @FiloSottile here.
Honestly i don't know may be calling hmac.Reset
before everything else is not sane idea, but it's not documented anywhere and clearly was behaving differently before.
Thank you.