diff options
| author | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2013-07-18 12:24:16 +0200 | 
|---|---|---|
| committer | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2013-07-18 12:25:41 +0200 | 
| commit | 444b1165975ded5b38111c623ae6005391c13051 (patch) | |
| tree | 125eacec61d015cc144765bffa8ae39cff9ac7e4 | |
| parent | 2aea08eda1f442d9a59a51718fbf9c3b34fd3b0a (diff) | |
YoutubeIE: add algo for length 90 (closes #1064)
Order the cases from higher to lower length.
| -rw-r--r-- | devscripts/youtube_genalgo.py | 3 | ||||
| -rw-r--r-- | test/test_youtube_sig.py | 15 | ||||
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 8 | 
3 files changed, 18 insertions, 8 deletions
diff --git a/devscripts/youtube_genalgo.py b/devscripts/youtube_genalgo.py index 7eb0aba1c..6a33cf403 100644 --- a/devscripts/youtube_genalgo.py +++ b/devscripts/youtube_genalgo.py @@ -8,6 +8,9 @@ tests = [      # 92 - vflQw-fB4 2013/07/17      ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<'`~\"",       "mrtyuioplkjhgfdsazxcvbnq1234567890QWERTY}IOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]\"|:;"), +    # 90 +    ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<'`", +     "mrtyuioplkjhgfdsazxcvbne1234567890QWER[YUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={`]}|"),      # 88      ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<",       "J:|}][{=+-_)(*&;%$#@>MNBVCXZASDFGH^KLPOIUYTREWQ0987654321mnbvcxzasdfghrklpoiuytej"), diff --git a/test/test_youtube_sig.py b/test/test_youtube_sig.py index b8e51f479..a8b1fe4dd 100644 --- a/test/test_youtube_sig.py +++ b/test/test_youtube_sig.py @@ -18,6 +18,16 @@ class TestYoutubeSig(unittest.TestCase):          right = '931EA22157E1871643FA9519676DED253A342B0C.4E95A5DBD2F1F511DCC1209DF56CB77693CE0EAE'          self.assertEqual(sig(wrong), right) +    def test_92(self): +        wrong = "F9F9B6E6FD47029957AB911A964CC20D95A181A5D37A2DBEFD67D403DB0E8BE4F4910053E4E8A79.0B70B.0B80B8" +        right = "69B6E6FD47029957AB911A9F4CC20D95A181A5D3.A2DBEFD67D403DB0E8BE4F4910053E4E8A7980B7" +        self.assertEqual(sig(wrong), right) + +    def test_90(self): +        wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<'`" +        right = "mrtyuioplkjhgfdsazxcvbne1234567890QWER[YUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={`]}|" +        self.assertEqual(sig(wrong), right) +      def test_88(self):          wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<"          right = "J:|}][{=+-_)(*&;%$#@>MNBVCXZASDFGH^KLPOIUYTREWQ0987654321mnbvcxzasdfghrklpoiuytej" @@ -58,10 +68,5 @@ class TestYoutubeSig(unittest.TestCase):          right = "urty8ioplkjhgfdsazxcvbqm1234567e90QWERTYUIOPLKHGFDSnZXCVBNM!@#$%^&*(-+={[};?/>."          self.assertEqual(sig(wrong), right) -    def test_92(self): -        wrong = "F9F9B6E6FD47029957AB911A964CC20D95A181A5D37A2DBEFD67D403DB0E8BE4F4910053E4E8A79.0B70B.0B80B8" -        right = "69B6E6FD47029957AB911A9F4CC20D95A181A5D3.A2DBEFD67D403DB0E8BE4F4910053E4E8A7980B7" -        self.assertEqual(sig(wrong), right) -  if __name__ == '__main__':      unittest.main() diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 580f39ee8..2aac5dd2e 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -179,7 +179,11 @@ class YoutubeIE(InfoExtractor):      def _decrypt_signature(self, s):          """Turn the encrypted s field into a working signature""" -        if len(s) == 88: +        if len(s) == 92: +            return s[25] + s[3:25] + s[0] + s[26:42] + s[79] + s[43:79] + s[91] + s[80:83] +        elif len(s) == 90: +            return s[25] + s[3:25] + s[2] + s[26:40] + s[77] + s[41:77] + s[89] + s[78:81] +        elif len(s) == 88:              return s[48] + s[81:67:-1] + s[82] + s[66:62:-1] + s[85] + s[61:48:-1] + s[67] + s[47:12:-1] + s[3] + s[11:3:-1] + s[2] + s[12]          elif len(s) == 87:              return s[62] + s[82:62:-1] + s[83] + s[61:52:-1] + s[0] + s[51:2:-1] @@ -195,8 +199,6 @@ class YoutubeIE(InfoExtractor):              return s[36] + s[79:67:-1] + s[81] + s[66:40:-1] + s[33] + s[39:36:-1] + s[40] + s[35] + s[0] + s[67] + s[32:0:-1] + s[34]          elif len(s) == 81:              return s[6] + s[3:6] + s[33] + s[7:24] + s[0] + s[25:33] + s[2] + s[34:53] + s[24] + s[54:81] -        elif len(s) == 92: -            return s[25] + s[3:25] + s[0] + s[26:42] + s[79] + s[43:79] + s[91] + s[80:83];          else:              raise ExtractorError(u'Unable to decrypt signature, key length %d not supported; retrying might work' % (len(s)))  | 
