This is an automated email from the ASF dual-hosted git repository. sandreoli pushed a commit to branch issue7-schnorr-python-wrapper in repository https://gitbox.apache.org/repos/asf/incubator-milagro-MPC.git
commit 92df5e8fbc662e78873b3123066e604f738a3821 Author: Samuele Andreoli <[email protected]> AuthorDate: Tue Feb 18 14:03:42 2020 +0000 Refactor examples --- python/CMakeLists.txt | 1 + python/{ => examples}/CMakeLists.txt | 8 +--- python/examples/context.py | 25 ++++++++++ python/{ => examples}/example_dump_keys.py | 2 +- python/{ => examples}/example_ecdsa.py | 2 +- python/{ => examples}/example_mta.py | 2 +- python/{ => examples}/example_r.py | 2 +- python/{ => examples}/example_s.py | 2 +- python/examples/example_schnorr.py | 74 ++++++++++++++++++++++++++++++ 9 files changed, 107 insertions(+), 11 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 55b719c..d7ed21c 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -19,3 +19,4 @@ include(PythonSiteDirs) add_subdirectory(amcl) add_subdirectory(test) +add_subdirectory(examples) diff --git a/python/CMakeLists.txt b/python/examples/CMakeLists.txt similarity index 86% copy from python/CMakeLists.txt copy to python/examples/CMakeLists.txt index 55b719c..1d768ba 100644 --- a/python/CMakeLists.txt +++ b/python/examples/CMakeLists.txt @@ -13,9 +13,5 @@ # License for the specific language governing permissions and limitations under # the License. -cmake_minimum_required(VERSION 3.1 FATAL_ERROR) - -include(PythonSiteDirs) - -add_subdirectory(amcl) -add_subdirectory(test) +file(GLOB EXAMPLES *.py) +file(COPY ${EXAMPLES} DESTINATION "${PROJECT_BINARY_DIR}/python/examples") diff --git a/python/examples/context.py b/python/examples/context.py new file mode 100644 index 0000000..c7a9ac2 --- /dev/null +++ b/python/examples/context.py @@ -0,0 +1,25 @@ +""" +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +""" + +import os +import sys + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from amcl import mpc, schnorr diff --git a/python/example_dump_keys.py b/python/examples/example_dump_keys.py similarity index 99% rename from python/example_dump_keys.py rename to python/examples/example_dump_keys.py index 8fe5665..5e6ac46 100755 --- a/python/example_dump_keys.py +++ b/python/examples/example_dump_keys.py @@ -19,7 +19,7 @@ specific language governing permissions and limitations under the License. """ -from amcl import mpc +from context import mpc P_hex = "94f689d07ba20cf7c7ca7ccbed22ae6b40c426db74eaee4ce0ced2b6f52a5e136663f5f1ef379cdbb0c4fdd6e4074d6cff21082d4803d43d89e42fd8dfa82b135aa31a8844ffea25f255f956cbc1b9d8631d01baf1010d028a190b94ce40f3b72897e8196df19edf1ff62e6556f2701d52cef1442e3301db7608ecbdcca703db" Q_hex = "9a9ad73f246df853e129c589925fdad9df05606a61081e62e72be4fb33f6e5ec492cc734f28bfb71fbe2ba9a11e4c02e2c0d103a5cbb0a9d6402c07de63b1b995dd72ac8f29825d66923a088b421fb4d52b0b855d2f5dde2be9b0ca0cee6f7a94e5566735fe6cff1fcad3199602f88528d19aa8d0263adff8f5053c38254a2a3" diff --git a/python/example_ecdsa.py b/python/examples/example_ecdsa.py similarity index 99% rename from python/example_ecdsa.py rename to python/examples/example_ecdsa.py index 39c5607..8b0c9ea 100755 --- a/python/example_ecdsa.py +++ b/python/examples/example_ecdsa.py @@ -19,7 +19,7 @@ specific language governing permissions and limitations under the License. """ -from amcl import mpc +from context import mpc seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" diff --git a/python/example_mta.py b/python/examples/example_mta.py similarity index 99% rename from python/example_mta.py rename to python/examples/example_mta.py index 1491120..e22b920 100755 --- a/python/example_mta.py +++ b/python/examples/example_mta.py @@ -19,7 +19,7 @@ specific language governing permissions and limitations under the License. """ -from amcl import mpc +from context import mpc seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" diff --git a/python/example_r.py b/python/examples/example_r.py similarity index 99% rename from python/example_r.py rename to python/examples/example_r.py index 7f55ce0..5fca2a1 100755 --- a/python/example_r.py +++ b/python/examples/example_r.py @@ -19,7 +19,7 @@ specific language governing permissions and limitations under the License. """ -from amcl import mpc +from context import mpc seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" diff --git a/python/example_s.py b/python/examples/example_s.py similarity index 99% rename from python/example_s.py rename to python/examples/example_s.py index 011a437..122a433 100755 --- a/python/example_s.py +++ b/python/examples/example_s.py @@ -19,7 +19,7 @@ specific language governing permissions and limitations under the License. """ -from amcl import mpc +from context import mpc seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" diff --git a/python/examples/example_schnorr.py b/python/examples/example_schnorr.py new file mode 100755 index 0000000..d906d5f --- /dev/null +++ b/python/examples/example_schnorr.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 + +""" +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +""" + +from context import schnorr + +seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" + +x_hex = "fab4ce512dff74bd9c71c89a14de5b877af45dca0329ee3fcb72611c0784fef3" +V_hex = "032cf4b348c9d00718f01ed98923e164df53b5e8bc4c2250662ed2df784e1784f4" + +if __name__ == "__main__": + seed = bytes.fromhex(seed_hex) + + x = bytes.fromhex(x_hex) + V = bytes.fromhex(V_hex) + + # random number generator + rng = schnorr.create_csprng(seed) + + print("Example Schnorr Protocol") + print("DLOG: V = x.G") + print(f"\tx = {x_hex}") + print(f"\tV = {V_hex}") + + # Generate commitment C = r.G, r random in [0, ..., q] + r, C = schnorr.commit(rng) + + print("\n[Prover] Commitment C = r.G") + print(f"\tr = {r.hex()}") + print(f"\tC = {C.hex()}") + + # Generate deterministic challenge e = H(G, V, C) + e = schnorr.challenge(V, C) + + print("\n[Prover] Deterministic Challenge e = H(G, V, C)") + print(f"\te = {e.hex()}") + + # Generate proof p = r - ex mod q + p = schnorr.prove(r, e, x) + + print("\n[Prover] Generate proof p = r - ex") + print(f"\tp = {p.hex()}") + + # Verifier regenerates deterministic challenge + e = schnorr.challenge(V, C) + print("\n[Verifier] Deterministic Challenge e = H(G, V, C)") + print(f"\te = {e.hex()}") + + # Verify + rc = schnorr.verify(V, C, e, p) + + print("\n[Verifier] Verify proof p") + if rc == schnorr.OK: + print("\tSuccess") + else: + print("\tFailure")
