# HG changeset patch # User Laman # Date 2017-10-01 17:51:06 # Node ID 735b9c2a61e94b93c67d17490920a7ee00667740 # Parent 6511b6f4f6c0d3acec605de96f36a3ba15be3fef cli catching thrown exceptions diff --git a/src/cli.py b/src/cli.py --- a/src/cli.py +++ b/src/cli.py @@ -12,7 +12,7 @@ def run(): buildSplitParser(subparsers.add_parser("split")) buildJoinParser(subparsers.add_parser("join")) - parser.set_defaults(func=lambda: parser.error("missing command")) + parser.set_defaults(func=lambda _: parser.error("missing command")) args=parser.parse_args() args.func(args) @@ -45,14 +45,20 @@ def buildJoinParser(parser): def _generate(args): encoding=getEncoding(args) or "b32" - shares=generate(args.secret,args.k,args.n,encoding) - for s in shares: - print(s) + try: + shares=generate(args.secret,args.k,args.n,encoding) + for s in shares: + print(s) + except ValueError as e: + print("operation failed: ",e) def _reconstruct(args): encoding=getEncoding(args) - print(reconstruct(*args.share,encoding=encoding,raw=args.raw)) + try: + print(reconstruct(*args.share,encoding=encoding,raw=args.raw)) + except ValueError as e: + print("operation failed: ",e) def getEncoding(args): diff --git a/src/condensed.py b/src/condensed.py --- a/src/condensed.py +++ b/src/condensed.py @@ -99,7 +99,7 @@ def run(): joiner=subparsers.add_parser("join") joiner.add_argument("share",nargs="+",help="shares to be joined") - joiner.set_defaults(func=lambda args: print(reconstruct(*args.share))) + joiner.set_defaults(func=_reconstruct) parser.set_defaults(func=lambda: parser.error("missing command")) @@ -107,5 +107,10 @@ def run(): args.func(args) +def _reconstruct(args): + try: print(reconstruct(*args.share)) + except ValueError as e: print("operation failed: ",e) + + if __name__=="__main__": run() diff --git a/src/shamira.py b/src/shamira.py --- a/src/shamira.py +++ b/src/shamira.py @@ -9,7 +9,8 @@ import gf256 def _shareByte(secretB,k,n): - assert k<=n<255 + if not k<=n<255: + raise ValueError("failing k<=n<255, k={0}, n={1}".format(k,n)) coefs=[int(secretB)]+[int(b) for b in os.urandom(k-1)] points=[gf256.evaluate(coefs,i) for i in range(1,n+1)] return points diff --git a/src/tests/test_shamira.py b/src/tests/test_shamira.py --- a/src/tests/test_shamira.py +++ b/src/tests/test_shamira.py @@ -20,9 +20,9 @@ class TestShamira(TestCase): os.urandom=cls._urandom def test_shareByte(self): - with self.assertRaises(AssertionError): # too few shares + with self.assertRaises(ValueError): # too few shares _shareByte(b"a",5,4) - with self.assertRaises(AssertionError): # too many shares + with self.assertRaises(ValueError): # too many shares _shareByte(b"a",5,255) with self.assertRaises(ValueError): # not castable to int _shareByte("x",2,3)