How are transaction hashes calculated? I'm trying to calculate the hash of transactions in bitcoin blocks, but I'm not getting the right answers.

For example, the genesis block has a single transaction.

Here's how I'm attempting to calculate its hash...

Transactions are encoded as:


a 32 bit 'nVersion'
a list of input transactions, vin
a list of output transactions, vout
a 32 bit 'nLockTime'


For the transaction in the genesis block, these are:


nVersion: 01000000
inputs

count: 01
1st input:

prevout_hash: 0000000000000000000000000000000000000000000000000000000000000000
prevout_n: ffffffff
scriptSig: 4d:04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73
sequence: ffffffff


outputs

count: 01
1st output:

value: 00f2052a01000000 (hex(50*10^8) is 0000012a05f200, and bitcoin puts the bytes in reverse order)
scriptPubKey: 43:4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac


nLockTime: 00000000


If I string all those together end to end, I get 204 bytes: 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Taking the sha256 hash of this gives 27362e66e032c731c1c8519f43063fe0e5d070db1c0c3552bb04afa18a31c6bf.

Taking the sha256 hash of that hash gives 3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a.

But the real transaction hash according to blockexplorer.com is 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b.

What am I doing wrong?  How can I get to the correct transaction hash?

Here's my working in Python:

&gt;&gt;&gt; import Crypto.Hash.SHA256 as hash, binascii
&gt;&gt;&gt; tx = '01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000'
&gt;&gt;&gt; len(binascii.unhexlify(tx))
204
&gt;&gt;&gt; hash.new(binascii.unhexlify(tx)).digest().encode('hex_codec')
'27362e66e032c731c1c8519f43063fe0e5d070db1c0c3552bb04afa18a31c6bf'
&gt;&gt;&gt; hash.new(hash.new(binascii.unhexlify(tx)).digest()).digest().encode('hex_codec')
'3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a'
Taking the sha256 hash of that hash gives
  
  3b a3 ed fd 7a 7b ..............
  
  But the real transaction hash according to blockexplorer.com is
  
  .............. 7b 7a fd ed a3 3b


The answer I was getting was correct, but bytewise reversed.  I need to get used to Bitcoin using little-endian storage.