PageRenderTime 60ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/test/test_key.rb

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