Could not deserialize key data on decoding JWT python





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







1















I am using pyjwt library for decoding the JWT token. I got this error when I am decoding. The code was given in the documantation.



import jwt

encoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''
secret=b''''-----BEGIN PUBLIC KEY-----
MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9w0BAQsFADBN
......
-----END PUBLIC KEY-----'''

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256']))



raise ValueError("Could not deserialize key data.") ValueError: Could
not deserialize key data.




Could You please help me in resolving it beacuse when I use this it in the JWT website it's working.



This is the full error log..




Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 205, in prepare_key
key = load_pem_private_key(key, password=None, backend=default_backend()) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 20, in load_pem_private_key
return backend.load_pem_private_key(data, password) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1014, in load_pem_private_key
password, File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1233, in _load_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



During handling of the above exception, another exception occurred:



Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/JWTsample/sample.py", line 45, in

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256'])) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jwt.py",
line 93, in decode
jwt, key=key, algorithms=algorithms, options=options, **kwargs File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 157, in decode
key, algorithms) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 221, in _verify_signature
key = alg_obj.prepare_key(key) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 207, in prepare_key
key = load_pem_public_key(key, backend=default_backend()) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 24, in load_pem_public_key
return backend.load_pem_public_key(data) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1040, in load_pem_public_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



Process finished with exit code 1











share|improve this question























  • @stovfl No it's different problem

    – Balakrishnan Sathiyakugan
    Nov 16 '18 at 15:15


















1















I am using pyjwt library for decoding the JWT token. I got this error when I am decoding. The code was given in the documantation.



import jwt

encoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''
secret=b''''-----BEGIN PUBLIC KEY-----
MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9w0BAQsFADBN
......
-----END PUBLIC KEY-----'''

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256']))



raise ValueError("Could not deserialize key data.") ValueError: Could
not deserialize key data.




Could You please help me in resolving it beacuse when I use this it in the JWT website it's working.



This is the full error log..




Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 205, in prepare_key
key = load_pem_private_key(key, password=None, backend=default_backend()) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 20, in load_pem_private_key
return backend.load_pem_private_key(data, password) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1014, in load_pem_private_key
password, File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1233, in _load_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



During handling of the above exception, another exception occurred:



Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/JWTsample/sample.py", line 45, in

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256'])) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jwt.py",
line 93, in decode
jwt, key=key, algorithms=algorithms, options=options, **kwargs File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 157, in decode
key, algorithms) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 221, in _verify_signature
key = alg_obj.prepare_key(key) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 207, in prepare_key
key = load_pem_public_key(key, backend=default_backend()) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 24, in load_pem_public_key
return backend.load_pem_public_key(data) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1040, in load_pem_public_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



Process finished with exit code 1











share|improve this question























  • @stovfl No it's different problem

    – Balakrishnan Sathiyakugan
    Nov 16 '18 at 15:15














1












1








1


1






I am using pyjwt library for decoding the JWT token. I got this error when I am decoding. The code was given in the documantation.



import jwt

encoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''
secret=b''''-----BEGIN PUBLIC KEY-----
MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9w0BAQsFADBN
......
-----END PUBLIC KEY-----'''

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256']))



raise ValueError("Could not deserialize key data.") ValueError: Could
not deserialize key data.




Could You please help me in resolving it beacuse when I use this it in the JWT website it's working.



This is the full error log..




Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 205, in prepare_key
key = load_pem_private_key(key, password=None, backend=default_backend()) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 20, in load_pem_private_key
return backend.load_pem_private_key(data, password) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1014, in load_pem_private_key
password, File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1233, in _load_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



During handling of the above exception, another exception occurred:



Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/JWTsample/sample.py", line 45, in

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256'])) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jwt.py",
line 93, in decode
jwt, key=key, algorithms=algorithms, options=options, **kwargs File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 157, in decode
key, algorithms) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 221, in _verify_signature
key = alg_obj.prepare_key(key) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 207, in prepare_key
key = load_pem_public_key(key, backend=default_backend()) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 24, in load_pem_public_key
return backend.load_pem_public_key(data) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1040, in load_pem_public_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



Process finished with exit code 1











share|improve this question














I am using pyjwt library for decoding the JWT token. I got this error when I am decoding. The code was given in the documantation.



