- Option Explicit
- #Const SUPPORT_LEVEL = 0 'Default=0
- #Const COMPILE_CONSTANTS = 0 'Default=0
- Private Te0(255) As Long
- Private Te1(255) As Long
- Private Te2(255) As Long
- Private Te3(255) As Long
- Private Te4(255) As Long
- Private Td0(255) As Long
- Private Td1(255) As Long
- Private Td2(255) As Long
- Private Td3(255) As Long
- Private Td4(255) As Long
- #If SUPPORT_LEVEL Then
- Private rco(28) As Long
- #Else
- Private rco(9) As Long
- #End If
- Private Nr As Long 'Number of rounds [For 128 bit block, Nr = {10, 12, 14} for 128, 192, 256 bit cipher key]
- #If SUPPORT_LEVEL Then
- Private fkey(119) As Long 'Nb*(Nr + 1)
- Private rkey(119) As Long 'Nb*(Nr + 1)
- #Else
- Private fkey(59) As Long 'Nb*(Nr + 1)
- Private rkey(59) As Long 'Nb*(Nr + 1)
- #End If
- Private Const MaxFileChunkSize As Long = 4000000
- Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
- Private Sub CreateDecryptionKeys(Nb As Long)
- Dim i As Long
- Dim j As Long
- Dim k As Long
- Dim s(3) As Byte
- 'Invert the order of the round keys
- i = 0
- j = Nb * Nr
- For k = 0 To Nr
- CopyMemory rkey(i), fkey(j), Nb * 4&
- i = i + Nb
- j = j - Nb
- Next k
- 'Apply the inverse MixColumn transform to all round keys except the first and the last
- For i = Nb To Nb * Nr - 1
- CopyMemory s(0), rkey(i), 4&
- rkey(i) = Td0(Te4(s(0)) And &HFF&) Xor _
- Td1(Te4(s(1)) And &HFF&) Xor _
- Td2(Te4(s(2)) And &HFF&) Xor _
- Td3(Te4(s(3)) And &HFF&)
- Next i
- End Sub
- #If SUPPORT_LEVEL Then
- Public Function SetCipherKey(pass() As Byte, KeyBits As Long, BlockBits As Long) As Long
- #Else
- Public Function SetCipherKey(pass() As Byte, KeyBits As Long) As Long
- #End If
- Dim i As Long
- Dim j As Long
- Dim s(3) As Byte
- #If SUPPORT_LEVEL Then
- Select Case BlockBits
- Case 128
- #End If
- '128 bit block size
- Select Case KeyBits
- Case 128
- i = 4
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 9
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 4) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 3) Xor fkey(i)
- fkey(i + 2) = fkey(i - 2) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 1) Xor fkey(i + 2)
- i = i + 4
- Next j
- Nr = 10
- 'Debug.Assert i = (Nr + 1) * 4
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- i = 5
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 5) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 4) Xor fkey(i)
- fkey(i + 2) = fkey(i - 3) Xor fkey(i + 1)
- If j = 8 Then Exit Do
- fkey(i + 3) = fkey(i - 2) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 1) Xor fkey(i + 3)
- i = i + 5
- j = j + 1
- Loop
- Nr = 11
- 'Debug.Assert i + 3 = (Nr + 1) * 4
- #End If
- Case 192
- i = 6
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 6) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 5) Xor fkey(i)
- fkey(i + 2) = fkey(i - 4) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 3) Xor fkey(i + 2)
- If j = 7 Then Exit Do
- fkey(i + 4) = fkey(i - 2) Xor fkey(i + 3)
- fkey(i + 5) = fkey(i - 1) Xor fkey(i + 4)
- i = i + 6
- j = j + 1
- Loop
- Nr = 12
- 'Debug.Assert i + 4 = (Nr + 1) * 4
- #If SUPPORT_LEVEL = 2 Then
- Case 224
- i = 7
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 6
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 7) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 6) Xor fkey(i)
- fkey(i + 2) = fkey(i - 5) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 4) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 3) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 2) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 1) Xor fkey(i + 5)
- i = i + 7
- Next j
- Nr = 13
- 'Debug.Assert i = (Nr + 1) * 4
- #End If
- Case 256
- i = 8
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 8) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 7) Xor fkey(i)
- fkey(i + 2) = fkey(i - 6) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 5) Xor fkey(i + 2)
- If j = 6 Then Exit Do
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 4) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 3) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 2) Xor fkey(i + 5)
- fkey(i + 7) = fkey(i - 1) Xor fkey(i + 6)
- i = i + 8
- j = j + 1
- Loop
- Nr = 14
- 'Debug.Assert i + 4 = (Nr + 1) * 4
- Case Else
- err.Raise 1, , "cRijndael.SetCipherKey - Illegal KeyBits Value"
- SetCipherKey = 1
- Exit Function
- End Select
- CreateDecryptionKeys 4
- #If SUPPORT_LEVEL Then
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- '160 bit block size
- Select Case KeyBits
- Case 128
- i = 4
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 13
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 4) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 3) Xor fkey(i)
- fkey(i + 2) = fkey(i - 2) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 1) Xor fkey(i + 2)
- i = i + 4
- Next j
- Nr = 11
- 'Debug.Assert i = (Nr + 1) * 5
- Case 160
- i = 5
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 10
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 5) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 4) Xor fkey(i)
- fkey(i + 2) = fkey(i - 3) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 2) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 1) Xor fkey(i + 3)
- i = i + 5
- Next j
- Nr = 11
- 'Debug.Assert i = (Nr + 1) * 5
- Case 192
- i = 6
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 6) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 5) Xor fkey(i)
- fkey(i + 2) = fkey(i - 4) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 3) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 2) Xor fkey(i + 3)
- If j = 9 Then Exit Do
- fkey(i + 5) = fkey(i - 1) Xor fkey(i + 4)
- i = i + 6
- j = j + 1
- Loop
- Nr = 12
- 'Debug.Assert i + 5 = (Nr + 1) * 5
- Case 224
- i = 7
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 8
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 7) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 6) Xor fkey(i)
- fkey(i + 2) = fkey(i - 5) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 4) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 3) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 2) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 1) Xor fkey(i + 5)
- i = i + 7
- Next j
- Nr = 13
- 'Debug.Assert i = (Nr + 1) * 5
- Case 256
- i = 8
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 8) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 7) Xor fkey(i)
- fkey(i + 2) = fkey(i - 6) Xor fkey(i + 1)
- If j = 8 Then Exit Do
- fkey(i + 3) = fkey(i - 5) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 4) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 3) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 2) Xor fkey(i + 5)
- fkey(i + 7) = fkey(i - 1) Xor fkey(i + 6)
- i = i + 8
- j = j + 1
- Loop
- Nr = 14
- 'Debug.Assert i + 3 = (Nr + 1) * 5
- Case Else
- err.Raise 1, , "cRijndael.SetCipherKey - Illegal KeyBits Value"
- SetCipherKey = 1
- Exit Function
- End Select
- CreateDecryptionKeys 5
- #End If
- Case 192
- '192 bit block size
- Select Case KeyBits
- Case 128
- i = 4
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 4) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 3) Xor fkey(i)
- If j = 18 Then Exit Do
- fkey(i + 2) = fkey(i - 2) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 1) Xor fkey(i + 2)
- i = i + 4
- j = j + 1
- Loop
- Nr = 12
- 'Debug.Assert i + 2 = (Nr + 1) * 6
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- i = 5
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 5) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 4) Xor fkey(i)
- fkey(i + 2) = fkey(i - 3) Xor fkey(i + 1)
- If j = 14 Then Exit Do
- fkey(i + 3) = fkey(i - 2) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 1) Xor fkey(i + 3)
- i = i + 5
- j = j + 1
- Loop
- Nr = 12
- 'Debug.Assert i + 3 = (Nr + 1) * 6
- #End If
- Case 192
- i = 6
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 11
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 6) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 5) Xor fkey(i)
- fkey(i + 2) = fkey(i - 4) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 3) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 2) Xor fkey(i + 3)
- fkey(i + 5) = fkey(i - 1) Xor fkey(i + 4)
- i = i + 6
- Next j
- Nr = 12
- 'Debug.Assert i = (Nr + 1) * 6
- #If SUPPORT_LEVEL = 2 Then
- Case 224 '(Nr+1)*Nb/Nk (when to exit)
- i = 7
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 10
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 7) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 6) Xor fkey(i)
- fkey(i + 2) = fkey(i - 5) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 4) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 3) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 2) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 1) Xor fkey(i + 5)
- i = i + 7
- Next j
- Nr = 13
- 'Debug.Assert i = (Nr + 1) * 6
- #End If
- Case 256
- i = 8
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 8) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 7) Xor fkey(i)
- If j = 10 Then Exit Do
- fkey(i + 2) = fkey(i - 6) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 5) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 4) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 3) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 2) Xor fkey(i + 5)
- fkey(i + 7) = fkey(i - 1) Xor fkey(i + 6)
- i = i + 8
- j = j + 1
- Loop
- Nr = 14
- 'Debug.Assert i + 2 = (Nr + 1) * 6
- Case Else
- err.Raise 1, , "cRijndael.SetCipherKey - Illegal KeyBits Value"
- SetCipherKey = 1
- Exit Function
- End Select
- CreateDecryptionKeys 6
- #If SUPPORT_LEVEL = 2 Then
- Case 224
- '224 bit block size
- Select Case KeyBits
- Case 128
- i = 4
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 4) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 3) Xor fkey(i)
- If j = 23 Then Exit Do
- fkey(i + 2) = fkey(i - 2) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 1) Xor fkey(i + 2)
- i = i + 4
- j = j + 1
- Loop
- Nr = 13
- 'Debug.Assert i + 2 = (Nr + 1) * 7
- Case 160
- i = 5
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 5) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 4) Xor fkey(i)
- fkey(i + 2) = fkey(i - 3) Xor fkey(i + 1)
- If j = 18 Then Exit Do
- fkey(i + 3) = fkey(i - 2) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 1) Xor fkey(i + 3)
- i = i + 5
- j = j + 1
- Loop
- Nr = 13
- 'Debug.Assert i + 3 = (Nr + 1) * 7
- Case 192
- i = 6
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 6) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 5) Xor fkey(i)
- If j = 15 Then Exit Do
- fkey(i + 2) = fkey(i - 4) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 3) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 2) Xor fkey(i + 3)
- fkey(i + 5) = fkey(i - 1) Xor fkey(i + 4)
- i = i + 6
- j = j + 1
- Loop
- Nr = 13
- 'Debug.Assert i + 2 = (Nr + 1) * 7
- Case 224
- i = 7
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 12
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 7) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 6) Xor fkey(i)
- fkey(i + 2) = fkey(i - 5) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 4) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 3) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 2) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 1) Xor fkey(i + 5)
- i = i + 7
- Next j
- Nr = 13
- 'Debug.Assert i = (Nr + 1) * 7
- Case 256
- i = 8
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 8) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- If j = 12 Then Exit Do
- fkey(i + 1) = fkey(i - 7) Xor fkey(i)
- fkey(i + 2) = fkey(i - 6) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 5) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 4) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 3) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 2) Xor fkey(i + 5)
- fkey(i + 7) = fkey(i - 1) Xor fkey(i + 6)
- i = i + 8
- j = j + 1
- Loop
- Nr = 14
- 'Debug.Assert i + 1 = (Nr + 1) * 7
- Case Else
- err.Raise 1, , "cRijndael.SetCipherKey - Illegal KeyBits Value"
- SetCipherKey = 1
- Exit Function
- End Select
- CreateDecryptionKeys 7
- #End If
- Case 256
- '256 bit block size
- Select Case KeyBits
- Case 128
- i = 4
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 28
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 4) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 3) Xor fkey(i)
- fkey(i + 2) = fkey(i - 2) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 1) Xor fkey(i + 2)
- i = i + 4
- Next j
- Nr = 14
- 'Debug.Assert i = (Nr + 1) * 8
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- i = 5
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 22
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 5) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 4) Xor fkey(i)
- fkey(i + 2) = fkey(i - 3) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 2) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 1) Xor fkey(i + 3)
- i = i + 5
- Next j
- Nr = 14
- 'Debug.Assert i = (Nr + 1) * 8
- #End If
- Case 192
- i = 6
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 18
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 6) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 5) Xor fkey(i)
- fkey(i + 2) = fkey(i - 4) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 3) Xor fkey(i + 2)
- fkey(i + 4) = fkey(i - 2) Xor fkey(i + 3)
- fkey(i + 5) = fkey(i - 1) Xor fkey(i + 4)
- i = i + 6
- Next j
- Nr = 14
- 'Debug.Assert i = (Nr + 1) * 8
- #If SUPPORT_LEVEL = 2 Then
- Case 224
- i = 7
- j = 0
- CopyMemory fkey(0), pass(0), 4& * i
- Do
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 7) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- If j = 16 Then Exit Do
- fkey(i + 1) = fkey(i - 6) Xor fkey(i)
- fkey(i + 2) = fkey(i - 5) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 4) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 3) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 2) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 1) Xor fkey(i + 5)
- i = i + 7
- j = j + 1
- Loop
- Nr = 14
- 'Debug.Assert i + 1 = (Nr + 1) * 8
- #End If
- Case 256
- i = 8
- CopyMemory fkey(0), pass(0), 4& * i
- For j = 0 To 13
- CopyMemory s(0), fkey(i - 1), 4&
- fkey(i) = fkey(i - 8) Xor (Te4(s(0)) And &HFF000000) _
- Xor (Te4(s(3)) And &HFF0000) _
- Xor (Te4(s(2)) And &HFF00&) _
- Xor (Te4(s(1)) And &HFF&) _
- Xor rco(j)
- fkey(i + 1) = fkey(i - 7) Xor fkey(i)
- fkey(i + 2) = fkey(i - 6) Xor fkey(i + 1)
- fkey(i + 3) = fkey(i - 5) Xor fkey(i + 2)
- CopyMemory s(0), fkey(i + 3), 4&
- fkey(i + 4) = fkey(i - 4) Xor (Te4(s(3)) And &HFF000000) _
- Xor (Te4(s(2)) And &HFF0000) _
- Xor (Te4(s(1)) And &HFF00&) _
- Xor (Te4(s(0)) And &HFF&)
- fkey(i + 5) = fkey(i - 3) Xor fkey(i + 4)
- fkey(i + 6) = fkey(i - 2) Xor fkey(i + 5)
- fkey(i + 7) = fkey(i - 1) Xor fkey(i + 6)
- i = i + 8
- Next j
- Nr = 14
- 'Debug.Assert i = (Nr + 1) * 8
- Case Else
- err.Raise 1, , "cRijndael.SetCipherKey - Illegal KeyBits Value"
- SetCipherKey = 1
- Exit Function
- End Select
- CreateDecryptionKeys 8
- Case Else
- err.Raise 1, , "cRijndael.SetCipherKey - Illegal BlockBits Value"
- SetCipherKey = 1
- Exit Function
- End Select
- #End If
- End Function
- #If SUPPORT_LEVEL Then
- Public Function SetCipherKeyString(PassPhrase As String, KeyBits As Long, BlockBits As Long) As Long
- Dim pass() As Byte
- pass = StrConv(PassPhrase, vbFromUnicode)
- ReDim Preserve pass(31)
- SetCipherKeyString = SetCipherKey(pass, KeyBits, BlockBits)
- End Function
- #Else
- Public Function SetCipherKeyString(PassPhrase As String, KeyBits As Long) As Long
- Dim pass() As Byte
- pass = StrConv(PassPhrase, vbFromUnicode)
- ReDim Preserve pass(31)
- SetCipherKeyString = SetCipherKey(pass, KeyBits)
- End Function
- #End If
- Public Sub BlockEncrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim s(15) As Byte
- CopyMemory t0, plaintext(p + 0), 4&
- CopyMemory t1, plaintext(p + 4), 4&
- CopyMemory t2, plaintext(p + 8), 4&
- CopyMemory t3, plaintext(p + 12), 4&
- t0 = t0 Xor fkey(0)
- t1 = t1 Xor fkey(1)
- t2 = t2 Xor fkey(2)
- t3 = t3 Xor fkey(3)
- k = 4
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(10)) Xor Te3(s(15)) Xor fkey(k + 0)
- t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(14)) Xor Te3(s(3)) Xor fkey(k + 1)
- t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(2)) Xor Te3(s(7)) Xor fkey(k + 2)
- t3 = Te0(s(12)) Xor Te1(s(1)) Xor Te2(s(6)) Xor Te3(s(11)) Xor fkey(k + 3)
- k = k + 4
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 0)
- t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 1)
- t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 2)
- t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 3)
- CopyMemory ciphertext(q + 0), t0, 4&
- CopyMemory ciphertext(q + 4), t1, 4&
- CopyMemory ciphertext(q + 8), t2, 4&
- CopyMemory ciphertext(q + 12), t3, 4&
- End Sub
- Public Sub BlockDecrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim s(15) As Byte
- CopyMemory t0, ciphertext(q + 0), 4&
- CopyMemory t1, ciphertext(q + 4), 4&
- CopyMemory t2, ciphertext(q + 8), 4&
- CopyMemory t3, ciphertext(q + 12), 4&
- t0 = t0 Xor rkey(0)
- t1 = t1 Xor rkey(1)
- t2 = t2 Xor rkey(2)
- t3 = t3 Xor rkey(3)
- k = 4
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- t0 = Td0(s(0)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(7)) Xor rkey(k + 0)
- t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(14)) Xor Td3(s(11)) Xor rkey(k + 1)
- t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(15)) Xor rkey(k + 2)
- t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(3)) Xor rkey(k + 3)
- k = k + 4
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 0)
- t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 1)
- t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 2)
- t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 3)
- CopyMemory plaintext(p + 0), t0, 4&
- CopyMemory plaintext(p + 4), t1, 4&
- CopyMemory plaintext(p + 8), t2, 4&
- CopyMemory plaintext(p + 12), t3, 4&
- End Sub
- #If SUPPORT_LEVEL Then
- #If SUPPORT_LEVEL = 2 Then
- Public Sub Block160Encrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim s(19) As Byte
- CopyMemory t0, plaintext(p + 0), 4&
- CopyMemory t1, plaintext(p + 4), 4&
- CopyMemory t2, plaintext(p + 8), 4&
- CopyMemory t3, plaintext(p + 12), 4&
- CopyMemory t4, plaintext(p + 16), 4&
- t0 = t0 Xor fkey(0)
- t1 = t1 Xor fkey(1)
- t2 = t2 Xor fkey(2)
- t3 = t3 Xor fkey(3)
- t4 = t4 Xor fkey(4)
- k = 5
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(10)) Xor Te3(s(15)) Xor fkey(k + 0)
- t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(14)) Xor Te3(s(19)) Xor fkey(k + 1)
- t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(18)) Xor Te3(s(3)) Xor fkey(k + 2)
- t3 = Te0(s(12)) Xor Te1(s(17)) Xor Te2(s(2)) Xor Te3(s(7)) Xor fkey(k + 3)
- t4 = Te0(s(16)) Xor Te1(s(1)) Xor Te2(s(6)) Xor Te3(s(11)) Xor fkey(k + 4)
- k = k + 5
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 0)
- t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(19)) And &HFF000000) Xor fkey(k + 1)
- t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(18)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 2)
- t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(17)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 3)
- t4 = (Te4(s(16)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 4)
- CopyMemory ciphertext(q + 0), t0, 4&
- CopyMemory ciphertext(q + 4), t1, 4&
- CopyMemory ciphertext(q + 8), t2, 4&
- CopyMemory ciphertext(q + 12), t3, 4&
- CopyMemory ciphertext(q + 16), t4, 4&
- End Sub
- Public Sub Block160Decrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim s(19) As Byte
- CopyMemory t0, ciphertext(q + 0), 4&
- CopyMemory t1, ciphertext(q + 4), 4&
- CopyMemory t2, ciphertext(q + 8), 4&
- CopyMemory t3, ciphertext(q + 12), 4&
- CopyMemory t4, ciphertext(q + 16), 4&
- t0 = t0 Xor rkey(0)
- t1 = t1 Xor rkey(1)
- t2 = t2 Xor rkey(2)
- t3 = t3 Xor rkey(3)
- t4 = t4 Xor rkey(4)
- k = 5
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- t0 = Td0(s(0)) Xor Td1(s(17)) Xor Td2(s(14)) Xor Td3(s(11)) Xor rkey(k + 0)
- t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(18)) Xor Td3(s(15)) Xor rkey(k + 1)
- t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(19)) Xor rkey(k + 2)
- t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(3)) Xor rkey(k + 3)
- t4 = Td0(s(16)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(7)) Xor rkey(k + 4)
- k = k + 5
- Next i
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(17)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 0)
- t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(18)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 1)
- t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(19)) And &HFF000000) Xor rkey(k + 2)
- t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 3)
- t4 = (Td4(s(16)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 4)
- CopyMemory plaintext(p + 0), t0, 4&
- CopyMemory plaintext(p + 4), t1, 4&
- CopyMemory plaintext(p + 8), t2, 4&
- CopyMemory plaintext(p + 12), t3, 4&
- CopyMemory plaintext(p + 16), t4, 4&
- End Sub
- #End If
- Public Sub Block192Encrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim t5 As Long
- Dim s(23) As Byte
- CopyMemory t0, plaintext(p + 0), 4&
- CopyMemory t1, plaintext(p + 4), 4&
- CopyMemory t2, plaintext(p + 8), 4&
- CopyMemory t3, plaintext(p + 12), 4&
- CopyMemory t4, plaintext(p + 16), 4&
- CopyMemory t5, plaintext(p + 20), 4&
- t0 = t0 Xor fkey(0)
- t1 = t1 Xor fkey(1)
- t2 = t2 Xor fkey(2)
- t3 = t3 Xor fkey(3)
- t4 = t4 Xor fkey(4)
- t5 = t5 Xor fkey(5)
- k = 6
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(10)) Xor Te3(s(15)) Xor fkey(k + 0)
- t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(14)) Xor Te3(s(19)) Xor fkey(k + 1)
- t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(18)) Xor Te3(s(23)) Xor fkey(k + 2)
- t3 = Te0(s(12)) Xor Te1(s(17)) Xor Te2(s(22)) Xor Te3(s(3)) Xor fkey(k + 3)
- t4 = Te0(s(16)) Xor Te1(s(21)) Xor Te2(s(2)) Xor Te3(s(7)) Xor fkey(k + 4)
- t5 = Te0(s(20)) Xor Te1(s(1)) Xor Te2(s(6)) Xor Te3(s(11)) Xor fkey(k + 5)
- k = k + 6
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 0)
- t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(19)) And &HFF000000) Xor fkey(k + 1)
- t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(18)) And &HFF0000) Xor (Te4(s(23)) And &HFF000000) Xor fkey(k + 2)
- t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(17)) And &HFF00&) Xor (Te4(s(22)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 3)
- t4 = (Te4(s(16)) And &HFF&) Xor (Te4(s(21)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 4)
- t5 = (Te4(s(20)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 5)
- CopyMemory ciphertext(q + 0), t0, 4&
- CopyMemory ciphertext(q + 4), t1, 4&
- CopyMemory ciphertext(q + 8), t2, 4&
- CopyMemory ciphertext(q + 12), t3, 4&
- CopyMemory ciphertext(q + 16), t4, 4&
- CopyMemory ciphertext(q + 20), t5, 4&
- End Sub
- Public Sub Block192Decrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim t5 As Long
- Dim s(23) As Byte
- CopyMemory t0, ciphertext(q + 0), 4&
- CopyMemory t1, ciphertext(q + 4), 4&
- CopyMemory t2, ciphertext(q + 8), 4&
- CopyMemory t3, ciphertext(q + 12), 4&
- CopyMemory t4, ciphertext(q + 16), 4&
- CopyMemory t5, ciphertext(q + 20), 4&
- t0 = t0 Xor rkey(0)
- t1 = t1 Xor rkey(1)
- t2 = t2 Xor rkey(2)
- t3 = t3 Xor rkey(3)
- t4 = t4 Xor rkey(4)
- t5 = t5 Xor rkey(5)
- k = 6
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- t0 = Td0(s(0)) Xor Td1(s(21)) Xor Td2(s(18)) Xor Td3(s(15)) Xor rkey(k + 0)
- t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(22)) Xor Td3(s(19)) Xor rkey(k + 1)
- t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(23)) Xor rkey(k + 2)
- t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(3)) Xor rkey(k + 3)
- t4 = Td0(s(16)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(7)) Xor rkey(k + 4)
- t5 = Td0(s(20)) Xor Td1(s(17)) Xor Td2(s(14)) Xor Td3(s(11)) Xor rkey(k + 5)
- k = k + 6
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(21)) And &HFF00&) Xor (Td4(s(18)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 0)
- t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(22)) And &HFF0000) Xor (Td4(s(19)) And &HFF000000) Xor rkey(k + 1)
- t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(23)) And &HFF000000) Xor rkey(k + 2)
- t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 3)
- t4 = (Td4(s(16)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 4)
- t5 = (Td4(s(20)) And &HFF&) Xor (Td4(s(17)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 5)
- CopyMemory plaintext(p + 0), t0, 4&
- CopyMemory plaintext(p + 4), t1, 4&
- CopyMemory plaintext(p + 8), t2, 4&
- CopyMemory plaintext(p + 12), t3, 4&
- CopyMemory plaintext(p + 16), t4, 4&
- CopyMemory plaintext(p + 20), t5, 4&
- End Sub
- #If SUPPORT_LEVEL = 2 Then
- Public Sub Block224Encrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim t5 As Long
- Dim t6 As Long
- Dim s(27) As Byte
- CopyMemory t0, plaintext(p + 0), 4&
- CopyMemory t1, plaintext(p + 4), 4&
- CopyMemory t2, plaintext(p + 8), 4&
- CopyMemory t3, plaintext(p + 12), 4&
- CopyMemory t4, plaintext(p + 16), 4&
- CopyMemory t5, plaintext(p + 20), 4&
- CopyMemory t6, plaintext(p + 24), 4&
- t0 = t0 Xor fkey(0)
- t1 = t1 Xor fkey(1)
- t2 = t2 Xor fkey(2)
- t3 = t3 Xor fkey(3)
- t4 = t4 Xor fkey(4)
- t5 = t5 Xor fkey(5)
- t6 = t6 Xor fkey(6)
- k = 7
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(10)) Xor Te3(s(19)) Xor fkey(k + 0)
- t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(14)) Xor Te3(s(23)) Xor fkey(k + 1)
- t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(18)) Xor Te3(s(27)) Xor fkey(k + 2)
- t3 = Te0(s(12)) Xor Te1(s(17)) Xor Te2(s(22)) Xor Te3(s(3)) Xor fkey(k + 3)
- t4 = Te0(s(16)) Xor Te1(s(21)) Xor Te2(s(26)) Xor Te3(s(7)) Xor fkey(k + 4)
- t5 = Te0(s(20)) Xor Te1(s(25)) Xor Te2(s(2)) Xor Te3(s(11)) Xor fkey(k + 5)
- t6 = Te0(s(24)) Xor Te1(s(1)) Xor Te2(s(6)) Xor Te3(s(15)) Xor fkey(k + 6)
- k = k + 7
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(19)) And &HFF000000) Xor fkey(k + 0)
- t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(23)) And &HFF000000) Xor fkey(k + 1)
- t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(18)) And &HFF0000) Xor (Te4(s(27)) And &HFF000000) Xor fkey(k + 2)
- t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(17)) And &HFF00&) Xor (Te4(s(22)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 3)
- t4 = (Te4(s(16)) And &HFF&) Xor (Te4(s(21)) And &HFF00&) Xor (Te4(s(26)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 4)
- t5 = (Te4(s(20)) And &HFF&) Xor (Te4(s(25)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 5)
- t6 = (Te4(s(24)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 6)
- CopyMemory ciphertext(q + 0), t0, 4&
- CopyMemory ciphertext(q + 4), t1, 4&
- CopyMemory ciphertext(q + 8), t2, 4&
- CopyMemory ciphertext(q + 12), t3, 4&
- CopyMemory ciphertext(q + 16), t4, 4&
- CopyMemory ciphertext(q + 20), t5, 4&
- CopyMemory ciphertext(q + 24), t6, 4&
- End Sub
- Public Sub Block224Decrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim t5 As Long
- Dim t6 As Long
- Dim s(27) As Byte
- CopyMemory t0, ciphertext(q + 0), 4&
- CopyMemory t1, ciphertext(q + 4), 4&
- CopyMemory t2, ciphertext(q + 8), 4&
- CopyMemory t3, ciphertext(q + 12), 4&
- CopyMemory t4, ciphertext(q + 16), 4&
- CopyMemory t5, ciphertext(q + 20), 4&
- CopyMemory t6, ciphertext(q + 24), 4&
- t0 = t0 Xor rkey(0)
- t1 = t1 Xor rkey(1)
- t2 = t2 Xor rkey(2)
- t3 = t3 Xor rkey(3)
- t4 = t4 Xor rkey(4)
- t5 = t5 Xor rkey(5)
- t6 = t6 Xor rkey(6)
- k = 7
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- t0 = Td0(s(0)) Xor Td1(s(25)) Xor Td2(s(22)) Xor Td3(s(15)) Xor rkey(k + 0)
- t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(26)) Xor Td3(s(19)) Xor rkey(k + 1)
- t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(23)) Xor rkey(k + 2)
- t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(27)) Xor rkey(k + 3)
- t4 = Td0(s(16)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(3)) Xor rkey(k + 4)
- t5 = Td0(s(20)) Xor Td1(s(17)) Xor Td2(s(14)) Xor Td3(s(7)) Xor rkey(k + 5)
- t6 = Td0(s(24)) Xor Td1(s(21)) Xor Td2(s(18)) Xor Td3(s(11)) Xor rkey(k + 6)
- k = k + 7
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(25)) And &HFF00&) Xor (Td4(s(22)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 0)
- t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(26)) And &HFF0000) Xor (Td4(s(19)) And &HFF000000) Xor rkey(k + 1)
- t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(23)) And &HFF000000) Xor rkey(k + 2)
- t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(27)) And &HFF000000) Xor rkey(k + 3)
- t4 = (Td4(s(16)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 4)
- t5 = (Td4(s(20)) And &HFF&) Xor (Td4(s(17)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 5)
- t6 = (Td4(s(24)) And &HFF&) Xor (Td4(s(21)) And &HFF00&) Xor (Td4(s(18)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 6)
- CopyMemory plaintext(p + 0), t0, 4&
- CopyMemory plaintext(p + 4), t1, 4&
- CopyMemory plaintext(p + 8), t2, 4&
- CopyMemory plaintext(p + 12), t3, 4&
- CopyMemory plaintext(p + 16), t4, 4&
- CopyMemory plaintext(p + 20), t5, 4&
- CopyMemory plaintext(p + 24), t6, 4&
- End Sub
- #End If
- Public Sub Block256Encrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim t5 As Long
- Dim t6 As Long
- Dim t7 As Long
- Dim s(31) As Byte
- CopyMemory t0, plaintext(p + 0), 4&
- CopyMemory t1, plaintext(p + 4), 4&
- CopyMemory t2, plaintext(p + 8), 4&
- CopyMemory t3, plaintext(p + 12), 4&
- CopyMemory t4, plaintext(p + 16), 4&
- CopyMemory t5, plaintext(p + 20), 4&
- CopyMemory t6, plaintext(p + 24), 4&
- CopyMemory t7, plaintext(p + 28), 4&
- t0 = t0 Xor fkey(0)
- t1 = t1 Xor fkey(1)
- t2 = t2 Xor fkey(2)
- t3 = t3 Xor fkey(3)
- t4 = t4 Xor fkey(4)
- t5 = t5 Xor fkey(5)
- t6 = t6 Xor fkey(6)
- t7 = t7 Xor fkey(7)
- k = 8
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- CopyMemory s(28), t7, 4&
- t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(14)) Xor Te3(s(19)) Xor fkey(k + 0)
- t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(18)) Xor Te3(s(23)) Xor fkey(k + 1)
- t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(22)) Xor Te3(s(27)) Xor fkey(k + 2)
- t3 = Te0(s(12)) Xor Te1(s(17)) Xor Te2(s(26)) Xor Te3(s(31)) Xor fkey(k + 3)
- t4 = Te0(s(16)) Xor Te1(s(21)) Xor Te2(s(30)) Xor Te3(s(3)) Xor fkey(k + 4)
- t5 = Te0(s(20)) Xor Te1(s(25)) Xor Te2(s(2)) Xor Te3(s(7)) Xor fkey(k + 5)
- t6 = Te0(s(24)) Xor Te1(s(29)) Xor Te2(s(6)) Xor Te3(s(11)) Xor fkey(k + 6)
- t7 = Te0(s(28)) Xor Te1(s(1)) Xor Te2(s(10)) Xor Te3(s(15)) Xor fkey(k + 7)
- k = k + 8
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- CopyMemory s(28), t7, 4&
- t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(19)) And &HFF000000) Xor fkey(k + 0)
- t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(18)) And &HFF0000) Xor (Te4(s(23)) And &HFF000000) Xor fkey(k + 1)
- t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(22)) And &HFF0000) Xor (Te4(s(27)) And &HFF000000) Xor fkey(k + 2)
- t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(17)) And &HFF00&) Xor (Te4(s(26)) And &HFF0000) Xor (Te4(s(31)) And &HFF000000) Xor fkey(k + 3)
- t4 = (Te4(s(16)) And &HFF&) Xor (Te4(s(21)) And &HFF00&) Xor (Te4(s(30)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 4)
- t5 = (Te4(s(20)) And &HFF&) Xor (Te4(s(25)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 5)
- t6 = (Te4(s(24)) And &HFF&) Xor (Te4(s(29)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 6)
- t7 = (Te4(s(28)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 7)
- CopyMemory ciphertext(q + 0), t0, 4&
- CopyMemory ciphertext(q + 4), t1, 4&
- CopyMemory ciphertext(q + 8), t2, 4&
- CopyMemory ciphertext(q + 12), t3, 4&
- CopyMemory ciphertext(q + 16), t4, 4&
- CopyMemory ciphertext(q + 20), t5, 4&
- CopyMemory ciphertext(q + 24), t6, 4&
- CopyMemory ciphertext(q + 28), t7, 4&
- End Sub
- Public Sub Block256Decrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
- Dim i As Long
- Dim k As Long
- Dim t0 As Long
- Dim t1 As Long
- Dim t2 As Long
- Dim t3 As Long
- Dim t4 As Long
- Dim t5 As Long
- Dim t6 As Long
- Dim t7 As Long
- Dim s(31) As Byte
- CopyMemory t0, ciphertext(q + 0), 4&
- CopyMemory t1, ciphertext(q + 4), 4&
- CopyMemory t2, ciphertext(q + 8), 4&
- CopyMemory t3, ciphertext(q + 12), 4&
- CopyMemory t4, ciphertext(q + 16), 4&
- CopyMemory t5, ciphertext(q + 20), 4&
- CopyMemory t6, ciphertext(q + 24), 4&
- CopyMemory t7, ciphertext(q + 28), 4&
- t0 = t0 Xor rkey(0)
- t1 = t1 Xor rkey(1)
- t2 = t2 Xor rkey(2)
- t3 = t3 Xor rkey(3)
- t4 = t4 Xor rkey(4)
- t5 = t5 Xor rkey(5)
- t6 = t6 Xor rkey(6)
- t7 = t7 Xor rkey(7)
- k = 8
- For i = 1 To Nr - 1 'Nr is number of rounds
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- CopyMemory s(28), t7, 4&
- t0 = Td0(s(0)) Xor Td1(s(29)) Xor Td2(s(22)) Xor Td3(s(19)) Xor rkey(k + 0)
- t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(26)) Xor Td3(s(23)) Xor rkey(k + 1)
- t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(30)) Xor Td3(s(27)) Xor rkey(k + 2)
- t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(2)) Xor Td3(s(31)) Xor rkey(k + 3)
- t4 = Td0(s(16)) Xor Td1(s(13)) Xor Td2(s(6)) Xor Td3(s(3)) Xor rkey(k + 4)
- t5 = Td0(s(20)) Xor Td1(s(17)) Xor Td2(s(10)) Xor Td3(s(7)) Xor rkey(k + 5)
- t6 = Td0(s(24)) Xor Td1(s(21)) Xor Td2(s(14)) Xor Td3(s(11)) Xor rkey(k + 6)
- t7 = Td0(s(28)) Xor Td1(s(25)) Xor Td2(s(18)) Xor Td3(s(15)) Xor rkey(k + 7)
- k = k + 8
- Next i
- 'Final round
- CopyMemory s(0), t0, 4&
- CopyMemory s(4), t1, 4&
- CopyMemory s(8), t2, 4&
- CopyMemory s(12), t3, 4&
- CopyMemory s(16), t4, 4&
- CopyMemory s(20), t5, 4&
- CopyMemory s(24), t6, 4&
- CopyMemory s(28), t7, 4&
- t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(29)) And &HFF00&) Xor (Td4(s(22)) And &HFF0000) Xor (Td4(s(19)) And &HFF000000) Xor rkey(k + 0)
- t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(26)) And &HFF0000) Xor (Td4(s(23)) And &HFF000000) Xor rkey(k + 1)
- t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(30)) And &HFF0000) Xor (Td4(s(27)) And &HFF000000) Xor rkey(k + 2)
- t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(31)) And &HFF000000) Xor rkey(k + 3)
- t4 = (Td4(s(16)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 4)
- t5 = (Td4(s(20)) And &HFF&) Xor (Td4(s(17)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 5)
- t6 = (Td4(s(24)) And &HFF&) Xor (Td4(s(21)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 6)
- t7 = (Td4(s(28)) And &HFF&) Xor (Td4(s(25)) And &HFF00&) Xor (Td4(s(18)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 7)
- CopyMemory plaintext(p + 0), t0, 4&
- CopyMemory plaintext(p + 4), t1, 4&
- CopyMemory plaintext(p + 8), t2, 4&
- CopyMemory plaintext(p + 12), t3, 4&
- CopyMemory plaintext(p + 16), t4, 4&
- CopyMemory plaintext(p + 20), t5, 4&
- CopyMemory plaintext(p + 24), t6, 4&
- CopyMemory plaintext(p + 28), t7, 4&
- End Sub
- #End If
- #If SUPPORT_LEVEL Then
- Public Function ArrayEncrypt(plaintext() As Byte, ciphertext() As Byte, appendsize As Long, BlockBits As Long) As Long
- #Else
- Public Function ArrayEncrypt(plaintext() As Byte, ciphertext() As Byte, appendsize As Long) As Long
- #End If
- Dim i As Long
- Dim M As Long
- Dim n As Long
- #If SUPPORT_LEVEL = 0 Then
- Const BlockSize As Long = 16 'bytes
- #Else
- Dim BlockSize As Long
- Select Case BlockBits
- Case 128: BlockSize = 16
- Case 192: BlockSize = 24
- Case 256: BlockSize = 32
- #If SUPPORT_LEVEL = 2 Then
- Case 160: BlockSize = 20
- Case 224: BlockSize = 28
- #End If
- Case Else: err.Raise 1, , "cRijndael.ArrayEncrypt - Illegal BlockBits value"
- End Select
- #End If
- If LBound(plaintext) <> 0 Then err.Raise 1, , "cRijndael.ArrayEncrypt - plaintext must be zero based array"
- n = UBound(plaintext) + 1
- If appendsize = 0 Then
- #If SUPPORT_LEVEL Then
- M = ((n + BlockSize - 1) BlockSize) * BlockSize
- #Else
- M = (n + BlockSize - 1) And &HFFFFFFF0 'BlockSize=16 specific
- #End If
- ReDim ciphertext(M - 1)
- Else
- #If SUPPORT_LEVEL Then
- M = ((n + BlockSize) BlockSize) * BlockSize
- #Else
- M = (n + BlockSize) And &HFFFFFFF0 'BlockSize=16 specific
- #End If
- ReDim ciphertext(M - 1)
- ciphertext(M - 1) = n Mod BlockSize
- End If
- #If SUPPORT_LEVEL Then
- Select Case BlockBits
- Case 128
- #End If
- For i = 0 To n - BlockSize Step BlockSize
- BlockEncrypt plaintext, ciphertext, i, i
- Next i
- #If SUPPORT_LEVEL Then
- Case 192
- For i = 0 To n - BlockSize Step BlockSize
- Block192Encrypt plaintext, ciphertext, i, i
- Next i
- Case 256
- For i = 0 To n - BlockSize Step BlockSize
- Block256Encrypt plaintext, ciphertext, i, i
- Next i
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- For i = 0 To n - BlockSize Step BlockSize
- Block160Encrypt plaintext, ciphertext, i, i
- Next i
- Case 224
- For i = 0 To n - BlockSize Step BlockSize
- Block224Encrypt plaintext, ciphertext, i, i
- Next i
- #End If
- End Select
- #End If
- If (n Mod BlockSize) <> 0 Then CopyMemory ciphertext(i), plaintext(i), n Mod BlockSize
- #If SUPPORT_LEVEL Then
- Select Case BlockBits
- Case 128
- #End If
- If i <> M Then BlockEncrypt ciphertext, ciphertext, i, i
- #If SUPPORT_LEVEL Then
- Case 192
- If i <> M Then Block192Encrypt ciphertext, ciphertext, i, i
- Case 256
- If i <> M Then Block256Encrypt ciphertext, ciphertext, i, i
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- If i <> M Then Block160Encrypt ciphertext, ciphertext, i, i
- Case 224
- If i <> M Then Block224Encrypt ciphertext, ciphertext, i, i
- #End If
- End Select
- #End If
- End Function
- #If SUPPORT_LEVEL Then
- Public Function ArrayDecrypt(plaintext() As Byte, ciphertext() As Byte, appendsize As Long, BlockBits As Long) As Long
- #Else
- Public Function ArrayDecrypt(plaintext() As Byte, ciphertext() As Byte, appendsize As Long) As Long
- #End If
- Dim i As Long
- Dim M As Long
- Dim n As Long
- #If SUPPORT_LEVEL = 0 Then
- Const BlockSize As Long = 16 'bytes
- #Else
- Dim BlockSize As Long
- Select Case BlockBits
- Case 128: BlockSize = 16
- Case 192: BlockSize = 24
- Case 256: BlockSize = 32
- #If SUPPORT_LEVEL = 2 Then
- Case 160: BlockSize = 20
- Case 224: BlockSize = 28
- #End If
- Case Else: err.Raise 1, , "cRijndael.ArrayDecrypt - Illegal BlockBits value"
- End Select
- #End If
- If LBound(ciphertext) <> 0 Then err.Raise 1, , "cRijndael.ArrayDecrypt - ciphertext must be zero based array"
- n = UBound(ciphertext) + 1
- If ((n Mod BlockSize) = 0) Then
- ReDim plaintext(n - 1)
- #If SUPPORT_LEVEL Then
- Select Case BlockBits
- Case 128
- #End If
- For i = 0 To n - BlockSize Step BlockSize
- BlockDecrypt plaintext, ciphertext, i, i
- Next i
- #If SUPPORT_LEVEL Then
- Case 192
- For i = 0 To n - BlockSize Step BlockSize
- Block192Decrypt plaintext, ciphertext, i, i
- Next i
- Case 256
- For i = 0 To n - BlockSize Step BlockSize
- Block256Decrypt plaintext, ciphertext, i, i
- Next i
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- For i = 0 To n - BlockSize Step BlockSize
- Block160Decrypt plaintext, ciphertext, i, i
- Next i
- Case 224
- For i = 0 To n - BlockSize Step BlockSize
- Block224Decrypt plaintext, ciphertext, i, i
- Next i
- #End If
- End Select
- #End If
- If appendsize Then
- If plaintext(n - 1) < BlockSize Then
- n = n - BlockSize + plaintext(n - 1)
- If n > 0 Then ReDim Preserve plaintext(n - 1)
- Else
- MsgBox "warning - incorrect length field"
- ArrayDecrypt = 1
- End If
- End If
- Else
- MsgBox "ciphertext size not a multiple of block size"
- ArrayDecrypt = -1
- End If
- End Function
- #If SUPPORT_LEVEL Then
- Public Function FileEncrypt(PlaintextFileName As String, CiphertextFileName As String, BlockBits As Long) As Long
- #Else
- Public Function FileEncrypt(PlaintextFileName As String, CiphertextFileName As String) As Long
- #End If
- Dim FileNum As Integer
- Dim FileNum2 As Integer
- Dim i As Long
- Dim M As Long 'ciphertext file size
- Dim n As Long 'plaintext file size
- Dim data() As Byte
- #If SUPPORT_LEVEL = 0 Then
- Const BlockSize As Long = 16 'bytes
- Const MaxBlocks As Long = MaxFileChunkSize BlockSize
- #Else
- Dim BlockSize As Long
- Dim MaxBlocks As Long
- Select Case BlockBits
- Case 128: BlockSize = 16
- Case 192: BlockSize = 24
- Case 256: BlockSize = 32
- #If SUPPORT_LEVEL = 2 Then
- Case 160: BlockSize = 20
- Case 224: BlockSize = 28
- #End If
- Case Else: err.Raise 1, , "cRijndael.FileEncrypt - Illegal BlockBits value"
- End Select
- MaxBlocks = MaxFileChunkSize BlockSize
- #End If
- n = FileLen(PlaintextFileName)
- #If SUPPORT_LEVEL Then
- M = ((n + BlockSize) BlockSize) * BlockSize
- #Else
- M = (n + BlockSize) And (-BlockSize) 'BlockSize=16 specific
- #End If
- FileNum = FreeFile
- Open PlaintextFileName For Binary Access Read As FileNum
- FileNum2 = FreeFile
- Open CiphertextFileName For Binary Access Write As FileNum2
- 'For large files, encrypt in pieces no larger than MaxFileChunkSize
- If M > MaxBlocks * BlockSize Then
- ReDim data(MaxBlocks * BlockSize - 1)
- Do
- Get #FileNum, , data
- #If SUPPORT_LEVEL Then
- Select Case BlockBits
- Case 128
- #End If
- For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize
- BlockEncrypt data, data, i, i
- Next i
- #If SUPPORT_LEVEL Then
- Case 192
- For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize
- Block192Encrypt data, data, i, i
- Next i
- Case 256
- For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize
- Block256Encrypt data, data, i, i
- Next i
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize
- Block160Encrypt data, data, i, i
- Next i
- Case 224
- For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize
- Block224Encrypt data, data, i, i
- Next i
- #End If
- End Select
- #End If
- Put #FileNum2, , data
- M = M - MaxBlocks * BlockSize
- Loop While M > MaxBlocks * BlockSize
- End If
- 'Encrypt the last piece of the file
- ReDim data(M - 1)
- Get #FileNum, , data
- data(M - 1) = n Mod BlockSize
- #If SUPPORT_LEVEL Then
- Select Case BlockBits
- Case 128
- #End If
- For i = 0 To M - BlockSize Step BlockSize
- BlockEncrypt data, data, i, i
- Next i
- #If SUPPORT_LEVEL Then
- Case 192
- For i = 0 To M - BlockSize Step BlockSize
- Block192Encrypt data, data, i, i
- Next i
- Case 256
- For i = 0 To M - BlockSize Step BlockSize
- Block256Encrypt data, data, i, i
- Next i
- #If SUPPORT_LEVEL = 2 Then
- Case 160
- For i = 0 To M - BlockSize Step BlockSize
- Block160Encrypt data, data, i, i
- Next i
- Case 224
- For i = 0 To M - BlockSize Step BlockSize
- Block224Encrypt data, data, i, i
- Next i
- #End If
- End Select
- #End If
- Put FileNum2, , data
- Close FileNum
- Close FileNum2
- End Function
- 'File decryption.
- #If SUPPORT_LEVEL Then
- Public Function FileDecrypt(PlaintextFileName As String, CiphertextFileName As String, BlockBits As Long) As Long
- #Else
- Public Function FileDecrypt(PlaintextFileName As String, CiphertextFileName As String) As Long
- #End If
- Dim FileNum As Integer
- Dim FileNum2 As Integer
- Dim i As Long
- Dim M As Long 'ciphertext file size
- Dim n As Long 'plaintext file size
- Dim data() As Byte

By: Solarizer | Date: Feb 13 2008 22:41 | Format: None | Expires: never | Size: 64 KB | Hits: 1501
Latest pastes
3 hours ago
4 days ago
6 days ago
8 days ago
8 days ago