Any impulse-based collision algorithm requires some quantities to describe the collision conditions.
Each collision occurs at a point in space, and often the impulse exchanged is along a predetermined axis. Anytime a surface is in contact with a point, then this direction is the surface normal. Even if two curved surfaces are in contact, there exists a direction that is perpendicular to both surfaces at the point of contact.
This is called the contact normal, and it is designated by the vector $\boldsymbol{n}$ usually.
The law of contact described the relative speed of the objects after the contact $u_{\rm bounce}$ as a function of the relative speed before the contact $u_{\rm impact}$. This law states
$$ u_{\rm bounce} = - \epsilon \; u_{\rm impact} $$
The $\epsilon$ here is a scalar value between 0 and 1, and it is called the coefficient of restitution.
It describes how bouncy the contact is. A value of 0, means the objects will stick together, and with a value 1, they will bounce apart (at maximum speed without violating the conservation of energy).
We use the contact normal to find the impact speed
$$ u_{\rm impact} = \boldsymbol{n} \cdot ( \boldsymbol{v}_1^\text{contact} - \boldsymbol{v}_2^\text{contact})$$
where $\boldsymbol{v}_i^\text{contact}$ is the velocity of body i at the contact point, and $\cdot$ is the vector dot product.
In a computer environment you would do $\boldsymbol{a} \cdot \boldsymbol{b} = \boldsymbol{a}^\top \boldsymbol{b}$, where ${}^\top$ is the transpose operation.
References: