Guest User

Untitled

a guest
Jan 20th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. def read_m3u8(m3u8)
  2. File.open(m3u8, 'r') do |file|
  3. keyfile = nil
  4. iv = 0
  5. file.each_line do |line|
  6. line.chomp!
  7. if line =~ /^#EXT-X-KEY:METHOD=AES-128,URI="(.*?)"(,IV=0x(.*))?/
  8. keyfile = $1
  9. if $2
  10. iv = $3
  11. iv_gen = :random
  12. else
  13. iv_gen = :sequence
  14. end
  15. elsif not line =~ /^#/
  16. in_file = File.join(File.dirname(m3u8), line)
  17. ext = File.extname(in_file)
  18. out_file = File.join(File.dirname(in_file), File.basename(in_file, ext) + '.clear' + ext)
  19. decrypt(in_file, keyfile, iv, out_file)
  20. if iv_gen == :sequence
  21. iv += 1
  22. end
  23. end
  24. end
  25. end
  26. end
  27.  
  28. def decrypt(in_file, keyfile, iv, out_file)
  29. key = load_key(keyfile)
  30. iv_hex = sprintf('%032x', iv)
  31. %x{openssl aes-128-cbc -d -K #{key} -iv #{iv_hex} -nosalt -in #{in_file} -out #{out_file}}
  32. end
  33.  
  34. def load_key(keyfile)
  35. File.open(keyfile, 'rb') do |file|
  36. file.read.unpack('H*')[0]
  37. end
  38. end
  39.  
  40. read_m3u8(ARGV[0])
Add Comment
Please, Sign In to add comment