I worked on a physics engine written in C# that does just this.
Here are my notes on this topic.
Objects have both translational and rotational momentum.
When two objects collide, the overall algorithm goes like this:
1> Find the total momentum of both objects. Calculate the translational and rotational momentum, the vector sum of this is the total momentum of the object.
2> Split the momentum using the usual momentum splitting equation you would ordinarily use. (As in here)
Each object now has their new momentum. The next step is to decide how much of that momentum is translational and rotational.
3> Imagine a vector A which goes from the point of collision to the center of mass of the object that was hit. The component of the incoming momentum vector which is parallel with A forms the new translational momentum vector, the rest of the vector represents rotational momentum.
The extra notes I have linked to show more details on my methematical working, and also a description of how to handle inelastic collisions.
You can find the physics engine here, and an implementation of the collision handling here