Reconstruction of des.exe/undes.exe
This commit is contained in:
Vendored
+215
@@ -0,0 +1,215 @@
|
||||
' A warning to parents that this programming language is unsuited for small
|
||||
' children
|
||||
|
||||
Option Explicit
|
||||
|
||||
'****************************************************************************
|
||||
'* *
|
||||
'* Encryption Algorithm Types/Modes *
|
||||
'* *
|
||||
'****************************************************************************
|
||||
|
||||
' The encryption algorithms we can use
|
||||
|
||||
Global Const CRYPT_ALGO_NONE = 0 ' No encryption
|
||||
Global Const CRYPT_ALGO_MDCSHS = 1 ' MDC/SHS
|
||||
Global Const CRYPT_ALGO_DES = 2 ' DES
|
||||
Global Const CRYPT_ALGO_3DES = 3 ' Two-key triple DES
|
||||
Global Const CRYPT_ALGO_IDEA = 4 ' IDEA
|
||||
Global Const CRYPT_ALGO_RC4 = 5 ' RC4
|
||||
Global Const CRYPT_ALGO_SAFER = 6 ' SAFER and SAFER-SK
|
||||
Global Const CRYPT_ALGO_LAST = 7 ' Last possible crypt algo value
|
||||
|
||||
' The encryption modes we can use
|
||||
|
||||
Global Const CRYPT_MODE_NONE = 0 ' No encryption
|
||||
Global Const CRYPT_MODE_STREAM = 1 ' Stream cipher
|
||||
Global Const CRYPT_MODE_ECB = 2 ' ECB
|
||||
Global Const CRYPT_MODE_CBC = 3 ' CBC
|
||||
Global Const CRYPT_MODE_CFB = 4 ' CFB
|
||||
Global Const CRYPT_MODE_OFB = 5 ' OFB
|
||||
Global Const CRYPT_MODE_PCBC = 6 ' PCBC
|
||||
Global Const CRYPT_MODE_LAST = 6 ' Last possible crypt algo value
|
||||
|
||||
'****************************************************************************
|
||||
'* *
|
||||
'* Library-Wide Constants and Definitions *
|
||||
'* *
|
||||
'****************************************************************************
|
||||
|
||||
' The maximum user key size - 2048 bits
|
||||
|
||||
Global Const CRYPT_MAX_KEYSIZE = 256
|
||||
|
||||
' The maximum IV size - 256 bits
|
||||
|
||||
Global Const CRYPT_MAX_IVSIZE = 64
|
||||
|
||||
' The maximum speed ratio for an encryption algorithm
|
||||
|
||||
Global Const CRYPT_MAX_SPEED = 1000
|
||||
|
||||
'****************************************************************************
|
||||
'* *
|
||||
'* Data Structures *
|
||||
'* *
|
||||
'****************************************************************************
|
||||
|
||||
' An encryption context. Note the order of the BYTE[] fields in this
|
||||
' structure, which ensures they're aligned to the machine word size
|
||||
|
||||
Type CRYPT_INFO
|
||||
' Basic information on the encryption we're using (a pointer to an
|
||||
' internal data structure)
|
||||
capabilityInfo As Long ' The encryption capability data
|
||||
|
||||
' User keying information. The user key is the key as entered by the
|
||||
' user, the transformed user key is (for those algoriths which do this)
|
||||
' the user key transformed by whatever key preprocessing method is used,
|
||||
' stored in canonical form. The IV is the initial IV stored in canonical
|
||||
' form
|
||||
userKey As String * MAX_KEYSIZE ' User encryption key
|
||||
transUserKey As String * MAX_KEYSIZE ' Transformed user key
|
||||
iv As String * MAX_IVSIZE ' Initial IV
|
||||
userKeyLength As Integer ' User encryption key length in bytes
|
||||
ivLength As Integer ' IV length in bytes
|
||||
keySet As Integer ' Whether the key is set up
|
||||
ivSet As Integer ' Whether the IV is set up
|
||||
|
||||
' Keying information. The key is the raw encryption key stored in
|
||||
' whatever form is required by the algorithm. This may be simply an
|
||||
' endianness-adjusted form of the transformed key (in the case of
|
||||
' algorithms like MDC/SHS) or a processed form of the user key (in the
|
||||
' case of algorithms like DES or IDEA). The IV is the current working
|
||||
' IV stored in an endianness-adjusted form. The ivCount is the number
|
||||
' of bytes of IV in use, and may be used for various chaining modes.
|
||||
' These fields may be unused if the algorithm is implemented in hardware
|
||||
key As Long ' Pointer to internal working key
|
||||
currentIV As String * MAX_IVSIZE ' Internal working IV
|
||||
keyLength As Integer ' Internal key length in bytes
|
||||
ivCount As Integer ' Internal IV count for chaining modes
|
||||
|
||||
' Private data needed by the algorithm
|
||||
privateData As Long ' For private use
|
||||
End Type
|
||||
|
||||
' Extra algorithm-specific information stored within a crypt context
|
||||
|
||||
Type CRYPT_INFO_MDCSHS
|
||||
keySetupIterations As Integer ' No.iterations for user key setup
|
||||
End Type
|
||||
|
||||
Type CRYPT_INFO_SAFER
|
||||
rounds As Integer ' Number of encryption rounds
|
||||
currentRounds As Integer ' Internal number of rounds for this key
|
||||
useSaferSK As Integer ' Whether to use strengthened-key version
|
||||
End Type
|
||||
|
||||
' Results returned from the encryption capability query
|
||||
|
||||
Type CRYPT_QUERY_INFO
|
||||
' The algorithm, encryption mode, and algorithm name. Note that the
|
||||
' algorithm name is a pointer to a C string, which current versions of
|
||||
' Visual Basic can't handle when they're inside a structure. To use it,
|
||||
' you need to extract it into a String in the VB program
|
||||
cryptAlgo As Integer ' The encryption algorithm
|
||||
cryptMode As Integer ' The encryption mode
|
||||
algoName As Long ' The algorithm name
|
||||
|
||||
' The algorithm parameters
|
||||
blockSize As Integer ' The basic block size of the algorithm
|
||||
minKeySize As Integer ' Minimum key size in bytes
|
||||
keySize As Integer ' Recommended key size in bytes
|
||||
maxKeySize As Integer ' Maximum key size in bytes
|
||||
minIVsize As Integer ' Minimum IV size in bytes
|
||||
ivSize As Integer ' Recommended IV size in bytes
|
||||
maxIVsize As Integer ' Maximum IV size in bytes
|
||||
|
||||
' Various algorithm characteristics
|
||||
speed As Integer ' Speed relative to block copy
|
||||
End Type
|
||||
|
||||
'****************************************************************************
|
||||
'* *
|
||||
'* Status Codes *
|
||||
'* *
|
||||
'****************************************************************************
|
||||
|
||||
' No error in function call
|
||||
|
||||
Global Const CRYPT_OK = 0 ' No error
|
||||
|
||||
' Generic internal error
|
||||
|
||||
Global Const CRYPT_ERROR = -1 ' Nonspecific error
|
||||
|
||||
' Failed self-test in encryption code
|
||||
|
||||
Global Const CRYPT_SELFTEST = -2 ' Failed self-test
|
||||
|
||||
' Error in parameters passed to function
|
||||
|
||||
Global Const CRYPT_BADPARM = -3 ' Generic bad argument to function
|
||||
Global Const CRYPT_BADPARM1 = -4 ' Bad argument, parameter 1
|
||||
Global Const CRYPT_BADPARM2 = -5 ' Bad argument, parameter 2
|
||||
Global Const CRYPT_BADPARM3 = -6 ' Bad argument, parameter 3
|
||||
Global Const CRYPT_BADPARM4 = -7 ' Bad argument, parameter 4
|
||||
Global Const CRYPT_BADPARM5 = -8 ' Bad argument, parameter 5
|
||||
Global Const CRYPT_BADPARM6 = -9 ' Bad argument, parameter 6
|
||||
Global Const CRYPT_BADPARM7 = -10 ' Bad argument, parameter 7
|
||||
Global Const CRYPT_BADPARM8 = -11 ' Bad argument, parameter 8
|
||||
Global Const CRYPT_BADPARM9 = -12 ' Bad argument, parameter 9
|
||||
Global Const CRYPT_BADPARM10 = -13 ' Bad argument, parameter 10
|
||||
Global Const CRYPT_BADPARM11 = -14 ' Bad argument, parameter 11
|
||||
Global Const CRYPT_BADPARM12 = -15 ' Bad argument, parameter 12
|
||||
Global Const CRYPT_BADPARM13 = -16 ' Bad argument, parameter 13
|
||||
Global Const CRYPT_BADPARM14 = -17 ' Bad argument, parameter 14
|
||||
Global Const CRYPT_BADPARM15 = -18 ' Bad argument, parameter 15
|
||||
|
||||
' Errors due to insufficient resources
|
||||
|
||||
Global Const CRYPT_NOMEM = -19 ' Out of memory
|
||||
Global Const CRYPT_NOTINITED = -20 ' Data has not been initialised
|
||||
Global Const CRYPT_INITED = -21 ' Data has already been initialised
|
||||
Global Const CRYPT_NOALGO = -22 ' Algorithm unavailable
|
||||
Global Const CRYPT_NOMODE = -23 ' Encryption mode unavailable
|
||||
Global Const CRYPT_NOKEY = -24 ' Key not initialised
|
||||
Global Const CRYPT_NOIV = -25 ' IV not initialised
|
||||
|
||||
'****************************************************************************
|
||||
'* *
|
||||
'* Public Functions *
|
||||
'* *
|
||||
'****************************************************************************
|
||||
|
||||
' Initialise and shut down the encryption library
|
||||
|
||||
Declare Function initLibrary Lib "Crypt.Dll" () As Integer
|
||||
Declare Function endLibrary Lib "Crypt.Dll" () As Integer
|
||||
|
||||
' Query the capabilities of the encryption library
|
||||
|
||||
Declare Function queryModeAvailability Lib "Crypt.Dll" (ByVal cryptAlgo As Integer, ByVal cryptMode As Integer) As Integer
|
||||
Declare Function queryAlgoAvailability Lib "Crypt.Dll" (ByVal cryptAlgo As Integer) As Integer
|
||||
Declare Function queryAlgoModeInformation Lib "Crypt.Dll" (ByVal cryptAlgo As Integer, ByVal cryptMode As Integer, cryptQueryInfo As CRYPT_QUERY_INFO) As Integer
|
||||
Declare Function queryContextInformation Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, cryptQueryInfo As CRYPT_QUERY_INFO) As Integer
|
||||
|
||||
' Initialise and destroy an encryption context
|
||||
|
||||
Declare Function initCryptContext Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal cryptAlgo As Integer, ByVal cryptMode As Integer) As Integer
|
||||
Declare Function initCryptContextEx Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal cryptAlgo As Integer, ByVal cryptMode As Integer, cryptInfoEx As Any) As Integer
|
||||
Declare Function destroyCryptContext Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO) As Integer
|
||||
|
||||
' Load a user key into a crypt context
|
||||
|
||||
Declare Function loadCryptContext Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal key As String, ByVal keyLength As Integer) As Integer
|
||||
|
||||
' Load/retreive an IV into/from a crypt context
|
||||
|
||||
Declare Function loadIV Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal iv As String, ByVal length As Integer) As Integer
|
||||
Declare Function retrieveIV Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal iv As String) As Integer
|
||||
|
||||
' Encrypt/decrypt a block of memory
|
||||
|
||||
Declare Function encryptBuffer Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal buffer As String, ByVal length As Integer) As Integer
|
||||
Declare Function decryptBuffer Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal buffer As String, ByVal length As Integer) As Integer
|
||||
Reference in New Issue
Block a user