in imfg/imfg.go [267:302]
func ReplaceKek(mfgBin []byte, okey []byte, nkey []byte) error {
if len(nkey) > len(okey) {
return errors.Errorf(
"new key longer than old key (%d > %d)", len(nkey), len(okey))
}
keyIdx, err := replaceKey(mfgBin, okey, nkey)
if err != nil {
return err
}
// The key length is an unsigned int immediately prior to the key.
var kl uint32
klIdx := keyIdx - 4
buf := bytes.NewBuffer(mfgBin[klIdx : klIdx+4])
if err := binary.Read(buf, binary.LittleEndian, &kl); err != nil {
return errors.Wrapf(err, "failed to read key length")
}
if int(kl) != len(okey) {
return errors.Errorf(
"embedded key length (off=%d) has unexpected value; "+
"want=%d have=%d",
klIdx, len(okey), kl)
}
buf = &bytes.Buffer{}
kl = uint32(len(nkey))
if err := binary.Write(buf, binary.LittleEndian, kl); err != nil {
return errors.Wrapf(err, "failed to write key length")
}
copy(mfgBin[klIdx:klIdx+4], buf.Bytes())
return nil
}