I'd very careful about future work. 99% of the time if a client says "they'll be more in for you later" it doesn't materialize. Or even if a client doesn't promise anything and you do a job thinking it'll lead to more work, it won't happen. Future work doesn't pay the bills today unless it's a contract.
Make sure that whatever you're doing, you're actually making money. I don't know what the taxes are in canada but factor those in too! I work in the design industry and there's plenty of freelancers who will work for peanuts because they forgot to factor in taxes, overhead, etc.
I haven't done any government projects myself but I have relatives who have and I have worked with some bigger organizations and typically the bigger the fish, the more delays and BS you're going to see so I'm surprised they need something in what sounds like an unreasonable timeframe. It's also possible you're overestimating (or slow) which isn't a bad thing.
As blaster_boy mentioned, you need to find out where that 3 month deadline actually came from. Is it just somebody in HR who needed to spend the rest of their allotted budget before the end of the year or it someone higher up where they're under some kind of mandated deadline to get it done? Sometimes, as long as you get paid before the deadline, their actual in-hands date may be much more flexible. The service industry is full of clients like this; sometimes they don't know how long this stuff can take so they tend to make up a deadline.
An easy way out of it would be something like "well what you're asking is a 6 month project in 3 months time. We can do half the project for the same price, the entire thing for double the price, or we can extend the deadline." and see what happens. And it goes without saying that on a huge project, make sure you get either 50% up front or 100%. The client is securing your time to do it. If it's not the right fit, it's not the right fit.