CryptoHashBase.swift 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. //
  2. // Hash.swift
  3. // CryptoSwift
  4. //
  5. // Created by Marcin Krzyzanowski on 17/08/14.
  6. // Copyright (c) 2014 Marcin Krzyzanowski. All rights reserved.
  7. //
  8. import Foundation
  9. class HashBase {
  10. var message: NSData
  11. init(_ message: NSData) {
  12. self.message = message
  13. }
  14. /** Common part for hash calculation. Prepare header data. */
  15. func prepare(_ len:Int = 64) -> NSMutableData {
  16. var tmpMessage: NSMutableData = NSMutableData(data: self.message)
  17. // Step 1. Append Padding Bits
  18. tmpMessage.appendBytes([0x80]) // append one bit (UInt8 with one bit) to message
  19. // append "0" bit until message length in bits ≡ 448 (mod 512)
  20. var msgLength = tmpMessage.length;
  21. var counter = 0;
  22. while msgLength % len != (len - 8) {
  23. counter++
  24. msgLength++
  25. }
  26. var bufZeros = UnsafeMutablePointer<UInt8>(calloc(UInt(counter), UInt(sizeof(UInt8))))
  27. tmpMessage.appendBytes(bufZeros, length: counter)
  28. return tmpMessage
  29. }
  30. }