import jwt

encoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''
secret=b''''-----BEGIN PUBLIC KEY-----
MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9w0BAQsFADBN
......
-----END PUBLIC KEY-----'''

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256']))



raise ValueError("Could not deserialize key data.") ValueError: Could
not deserialize key data.




Could You please help me in resolving it beacuse when I use this it in the JWT website it's working.



This is the full error log..




Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 205, in prepare_key
key = load_pem_private_key(key, password=None, backend=default_backend()) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 20, in load_pem_private_key
return backend.load_pem_private_key(data, password) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1014, in load_pem_private_key
password, File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1233, in _load_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



During handling of the above exception, another exception occurred:



Traceback (most recent call last): File
"/home/sathiyakugan/PycharmProjects/JWTsample/sample.py", line 45, in

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256'])) File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jwt.py",
line 93, in decode
jwt, key=key, algorithms=algorithms, options=options, **kwargs File
"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 157, in decode
key, algorithms) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py",
line 221, in _verify_signature
key = alg_obj.prepare_key(key) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py",
line 207, in prepare_key
key = load_pem_public_key(key, backend=default_backend()) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py",
line 24, in load_pem_public_key
return backend.load_pem_public_key(data) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1040, in load_pem_public_key
self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py",
line 1291, in _handle_key_loading_error
raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.



Process finished with exit code 1








python authentication oauth jwt encode






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 12:21









Balakrishnan SathiyakuganBalakrishnan Sathiyakugan

687




687













  • @stovfl No it's different problem

    – Balakrishnan Sathiyakugan
    Nov 16 '18 at 15:15



















  • @stovfl No it's different problem

    – Balakrishnan Sathiyakugan
    Nov 16 '18 at 15:15

















@stovfl No it's different problem

– Balakrishnan Sathiyakugan
Nov 16 '18 at 15:15





@stovfl No it's different problem

– Balakrishnan Sathiyakugan
Nov 16 '18 at 15:15












2 Answers
2






active

oldest

votes


















2














There are some issues in the pyjwt library. and you must get the public key from the certificate.



I used openssl x509 -pubkey -noout -in cert.pem > pubkey.pem



then from the public key I could easily decode it using authlib library.



from authlib.specs.rfc7519 import jwt

encoded_jwt='''eyJ0eXAiOiJ....'''
secret=b'''-----BEGIN PUBLIC KEY-----
......
-----END PUBLIC KEY-----'''
claims = jwt.decode(encoded_jwt, secret)
print(claims)





