PageRenderTime 48ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/test/test_key.rb

https://bitbucket.org/keltia/old-crypto-spec
Ruby | 650 lines | 417 code | 118 blank | 115 comment | 1 complexity | 877e73ed1810e868098e52aa3255bb3a MD5 | raw file
  1. # $Id$
  2. require 'test/unit'
  3. require "yaml"
  4. require "key"
  5. require "crypto_helper"
  6. # == TestKey
  7. #
  8. class TestKey < Test::Unit::TestCase
  9. # === setup
  10. #
  11. def setup
  12. File.open("test/test_key.yaml") do |fh|
  13. @data = YAML.load(fh)
  14. end
  15. end # -- setup
  16. # === test_init
  17. #
  18. def test_init
  19. @data.keys.each do |word|
  20. key = Key::Key.new(word)
  21. assert_not_nil key
  22. assert_equal key.key, word.upcase
  23. end
  24. end # -- test_init
  25. # === test_params
  26. #
  27. def test_params
  28. assert_raise(ArgumentError) { Key::Key.new(nil)}
  29. assert_raise(ArgumentError) { Key::Key.new(Array.new) }
  30. assert_nothing_raised(ArgumentError) { Key::Key.new(3) }
  31. assert_nothing_raised(ArgumentError) { Key::Key.new("") }
  32. assert_nothing_raised(ArgumentError) { Key::Key.new("FOOBAR") }
  33. assert_raise(RangeError) { Key::Key.new(42) }
  34. end # -- test_params
  35. # === test_condensed1
  36. #
  37. def test_condensed
  38. @data.keys.each do |word|
  39. key = Key::Key.new(word)
  40. assert_not_nil key
  41. assert_equal key.condensed, @data[word]["condensed"]
  42. end
  43. end # -- test_condensed
  44. # === test_length
  45. #
  46. def test_length
  47. @data.keys.each do |word|
  48. key = Key::Key.new(word)
  49. assert_not_nil key
  50. assert_equal key.length, word.length
  51. end
  52. end # -- test_length
  53. end # -- TestKey
  54. # == TestTKey
  55. #
  56. class TestTKey < Test::Unit::TestCase
  57. # === setup
  58. #
  59. def setup
  60. @data = Hash.new
  61. File.open("test/test_tkey.yaml") do |fh|
  62. @data = YAML.load(fh)
  63. end
  64. end # -- setup
  65. # === test_init
  66. #
  67. def test_init
  68. @data.keys.each do |word|
  69. key = Key::TKey.new(word)
  70. assert_not_nil key
  71. assert_equal key.key, word.upcase
  72. end
  73. end # -- test_init
  74. # === test_to_numeric
  75. #
  76. def test_to_numeric
  77. @data.keys.each do |word|
  78. key = Key::TKey.new(word)
  79. assert_equal @data[word]["num"], key.to_numeric
  80. end
  81. end # -- test_to_numeric
  82. end # -- TestTKey
  83. # == TestSKey
  84. #
  85. class TestSKey < Test::Unit::TestCase
  86. # === test_alpha
  87. #
  88. def test_presence_of_alpha
  89. word = "arabesque"
  90. key = Key::SKey.new(word)
  91. assert_not_nil key
  92. assert_not_nil key.alpha
  93. assert_not_nil key.ralpha
  94. end # -- test_presence_of_alpha
  95. # === test_encode_decode
  96. #
  97. def test_encode_decode
  98. key = Key::SKey.new("")
  99. assert_equal "P", key.decode("P")
  100. assert_equal "P", key.encode("P")
  101. end # -- test_encode_decode
  102. end # -- TestSKey
  103. # == TestKeyCaesar
  104. #
  105. class TestKeyCaesar < Test::Unit::TestCase
  106. # === setup
  107. #
  108. def setup
  109. word = 3
  110. @key = Key::Caesar.new(word)
  111. assert_not_nil @key
  112. assert_not_nil @key.offset
  113. assert_equal word, @key.offset
  114. end # -- setup
  115. # === test_alpha
  116. #
  117. def test_presence_of_alpha
  118. assert_not_nil @key.alpha
  119. assert_not_nil @key.ralpha
  120. end # -- test_presence_of_alpha
  121. # === test_alpha
  122. #
  123. def test_alpha
  124. @key.alpha.keys.each do |r|
  125. assert r =~ /[A-Z]/
  126. end
  127. end # -- test_alpha
  128. # === test_ralpha
  129. #
  130. def test_ralpha
  131. @key.ralpha.keys.each do |r|
  132. assert r =~ /[A-Z]/
  133. end
  134. end # -- test_alpha
  135. # === test_encode
  136. #
  137. def test_encode
  138. pt = "A"
  139. ct = @key.encode(pt)
  140. assert_not_nil ct
  141. assert_equal ct, "D"
  142. pt = "Y"
  143. ct = @key.encode(pt)
  144. assert_not_nil ct
  145. assert_equal ct, "B"
  146. end # -- test_encode
  147. # === test_decode
  148. #
  149. def test_decode
  150. ct = "D"
  151. pt = @key.decode(ct)
  152. assert_not_nil pt
  153. assert_equal pt, "A"
  154. ct = "C"
  155. pt = @key.decode(ct)
  156. assert_not_nil pt
  157. assert_equal pt, "Z"
  158. end # -- test_decode
  159. end # -- TestKeyCaesar
  160. # == TestSCKey
  161. #
  162. class TestSCKey < Test::Unit::TestCase
  163. # === setup
  164. #
  165. def setup
  166. File.open("test/test_sckey.yaml") do |fh|
  167. @data = YAML.load(fh)
  168. end
  169. end # -- setup
  170. # === test_alpha
  171. #
  172. def test_presence_of_alpha
  173. word = "arabesque"
  174. key = Key::SCKey.new(word)
  175. assert_not_nil key
  176. assert_equal Key::SCKey, key.class
  177. assert_not_nil key.alpha
  178. assert_not_nil key.ralpha
  179. assert_equal Key::SCKey::BASE.length, key.alpha.length
  180. assert_equal Key::SCKey::BASE.length, key.ralpha.length
  181. end # -- test_presence_of_alpha
  182. # === test_checkerboard
  183. #
  184. def test_checkerboard
  185. @data.keys.each do |word|
  186. key = Key::SCKey.new(word)
  187. assert_not_nil key
  188. assert_not_nil key.full_key
  189. assert_equal Key::SCKey::BASE.length, key.full_key.length
  190. assert_equal @data[word]["full_key"], key.full_key
  191. end
  192. end # -- test_checkerboard
  193. # === test_gen_rings
  194. #
  195. def test_gen_rings
  196. @data.keys.each do |word|
  197. key = Key::SCKey.new(word)
  198. assert_not_nil key
  199. assert_equal @data[word]["alpha"], key.alpha
  200. assert_equal @data[word]["ralpha"], key.ralpha
  201. end
  202. end # -- test_gen_rings
  203. # === test_is_long
  204. #
  205. def test_is_long
  206. key = Key::SCKey.new("arabesque")
  207. assert_not_nil key
  208. assert !key.is_long?(0)
  209. assert key.is_long?(9)
  210. end # -- test_is_long
  211. # === test_encode
  212. #
  213. def test_encode
  214. @data.keys.each do |word|
  215. key = Key::SCKey.new(word)
  216. assert_not_nil key
  217. test = @data[word]["encode"]
  218. encode_in = test["in"]
  219. encode_out = test["out"]
  220. encode_in.each do |c|
  221. assert_equal encode_out.shift, key.encode(c)
  222. end
  223. end
  224. end # -- test_encode
  225. # === test_decode
  226. #
  227. def test_decode
  228. @data.keys.each do |word|
  229. key = Key::SCKey.new(word)
  230. assert_not_nil key
  231. test = @data[word]["encode"]
  232. decode_in = test["out"]
  233. decode_out = test["in"]
  234. decode_in.each do |c|
  235. assert_equal decode_out.shift, key.decode(c)
  236. end
  237. end
  238. end # -- test_decode
  239. end # -- TestSCKey
  240. # == TestChaokey
  241. #
  242. class TestChaokey < Test::Unit::TestCase
  243. # === setup
  244. #
  245. def setup
  246. File.open("test/test_chaokey.yaml") do |fh|
  247. @data = YAML.load(fh)
  248. end
  249. @a = Key::ChaoKey.new("PTLNBQDEOYSFAVZKGJRIHWXUMC",
  250. "HXUCZVAMDSLKPEFJRIGTWOBNYQ")
  251. end # -- setup
  252. # === test_advance
  253. #
  254. def test_advance
  255. @a.advance(12)
  256. assert_equal 26, @a.plain.length
  257. assert_equal 26, @a.cipher.length
  258. assert_equal "VZGJRIHWXUMCPKTLNBQDEOYSFA", @a.plain
  259. assert_equal "PFJRIGTWOBNYQEHXUCZVAMDSLK", @a.cipher
  260. end # -- test_advance
  261. # === test_encode
  262. #
  263. # we test two steps to ensure the "rings" turn
  264. #
  265. def test_encode
  266. pt = "W"
  267. ct = "O"
  268. nct = @a.encode(pt)
  269. assert_equal ct, nct
  270. pt = "E"
  271. ct = "A"
  272. nct = @a.encode(pt)
  273. assert_equal ct, nct
  274. end # -- test_encode
  275. # === test_decode
  276. #
  277. def test_decode
  278. pt = "W"
  279. ct = "O"
  280. npt = @a.decode(ct)
  281. assert_equal pt, npt
  282. pt = "E"
  283. ct = "A"
  284. npt = @a.decode(ct)
  285. assert_equal pt, npt
  286. end # -- test_decode
  287. end # -- TestChaokey
  288. # == TestSQKey
  289. #
  290. class TestSQKey < Test::Unit::TestCase
  291. # === setup
  292. #
  293. def setup
  294. File.open("test/test_sqkey.yaml") do |fh|
  295. @data = YAML.load(fh)
  296. end
  297. end # -- setup
  298. # === test_init
  299. #
  300. def test_init
  301. @data.keys.each do |word|
  302. key = Key::SQKey.new(word, @data[word]["type"])
  303. assert_not_nil key
  304. assert_equal @data[word]["full_key"], key.full_key
  305. end
  306. end # -- test_init
  307. # === test_gen_rings
  308. #
  309. def test_gen_rings
  310. @data.keys.each do |word|
  311. key = Key::SQKey.new(word, @data[word]["type"])
  312. assert_not_nil key
  313. assert_equal Key::SQKey, key.class
  314. assert_equal @data[word]["alpha"], key.alpha
  315. assert_equal @data[word]["ralpha"], key.ralpha
  316. end
  317. end # -- test_gen_rings
  318. # === test_encode
  319. #
  320. def test_encode
  321. @data.keys.each do |word|
  322. key = Key::SQKey.new(word, @data[word]["type"])
  323. assert_not_nil key
  324. test = @data[word]["encode"]
  325. encode_in = test["in"]
  326. encode_out = test["out"]
  327. encode_in.each do |c|
  328. assert_equal encode_out.shift, key.encode(c), "#{word}"
  329. end
  330. end
  331. end # -- test_encode
  332. # === test_decode
  333. #
  334. def test_decode
  335. @data.keys.each do |word|
  336. key = Key::SQKey.new(word, @data[word]["type"])
  337. assert_not_nil key
  338. test = @data[word]["encode"]
  339. encode_in = test["out"]
  340. encode_out = test["in"]
  341. encode_in.each do |ct|
  342. assert_equal encode_out.shift, key.decode(ct), "#{word}"
  343. end
  344. end
  345. end # -- test_decode
  346. end # -- TestSQKey
  347. # == TestPlayfair
  348. #
  349. class TestPlayfair_Q < Test::Unit::TestCase
  350. include Crypto
  351. # === setup
  352. #
  353. def setup
  354. File.open("test/test_playfair_q.yaml") do |fh|
  355. @data = YAML.load(fh)
  356. end
  357. end # -- setup
  358. # === test_init
  359. #
  360. def test_init
  361. @data.keys.each do |word|
  362. key = Key::Playfair.new(word)
  363. assert_not_nil key
  364. assert_equal Key::Playfair, key.class
  365. assert_not_nil key.alpha
  366. assert_not_nil key.ralpha
  367. assert_equal @data[word]["full_key"], key.full_key
  368. end
  369. end # -- test_init
  370. # === test_gen_rings
  371. #
  372. def test_gen_rings
  373. @data.keys.each do |word|
  374. key = Key::Playfair.new(word)
  375. assert_equal @data[word]["alpha"], key.alpha
  376. assert_equal @data[word]["ralpha"], key.ralpha
  377. end
  378. end # -- test_gen_rings
  379. # === test_encode
  380. #
  381. def test_encode
  382. @data.keys.each do |word|
  383. key = Key::Playfair.new(word)
  384. assert_not_nil key
  385. test = @data[word]["encode"]
  386. encode_in = test["in"]
  387. encode_out = test["out"]
  388. encode_in.each do |c|
  389. assert_equal encode_out.shift, key.encode(c), "#{word} #{c}"
  390. end
  391. end
  392. end # -- test_encode
  393. # === test_decode
  394. #
  395. def test_decode
  396. @data.keys.each do |word|
  397. key = Key::Playfair.new(word)
  398. assert_not_nil key
  399. test = @data[word]["encode"]
  400. encode_in = test["out"]
  401. encode_out = test["in"]
  402. encode_in.each do |ct|
  403. assert_equal encode_out.shift, key.decode(ct), "#{word} #{ct} "
  404. end
  405. end
  406. end # -- test_decode
  407. end # -- TestPlayfair
  408. # == TestWheatstone
  409. #
  410. class TestWheatstone < Test::Unit::TestCase
  411. include Crypto
  412. # === setup
  413. #
  414. def setup
  415. File.open("test/test_wheat.yaml") do |fh|
  416. @data = YAML.load(fh)
  417. end
  418. end # -- setup
  419. def test_init
  420. @data.keys.each do |dt|
  421. d = @data[dt]
  422. plwk = d["plwk"]
  423. ctwk = d["ctwk"]
  424. key = Key::Wheatstone.new(d["start"], plwk, ctwk)
  425. assert_not_nil key
  426. assert_equal Key::Wheatstone, key.class
  427. assert_equal key.aplw.size, (Key::Wheatstone::BASE.length + 1)
  428. assert_equal key.actw.size, (Key::Wheatstone::BASE.length)
  429. assert_equal d["actw"], key.actw
  430. assert_equal d["aplw"], key.aplw
  431. end
  432. end # -- test_init1
  433. def test_encode
  434. end # -- test_encode
  435. def test_decode
  436. end # -- test_decode
  437. end # -- TestWheatstone
  438. # == TestPlayfair1
  439. #
  440. class TestPlayfair_J < Test::Unit::TestCase
  441. include Crypto
  442. # === setup
  443. #
  444. def setup
  445. File.open("test/test_playfair_j.yaml") do |fh|
  446. @data = YAML.load(fh)
  447. end
  448. end # -- setup
  449. # === test_init
  450. #
  451. def test_init
  452. @data.keys.each do |word|
  453. key = Key::Playfair.new(word, Key::Playfair::WITH_J)
  454. assert_not_nil key
  455. assert_equal Key::Playfair, key.class
  456. assert_not_nil key.alpha
  457. assert_not_nil key.ralpha
  458. assert_equal @data[word]["full_key"], key.full_key
  459. end
  460. end # -- test_init
  461. # === test_gen_rings
  462. #
  463. def test_gen_rings
  464. @data.keys.each do |word|
  465. key = Key::Playfair.new(word, Key::Playfair::WITH_J)
  466. assert_equal @data[word]["alpha"], key.alpha
  467. assert_equal @data[word]["ralpha"], key.ralpha
  468. end
  469. end # -- test_gen_rings
  470. # === test_encode
  471. #
  472. def test_encode
  473. @data.keys.each do |word|
  474. key = Key::Playfair.new(word, Key::Playfair::WITH_J)
  475. assert_not_nil key
  476. test = @data[word]["encode"]
  477. encode_in = test["in"]
  478. encode_out = test["out"]
  479. encode_in.each do |c|
  480. assert_equal encode_out.shift, key.encode(c), "#{word} #{c}"
  481. end
  482. end
  483. end # -- test_encode
  484. # === test_decode
  485. #
  486. def test_decode
  487. @data.keys.each do |word|
  488. key = Key::Playfair.new(word, Key::Playfair::WITH_J)
  489. assert_not_nil key
  490. test = @data[word]["encode"]
  491. encode_in = test["out"]
  492. encode_out = test["in"]
  493. encode_in.each do |ct|
  494. assert_equal encode_out.shift, key.decode(ct), "#{word} #{ct} "
  495. end
  496. end
  497. end # -- test_decode
  498. end # -- TestPlayfair_J
  499. # == TestVICKey
  500. #
  501. class TestVICKey < Test::Unit::TestCase
  502. include Crypto
  503. # === setup
  504. #
  505. def setup
  506. File.open("test/test_vickey.yaml") do |fh|
  507. @data = YAML.load(fh)
  508. end
  509. @keys = @data["keys"]
  510. end # -- setup
  511. # === test_init
  512. #
  513. def test_init
  514. init = @data["init"]
  515. key = Key::VICKey.new(init["ikey"], init["phrase"], init["imsg"])
  516. assert_not_nil key
  517. assert_not_nil key.first
  518. assert_not_nil key.second
  519. assert_not_nil key.third
  520. assert_not_nil key.sc_key
  521. assert_equal Array, key.p1.class
  522. assert_equal Array, key.p2.class
  523. assert_equal Array, key.first.class
  524. assert(key.first.length != 0)
  525. assert_equal init["p1"], key.p1
  526. assert_equal init["ikey5"], key.ikey5
  527. assert_equal init["first"], key.first
  528. assert_equal init["second"], key.second
  529. assert_equal init["third"], key.third
  530. assert_equal init["sc_key"], key.sc_key
  531. end # -- test_init
  532. end # -- TestVICKey