Q:

Ethiopian Multiplication

This question is inspired by this answer.  Coincidentally, I used to use Ethiopian Multiplication when I was a kid, but had never known the name of the method until recently. 
Ethiopian multiplication is a method of multiplying integers using only addition, doubling, and halving. 
Method:

Take two numbers to be multiplied and write them down at the top of two columns. 
In the left-hand column repeatedly halve the last number, discarding any remainders, and write the result below the last in the same column, until you write a value of 1. 
In the right-hand column repeatedly double the last number and write the result below.  stop when you add a result in the same row as where the left hand column shows 1. 
Examine the table produced and discard any row where the value in the left column is even. 
Sum the values in the right-hand column that remain to produce the result of multiplying the original two numbers together. 

For example: 17 x 34
17    34

Halving the first column:
17    34
 8
 4
 2
 1

Doubling the second column:
17    34
 8    68
 4   136 
 2   272
 1   544

Strike-out rows whose first cell is even, we'll do this by encasing those numbers on the right in square brackets:
17    34
 8   [68]
 4  [136]
 2  [272]
 1   544

Sum the remaining numbers in the right-hand column:
17    34
 8   [68]
 4  [136]
 2  [272]
 1   544
    =====
     578

So 17 multiplied by 34, by the Ethiopian method is 578. 
The Task:
Golf code that takes two numbers between 1 and 1000 and perform the same layout and algorithm, displaying the product below. 
Input Method: However you choose...
Example Input:
19 427

Resulting Output:
19   427
 9   854
 4 [1708]
 2 [3416]
 1  6832
   ======
    8113

Please note the alignment of the digits.  This is most important in the layout. 
Also note that the double line laid out by equal signs must be two characters longer than the overall answer and must be centre justified. 
Testing
How will you be testing this?  By providing a run of your program using two numbers.  These numbers can be extracted from your user ID number (this can be obtained by hovering your cursor over your avatar on the top window).  Take your number and take the last three digits, this will be number B, take whatever else remains at the front, that will be number A. Then test for A times B.
Testing example:
My user ID number is 8555, so my numbers are 8 and 555.  So my output should look like this:
8  [555]
4 [1110]
2 [2220]
1  4440
  ======
   4440

Restrictions:
No native multiplication operators permitted save for in the use of "doubling", as per mentioned in the algorithm.  In other words, if you're using an operator like *, it can only be used for multiplying by 2 only. 
Entries that do not adhere to this will not be considered and the user will be escorted off the premises with a cardboard box full of their belongings.  Each entry will have code, plus the test based on your user ID number. 
This is code golf.  Shortest number of bytes will receive the prize, glory and admiration of their peers... (And maybe a Lamborghini... I said "maybe"!) 

A:

Python 2, 203 202 187 133 bytes
a,b=input()
s=0
while a:print'%3s%9s'%(a,'[ %%dd] '[a%2::2]%b);s+=[0,b][a%2];a/=2;b*=2
print'%10s==\n%11s'%(''.rjust(len(`s`),'='),s)

Try it online! 
If I can use * for string multiplication ('='*R) and as a 'selector' (b*(a%2) instead of [0,b][a%2]), I get:
118 bytes
a,b=input()
s=0
while a:print'%3s%9s'%(a,'[ %%dd] '[a%2::2]%b);s+=a%2*b;a/=2;b*=2
print'%10s==\n%11s'%('='*len(`s`),s)

Try it online! 

Explanation:
a,b=input()                   #Get input
L=len(`a`)                    #Get length of first number for adjusting text
l=[]                          #Output list
s=0                           #Sum
while a:
 B=['[%d]',' %d '][a%2]%b     #B is either '[b]' or ' b ' depending on if a is odd/even
 l+=[(`a`,B)]                 #Add a,B to output list
 s+=[0,b][a%2]                #Add b to sum if a is odd
 a/=2;                        #Halve a
 b*=2;                        #Double b
R=len(B)                      #Length of last B for adjusting output
l+=[('',''.rjust(R,'='))]     #Add double line ==== to output list
l+=[('','%d '%s)]             #Add sum to output list
for x,y in l:
 print x.rjust(L),y.rjust(R)  #Print adjusted numbers

A:

Charcoal, 91 bytes
≔⟦⟧τ≔⁰σＮθＮηＷθ«⊞τ⪫  Ｉθ⊞υ⪫⎇﹪θ²  ¦[]Ｉη≔⁺σ∧﹪θ²ησ≔÷θ²θ≔⁺ηηη»⊞υ…=⁺²ＬＩσ⊞υ⪫  Ｉσ←Ｅ⮌τ⮌ιＭ⌈ＥυＬιＬυ←Ｅ⮌υ⮌ι

Try it online!  Link is to verbose version of code.  Explanation:
≔⟦⟧τ≔⁰σ

Sets t to the empty list and s to 0. ( u already defaults to the empty list.) 
ＮθＮη

Inputs the two numbers. 
Ｗθ«

Repeats while q is nonzero. 
   ⊞τ⪫  Ｉθ

Wrap q in padding and append it to the list t.
   ⊞υ⪫⎇﹪θ²  ¦[]Ｉη

Wrap h either in padding or [] depending on whether q is odd, and append it to the list u.
   ≔⁺σ∧﹪θ²ησ

Add h to s if q is odd. 
   ≔÷θ²θ

Integer divide q by 2. 
   ≔⁺ηηη»

Add h to itself. 
⊞υ…=⁺²ＬＩσ

Append a suitable string of = signs to the list u.
⊞υ⪫  Ｉσ

Append the padded sum s to the list u.
←Ｅ⮌τ⮌ι

Rotate the list t by 180° and print it up-side down, thus right-justifying it. 
Ｍ⌈ＥυＬιＬυ←Ｅ⮌υ⮌ι

Move the cursor so that when u is right-justified its top left corner lines up with the top-right corner we just reached, and print u right-justified. 

A:

Java (OpenJDK 8), 353 316 267 214 210 bytes
(a,b)->{int g=0;for(;a>0;g+=a%2*b,a/=2,b*=2)System.out.printf("%1$8d%2$10s\n",a,a%2<1?"["+b+"]":b+" ");System.out.printf("%1$19s%2$18s","".valueOf(new char[(int)Math.log10(g)+3]).replace("\0","=")+"\n",g+" ");}

Try it online!