func ReplaceKek()

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
}