BlockMode.swift 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //
  2. // BlockMode.swift
  3. // CryptoSwift
  4. //
  5. // Created by Marcin Krzyzanowski on 08/03/16.
  6. // Copyright © 2016 Marcin Krzyzanowski. All rights reserved.
  7. //
  8. typealias CipherOperationOnBlock = (block: Array<UInt8>) -> Array<UInt8>?
  9. public enum BlockMode {
  10. case ECB, CBC, PCBC, CFB, OFB, CTR
  11. func worker(iv: Array<UInt8>?, cipherOperation: CipherOperationOnBlock) -> BlockModeWorker {
  12. switch (self) {
  13. case ECB:
  14. return ECBModeWorker(iv: iv ?? [], cipherOperation: cipherOperation)
  15. case CBC:
  16. return CBCModeWorker(iv: iv ?? [], cipherOperation: cipherOperation)
  17. case PCBC:
  18. return PCBCModeWorker(iv: iv ?? [], cipherOperation: cipherOperation)
  19. case CFB:
  20. return CFBModeWorker(iv: iv ?? [], cipherOperation: cipherOperation)
  21. case OFB:
  22. return OFBModeWorker(iv: iv ?? [], cipherOperation: cipherOperation)
  23. case CTR:
  24. return CTRModeWorker(iv: iv ?? [], cipherOperation: cipherOperation)
  25. }
  26. }
  27. var options: BlockModeOptions {
  28. switch (self) {
  29. case .ECB:
  30. return .PaddingRequired
  31. case .CBC:
  32. return [.InitializationVectorRequired, .PaddingRequired]
  33. case .CFB:
  34. return .InitializationVectorRequired
  35. case .CTR:
  36. return .InitializationVectorRequired
  37. case .OFB:
  38. return .InitializationVectorRequired
  39. case .PCBC:
  40. return [.InitializationVectorRequired, .PaddingRequired]
  41. }
  42. }
  43. }