Advertisement
Guest User

Untitled

a guest
Aug 27th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. func evpBytesToKey(password:String, keyLen:Int, ivLen:Int) -> ([UInt8], [UInt8]) {
  2. var m = [Data]()
  3. guard let passwd = password.data(using: String.Encoding.utf8) else {
  4. return ([], []);
  5. }
  6. while m.reduce(0, {$0 + $1.count}) < keyLen + ivLen {
  7. let data = m.count > 0 ? m.last! + passwd : passwd
  8. m.append(data.md5Digest())
  9. }
  10. let final = m.reduce(Data(), +)
  11. return (Array(final.bytes[0...(keyLen - 1)]), Array(final.bytes[keyLen...(keyLen + ivLen - 1)]))
  12. }
  13.  
  14. /*def EVP_BytesToKey(password, key_len, iv_len):
  15. # equivalent to OpenSSL's EVP_BytesToKey() with count 1
  16. # so that we make the same key and iv as nodejs version
  17. password = str(password)
  18. m = []
  19. i = 0
  20. while len(''.join(m)) < (key_len + iv_len):
  21. md5 = hashlib.md5()
  22. data = password
  23. if i > 0:
  24. data = m[i - 1] + password
  25. md5.update(data)
  26. m.append(md5.digest())
  27. i += 1
  28. ms = ''.join(m)
  29.  
  30. key = ms[:key_len]
  31. iv = ms[key_len:key_len + iv_len]
  32. return (key, iv)*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement