2
0

CipherTests.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. //
  2. // CipherTests.swift
  3. // CryptoSwift
  4. //
  5. // Created by Marcin Krzyzanowski on 29/08/14.
  6. // Copyright (c) 2014 Marcin Krzyzanowski. All rights reserved.
  7. //
  8. import UIKit
  9. import XCTest
  10. import CryptoSwift
  11. class CipherTests: XCTestCase {
  12. override func setUp() {
  13. super.setUp()
  14. }
  15. override func tearDown() {
  16. super.tearDown()
  17. }
  18. func testPoly1305() {
  19. let key:[Byte] = [0xee,0xa6,0xa7,0x25,0x1c,0x1e,0x72,0x91,
  20. 0x6d,0x11,0xc2,0xcb,0x21,0x4d,0x3c,0x25,
  21. 0x25,0x39,0x12,0x1d,0x8e,0x23,0x4e,0x65,
  22. 0x2d,0x65,0x1f,0xa4,0xc8,0xcf,0xf8,0x80]
  23. let msg:[Byte] = [0x8e,0x99,0x3b,0x9f,0x48,0x68,0x12,0x73,
  24. 0xc2,0x96,0x50,0xba,0x32,0xfc,0x76,0xce,
  25. 0x48,0x33,0x2e,0xa7,0x16,0x4d,0x96,0xa4,
  26. 0x47,0x6f,0xb8,0xc5,0x31,0xa1,0x18,0x6a,
  27. 0xc0,0xdf,0xc1,0x7c,0x98,0xdc,0xe8,0x7b,
  28. 0x4d,0xa7,0xf0,0x11,0xec,0x48,0xc9,0x72,
  29. 0x71,0xd2,0xc2,0x0f,0x9b,0x92,0x8f,0xe2,
  30. 0x27,0x0d,0x6f,0xb8,0x63,0xd5,0x17,0x38,
  31. 0xb4,0x8e,0xee,0xe3,0x14,0xa7,0xcc,0x8a,
  32. 0xb9,0x32,0x16,0x45,0x48,0xe5,0x26,0xae,
  33. 0x90,0x22,0x43,0x68,0x51,0x7a,0xcf,0xea,
  34. 0xbd,0x6b,0xb3,0x73,0x2b,0xc0,0xe9,0xda,
  35. 0x99,0x83,0x2b,0x61,0xca,0x01,0xb6,0xde,
  36. 0x56,0x24,0x4a,0x9e,0x88,0xd5,0xf9,0xb3,
  37. 0x79,0x73,0xf6,0x22,0xa4,0x3d,0x14,0xa6,
  38. 0x59,0x9b,0x1f,0x65,0x4c,0xb4,0x5a,0x74,
  39. 0xe3,0x55,0xa5]
  40. let verify_mac:[Byte] = [0xf3,0xff,0xc7,0x70,0x3f,0x94,0x00,0xe5,
  41. 0x2a,0x7d,0xfb,0x4b,0x3d,0x33,0x05,0xd9]
  42. let poly = Poly1305(key: key);
  43. let mac:[Byte] = [Byte](count: 16, repeatedValue: 0);
  44. poly.auth(mac, m: msg)
  45. }
  46. func testChaCha20() {
  47. let keys:[[Byte]] = [
  48. [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],
  49. [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01],
  50. [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],
  51. [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],
  52. [0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F]
  53. ]
  54. let ivs:[[Byte]] = [
  55. [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],
  56. [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],
  57. [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01],
  58. [0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00],
  59. [0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07]
  60. ]
  61. let expectedHexes = [
  62. "76B8E0ADA0F13D90405D6AE55386BD28BDD219B8A08DED1AA836EFCC8B770DC7DA41597C5157488D7724E03FB8D84A376A43B8F41518A11CC387B669B2EE6586",
  63. "4540F05A9F1FB296D7736E7B208E3C96EB4FE1834688D2604F450952ED432D41BBE2A0B6EA7566D2A5D1E7E20D42AF2C53D792B1C43FEA817E9AD275AE546963",
  64. "DE9CBA7BF3D69EF5E786DC63973F653A0B49E015ADBFF7134FCB7DF137821031E85A050278A7084527214F73EFC7FA5B5277062EB7A0433E445F41E3",
  65. "EF3FDFD6C61578FBF5CF35BD3DD33B8009631634D21E42AC33960BD138E50D32111E4CAF237EE53CA8AD6426194A88545DDC497A0B466E7D6BBDB0041B2F586B",
  66. "F798A189F195E66982105FFB640BB7757F579DA31602FC93EC01AC56F85AC3C134A4547B733B46413042C9440049176905D3BE59EA1C53F15916155C2BE8241A38008B9A26BC35941E2444177C8ADE6689DE95264986D95889FB60E84629C9BD9A5ACB1CC118BE563EB9B3A4A472F82E09A7E778492B562EF7130E88DFE031C79DB9D4F7C7A899151B9A475032B63FC385245FE054E3DD5A97A5F576FE064025D3CE042C566AB2C507B138DB853E3D6959660996546CC9C4A6EAFDC777C040D70EAF46F76DAD3979E5C5360C3317166A1C894C94A371876A94DF7628FE4EAAF2CCB27D5AAAE0AD7AD0F9D4B6AD3B54098746D4524D38407A6DEB3AB78FAB78C9"
  67. ]
  68. for (var idx = 0; idx < keys.count; idx++) {
  69. let keyData = NSData(bytes: keys[idx], length: keys[idx].count)
  70. let ivData = NSData(bytes: ivs[idx], length: ivs[idx].count)
  71. let expectedHex = expectedHexes[idx]
  72. //println(countElements(expectedHex) / 2);
  73. let message = [Byte](count: (countElements(expectedHex) / 2), repeatedValue: 0)
  74. let messageData = NSData(bytes: message, length: message.count);
  75. let setup = (key: keyData, iv: ivData)
  76. var encrypted = Cipher.ChaCha20(setup).encrypt(messageData)
  77. XCTAssertNotNil(encrypted, "")
  78. if let encrypted = encrypted {
  79. var decrypted = Cipher.ChaCha20(setup).decrypt(encrypted)
  80. XCTAssertNotNil(decrypted, "")
  81. if let decrypted = decrypted {
  82. XCTAssertEqual(messageData, decrypted, "ChaCha20 decryption failed");
  83. }
  84. // check extension
  85. let encrypted2 = messageData.encrypt(Cipher.ChaCha20(setup))
  86. XCTAssertNotNil(encrypted2, "")
  87. if let encrypted2 = encrypted2 {
  88. XCTAssertEqual(encrypted, encrypted2, "ChaCha20 extension failed")
  89. }
  90. }
  91. }
  92. }
  93. }