unbanked icon

shaVBS

unbanked | PRO | 04/15/17 08:28:42 AM UTC | 0 ⭐ | 232 👁️ | Never ⏰ | []
VBScript |

6.39 KB

|

None

|

0 👍

/

0 👎

' Author Unknown by me
Function SHA(ByVal sMessage)
     Dim i, result(32), temp(8) As Double, fraccubeprimes, hashValues
     Dim done512, index512, words(64) As Double, index32, mask(4)
     Dim s0, s1, t1, t2, maj, ch, strLen
 
     mask(0) = 4294967296#
     mask(1) = 16777216
     mask(2) = 65536
     mask(3) = 256
 
     hashValues = Array( _
         1779033703, 3144134277#, 1013904242, 2773480762#, _
         1359893119, 2600822924#, 528734635, 1541459225)
 
     fraccubeprimes = Array( _
         1116352408, 1899447441, 3049323471#, 3921009573#, 961987163, 1508970993, 2453635748#, 2870763221#, _
         3624381080#, 310598401, 607225278, 1426881987, 1925078388, 2162078206#, 2614888103#, 3248222580#, _
         3835390401#, 4022224774#, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, _
         2554220882#, 2821834349#, 2952996808#, 3210313671#, 3336571891#, 3584528711#, 113926993, 338241895, _
         666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350#, 2456956037#, _
         2730485921#, 2820302411#, 3259730800#, 3345764771#, 3516065817#, 3600352804#, 4094571909#, 275423344, _
         430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, _
         1955562222, 2024104815, 2227730452#, 2361852424#, 2428436474#, 2756734187#, 3204031479#, 3329325298#)
 
     sMessage = Nz(sMessage, "")
     strLen = Len(sMessage) * 8
     sMessage = sMessage & Chr(128)
     done512 = False
     index512 = 0
 
31.     If (Len(sMessage) Mod 64) < 56 Then
32.         sMessage = sMessage & String(56 - (Len(sMessage) Mod 64), Chr(0))
33.     ElseIf (Len(sMessage) Mod 64) > 56 Then
34.         sMessage = sMessage & String(120 - (Len(sMessage) Mod 64), Chr(0))
35.     End If
36.     sMessage = sMessage & Chr(0) & Chr(0) & Chr(0) & Chr(0)
37. 
38.     sMessage = sMessage & Chr(Int((strLen / mask(0) - Int(strLen / mask(0))) * 256))
39.     sMessage = sMessage & Chr(Int((strLen / mask(1) - Int(strLen / mask(1))) * 256))
40.     sMessage = sMessage & Chr(Int((strLen / mask(2) - Int(strLen / mask(2))) * 256))
41.     sMessage = sMessage & Chr(Int((strLen / mask(3) - Int(strLen / mask(3))) * 256))
42. 
43.     Do Until done512
44.         For i = 0 To 15
45.             words(i) = Asc(Mid(sMessage, index512 * 64 + i * 4 + 1, 1)) * mask(1) + Asc(Mid(sMessage, index512 * 64 + i * 4 + 2, 1)) * mask(2) + Asc(Mid(sMessage, index512 * 64 + i * 4 + 3, 1)) * mask(3) + Asc(Mid(sMessage, index512 * 64 + i * 4 + 4, 1))
46.         Next
47. 
48.         For i = 16 To 63
49.             s0 = largeXor(largeXor(rightRotate(words(i - 15), 7, 32), rightRotate(words(i - 15), 18, 32), 32), Int(words(i - 15) / 8), 32)
50.             s1 = largeXor(largeXor(rightRotate(words(i - 2), 17, 32), rightRotate(words(i - 2), 19, 32), 32), Int(words(i - 2) / 1024), 32)
51.             words(i) = Mod32Bit(words(i - 16) + s0 + words(i - 7) + s1)
52.         Next
53. 
54.         For i = 0 To 7
55.             temp(i) = hashValues(i)
56.         Next
57. 
58.         For i = 0 To 63
59.             s0 = largeXor(largeXor(rightRotate(temp(0), 2, 32), rightRotate(temp(0), 13, 32), 32), rightRotate(temp(0), 22, 32), 32)
60.             maj = largeXor(largeXor(largeAnd(temp(0), temp(1), 32), largeAnd(temp(0), temp(2), 32), 32), largeAnd(temp(1), temp(2), 32), 32)
61.             t2 = Mod32Bit(s0 + maj)
62.             s1 = largeXor(largeXor(rightRotate(temp(4), 6, 32), rightRotate(temp(4), 11, 32), 32), rightRotate(temp(4), 25, 32), 32)
63.             ch = largeXor(largeAnd(temp(4), temp(5), 32), largeAnd(largeNot(temp(4), 32), temp(6), 32), 32)
64.             t1 = Mod32Bit(temp(7) + s1 + ch + fraccubeprimes(i) + words(i))
65. 
66.             temp(7) = temp(6)
67.             temp(6) = temp(5)
68.             temp(5) = temp(4)
69.             temp(4) = Mod32Bit(temp(3) + t1)
70.             temp(3) = temp(2)
71.             temp(2) = temp(1)
72.             temp(1) = temp(0)
73.             temp(0) = Mod32Bit(t1 + t2)
74.         Next
75. 
76.         For i = 0 To 7
77.             hashValues(i) = Mod32Bit(hashValues(i) + temp(i))
78.         Next
79. 
80.         If (index512 + 1) * 64 >= Len(sMessage) Then done512 = True
81.         index512 = index512 + 1
82.     Loop
83. 
84.     For i = 0 To 31
85.         result(i) = Int((hashValues(i \ 4) / mask(i Mod 4) - Int(hashValues(i \ 4) / mask(i Mod 4))) * 256)
86.     Next
87. 
88.     SHA = result
89. End Function
90. 
91. Function Mod32Bit(value)
92.     Mod32Bit = Int((value / 4294967296# - Int(value / 4294967296#)) * 4294967296#)
93. End Function
94. 
95. Function rightRotate(value, amount, totalBits)
96.     'To leftRotate, make amount = totalBits - amount
97.     Dim i
98.     rightRotate = 0
99. 
100.     For i = 0 To (totalBits - 1)
101.         If i >= amount Then
102.             rightRotate = rightRotate + (Int((value / (2 ^ (i + 1)) - Int(value / (2 ^ (i + 1)))) * 2)) * 2 ^ (i - amount)
103.         Else
104.             rightRotate = rightRotate + (Int((value / (2 ^ (i + 1)) - Int(value / (2 ^ (i + 1)))) * 2)) * 2 ^ (totalBits - amount + i)
105.         End If
106.     Next
107. End Function
108. 
109. Function largeXor(value, xorValue, totalBits)
110.     Dim i, a, b
111.     largeXor = 0
112. 
113.     For i = 0 To (totalBits - 1)
114.         a = (Int((value / (2 ^ (i + 1)) - Int(value / (2 ^ (i + 1)))) * 2))
115.         b = (Int((xorValue / (2 ^ (i + 1)) - Int(xorValue / (2 ^ (i + 1)))) * 2))
116.         If a <> b Then
117.             largeXor = largeXor + 2 ^ i
118.         End If
119.     Next
120. End Function
121. 
122. Function largeNot(value, totalBits)
123.     Dim i, a
124.     largeNot = 0
125. 
126.     For i = 0 To (totalBits - 1)
127.         a = Int((value / (2 ^ (i + 1)) - Int(value / (2 ^ (i + 1)))) * 2)
128.         If a = 0 Then
129.             largeNot = largeNot + 2 ^ i
130.         End If
131.     Next
132. End Function
133. 
134. Function largeAnd(value, andValue, totalBits)
135.     Dim i, a, b
136.     largeAnd = 0
137. 
138.     For i = 0 To (totalBits - 1)
139.         a = Int((value / (2 ^ (i + 1)) - Int(value / (2 ^ (i + 1)))) * 2)
140.         b = (Int((andValue / (2 ^ (i + 1)) - Int(andValue / (2 ^ (i + 1)))) * 2))
141.         If a = 1 And b = 1 Then
142.             largeAnd = largeAnd + 2 ^ i
143.         End If
144.     Next
145. End Function

Comments