share|improve this answer































    0














    How did you encode your jwt? Use one of the approaches below



    Encoding & Decoding Tokens with RS256 (RSA)



    encoded = jwt.encode({'some': 'payload'}, private_key, algorithm='RS256')
    decoded = jwt.decode(encoded, public_key, algorithms='RS256')


    Reading the Claimset without Validation



    jwt.decode(encoded, verify=False)
    {u'some': u'payload'}


    Or use same secret to encode and decode the jwt, one of the approach should work. In my case I used jwt.decode(token, verify=False) because my server has already did the signature validation for me, I only need to get the claimset.






    share|improve this answer
























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53337833%2fcould-not-deserialize-key-data-on-decoding-jwt-python%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      2














      There are some issues in the pyjwt library. and you must get the public key from the certificate.



      I used openssl x509 -pubkey -noout -in cert.pem > pubkey.pem



      then from the public key I could easily decode it using authlib library.



      from authlib.specs.rfc7519 import jwt

      encoded_jwt='''eyJ0eXAiOiJ....'''
      secret=b'''-----BEGIN PUBLIC KEY-----
      ......
      -----END PUBLIC KEY-----'''
      claims = jwt.decode(encoded_jwt, secret)
      print(claims)





      share|improve this answer




























        2














        There are some issues in the pyjwt library. and you must get the public key from the certificate.



        I used openssl x509 -pubkey -noout -in cert.pem > pubkey.pem



        then from the public key I could easily decode it using authlib library.



        from authlib.specs.rfc7519 import jwt

        encoded_jwt='''eyJ0eXAiOiJ....'''
        secret=b'''-----BEGIN PUBLIC KEY-----
        ......
        -----END PUBLIC KEY-----'''
        claims = jwt.decode(encoded_jwt, secret)
        print(claims)





        share|improve this answer


























          2












          2








          2







          There are some issues in the pyjwt library. and you must get the public key from the certificate.



          I used openssl x509 -pubkey -noout -in cert.pem > pubkey.pem



          then from the public key I could easily decode it using authlib library.



          from authlib.specs.rfc7519 import jwt

          encoded_jwt='''eyJ0eXAiOiJ....'''
          secret=b'''-----BEGIN PUBLIC KEY-----
          ......
          -----END PUBLIC KEY-----'''
          claims = jwt.decode(encoded_jwt, secret)
          print(claims)





          share|improve this answer













          There are some issues in the pyjwt library. and you must get the public key from the certificate.



          I used openssl x509 -pubkey -noout -in cert.pem > pubkey.pem



          then from the public key I could easily decode it using authlib library.



          from authlib.specs.rfc7519 import jwt

          encoded_jwt='''eyJ0eXAiOiJ....'''
          secret=b'''-----BEGIN PUBLIC KEY-----
          ......
          -----END PUBLIC KEY-----'''
          claims = jwt.decode(encoded_jwt, secret)
          print(claims)






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 19 '18 at 10:25









          Balakrishnan SathiyakuganBalakrishnan Sathiyakugan

          687




          687

























              0














              How did you encode your jwt? Use one of the approaches below



              Encoding & Decoding Tokens with RS256 (RSA)



              encoded = jwt.encode({'some': 'payload'}, private_key, algorithm='RS256')
              decoded = jwt.decode(encoded, public_key, algorithms='RS256')


              Reading the Claimset without Validation



              jwt.decode(encoded, verify=False)
              {u'some': u'payload'}


              Or use same secret to encode and decode the jwt, one of the approach should work. In my case I used jwt.decode(token, verify=False) because my server has already did the signature validation for me, I only need to get the claimset.






              share|improve this answer




























                0














                How did you encode your jwt? Use one of the approaches below



                Encoding & Decoding Tokens with RS256 (RSA)



                encoded = jwt.encode({'some': 'payload'}, private_key, algorithm='RS256')
                decoded = jwt.decode(encoded, public_key, algorithms='RS256')


                Reading the Claimset without Validation



                jwt.decode(encoded, verify=False)
                {u'some': u'payload'}


                Or use same secret to encode and decode the jwt, one of the approach should work. In my case I used jwt.decode(token, verify=False) because my server has already did the signature validation for me, I only need to get the claimset.






                share|improve this answer


























                  0












                  0








                  0







                  How did you encode your jwt? Use one of the approaches below



                  Encoding & Decoding Tokens with RS256 (RSA)



                  encoded = jwt.encode({'some': 'payload'}, private_key, algorithm='RS256')
                  decoded = jwt.decode(encoded, public_key, algorithms='RS256')


                  Reading the Claimset without Validation



                  jwt.decode(encoded, verify=False)
                  {u'some': u'payload'}


                  Or use same secret to encode and decode the jwt, one of the approach should work. In my case I used jwt.decode(token, verify=False) because my server has already did the signature validation for me, I only need to get the claimset.






                  share|improve this answer













                  How did you encode your jwt? Use one of the approaches below



                  Encoding & Decoding Tokens with RS256 (RSA)



                  encoded = jwt.encode({'some': 'payload'}, private_key, algorithm='RS256')
                  decoded = jwt.decode(encoded, public_key, algorithms='RS256')


                  Reading the Claimset without Validation



                  jwt.decode(encoded, verify=False)
                  {u'some': u'payload'}


                  Or use same secret to encode and decode the jwt, one of the approach should work. In my case I used jwt.decode(token, verify=False) because my server has already did the signature validation for me, I only need to get the claimset.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 16 '18 at 18:42









                  Venkatesh MarepalliVenkatesh Marepalli

                  374213




                  374213






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53337833%2fcould-not-deserialize-key-data-on-decoding-jwt-python%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Xamarin.iOS Cant Deploy on Iphone

                      Glorious Revolution

                      Dulmage-Mendelsohn matrix decomposition in Python