Pippenger with \(w\)NAF

Pippenger Algorithm

  • Scalar multiplication of \(N\) scalars and points in \(\mathcal{O}(N / \text{log}(N))\)
  • Suppose we wish to compute
Q = \textcolor{orange}{25} \textcolor{grey}{\cdot P_1} + \textcolor{orange}{37} \textcolor{grey}{\cdot P_2} + \textcolor{orange}{142} \textcolor{grey}{\cdot P_3} + \textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}

Pippenger Algorithm

  • Scalar multiplication of \(N\) scalars and points in \(\mathcal{O}(N / \text{log}(N))\)
  • Suppose we wish to compute
Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00011001}
\textcolor{orange}{00100101}
\textcolor{orange}{10001110}
\textcolor{orange}{10101011}

Pippenger Algorithm

  • Scalar multiplication of \(N\) scalars and points in \(\mathcal{O}(N / \text{log}(N))\)
  • Suppose we wish to compute
Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 1

00
01
10
11
\textcolor{grey}{P_1}

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 1

00
01
10
11
\textcolor{grey}{P_1}
\textcolor{grey}{+ P_2}

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 1

00
01
10
11
\textcolor{grey}{P_1}
\textcolor{grey}{P_3}
\textcolor{grey}{+ P_2}

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 1

00
01
10
11
\textcolor{grey}{P_1}
\textcolor{grey}{P_3}
\textcolor{grey}{+ P_4}
\textcolor{grey}{+ P_2}

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 1

00
01
10
11
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
\textcolor{grey}{P_1}
\textcolor{grey}{+ P_2}
\textcolor{grey}{P_3}
\textcolor{grey}{+ P_4}

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 2

00
01
10
11

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 2

00
01
10
11
\textcolor{grey}{P_1}
\textcolor{grey}{P_2 + P_4}
\textcolor{grey}{P_3}

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 2

00
01
10
11
\textcolor{grey}{P_1}
\textcolor{grey}{P_2 + P_4}
\textcolor{grey}{P_3}
Q_2 = (\hspace{0.55cm}) + 2(\hspace{0.55cm}) + 3(\hspace{1.2cm})

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 3

Q_3 = 2(\ \textcolor{grey}{P_2} \ ) + 3( \ \textcolor{grey}{P_1 + P_4} \ ) + 4(\ \textcolor{grey}{P_3} \ )
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
\textcolor{grey}{P_1}
\textcolor{grey}{+ P_2}
\textcolor{grey}{P_3}
\textcolor{grey}{+ P_4}
\textcolor{grey}{P_1}
\textcolor{grey}{P_2 + P_4}
\textcolor{grey}{P_3}
Q_2 = (\hspace{0.55cm}) + 2(\hspace{0.55cm}) + 3(\hspace{1.2cm})

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}

Round 4

Q_3 = 2(\ \textcolor{grey}{P_2} \ ) + 3( \ \textcolor{grey}{P_1 + P_4} \ ) + 4(\ \textcolor{grey}{P_3} \ )
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
\textcolor{grey}{P_1}
\textcolor{grey}{+ P_2}
\textcolor{grey}{P_3}
\textcolor{grey}{+ P_4}
\textcolor{grey}{P_1}
\textcolor{grey}{P_2 + P_4}
\textcolor{grey}{P_3}
Q_2 = (\hspace{0.55cm}) + 2(\hspace{0.55cm}) + 3(\hspace{1.2cm})
Q_4 = 2(\ \textcolor{grey}{P_1 + P_2} \ ) + 3( \ \textcolor{grey}{P_3} \ ) + 4(\ \textcolor{grey}{P_4} \ )

Pippenger Algorithm

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}
Q_3 = 2(\ \textcolor{grey}{P_2} \ ) + 3( \ \textcolor{grey}{P_1 + P_4} \ ) + 4(\ \textcolor{grey}{P_3} \ )
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
\textcolor{grey}{P_1}
\textcolor{grey}{+ P_2}
\textcolor{grey}{P_3}
\textcolor{grey}{+ P_4}
\textcolor{grey}{P_1}
\textcolor{grey}{P_2 + P_4}
\textcolor{grey}{P_3}
Q_2 = (\hspace{0.55cm}) + 2(\hspace{0.55cm}) + 3(\hspace{1.2cm})
Q_4 = 2(\ \textcolor{grey}{P_1 + P_2} \ ) + 3( \ \textcolor{grey}{P_3} \ ) + 4(\ \textcolor{grey}{P_4} \ )
2^6 \cdot
Q =
+ \ 2^4 \cdot
+ \ 2^2 \cdot
+ \ 2^0 \cdot
  • Pippenger algorithm is great but it's still got problems 
  • Each round needs to iterate over all \(N\) points, irrespective of slice size
  • Larger slice size \(\implies\) fewer rounds, but more work per round
  • Bucket access is random in memory \(\implies\) difficult to parallelise
  • Can we reduce the number of buckets?
  • Can we pre-process the scalars in "bucket-order"?

