gssapi/ctx.py
def get_mic(self, message, qop_req=C.GSS_C_QOP_DEFAULT):
        """
        Calculates a cryptographic message integrity code (MIC) over an application message, and
        returns that MIC in a token. This is in contrast to :meth:`wrap` which calculates a MIC
        over a message, optionally encrypts it and returns the original message and the MIC packed
        into a single token. The peer application can then verify the MIC to ensure the associated
        message has not been changed in transit.

        :param message: The message to calculate a MIC for
        :type message: bytes
        :param qop_req: The quality of protection required. It is recommended to not change this
            from the default as most GSSAPI implementations do not support it.
        :returns: A MIC for the message calculated using this security context's cryptographic keys
        :rtype: bytes
        """
        if not (self.flags & C.GSS_C_INTEG_FLAG):
            raise GSSException("No integrity protection negotiated.")
        if not (self.established or (self.flags & C.GSS_C_PROT_READY_FLAG)):
            raise GSSException("Protection not yet ready.")

        minor_status = ffi.new('OM_uint32[1]')
        output_token_buffer = ffi.new('gss_buffer_desc[1]')
        message_buffer = ffi.new('gss_buffer_desc[1]')
        message_buffer[0].length = len(message)
        c_str_message = ffi.new('char[]', message)
        message_buffer[0].value = c_str_message
        retval = C.gss_get_mic(
            minor_status,
            self._ctx[0],
            ffi.cast('gss_qop_t', qop_req),
            message_buffer,
            output_token_buffer
        )
        try:
            if GSS_ERROR(retval):
                if minor_status[0] and self.mech_type:
                    raise _exception_for_status(retval, minor_status[0], self.mech_type)
                else:
                    raise _exception_for_status(retval, minor_status[0])

            output_token = _buf_to_str(output_token_buffer[0])
            return output_token
        finally:
            if output_token_buffer[0].length != 0:
                C.gss_release_buffer(minor_status, output_token_buffer)
def get_mic(self, message, qop_req=C.GSS_C_QOP_DEFAULT):
        """
        Calculates a cryptographic message integrity code (MIC) over an application message, and
        returns that MIC in a token. This is in contrast to :meth:`wrap` which calculates a MIC
        over a message, optionally encrypts it and returns the original message and the MIC packed
        into a single token. The peer application can then verify the MIC to ensure the associated
        message has not been changed in transit.

        :param message: The message to calculate a MIC for
        :type message: bytes
        :param qop_req: The quality of protection required. It is recommended to not change this
            from the default as most GSSAPI implementations do not support it.
        :returns: A MIC for the message calculated using this security context's cryptographic keys
        :rtype: bytes
        """
        if not (self.flags & C.GSS_C_INTEG_FLAG):
            raise GSSException("No integrity protection negotiated.")
        if not (self.established or (self.flags & C.GSS_C_PROT_READY_FLAG)):
            raise GSSException("Protection not yet ready.")

        minor_status = ffi.new('OM_uint32[1]')
        output_token_buffer = ffi.new('gss_buffer_desc[1]')
        message_buffer = ffi.new('gss_buffer_desc[1]')
        message_buffer[0].length = len(message)
        c_str_message = ffi.new('char[]', message)
        message_buffer[0].value = c_str_message
        retval = C.gss_get_mic(
            minor_status,
            self._ctx[0],
            ffi.cast('gss_qop_t', qop_req),
            message_buffer,
            output_token_buffer
        )
        try:
            if GSS_ERROR(retval):
                if minor_status[0] and self.mech_type:
                    raise _exception_for_status(retval, minor_status[0], self.mech_type)
                else:
                    raise _exception_for_status(retval, minor_status[0])

            output_token = _buf_to_str(output_token_buffer[0])
            return output_token
        finally:
            if output_token_buffer[0].length != 0:
                C.gss_release_buffer(minor_status, output_token_buffer)
def get_mic ( self , message , qop_req = C . GSS_C_QOP_DEFAULT ) : if not ( self . flags & C . GSS_C_INTEG_FLAG ) : raise GSSException ( "No integrity protection negotiated." ) if not ( self . established or ( self . flags & C . GSS_C_PROT_READY_FLAG ) ) : raise GSSException ( "Protection not yet ready." ) minor_status = ffi . new ( 'OM_uint32[1]' ) output_token_buffer = ffi . new ( 'gss_buffer_desc[1]' ) message_buffer = ffi . new ( 'gss_buffer_desc[1]' ) message_buffer [ 0 ] . length = len ( message ) c_str_message = ffi . new ( 'char[]' , message ) message_buffer [ 0 ] . value = c_str_message retval = C . gss_get_mic ( minor_status , self . _ctx [ 0 ] , ffi . cast ( 'gss_qop_t' , qop_req ) , message_buffer , output_token_buffer ) try : if GSS_ERROR ( retval ) : if minor_status [ 0 ] and self . mech_type : raise _exception_for_status ( retval , minor_status [ 0 ] , self . mech_type ) else : raise _exception_for_status ( retval , minor_status [ 0 ] ) output_token = _buf_to_str ( output_token_buffer [ 0 ] ) return output_token finally : if output_token_buffer [ 0 ] . length != 0 : C . gss_release_buffer ( minor_status , output_token_buffer )
Calculates a cryptographic message integrity code (MIC) over an application message, and
        returns that MIC in a token. This is in contrast to :meth:`wrap` which calculates a MIC
        over a message, optionally encrypts it and returns the original message and the MIC packed
        into a single token. The peer application can then verify the MIC to ensure the associated
        message has not been changed in transit.

        :param message: The message to calculate a MIC for
        :type message: bytes
        :param qop_req: The quality of protection required. It is recommended to not change this
            from the default as most GSSAPI implementations do not support it.
        :returns: A MIC for the message calculated using this security context's cryptographic keys
        :rtype: bytes
Calculates a cryptographic message integrity code ( MIC ) over an application message and returns that MIC in a token . This is in contrast to : meth : wrap which calculates a MIC over a message optionally encrypts it and returns the original message and the MIC packed into a single token . The peer application can then verify the MIC to ensure the associated message has not been changed in transit .