#CJam, 14 13 bytes
CJam, 14 13 bytes
q~2bf*{\2*^}*
How it works:
We first get the long multiplication results and then work our way up starting from the bottom two pairs.
q~ e# Eval the input. This puts the two numbers on stack
2b e# Convert the second number to binary
f* e# Multiply each bit of second number with the first number
e# This leaves an array with the candidates to be added in the long
e# multiplication step
{ }* e# Reduce on these candidates. Starting from the bottom
\2* e# Bit shift the lower candidate
^ e# XOR each other and continue