Skip to content

Commit 20ecc6c

Browse files
committed
Updated; full utf8 support and tests
1 parent ea7d199 commit 20ecc6c

4 files changed

Lines changed: 27 additions & 8 deletions

File tree

SSSA/sssa.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from utils import utils
1+
from SSSA.utils import utils
22

33
class sssa:
44
prime = 115792089237316195423570985008687907853269984665640564039457584007913129639747

SSSA/utils.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,32 @@ def split_ints(self, secret):
2222
byte_object = bytes(secret, "utf8")
2323
except:
2424
byte_object = bytes(secret)
25-
text = str(codecs.encode(byte_object, 'hex_codec').decode('utf8')) + "00"*(32 - (len(byte_object) % 32))
25+
text = codecs.encode(byte_object, 'hex_codec').decode('utf8') + "00"*(32 - (len(byte_object) % 32))
2626

27-
for i in range(0, int(len(text)/32)):
28-
result.append(int(text[i*32:(i+1)*32], 16))
27+
for i in range(0, int(len(text)/64)):
28+
result.append(int(text[i*64:(i+1)*64], 16))
2929

3030
return result
3131

3232
def merge_ints(self, secrets):
3333
result = ""
34+
3435
for secret in secrets:
3536
hex_data = hex(secret)[2:].replace("L", "")
3637
hex_data = "0"*(len(hex_data) % 2) + hex_data
37-
result += "00"*(32 - len(hex_data)) + hex_data
38+
hex_data = "0"*(64 - (len(hex_data))) + hex_data
39+
result += hex_data
40+
41+
byte_object = None
42+
try:
43+
byte_object = bytes(result, "utf8")
44+
45+
return codecs.decode(byte_object, 'hex_codec').decode('utf8').rstrip("\00\x00")
46+
except:
47+
byte_object = bytes(result)
3848

39-
return str(codecs.decode(result, 'hex_codec').decode('utf8')).rstrip("\00\x00")
49+
return codecs.decode(byte_object, 'hex_codec').rstrip("\00\x00")
50+
pass
4051

4152
def evaluate_polynomial(self, coefficients, value):
4253
result = 0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import unittest
2-
from sssa import sssa
2+
from SSSA import sssa
33

44
class TestStringMethods(unittest.TestCase):
55
def test_create_combine(self):
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
# -*- coding: utf8 -*-
2+
13
import unittest
2-
from utils import utils
4+
from SSSA import utils
35

46
class TestStringMethods(unittest.TestCase):
57
def test_random(self):
@@ -25,6 +27,12 @@ def test_split_merge(self):
2527
for value in values:
2628
self.assertEqual(util.merge_ints(util.split_ints(value)), value)
2729

30+
def test_split_merge_odds(self):
31+
util = utils()
32+
values = ["a" + "\0"*100 + "a", "a"*31 + "哈囉世界", "こんにちは、世界"*32]
33+
for value in values:
34+
self.assertEqual(util.merge_ints(util.split_ints(value)), value)
35+
2836
def test_mod_inverse(self):
2937
util = utils()
3038
for i in range(0, 10000):

0 commit comments

Comments
 (0)