Vigenere decoder on ASCII letters.

Only the letters in '[A-Za-z]' are decoded while keeping the case.

assert "Hfnlp, Yosnd!".uvigenere("abc") == "Hello, World!"

REQUIRE key contains only lowercases '[a-z]'

Property definitions

crypto :: basic_ciphers $ Text :: uvigenere
	# Vigenere decoder on ASCII letters.
	#
	# Only the letters in '[A-Za-z]' are decoded while keeping the case.
	#
	#     assert "Hfnlp, Yosnd!".uvigenere("abc") == "Hello, World!"
	#
	# REQUIRE `key` contains only lowercases '[a-z]'
	fun uvigenere(key: String): String
	do
		var res = new Buffer
		res.enlarge(length)
		var i = 0
		for c in self do
			var k = key[i%key.length]
			assert k >= 'a' and k <= 'z'
			if c.is_letter then
				var d = k.code_point - 'a'.code_point
				c = c.rot(-d)
				i += 1
			end
			res.add c
		end
		return res.to_s
	end
lib/crypto/basic_ciphers.nit:183,2--206,4