Utils.swift 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //
  2. // Utils.swift
  3. // CryptoSwift
  4. //
  5. // Created by Marcin Krzyzanowski on 26/08/14.
  6. // Copyright (c) 2014 Marcin Krzyzanowski. All rights reserved.
  7. //
  8. func rotateLeft(_ value:UInt8, by:UInt8) -> UInt8 {
  9. return ((value << by) & 0xFF) | (value >> (8 - by))
  10. }
  11. func rotateLeft(_ value:UInt16, by:UInt16) -> UInt16 {
  12. return ((value << by) & 0xFFFF) | (value >> (16 - by))
  13. }
  14. func rotateLeft(_ value:UInt32, by:UInt32) -> UInt32 {
  15. return ((value << by) & 0xFFFFFFFF) | (value >> (32 - by))
  16. }
  17. func rotateLeft(_ value:UInt64, by:UInt64) -> UInt64 {
  18. return (value << by) | (value >> (64 - by))
  19. }
  20. func rotateRight(_ value:UInt16, by:UInt16) -> UInt16 {
  21. return (value >> by) | (value << (16 - by))
  22. }
  23. func rotateRight(_ value:UInt32, by:UInt32) -> UInt32 {
  24. return (value >> by) | (value << (32 - by))
  25. }
  26. func rotateRight(_ value:UInt64, by:UInt64) -> UInt64 {
  27. return ((value >> by) | (value << (64 - by)))
  28. }
  29. func reversed(_ uint8 : UInt8) -> UInt8 {
  30. var v = uint8
  31. v = (v & 0xF0) >> 4 | (v & 0x0F) << 4
  32. v = (v & 0xCC) >> 2 | (v & 0x33) << 2
  33. v = (v & 0xAA) >> 1 | (v & 0x55) << 1
  34. return v
  35. }
  36. func reversed(_ uint32 : UInt32) -> UInt32 {
  37. var v = uint32
  38. v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1)
  39. v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2)
  40. v = ((v >> 4) & 0x0f0f0f0f) | ((v & 0x0f0f0f0f) << 4)
  41. v = ((v >> 8) & 0x00ff00ff) | ((v & 0x00ff00ff) << 8)
  42. v = ((v >> 16) & 0xffff) | ((v & 0xffff) << 16)
  43. return v
  44. }
  45. func xor(_ a: Array<UInt8>, _ b:Array<UInt8>) -> Array<UInt8> {
  46. var xored = Array<UInt8>(repeating: 0, count: min(a.count, b.count))
  47. for i in 0..<xored.count {
  48. xored[i] = a[i] ^ b[i]
  49. }
  50. return xored
  51. }