# Path: pysnmp/proto/errind.py
# class ErrorIndication:
# class ParseError(ErrorIndication): pass
# class UnsupportedMsgProcessingModel(ErrorIndication): pass
# class UnknownPDUHandler(ErrorIndication): pass
# class UnsupportedPDUtype(ErrorIndication): pass
# class RequestTimedOut(ErrorIndication): pass
# class EmptyResponse(ErrorIndication): pass
# class NonReportable(ErrorIndication): pass
# class DataMismatch(ErrorIndication): pass
# class EngineIDMismatch(ErrorIndication): pass
# class UnknownEngineID(ErrorIndication): pass
# class TooBig(ErrorIndication): pass
# class LoopTerminated(ErrorIndication):pass
# class InvalidMsg(ErrorIndication):pass
# class UnknownCommunityName(ErrorIndication): pass
# class NoEncryption(ErrorIndication): pass
# class EncryptionError(ErrorIndication): pass
# class DecryptionError(ErrorIndication): pass
# class NoAuthentication(ErrorIndication): pass
# class AuthenticationError(ErrorIndication): pass
# class AuthenticationFailure(ErrorIndication): pass
# class UnsupportedAuthProtocol(ErrorIndication): pass
# class UnsupportedPrivProtocol(ErrorIndication): pass
# class UnknownSecurityName(ErrorIndication): pass
# class UnsupportedSecurityModel(ErrorIndication): pass
# class UnsupportedSecurityLevel(ErrorIndication): pass
# class NotInTimeWindow(ErrorIndication): pass
# class NoSuchView(ErrorIndication): pass
# class NoAccessEntry(ErrorIndication): pass
# class NoGroupName(ErrorIndication): pass
# class NoSuchContext(ErrorIndication): pass
# class NotInView(ErrorIndication): pass
# class AccessAllowed(ErrorIndication): pass
# class OtherError(ErrorIndication): pass
# class OidNotIncreasing(ErrorIndication): pass
#     def __init__(self, descr=None):
#     def __eq__(self, other): return self.__value == other
#     def __ne__(self, other): return self.__value != other
#     def __lt__(self, other): return self.__value < other
#     def __le__(self, other): return self.__value <= other
#     def __gt__(self, other): return self.__value > other
#     def __ge__(self, other): return self.__value >= other
#     def __str__(self): return self.__descr


import random
from pysnmp.proto.secmod.rfc3414.priv import base
from pysnmp.proto.secmod.rfc3414.auth import hmacmd5, hmacsha
from pysnmp.proto.secmod.rfc3414 import localkey
from pysnmp.proto import errind, error
from pyasn1.type import univ
from pyasn1.compat.octets import null
    from Crypto.Cipher import DES3

        salt = [
            securityEngineBoots>>24&0xff,
            securityEngineBoots>>16&0xff,
            securityEngineBoots>>8&0xff,
            securityEngineBoots&0xff,
            self._localInt>>24&0xff,
            self._localInt>>16&0xff,
            self._localInt>>8&0xff,
            self._localInt&0xff
            ]
        if self._localInt == 0xffffffff:
            self._localInt = 0
        else:
            self._localInt = self._localInt + 1

        # salt not yet hashed XXX
        
        return des3Key.asOctets(), \
               univ.OctetString(salt).asOctets(), \
               univ.OctetString(map(lambda x,y:x^y, salt, preIV.asNumbers())).asOctets()
    
    def __getDecryptionKey(self, privKey, salt):
        return privKey[:24].asOctets(), \
               univ.OctetString(map(lambda x,y:x^y, salt, privKey[24:32].asNumbers())).asOctets()

    # 5.1.1.2
    def encryptData(self, encryptKey, privParameters, dataToEncrypt):
        if DES3 is None:
            raise error.StatusInformation(

# Path: pysnmp/proto/errind.py
# class ErrorIndication:
# class ParseError(ErrorIndication): pass
# class UnsupportedMsgProcessingModel(ErrorIndication): pass
# class UnknownPDUHandler(ErrorIndication): pass
# class UnsupportedPDUtype(ErrorIndication): pass
# class RequestTimedOut(ErrorIndication): pass
# class EmptyResponse(ErrorIndication): pass
# class NonReportable(ErrorIndication): pass
# class DataMismatch(ErrorIndication): pass
# class EngineIDMismatch(ErrorIndication): pass
# class UnknownEngineID(ErrorIndication): pass
# class TooBig(ErrorIndication): pass
# class LoopTerminated(ErrorIndication):pass
# class InvalidMsg(ErrorIndication):pass
# class UnknownCommunityName(ErrorIndication): pass
# class NoEncryption(ErrorIndication): pass
# class EncryptionError(ErrorIndication): pass
# class DecryptionError(ErrorIndication): pass
# class NoAuthentication(ErrorIndication): pass
# class AuthenticationError(ErrorIndication): pass
# class AuthenticationFailure(ErrorIndication): pass
# class UnsupportedAuthProtocol(ErrorIndication): pass
# class UnsupportedPrivProtocol(ErrorIndication): pass
# class UnknownSecurityName(ErrorIndication): pass
# class UnsupportedSecurityModel(ErrorIndication): pass
# class UnsupportedSecurityLevel(ErrorIndication): pass
# class NotInTimeWindow(ErrorIndication): pass
# class NoSuchView(ErrorIndication): pass
# class NoAccessEntry(ErrorIndication): pass
# class NoGroupName(ErrorIndication): pass
# class NoSuchContext(ErrorIndication): pass
# class NotInView(ErrorIndication): pass
# class AccessAllowed(ErrorIndication): pass
# class OtherError(ErrorIndication): pass
# class OidNotIncreasing(ErrorIndication): pass
#     def __init__(self, descr=None):
#     def __eq__(self, other): return self.__value == other
#     def __ne__(self, other): return self.__value != other
#     def __lt__(self, other): return self.__value < other
#     def __le__(self, other): return self.__value <= other
#     def __gt__(self, other): return self.__value > other
#     def __ge__(self, other): return self.__value >= other
#     def __str__(self): return self.__descr


# Path: pysnmp/proto/secmod/eso/priv/des3.py
import random
from pysnmp.proto.secmod.rfc3414.priv import base
from pysnmp.proto.secmod.rfc3414.auth import hmacmd5, hmacsha
from pysnmp.proto.secmod.rfc3414 import localkey
from pysnmp.proto import errind, error
from pyasn1.type import univ
from pyasn1.compat.octets import null
    from Crypto.Cipher import DES3


        salt = [
            securityEngineBoots>>24&0xff,
            securityEngineBoots>>16&0xff,
            securityEngineBoots>>8&0xff,
            securityEngineBoots&0xff,
            self._localInt>>24&0xff,
            self._localInt>>16&0xff,
            self._localInt>>8&0xff,
            self._localInt&0xff
            ]
        if self._localInt == 0xffffffff:
            self._localInt = 0
        else:
            self._localInt = self._localInt + 1

        # salt not yet hashed XXX
        
        return des3Key.asOctets(), \
               univ.OctetString(salt).asOctets(), \
               univ.OctetString(map(lambda x,y:x^y, salt, preIV.asNumbers())).asOctets()
    
    def __getDecryptionKey(self, privKey, salt):
        return privKey[:24].asOctets(), \
               univ.OctetString(map(lambda x,y:x^y, salt, privKey[24:32].asNumbers())).asOctets()

    # 5.1.1.2
    def encryptData(self, encryptKey, privParameters, dataToEncrypt):
        if DES3 is None:
            raise error.StatusInformation(

                errorIndication=errind.encryptionError