Tradeoffs with Pippenger

Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{00} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01}
\textcolor{orange}{00} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{01} \qquad \textcolor{orange}{01}
\textcolor{orange}{10} \qquad \textcolor{orange}{00} \qquad \textcolor{orange}{11} \qquad \textcolor{orange}{10}
\textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{10} \qquad \textcolor{orange}{11}
1
2
3
4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Q =
\textcolor{orange}{25} \textcolor{grey}{\cdot P_1}
\textcolor{orange}{0001} \qquad \textcolor{orange}{1001}
+
\textcolor{orange}{37} \textcolor{grey}{\cdot P_2}
\textcolor{orange}{0010} \qquad \textcolor{orange}{0101}
+
\textcolor{orange}{142} \textcolor{grey}{\cdot P_3}
\textcolor{orange}{1000} \qquad \textcolor{orange}{1110}
+
\textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
\textcolor{orange}{1010} \qquad \textcolor{orange}{1011}

\(w\)NAF Representation

  • The number of buckets is decided by the range of the bit-slice
    • \(2\)-bit slice \(\implies 2^2\) buckets
    • \(b\)-bit slice \(\implies 2^b\) buckets
  • \(w\)NAF representation allows using \(2^{b - 1}\) buckets for a \(b\)-bit slice
  • \(w\)NAF \(\equiv\) windowed Non-Adjacent Form
  • Two non-zero digits are never adjacent \(\implies\) lower Hamming weight
23 = 2^4 + 2^2 + 2^1 + 2^0
\implies (1, 0, 1, 1, 1)

Binary:

\(2\)-NAF:

23 = 2^5 - 2^3 - 2^0
\implies (1, 0, -1, 0, 0, 1)

Modified \(2\)-NAF:

23 = 4^3 - 3 \cdot 4^2 + 4^1 + 3 \cdot 4^0
\implies (1, -3, 1, 3)

Pippenger with \(w\)NAF

Q = \textcolor{orange}{25} \textcolor{grey}{\cdot P_1} + \textcolor{orange}{37} \textcolor{grey}{\cdot P_2} + \textcolor{orange}{142} \textcolor{grey}{\cdot P_3} + \textcolor{orange}{171} \textcolor{grey}{\cdot P_4}
Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
= 64 - 48 + 12 - 3 = 25
= 64 - 16 - 12 + 1 = 37
= 192 - 48 - 4 + 3 = 143
= 192 - 16 - 4 - 1 = 171

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 1

1
3

Need only two buckets, one each for \(P\) and \(3P,\) can trivially compute \(-P, -3P\)

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 1

P_1
1
3

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 1

P_1
+ P_2
1
3

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 1

P_1
+ P_2
1
3
P_3

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 1

P_1
+ P_2
1
3
P_3
+P_4

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 1

1
3
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
P_1
+ P_2
P_3
+P_4

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 2

1
3
-P_1

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 2

1
3
-P_1
-P_2

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 2

1
3
-P_1
-P_2
-P_3

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 2

1
3
-P_1
-P_2
-P_3
-P_4

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 2

1
3
Q_2 = (\hspace{1.3cm}) + 3(\hspace{1.3cm})
-P_2
-P_4
-P_1
-P_3

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 3

Q_2 = (\hspace{1.3cm}) + 3(\hspace{1.3cm})
-P_2
-P_4
-P_1
-P_3
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
P_1
+ P_2
P_3
+P_4
Q_3 = (\ \textcolor{grey}{-P_3-P_4} \ ) + 3( \ \textcolor{grey}{P_1 - P_2} \ )

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \ \ \qquad 4^2 \quad \qquad 4^1 \ \ \qquad 4^0
\textsf{skew}
0
0
1
0

Round 4

Q_2 = (\hspace{1.3cm}) + 3(\hspace{1.3cm})
-P_2
-P_4
-P_1
-P_3
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
P_1
+ P_2
P_3
+P_4
Q_3 = (\ \textcolor{grey}{-P_3-P_4} \ ) + 3( \ \textcolor{grey}{P_1 - P_2} \ )
Q_4 = (\ \textcolor{grey}{P_2+P_3-P_4} \ ) + 3( \ \textcolor{grey}{-P_1} \ )

Pippenger with \(w\)NAF

Q =
\textcolor{lightgreen}{25} \textcolor{grey}{\cdot P_1}
\textcolor{lightgreen}{37} \textcolor{grey}{\cdot P_2}
+
+
+
\textcolor{lightgreen}{142} \textcolor{grey}{\cdot P_3}
\textcolor{lightgreen}{171} \textcolor{grey}{\cdot P_4}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3}
\textcolor{lightgreen}{1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-3} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-3} \quad \textcolor{lightgreen}{-1} \qquad \textcolor{lightgreen}{1}
\textcolor{lightgreen}{3} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1} \quad \textcolor{lightgreen}{-1}
4^3 \qquad \qquad \qquad 4^2 \qquad\qquad \qquad 4^1 \qquad \qquad \quad 4^0
Q_2 = (\hspace{1.3cm}) + 3(\hspace{1.3cm})
-P_2
-P_4
-P_1
-P_3
Q_1 = (\hspace{1.1cm}) + 3(\hspace{1.1cm})
P_1
+ P_2
P_3
+P_4
Q_3 = (\ \textcolor{grey}{-P_3-P_4} \ ) + 3( \ \textcolor{grey}{P_1 - P_2} \ )
Q_4 = (\ \textcolor{grey}{P_2+P_3-P_4} \ ) + 3( \ \textcolor{grey}{-P_1} \ )
\textsf{skew}
0
0
1
0
2^6 \cdot
Q =
+ \ 2^4 \cdot
+ \ 2^2 \cdot
+ \ 2^0 \cdot

Comparison w/ Basic Pippenger

Lesser buckets \(\implies\) more collisions

Loop over lesser buckets

Bucket multiplier is smaller