home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / vbasic / Data / Utils / XZipComp.exe / XceedEncryption.Cab / F112960_MemoryEncrypt.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  2001-06-26  |  31.7 KB  |  706 lines

  1. VERSION 5.00
  2. Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
  3. Begin VB.Form frmMemoryEncrypt 
  4.    BorderStyle     =   3  'Fixed Dialog
  5.    Caption         =   "Memory Encryption"
  6.    ClientHeight    =   6180
  7.    ClientLeft      =   45
  8.    ClientTop       =   330
  9.    ClientWidth     =   10455
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    MinButton       =   0   'False
  13.    ScaleHeight     =   6180
  14.    ScaleWidth      =   10455
  15.    StartUpPosition =   2  'CenterScreen
  16.    Begin VB.Frame Frame2 
  17.       Caption         =   "Frame2"
  18.       Height          =   1515
  19.       Left            =   150
  20.       TabIndex        =   3
  21.       Top             =   1275
  22.       Width           =   8340
  23.       Begin VB.OptionButton optAsymmetricEncryption 
  24.          Caption         =   "Asymmetric encryption"
  25.          Height          =   240
  26.          Left            =   75
  27.          TabIndex        =   4
  28.          Top             =   0
  29.          Width           =   1890
  30.       End
  31.       Begin VB.CommandButton cmdSelectPrivateKeyFile 
  32.          Caption         =   "..."
  33.          Height          =   285
  34.          Left            =   7950
  35.          TabIndex        =   6
  36.          Top             =   375
  37.          Width           =   285
  38.       End
  39.       Begin VB.TextBox txtPrivateKeyFile 
  40.          Height          =   285
  41.          Left            =   1500
  42.          OLEDropMode     =   1  'Manual
  43.          TabIndex        =   5
  44.          Top             =   375
  45.          Width           =   6390
  46.       End
  47.       Begin VB.TextBox txtPublicKeyFile 
  48.          Height          =   285
  49.          Left            =   1500
  50.          OLEDropMode     =   2  'Automatic
  51.          TabIndex        =   7
  52.          Top             =   750
  53.          Width           =   6390
  54.       End
  55.       Begin VB.CommandButton cmdSelectPublicKeyFile 
  56.          Caption         =   "..."
  57.          Height          =   285
  58.          Left            =   7950
  59.          TabIndex        =   8
  60.          Top             =   750
  61.          Width           =   285
  62.       End
  63.       Begin VB.CommandButton cmdRandomKeyPair 
  64.          Caption         =   "Set random key pair"
  65.          Height          =   315
  66.          Left            =   6450
  67.          TabIndex        =   9
  68.          Top             =   1125
  69.          Width           =   1815
  70.       End
  71.       Begin VB.Label lbl 
  72.          Caption         =   "Private key file"
  73.          Height          =   240
  74.          Index           =   2
  75.          Left            =   150
  76.          TabIndex        =   20
  77.          Top             =   375
  78.          Width           =   1290
  79.       End
  80.       Begin VB.Label lbl 
  81.          Caption         =   "Public key file"
  82.          Height          =   240
  83.          Index           =   3
  84.          Left            =   150
  85.          TabIndex        =   19
  86.          Top             =   750
  87.          Width           =   1215
  88.       End
  89.    End
  90.    Begin VB.Frame fraSymmetricEncryption 
  91.       Height          =   1065
  92.       Left            =   150
  93.       TabIndex        =   0
  94.       Top             =   75
  95.       Width           =   8340
  96.       Begin VB.OptionButton optSymmetricEncryption 
  97.          Caption         =   "Symmetric encryption"
  98.          Height          =   240
  99.          Left            =   75
  100.          TabIndex        =   15
  101.          Top             =   0
  102.          Width           =   1815
  103.       End
  104.       Begin VB.CommandButton cmdOption 
  105.          Caption         =   "Option"
  106.          Height          =   315
  107.          Left            =   7125
  108.          TabIndex        =   2
  109.          Top             =   675
  110.          Width           =   1140
  111.       End
  112.       Begin VB.TextBox txtPassPhrase 
  113.          Height          =   285
  114.          IMEMode         =   3  'DISABLE
  115.          Left            =   1500
  116.          OLEDropMode     =   1  'Manual
  117.          TabIndex        =   1
  118.          Top             =   300
  119.          Width           =   6765
  120.       End
  121.       Begin VB.Label lbl 
  122.          Caption         =   "Pass phrase"
  123.          Height          =   240
  124.          Index           =   0
  125.          Left            =   150
  126.          TabIndex        =   18
  127.          Top             =   300
  128.          Width           =   915
  129.       End
  130.    End
  131.    Begin VB.Frame fraEncrypted 
  132.       Caption         =   "Encrypted text"
  133.       Height          =   2640
  134.       Left            =   5850
  135.       TabIndex        =   17
  136.       Top             =   2925
  137.       Width           =   4515
  138.       Begin VB.TextBox txtEncryptedText 
  139.          BeginProperty Font 
  140.             Name            =   "Courier New"
  141.             Size            =   8.25
  142.             Charset         =   0
  143.             Weight          =   400
  144.             Underline       =   0   'False
  145.             Italic          =   0   'False
  146.             Strikethrough   =   0   'False
  147.          EndProperty
  148.          Height          =   2265
  149.          Left            =   75
  150.          MultiLine       =   -1  'True
  151.          ScrollBars      =   2  'Vertical
  152.          TabIndex        =   13
  153.          Top             =   300
  154.          Width           =   4365
  155.       End
  156.    End
  157.    Begin VB.Frame fraDecrypted 
  158.       Caption         =   "Decrypted text"
  159.       Height          =   2640
  160.       Left            =   150
  161.       TabIndex        =   16
  162.       Top             =   2925
  163.       Width           =   4440
  164.       Begin VB.TextBox txtDecryptedText 
  165.          Height          =   2265
  166.          Left            =   75
  167.          MultiLine       =   -1  'True
  168.          ScrollBars      =   2  'Vertical
  169.          TabIndex        =   10
  170.          Top             =   300
  171.          Width           =   4290
  172.       End
  173.    End
  174.    Begin VB.CommandButton cmdQuit 
  175.       Cancel          =   -1  'True
  176.       Caption         =   "Quit"
  177.       Height          =   390
  178.       Left            =   9225
  179.       TabIndex        =   14
  180.       Top             =   5700
  181.       Width           =   1140
  182.    End
  183.    Begin VB.CommandButton cmdDecrypt 
  184.       Caption         =   "<< Decrypt"
  185.       Height          =   540
  186.       Left            =   4725
  187.       TabIndex        =   12
  188.       Top             =   4575
  189.       Width           =   990
  190.    End
  191.    Begin VB.CommandButton cmdEncrypt 
  192.       Caption         =   "Encrypt >>"
  193.       Height          =   540
  194.       Left            =   4725
  195.       TabIndex        =   11
  196.       Top             =   3600
  197.       Width           =   990
  198.    End
  199.    Begin MSComDlg.CommonDialog dlgCommon 
  200.       Left            =   1725
  201.       Top             =   5625
  202.       _ExtentX        =   847
  203.       _ExtentY        =   847
  204.       _Version        =   393216
  205.    End
  206. Attribute VB_Name = "frmMemoryEncrypt"
  207. Attribute VB_GlobalNameSpace = False
  208. Attribute VB_Creatable = False
  209. Attribute VB_PredeclaredId = True
  210. Attribute VB_Exposed = False
  211. ' Xceed Encryption Library - Memory Encrypt sample
  212. ' Copyright (c) 2001 Xceed Software Inc.
  213. ' [MemoryEncrypt.frm]
  214. ' This form module contains the main form's code. It demonstrates how to
  215. ' Encrypt a chunk of memory data using different kinds of Encryption methods,
  216. ' and Decrypt an Encrypted memory data. It specifically uses:
  217. '  - The Encrypt, Decrypt, SetSecretKeyFromPassPhrase,
  218. '    SetRandomInitVector and SetRandomKeyPair methods.
  219. '  - The HashingMethod, HashSize, EncryptionMode, PaddingMethod, EncryptionMethod,
  220. '    PrivateKey and PublicKey properties.
  221. ' This file is part of the Xceed Encryption Library sample applications.
  222. ' The source code in this file is only intended as a supplement to Xceed
  223. ' Encryption Library's documentation, and is provided "as is", without
  224. ' warranty of any kind, either expressed or implied.
  225. Option Explicit
  226. 'The different encryption methods
  227. Public Enum enuEncryptionMethod
  228.     eemRijndael = 0
  229.     eemTwoFish = 1
  230. End Enum
  231. 'The different hashing methods
  232. Public Enum enuHashingMethod
  233.     ehmSHA = 0
  234.     ehmHaval = 1
  235. End Enum
  236. 'The values chosen by the user in the Option form
  237. Private m_eEncryptionMethod As enuEncryptionMethod
  238. Private m_eEncryptionMode As EXEEncryptionMode
  239. Private m_ePaddingMethod As EXEPaddingMethod
  240. Private m_eHashingMethod As enuHashingMethod
  241. Private m_lSecretKeySize As Integer
  242. '====================================================================================
  243. ' EVENTS - triggered by the form and its controls
  244. '====================================================================================
  245. '------------------------------------------------------------------------------------
  246. 'Do the Encryption of the original text
  247. '------------------------------------------------------------------------------------
  248. Private Sub cmdEncrypt_Click()
  249.     Dim xEncryptor As XceedEncryption
  250.     Dim vaDecryptedText As Variant
  251.     Dim lErrorNumber As Long
  252.     Dim sEncrypted As String
  253.     'Create an instance of the Xceed Encryption
  254.     Set xEncryptor = New XceedEncryption
  255.     With xEncryptor
  256.         'Create and prepare the Encryption Method
  257.         If PrepareEncryptionMethod(xEncryptor) Then
  258.             'Convert unicode text to an ascii string
  259.             'Useful to reduce the output Encrypted string, but it could
  260.             'be skipped
  261.             vaDecryptedText = StrConv(txtDecryptedText.Text, vbFromUnicode)
  262.             
  263.             On Error Resume Next
  264.                 'Encrypt the ascii string, specifying that (True parameter)
  265.                 'this is the end of data (there will be no more calls to Encrypt).
  266.                 'Then convert the encrypted text to Hexadecimal representation so
  267.                 'it can be readable in a text box
  268.                 sEncrypted = BinaryToHex(.Encrypt(vaDecryptedText, True))
  269.                 
  270.                 lErrorNumber = Err.Number
  271.                 If lErrorNumber <> 0 Then
  272.                     Call MsgBox("Error during Encrypt." & vbCrLf & Err.Description & " (" & Hex(Err.Number) & ")")
  273.                 End If
  274.             On Error GoTo 0
  275.         Else
  276.             'An error occured, we don't know which one, we don't care because it was
  277.             'already shown to the user. We set the error code to an arbitrary
  278.             'value of 1.
  279.             lErrorNumber = 1
  280.         End If
  281.         
  282.         If lErrorNumber = 0 Then
  283.             If Len(sEncrypted) = 0 Then
  284.                 'No output was produced
  285.                 txtEncryptedText.Text = ""
  286.             Else
  287.                 'Display the Encrypted result in the text box
  288.                 'The BinaryToHex method returning a BSTR (Unicode), we
  289.                 'don't have to convert the encrypted string. We can affect
  290.                 'it directly to the textbox
  291.                 txtEncryptedText.Text = sEncrypted
  292.             End If
  293.         End If
  294.     End With
  295.     'Deallocate the Encryption object. The Encryption object will free
  296.     'the EncryptionMethod object.
  297.     Set xEncryptor = Nothing
  298. End Sub
  299. '------------------------------------------------------------------------------------
  300. 'Do the Decryption of the Encrypted text
  301. '------------------------------------------------------------------------------------
  302. Private Sub cmdDecrypt_Click()
  303.     Dim xEncryptor As XceedEncryption
  304.     Dim lErrorNumber As Long
  305.     Dim vaDecrypted As Variant
  306.     'Create an instance of the Xceed Encryption
  307.     Set xEncryptor = New XceedEncryption
  308.     With xEncryptor
  309.         'Create and prepare the Encryption Method
  310.         If PrepareEncryptionMethod(xEncryptor) Then
  311.             On Error Resume Next
  312.                 'Convert the encrypted text from Hexadecimal representation to
  313.                 'binary representation so it can be successfully decrypted.
  314.                 'Decrypt the ascii Encrypted string, specifying that (True parameter)
  315.                 'this is the end of data (there will be no more calls to Decrypt).
  316.                 vaDecrypted = .Decrypt(HexToBinary(txtEncryptedText.Text), True)
  317.                 
  318.                 lErrorNumber = Err.Number
  319.                 If lErrorNumber <> 0 Then
  320.                     Call MsgBox("Error during Decrypt." & vbCrLf & Err.Description & " (" & Hex(Err.Number) & ")")
  321.                 End If
  322.             On Error GoTo 0
  323.         Else
  324.             'An error occured, we don't know which one and we don't care because it was
  325.             'already shown to the user. We set the error code to an arbitrary
  326.             'value of 1.
  327.             lErrorNumber = 1
  328.         End If
  329.         
  330.         If lErrorNumber = 0 Then
  331.             If IsEmpty(vaDecrypted) Then
  332.                 'No output was produced
  333.                 txtDecryptedText.Text = ""
  334.             Else
  335.                 'Display the Decrypted result in the text box.
  336.                 'We convert the ascii string
  337.                 'returned by the Decrypt method to Unicode so that the
  338.                 'Decrypted text box will contained something readable.
  339.                 'If we had not convert the Decrypted string in the Encrypt
  340.                 'process (to reduce the output Encrypted string), we
  341.                 'would simply assign the vaDecrypted to the txtDecryptedText.
  342.                 txtDecryptedText.Text = StrConv(vaDecrypted, vbUnicode)
  343.             End If
  344.         End If
  345.     End With
  346.     'Deallocate the Encryption object. The Encryption object will free
  347.     'the EncryptionMethod object.
  348.     Set xEncryptor = Nothing
  349. End Sub
  350. '------------------------------------------------------------------------------------
  351. 'Display the options form, saving them if the user click OK
  352. '------------------------------------------------------------------------------------
  353. Private Sub cmdOption_Click()
  354.     Dim xFrmOption As frmOption
  355.     Set xFrmOption = New frmOption
  356.     If xFrmOption.ShowForm(m_eEncryptionMethod, m_eEncryptionMode, m_ePaddingMethod, m_eHashingMethod, m_lSecretKeySize) Then
  357.         Call SaveOption
  358.     End If
  359.     Set xFrmOption = Nothing
  360. End Sub
  361. '------------------------------------------------------------------------------------
  362. 'Quit the sample application
  363. '------------------------------------------------------------------------------------
  364. Private Sub cmdQuit_Click()
  365.     End
  366. End Sub
  367. '------------------------------------------------------------------------------------
  368. 'Generate new private and public keys stored in the file specified in the
  369. 'respective text boxes.
  370. '------------------------------------------------------------------------------------
  371. Private Sub cmdRandomKeyPair_Click()
  372.     Dim fxKeyPair As frmKeyPair
  373.     If Len(Trim$(txtPrivateKeyFile.Text)) = 0 Or Len(Trim$(txtPublicKeyFile.Text)) = 0 Then
  374.         'The file names are mandatory
  375.         Call MsgBox("You must specify the key file names where will be stored the private and public keys", vbExclamation, "Error")
  376.     Else
  377.         'Show the dialog box used to generate a new key pair, passing it the two file names
  378.         Set fxKeyPair = New frmKeyPair
  379.         Call fxKeyPair.ShowForm(txtPrivateKeyFile.Text, txtPublicKeyFile.Text)
  380.         Set fxKeyPair = Nothing
  381.     End If
  382. End Sub
  383. '------------------------------------------------------------------------------------
  384. 'Select the file name that contain (or will contain) the private key.
  385. '------------------------------------------------------------------------------------
  386. Private Sub cmdSelectPrivateKeyFile_Click()
  387.     With dlgCommon
  388.         .FileName = ""
  389.         .DialogTitle = "Source file"
  390.         .Filter = "Key file (*.key)|*.key|All type (*.*)|*.*"
  391.         .FilterIndex = 0
  392.         .Flags = cdlOFNExplorer
  393.         On Error Resume Next
  394.             Call .ShowOpen
  395.             If Len(.FileName) > 0 Then
  396.                 txtPrivateKeyFile.Text = .FileName
  397.                 Call SavePrivateKeyFileSetting
  398.             End If
  399.         On Error GoTo 0
  400.     End With
  401. End Sub
  402. '------------------------------------------------------------------------------------
  403. 'Select the file name that contain (or will contain) the public key.
  404. '------------------------------------------------------------------------------------
  405. Private Sub cmdSelectPublicKeyFile_Click()
  406.     With dlgCommon
  407.         .FileName = ""
  408.         .DialogTitle = "Source file"
  409.         .Filter = "Key file (*.key)|*.key|All type (*.*)|*.*"
  410.         .FilterIndex = 0
  411.         .Flags = cdlOFNExplorer
  412.         On Error Resume Next
  413.             Call .ShowOpen
  414.             If Len(.FileName) > 0 Then
  415.                 txtPublicKeyFile.Text = .FileName
  416.                 Call SavePublicKeyFileSetting
  417.             End If
  418.         On Error GoTo 0
  419.     End With
  420. End Sub
  421. '------------------------------------------------------------------------------------
  422. 'Initialize the default and last saved options
  423. '------------------------------------------------------------------------------------
  424. Private Sub Form_Load()
  425.     Call LoadOption
  426.     txtDecryptedText.Text = "This is a little test to show you how the memory encryption works." & vbCrLf & _
  427.                             "And it is very easy to use."
  428.     Call EnableControls
  429. End Sub
  430. '------------------------------------------------------------------------------------
  431. 'The user selected asymmetric mode, disable controls associated with symmetric
  432. 'encryption
  433. '------------------------------------------------------------------------------------
  434. Private Sub optAsymmetricEncryption_Click()
  435.     If Me.Visible Then
  436.         optSymmetricEncryption.Value = False
  437.         Call EnableControls
  438.         Call SaveEncryptionType
  439.     End If
  440. End Sub
  441. '------------------------------------------------------------------------------------
  442. 'The user selected symmetric mode, disable controls associated with asymmetric
  443. 'encryption
  444. '------------------------------------------------------------------------------------
  445. Private Sub optSymmetricEncryption_Click()
  446.     If Me.Visible Then
  447.         optAsymmetricEncryption.Value = False
  448.         Call EnableControls
  449.         Call SaveEncryptionType
  450.     End If
  451. End Sub
  452. Private Sub txtPrivateKeyFile_LostFocus()
  453.     Call SavePrivateKeyFileSetting
  454. End Sub
  455. Private Sub txtPublicKeyFile_LostFocus()
  456.     Call SavePublicKeyFileSetting
  457. End Sub
  458. '====================================================================================
  459. ' FUNCTIONS
  460. '====================================================================================
  461. '------------------------------------------------------------------------------------
  462. 'Enable the control associated with the selected encryption type (symmetric or
  463. 'asymmetric). Disable the other controls.
  464. '------------------------------------------------------------------------------------
  465. Private Sub EnableControls()
  466.     Dim bSecretKeyEncryption As Boolean
  467.     bSecretKeyEncryption = optSymmetricEncryption.Value
  468.     txtPassPhrase.Enabled = bSecretKeyEncryption
  469.     cmdOption.Enabled = bSecretKeyEncryption
  470.     txtPrivateKeyFile.Enabled = Not bSecretKeyEncryption
  471.     cmdSelectPrivateKeyFile.Enabled = Not bSecretKeyEncryption
  472.     txtPublicKeyFile.Enabled = Not bSecretKeyEncryption
  473.     cmdSelectPublicKeyFile.Enabled = Not bSecretKeyEncryption
  474.     cmdRandomKeyPair.Enabled = Not bSecretKeyEncryption
  475. End Sub
  476. '------------------------------------------------------------------------------------
  477. 'Prepare the Encryption Method according to the user selection
  478. 'Return True if all succeeded
  479. '------------------------------------------------------------------------------------
  480. Private Function PrepareEncryptionMethod(ByRef xEncryptor As XceedEncryption) As Boolean
  481.     'We use one variable for each Encryption Method to simplify the programming
  482.     '(code completion). Only one of these will be used at a time (according to
  483.     'the chosen Encryption method in the combo box).
  484.     'To see an example of how it could be done without all these declarations,
  485.     'consult the Manager sample application.
  486.     Dim xRijndael As XceedRijndaelEncryptionMethod
  487.     Dim xTwofish As XceedTwofishEncryptionMethod
  488.     Dim xRSA As XceedRSAEncryptionMethod
  489.     Dim vaPrivateKey As Variant
  490.     Dim vaPublicKey As Variant
  491.     Dim bPrepareOK As Boolean
  492.     bPrepareOK = True
  493.     On Error Resume Next
  494.         If optSymmetricEncryption.Value Then
  495.             'The user chose to perform symmetric encryption/decryption
  496.             
  497.             Select Case m_eEncryptionMethod
  498.                 Case eemRijndael
  499.                     'Instanciate the Rijndael encryption method
  500.                     Set xRijndael = New XceedRijndaelEncryptionMethod
  501.                     
  502.                     If Err.Number = 0 Then
  503.                         'Set the hashing method that will be used to set the key from
  504.                         'the pass phrase.
  505.                         Select Case m_eHashingMethod
  506.                             Case ehmHaval
  507.                                 Set xRijndael.HashingMethod = New XceedHavalHashingMethod
  508.                                 If Err.Number = 0 Then
  509.                                     'Haval supports hash sizes equivalent to the supported
  510.                                     'key size. So, we can assign the latter to the
  511.                                     'former without problem.
  512.                                     xRijndael.HashingMethod.HashSize = m_lSecretKeySize
  513.                                 End If
  514.                             Case ehmSHA
  515.                                 Set xRijndael.HashingMethod = New XceedSHAHashingMethod
  516.                                 If Err.Number = 0 Then
  517.                                     'We arbitrarily set the HashSize to the maximum key
  518.                                     'size allowed so we don't have to worry that the hash
  519.                                     'result of the pass phrase could be shorter than the
  520.                                     'expected key (although the Xceed Encryption Library
  521.                                     'would have deal with it).
  522.                                     xRijndael.HashingMethod.HashSize = 256
  523.                                 End If
  524.                         End Select
  525.                     End If
  526.                     
  527.                     If Err.Number = 0 Then
  528.                         'Set the encryption mode
  529.                         xRijndael.EncryptionMode = m_eEncryptionMode
  530.                         If Err.Number = 0 Then
  531.                             'Set the padding method (for the last encrypted or decrypted
  532.                             'block)
  533.                             xRijndael.PaddingMethod = m_ePaddingMethod
  534.                             If Err.Number = 0 Then
  535.                                 'Set the secret key of the desired size using the user pass phrase
  536.                                 Call xRijndael.SetSecretKeyFromPassPhrase(txtPassPhrase.Text, m_lSecretKeySize)
  537.                                 If Err.Number = 0 Then
  538.                                     If m_eEncryptionMode = emoChainedBlocks Then
  539.                                         'Will be useful only when encrypting since, in decryption,
  540.                                         'the InitVector is read at the beginning of the encrypted text.
  541.                                         Call xRijndael.SetRandomInitVector
  542.                                     End If
  543.                                 End If
  544.                             End If
  545.                         End If
  546.                     End If
  547.                     
  548.                     If Err.Number = 0 Then
  549.                         'Set the previously initialized Encryption Method of the Encryptor object
  550.                         'received as a parameter of this function.
  551.                         Set xEncryptor.EncryptionMethod = xRijndael
  552.                         'Free the temporary Encryption Method. The previous assignation adding
  553.                         'a reference to the Encryption Method object, this object will effectively
  554.                         'be freed by the xEncryptor object when the latter will be freed.
  555.                     End If
  556.                     Set xRijndael = Nothing
  557.                     
  558.                 Case eemTwoFish
  559.                     'Instanciate the Twofish encryption method
  560.                     Set xTwofish = New XceedTwofishEncryptionMethod
  561.                     
  562.                     If Err.Number = 0 Then
  563.                         Select Case m_eHashingMethod
  564.                             Case ehmHaval
  565.                                 Set xTwofish.HashingMethod = New XceedHavalHashingMethod
  566.                                 If Err.Number = 0 Then
  567.                                     xTwofish.HashingMethod.HashSize = m_lSecretKeySize
  568.                                 End If
  569.                             Case ehmSHA
  570.                                 Set xTwofish.HashingMethod = New XceedSHAHashingMethod
  571.                                 If Err.Number = 0 Then
  572.                                     xTwofish.HashingMethod.HashSize = 256
  573.                                 End If
  574.                         End Select
  575.                     End If
  576.                     
  577.                     If Err.Number = 0 Then
  578.                         xTwofish.EncryptionMode = m_eEncryptionMode
  579.                         If Err.Number = 0 Then
  580.                             xTwofish.PaddingMethod = m_ePaddingMethod
  581.                             If Err.Number = 0 Then
  582.                                 Call xTwofish.SetSecretKeyFromPassPhrase(txtPassPhrase.Text, m_lSecretKeySize)
  583.                                 If Err.Number = 0 Then
  584.                                     If m_eEncryptionMode = emoChainedBlocks Then
  585.                                         Call xTwofish.SetRandomInitVector
  586.                                     End If
  587.                                 End If
  588.                             End If
  589.                         End If
  590.                     End If
  591.                     
  592.                     If Err.Number = 0 Then
  593.                         Set xEncryptor.EncryptionMethod = xTwofish
  594.                     End If
  595.                     Set xTwofish = Nothing
  596.                 
  597.             End Select
  598.         Else
  599.             'The user chose to perform asymmetric encryption/decryption
  600.             
  601.             If optAsymmetricEncryption.Value Then
  602.                 'Instanciate the RSA encryption method
  603.                 Set xRSA = New XceedRSAEncryptionMethod
  604.                 If Err.Number = 0 Then
  605.                     'Initialize the private key (used when decrypting)
  606.                     Call ReadKeyFile(txtPrivateKeyFile.Text, vaPrivateKey)
  607.                     xRSA.PrivateKey = vaPrivateKey
  608.                     If Err.Number = 0 Then
  609.                         'Initialize the public key (used when encrypting)
  610.                         Call ReadKeyFile(txtPublicKeyFile.Text, vaPublicKey)
  611.                         xRSA.PublicKey = vaPublicKey
  612.                         If Err.Number = 0 Then
  613.                             Set xEncryptor.EncryptionMethod = xRSA
  614.                         End If
  615.                     End If
  616.                 End If
  617.                 Set xRSA = Nothing
  618.             End If
  619.         End If
  620.         
  621.         If Err.Number <> 0 Then
  622.             bPrepareOK = False
  623.             Call MsgBox("Error during Encryption method initialization." & vbCrLf & Err.Description & " (" & Hex(Err.Number) & ")")
  624.         End If
  625.     On Error GoTo 0
  626.     PrepareEncryptionMethod = bPrepareOK
  627. End Function
  628. '------------------------------------------------------------------------------------
  629. 'Load in the member variables the options saved in the registry the last
  630. 'time this sample file manager was called.
  631. '------------------------------------------------------------------------------------
  632. Private Sub LoadOption()
  633.     m_eEncryptionMethod = Val(GetSetting("XceedMemoryEncrypt", "Encryption", "EncryptionMethod", Str(eemRijndael)))
  634.     m_eEncryptionMode = Val(GetSetting("XceedMemoryEncrypt", "Encryption", "EncryptionMode", Str(emoFreeBlocks)))
  635.     m_ePaddingMethod = Val(GetSetting("XceedMemoryEncrypt", "Encryption", "PaddingMethod", Str(epmFIPS81)))
  636.     m_eHashingMethod = Val(GetSetting("XceedMemoryEncrypt", "Encryption", "HashingMethod", Str(ehmHaval)))
  637.     m_lSecretKeySize = Val(GetSetting("XceedMemoryEncrypt", "Encryption", "SecretKeySize", Str(128)))
  638.     txtPrivateKeyFile.Text = GetSetting("XceedMemoryEncrypt", "Encryption", "PrivateKeyFile", "")
  639.     txtPublicKeyFile.Text = GetSetting("XceedMemoryEncrypt", "Encryption", "PublicKeyFile", "")
  640.     optAsymmetricEncryption.Value = Val(GetSetting("XceedMemoryEncrypt", "Encryption", "Asymmetric", "0"))
  641.     optSymmetricEncryption.Value = Val(GetSetting("XceedMemoryEncrypt", "Encryption", "Symmetric", Str(Val(True))))
  642. End Sub
  643. '------------------------------------------------------------------------------------
  644. 'Save the current options from the member variables in the registry
  645. '------------------------------------------------------------------------------------
  646. Private Sub SaveOption()
  647.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "EncryptionMethod", Str(m_eEncryptionMethod))
  648.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "EncryptionMode", Str(m_eEncryptionMode))
  649.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "PaddingMethod", Str(m_ePaddingMethod))
  650.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "HashingMethod", Str(m_eHashingMethod))
  651.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "SecretKeySize", Str(m_lSecretKeySize))
  652. End Sub
  653. '------------------------------------------------------------------------------------
  654. 'Read the content of the specified file, allegedly containing a private or public
  655. 'key in hexadecimal representation.
  656. 'Return the key in the vaKey parameter. This function can return Empty.
  657. '------------------------------------------------------------------------------------
  658. Private Sub ReadKeyFile(ByVal sKeyFile As String, _
  659.                         ByRef vaKey As Variant)
  660.     Dim nNoFic As Integer
  661.     Dim sBuffer As String
  662.     Dim sKey As String
  663.     vaKey = Empty
  664.     If Len(sKeyFile) > 0 Then
  665.         On Error Resume Next
  666.             nNoFic = FreeFile
  667.             Open sKeyFile For Input As #nNoFic
  668.             If Err.Number = 0 Then
  669.                 sKey = ""
  670.                 While Not EOF(nNoFic) And Err.Number = 0
  671.                     Line Input #nNoFic, sBuffer
  672.                     sKey = sKey & sBuffer
  673.                 Wend
  674.                 Close #nNoFic
  675.             End If
  676.             
  677.             If Err.Number = 0 Then
  678.                 'The file has been read successfully. Decode the hexadecimal key to binary form.
  679.                 vaKey = HexToBinary(sKey)
  680.             Else
  681.                 vaKey = Empty
  682.                 Call MsgBox("Error reading key file " & sKeyFile & vbCrLf & Err.Description & " (" & Hex(Err.Number) & ")")
  683.             End If
  684.         On Error GoTo 0
  685.     End If
  686. End Sub
  687. '------------------------------------------------------------------------------------
  688. 'Save the current selected (and deselected) encryption type (symmetric or asymmetric)
  689. '------------------------------------------------------------------------------------
  690. Private Sub SaveEncryptionType()
  691.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "Asymmetric", Str$(Int(optAsymmetricEncryption.Value)))
  692.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "Symmetric", Str$(Int(optSymmetricEncryption.Value)))
  693. End Sub
  694. '------------------------------------------------------------------------------------
  695. 'Save the current private key file name
  696. '------------------------------------------------------------------------------------
  697. Private Sub SavePrivateKeyFileSetting()
  698.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "PrivateKeyFile", txtPrivateKeyFile.Text)
  699. End Sub
  700. '------------------------------------------------------------------------------------
  701. 'Save the current public key file name
  702. '------------------------------------------------------------------------------------
  703. Private Sub SavePublicKeyFileSetting()
  704.     Call SaveSetting("XceedMemoryEncrypt", "Encryption", "PublicKeyFile", txtPublicKeyFile.Text)
  705. End Sub
  706.