I am running into the Goldreich Levin Theorem.
According to what I know a predicate $h: \{ 0,1 \}^* \to \{ 0,1 \} $ is a hardcore predicate for a function $f: \{ 0,1 \}^* \to \{ 0,1 \}^* $ if:
- $h$ is deterministic and efficiently computable
- It's hard to find $h(x)$ given $f(x)$ for any probabilistic time adversary
The Goldreich Levin Theorem states that a hardcore predicate can be found given any OWF
According to Wikipedia (https://en.wikipedia.org/wiki/Hard-core_predicate) and every other research paper that I found (ie. https://www3.cs.stonybrook.edu/~omkant/S06.pdf) this hardcore predicate is generated as follows:
"Let $f$ be a OWF (OWP). We defined the function $g(x, r) = (f(x), r)$ where, $|x| = |r|$. It is not hard to see that g is also a OWF (OWP). The Goldreich-Levin Theorem proves that $h(x, r) =< x, r >$ is a hard core predicate for $g$."
I don't really understand the $<x, r>$ notation, in Wikipedia I found that <> stands for inner product / XOR. But according to the definition above, a hardcore predicate $h: \{ 0,1 \}^* \to \{ 0,1 \} $ for a function $f: \{ 0,1 \}^* \to \{ 0,1 \}^* $ is supposed to be a decission problem (0/1) whereas in this definition $|h(x)| > 1$, actually it should be $|h(x)| = |x| = |r| = |x \oplus r|$
EDIT
I have found this question in the forum about the notation What Does This Symbol Mean? (Hardcore Predicates for One-Way Functions) but it still doesn't solve my question about the output size of the hardcore predicate