I work in Canada, in the same sector, and unfortunately your company's current practice is the accepted norm (in the software development industry in general).
It's basically a poker game. The company doesn't want to reveal their salary range, out of fear that the applicant will set their expectations at the top end of that range. The applicant does not want to reveal their true salary expectations, out of fear that they will under-estimate their market rate. Of course, the company will rarely offer them more than what they set their expectations at (and yes, I've been on the hiring side of the equation to see this happen).
So what you get is a company asking the candidate for their salary expectation and (a) the candidate who recognizes and is able to play the game will reply with what they estimate to be just above the company's top range (ensuring that if they are the leading candidate, they will get the maximum offer) or (b) the inexperienced or not confident candidate underselling themselves and getting an offer for less than their market rate.
It's a broken system and I really don't know what advantage the opacity brings. If you've identified an excellent candidate, pay him/her what you can afford and what is fair. If that's not enough for them, nobody has wasted their time.