mirror of
https://github.com/Sei-Lisa/LSL-PyOptimizer
synced 2025-07-01 23:58:20 +00:00
llHMAC implementation (without importing hmac)
This commit is contained in:
parent
1bd9551c2f
commit
500a8bb751
5 changed files with 71 additions and 3 deletions
|
@ -1307,6 +1307,41 @@ def llHash(s):
|
||||||
hash = (hash * 65599 + ord(i)) & 0xFFFFFFFF
|
hash = (hash * 65599 + ord(i)) & 0xFFFFFFFF
|
||||||
return S32(hash)
|
return S32(hash)
|
||||||
|
|
||||||
|
def llHMAC(pwd, data, alg):
|
||||||
|
pwd = bytewrap(uniwrap(fs(pwd)).encode('utf8'))
|
||||||
|
data = bytewrap(uniwrap(fs(data)).encode('utf8'))
|
||||||
|
alg = fs(alg)
|
||||||
|
hash = None
|
||||||
|
if alg == u'md5':
|
||||||
|
hash = hashlib.md5()
|
||||||
|
elif alg == u'sha1':
|
||||||
|
hash = hashlib.sha1()
|
||||||
|
elif alg == u'sha224':
|
||||||
|
hash = hashlib.sha224()
|
||||||
|
elif alg == u'sha256':
|
||||||
|
hash = hashlib.sha256()
|
||||||
|
elif alg == u'sha384':
|
||||||
|
hash = hashlib.sha384()
|
||||||
|
elif alg == u'sha512':
|
||||||
|
hash = hashlib.sha512()
|
||||||
|
if hash is None:
|
||||||
|
raise ELSLCantCompute # we don't have info on how it behaves yet
|
||||||
|
# Calculate the HMAC here, to avoid requiring yet another module
|
||||||
|
if len(pwd) > hash.block_size:
|
||||||
|
tmp = hash.copy()
|
||||||
|
tmp.update(pwd)
|
||||||
|
pwd = bytewrap(tmp.digest())
|
||||||
|
del tmp
|
||||||
|
if len(pwd) < hash.block_size:
|
||||||
|
pwd += bytewrap(b'\x00') * (hash.block_size - len(pwd))
|
||||||
|
xorbytes = lambda a, b: bytewrap(x ^ y for (x, y) in zip(a, b))
|
||||||
|
ipadded = xorbytes(pwd, bytewrap(b'\x36') * hash.block_size)
|
||||||
|
opadded = xorbytes(pwd, bytewrap(b'\x5C') * hash.block_size)
|
||||||
|
ohash = hash.copy()
|
||||||
|
hash.update(ipadded + data)
|
||||||
|
ohash.update(opadded + hash.digest())
|
||||||
|
return b64encode(ohash.digest()).decode('utf8')
|
||||||
|
|
||||||
def llInsertString(s, pos, src):
|
def llInsertString(s, pos, src):
|
||||||
s = fs(s)
|
s = fs(s)
|
||||||
pos = fi(pos)
|
pos = fi(pos)
|
||||||
|
@ -1316,7 +1351,7 @@ def llInsertString(s, pos, src):
|
||||||
|
|
||||||
def llIntegerToBase64(x):
|
def llIntegerToBase64(x):
|
||||||
x = fi(x)
|
x = fi(x)
|
||||||
return (b64encode(bytearray(((x>>24)&255, (x>>16)&255, (x>>8)&255, x&255)))
|
return (b64encode(bytewrap(((x>>24)&255, (x>>16)&255, (x>>8)&255, x&255)))
|
||||||
.decode('utf8'))
|
.decode('utf8'))
|
||||||
|
|
||||||
def llLinear2sRGB(v):
|
def llLinear2sRGB(v):
|
||||||
|
|
|
@ -23,14 +23,15 @@ codecs.register(lambda x: codecs.lookup('utf8') if x == 'cp65001' else None)
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
python2Narrow = False
|
||||||
if sys.version_info.major >= 3:
|
if sys.version_info.major >= 3:
|
||||||
unicode = str
|
unicode = str
|
||||||
unichr = chr
|
unichr = chr
|
||||||
xrange = range
|
xrange = range
|
||||||
python3 = True
|
python3 = True
|
||||||
python2 = False
|
python2 = False
|
||||||
python2Narrow = False
|
|
||||||
uniwrap = unicode
|
uniwrap = unicode
|
||||||
|
bytewrap = bytes
|
||||||
|
|
||||||
def str2u(s, enc=None):
|
def str2u(s, enc=None):
|
||||||
"""Convert a native Python3 str to Unicode. This is a NOP."""
|
"""Convert a native Python3 str to Unicode. This is a NOP."""
|
||||||
|
@ -60,8 +61,8 @@ else:
|
||||||
xrange = xrange
|
xrange = xrange
|
||||||
python2 = True
|
python2 = True
|
||||||
python3 = False
|
python3 = False
|
||||||
python2Narrow = False
|
|
||||||
uniwrap = unicode
|
uniwrap = unicode
|
||||||
|
bytewrap = bytearray
|
||||||
|
|
||||||
def str2u(s, enc=None):
|
def str2u(s, enc=None):
|
||||||
"""Convert a native Python2 str to Unicode."""
|
"""Convert a native Python2 str to Unicode."""
|
||||||
|
|
29
unit_tests/expr.suite/llhmac.lsl
Normal file
29
unit_tests/expr.suite/llhmac.lsl
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
[ llHMAC("a", "b", "sha1")
|
||||||
|
, llHMAC("-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEogIBAAKCAQEAqxXSIhFHzYO9UNEUvMMXwhB4vf32fPirCxxV/w4m88jKPmFH
|
||||||
|
QQe9DOwj7illmvg+81vzBNGt+uNYy/2zFegUtwvxKCEioeoanRpPcvn9r/d/kXad
|
||||||
|
WL/DyKJwHbF1EtTfPAZSl6ZIBIYis8HQ/RAln3olS705AmCKBRkbz3cZ+dTzqX1v
|
||||||
|
7ohqqPPoCaXQFgLTMYnqU8ZTsq1Sl8BwKK735HPmKLCEjZaMn97lvzGHufY/JdRs
|
||||||
|
dwdRHqKnpe2w2c0AzNpQtjoRCnPtj7cFgCeztjAcbdtuS8ipJTEIuBLWHCVVXIlD
|
||||||
|
DQ6jJvIEW7tt+6kde/NUskRASd7Rtoy5AeS7cwIDAQABAoIBABwvix/7stWj55Oh
|
||||||
|
7oWuqoJZTlsWtP4fxaYd8/kCLt6o7NDcG+4VxUqUuNKq1UdzsINNWbsohD46KE3r
|
||||||
|
LQ7l3kvN1twioV8Ff370b7RkhSvxXX3sib2uUiYCxO/PZZdFpMVx0TeUuHauVpdA
|
||||||
|
zhpzB4+/gtd4hCTlHLf8S/2hBJGJA9e37Vo3MqXh43QRFTD8pgjb0mUWa4xJeZlz
|
||||||
|
3vGmQl0uMS04wX+r7Pq1HKs7gk93WeLrNhEQgRwUPgumrMGHey9eF1kDb14m3O7Z
|
||||||
|
qWU7MWWME2lxcUV0YT/iHPfvStvLHiEdi1z2TGKkMmlHX7RGpk7Js5GGQfeEKEsv
|
||||||
|
ihXuFmkCgYEA2y6V2+HCmViA8V1qY907z5dvG3ar9zbm3qfcJDJFoNOzDZNU0NRJ
|
||||||
|
eZu/LhwTHW7PArAuWhxh7ENu9Bhl5FjvMuyqrMPud1Tf0GsrYKQJITgbW6IC6w/N
|
||||||
|
a+2ZMm6VDCztS5MNNmWRCTTEecd4lnPLfyX9XYfUvUovzv5mM65Hzl0CgYEAx9Ly
|
||||||
|
RR1tkjgiIJHmpv95MkaHg4O4NZT0eiyykRz1qENESZOtJ00l+/p4vZSOdQjwPl+q
|
||||||
|
vjMhlZc9a2292UEy3BsBOPB/nJybLXBDFa0KYUCc3/aHGSgq+ZbUKNhdBq2c83hb
|
||||||
|
Dpw2ajHluLtXO7D4kDGvEDLPN+/19NElI6EL9A8CgYAVRu5xS/cyH69UvvbG/wEB
|
||||||
|
Y/f7OIf1FbVPxAfQ07iCpkppdPX018bSMVZbyYnpf4pE/olhYgP3hYxN0diCVEfU
|
||||||
|
L7lZ0CNkHi8j8mNhnErumJ2/RXj3DK+qXIRUqvt5FRtsDLhpoW508FRqZfzEzjTh
|
||||||
|
APUZkUgLoBoIBBYzyiVaWQKBgD3GvHmbmHVc/0f8c0drsedWIK0K+tct3ssqqGXu
|
||||||
|
gw/rA+CPVDfTRQv6qntJwyTxh3xxDRNSMW7S2/0rZ0cUPgoIGz+kMn+TdvH8Q/Ee
|
||||||
|
lxfr5tPinm+rmGWjOKIMCe53nA81RUlmB/iaxn9vA5ADrUS+53Vlj+SmPe7a/dVf
|
||||||
|
A5gHAoGAbS4sMlUkUd449PT33rqx26aNKkKLI9PLxgWE7YBfwzaUkG0MBryQqP5L
|
||||||
|
aIY2a+8ZvUeHxmY0oQfPQkH5KKbAaC0ozaXf+3qX0Gfkt8vxsh41ON5esr0tfcm2
|
||||||
|
BFdQrdBOACefo2kOFfdMSP6KWKI3HZMJAr9SDcAiL23IQZ/wl/c=
|
||||||
|
-----END RSA PRIVATE KEY-----", "Hello, Avatar!", "sha1")
|
||||||
|
]
|
3
unit_tests/expr.suite/llhmac.out
Normal file
3
unit_tests/expr.suite/llhmac.out
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[ "ZleFVoaCOYbIdDYnMROXUgFMtgs="
|
||||||
|
, "xK/3hcR1IVpVK9vftoztuVRGZFE="
|
||||||
|
]
|
0
unit_tests/expr.suite/llhmac.skp
Normal file
0
unit_tests/expr.suite/llhmac.skp
Normal file
Loading…
Add table
Add a link
Reference in a new issue