func hmacHash()

in lib/crypto.go [549:581]


func hmacHash(args ...ref.Val) ref.Val {
	if len(args) != 3 {
		return types.NewErr("no such overload for hmac")
	}
	var val []byte
	switch arg := args[0].(type) {
	case types.Bytes:
		val = []byte(arg)
	case types.String:
		val = []byte(arg)
	default:
		return types.NoSuchOverloadErr()
	}
	hashName, ok := args[1].(types.String)
	if !ok {
		return types.ValOrErr(args[1], "no such overload")
	}
	key, ok := args[2].(types.Bytes)
	if !ok {
		return types.ValOrErr(args[2], "no such overload")
	}
	var mac hash.Hash
	switch hashName {
	case "sha1":
		mac = hmac.New(sha1.New, key)
	case "sha256":
		mac = hmac.New(sha256.New, key)
	default:
		return types.NewErr("invalid hash for hmac: %s", hashName)
	}
	mac.Write([]byte(val))
	return types.Bytes(mac.Sum(nil))
}