Metadata-Version: 2.1
Name: py3mschap
Version: 0.1
Summary: python3 mschap module
Home-page: https://github.com/astibal/py3mschap
Author: Ales Stibal
Author-email: astib@mag0.net
License: LGPL
Keywords: mschap,mschapv1,mschapv2,py3mschap
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown

# py3mschap

First of all I hereby acknowledge this is not my original work. This repo 
is based on work of `jamiesun.net@gmail.com`, original repo is

[https://github.com/talkincode/pymschap](https://github.com/talkincode/pymschap). 

### Why I decided to fork it and rename it

 * I needed python3 pip package
 * repo is left with much of care, where I need my own code base with possibility to extend it
 * I have quite bad experience with pr->fix->pip cycle flow

### What you can expect here  
If everything is running ok, probably some more from radius related mechanisms implemented 
in my simple radius **testing mini-server** [raok](https://github.com/astibal/raok).
This module will be used there and via pip3 maintained for further improvements.


 ##### Original example provided by Jamie


    def verify_radius_request(ms_chap_response,authenticator_challenge,username,userpwd,secret,authenticator):
        import six
        from pymschap import mschap, mppe
        result = {}
        if len(ms_chap_response)!=50:
            raise Exception("Invalid MSCHAPV2-Response attribute length")
        # if isinstance(userpwd, six.text_type):
        #     userpwd = userpwd.strip().encode('utf-8')

        nt_response = ms_chap_response[26:50]
        peer_challenge = ms_chap_response[2:18]
        nt_resp = mschap.generate_nt_response_mschap2(
            authenticator_challenge,
            peer_challenge,
            username,
            userpwd,
        )
        if nt_resp == nt_response:
            auth_resp = mschap.generate_authenticator_response(
                userpwd,
                nt_response,
                peer_challenge,
                authenticator_challenge,
                username
            )
            result['MS-CHAP2-Success'] = auth_resp
            result['MS-MPPE-Encryption-Policy'] = '\x00\x00\x00\x01'
            result['MS-MPPE-Encryption-Type'] = '\x00\x00\x00\x06'
            mppeSendKey, mppeRecvKey = mppe.mppe_chap2_gen_keys(userpwd, nt_response)
            send_key, recv_key = mppe.gen_radius_encrypt_keys(
                mppeSendKey,
                mppeRecvKey,
                secret,
                authenticator)
            result['MS-MPPE-Send-Key'] = send_key
            result['MS-MPPE-Recv-Key'] = recv_key
        else:
            result['Reply-Message'] = "E=691 R=1 C=%s V=3 M=<password error>" % ('\0' * 32)

        return result


