Cypherpunks challenge part 3: Stream Ciphers

Welcome to stage 3 of the cypherpunks challenge, below you will find the ciphertext and the code used to encrypt it, good luck and have fun!

Ciphertext: 4cc2ae9a45702a881e2ef1a7573d0ca57c02002c19e5567f7b0d05205caa30821efbeec75a2d4c577930308e0116b86f2a12187f6a195b3e7ac4d36b6b53455877ebfe5e2874ca127ea1014e4a88fe2f7175c6b216c069f4705973af11176c043bfe64564fab10c34a37b2466083d3aa4f0e46f078ab02bf550e21e25593e1c34aae278c57c9ba9308934c8f01a834b35c5fbb392a800d726edd162262f0459974e544cc0370e75b264fd0c3385f4a6765f8cf3e3492593f415ed2614de0d25e59f5f60d0a5de65a326eeb0537f5ec390b92b3fe15b9f0e91f7db8bc6c9b0b4a67304356253bb9d93bf8ed4f308108aa1c0416ed54a4cdfa5070cbfd7987a78a64052a8e2b48b2885fd2e69d3a9bb7a956bbae300198317b4f26716e1e7f6f892a0f77df356b5c5f706ec9cb4f214465117de27b472fd32e3a5e7d6f26b63e27059afc5e6a3ba85a130845042193446a4f98ffab73f992ee631637ad5555290f07f3f65c42a9a2ce4572fa4b6646f0aa5992acbe36e038f677f177e5783d37c27272ea98756d019615744b8b229f48a548994e3623a9df6f78cd612b3512498e48371fdb10eb0b4f1de915a32d61c86460ecc36e0ec5ca3f5a1bcf6474ac81270903a91b01edfd0e3c92b3543439363d65a2bab10ef03ef85b0881a1706ddf0b745291010feeb4d814569b782bf733c346fad1

IMPORTANT: You may assume the plaintext is only ASCII printable characters (including whitespace). e.g. python's string.printable is a suitable charset.

randu-cipher.py: code used for creating the ciphertext

import binascii
import struct
import sys

# xor two messages
def xor(a, b):
    return ''.join([chr(ord(a[i]) ^ ord(b[i])) for i in range(len(a))])

#stream cipher constants
a = 65539
m = 2**31

# run the stream cipher!
def generateStream(key, length):
    x = key
    stream = struct.pack(">L", x)
    while len(stream) < len(msg):
        x = (a*x) % m
        stream += struct.pack(">L", x)
    return stream


msg = "Test message"
key = 0x12345678   # key - you need to crack this!

stream = generateStream(key, len(msg))
ciphertext = xor(msg, stream)
print "ciphertext: ", binascii.hexlify(ciphertext)

#To decrypt:
#stream = generateStream(key, len(ciphertext))
#plaintext = xor(ciphertext, stream)
#print plaintext