Add IETF-compliant BLS and fix many code smells reported by sonarqube
diff --git a/.gitignore b/.gitignore
index c1efd00..c40610c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
 build
 target
 *~
+.idea
+cmake-build-debug
+qredo-secret-detection-config.toml
+security-ci-cd-templates
+gitleaks_report.json
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a1a366f..43fbad1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -54,7 +54,6 @@
 log(CMAKE_GENERATOR)
 
 add_definitions(-DCMAKE)
-
 set(AMCL_VERSION       ${PROJECT_VERSION})
 set(AMCL_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
 set(AMCL_VERSION_MINOR ${PROJECT_VERSION_MINOR})
@@ -69,14 +68,14 @@
 
     if (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
-        set(CMAKE_C_FLAGS_ASAN    "-O0 -g3 -fsanitize=address")
+        set(CMAKE_C_FLAGS_ASAN    "-O0 -g3 -fsanitize=address -fsanitize=undefined -fno-sanitize-recover -fno-strict-overflow")
     else (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
         message(STATUS "GCC 4.8 required to run address sanitizer - please upgrade your installation")
     endif(GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
 
-    set(CMAKE_C_FLAGS_RELEASE     "-O2")
-    set(CMAKE_C_FLAGS_DEBUG       "-O0 -g3")
-    set(CMAKE_C_FLAGS_COVERAGE    "-O0 -g3 --coverage")
+    set(CMAKE_C_FLAGS_RELEASE     "-O2 -fno-strict-overflow")
+    set(CMAKE_C_FLAGS_DEBUG       "-O0 -g3 -fno-strict-overflow")
+    set(CMAKE_C_FLAGS_COVERAGE    "-O0 -g3 -fno-strict-overflow --coverage")
     set(CMAKE_C_FLAGS_CHECK       "-O2 -Werror")
     set(CMAKE_C_FLAGS_CHECKFULL   "${CMAKE_C_FLAGS_CHECK} -Wcast-qual")
 endif(CMAKE_COMPILER_IS_GNUCC)
@@ -119,11 +118,13 @@
 option(BUILD_WCC      "Build WCC"      ON)
 option(BUILD_X509     "BUild X509"     ON)
 option(BUILD_BLS      "Build BLS"      ON)
+option(BUILD_BLS_IETF "Build BLS_IETF" ON)
 option(BUILD_PAILLIER "Build Paillier" OFF)
 log(BUILD_MPIN)
 log(BUILD_WCC)
 log(BUILD_X509)
 log(BUILD_BLS)
+log(BUILD_BLS_IETF)
 log(BUILD_PAILLIER)
 
 option(DEBUG_REDUCE "Print debug message for field reduction" OFF)
@@ -192,6 +193,8 @@
 
 add_library(amcl_core
   src/hash.c
+  src/hmac.c
+  src/hkdf.c
   src/rand.c
   src/randapi.c
   src/aes.c
@@ -208,6 +211,9 @@
   SOVERSION ${AMCL_SOVERSION}
 )
 
+target_compile_options(amcl_core PUBLIC
+  "$<$<CONFIG:DEBUG>:-DDEBUG>"
+)
 target_include_directories(amcl_core PUBLIC
   $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
@@ -415,25 +421,40 @@
   amcl_curve_field(TC "${curve}")
   amcl_curve_field(TF "${curve}")
 
-  amcl_configure_file_curve(include/big.h.in          include/big_${BD}.h          "${curve}" amcl_curve_${TC}_GEN_HDRS)
-  amcl_configure_file_curve(include/config_big.h.in   include/config_big_${BD}.h   "${curve}" amcl_curve_${TC}_GEN_HDRS)
-  amcl_configure_file_curve(include/config_field.h.in include/config_field_${TF}.h "${curve}" amcl_curve_${TC}_GEN_HDRS)
-  amcl_configure_file_curve(include/config_curve.h.in include/config_curve_${TC}.h "${curve}" amcl_curve_${TC}_GEN_HDRS)
-  amcl_configure_file_curve(include/fp.h.in           include/fp_${TF}.h           "${curve}" amcl_curve_${TC}_GEN_HDRS)
-  amcl_configure_file_curve(include/ecdh.h.in         include/ecdh_${TC}.h         "${curve}" amcl_curve_${TC}_GEN_HDRS)
-  amcl_configure_file_curve(include/ecp.h.in          include/ecp_${TC}.h          "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  amcl_configure_file_curve(include/big.h.in           include/big_${BD}.h           "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  amcl_configure_file_curve(include/config_big.h.in    include/config_big_${BD}.h    "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  amcl_configure_file_curve(include/config_field.h.in  include/config_field_${TF}.h  "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  amcl_configure_file_curve(include/config_curve.h.in  include/config_curve_${TC}.h  "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  amcl_configure_file_curve(include/fp.h.in            include/fp_${TF}.h            "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  amcl_configure_file_curve(include/ecdh.h.in          include/ecdh_${TC}.h          "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  amcl_configure_file_curve(include/ecp.h.in           include/ecp_${TC}.h           "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  if(TC STREQUAL "BLS381")
+    amcl_configure_file_curve(include/hash_to_field.h.in include/hash_to_field_${TC}.h "${curve}" amcl_curve_${TC}_GEN_HDRS)
+  endif()
 
-  amcl_configure_file_curve(src/big.c.in  src/big_${BD}.c  "${curve}" amcl_curve_${TC}_GEN_SRCS)
-  amcl_configure_file_curve(src/fp.c.in   src/fp_${TF}.c   "${curve}" amcl_curve_${TC}_GEN_SRCS)
-  amcl_configure_file_curve(src/ecp.c.in  src/ecp_${TC}.c  "${curve}" amcl_curve_${TC}_GEN_SRCS)
-  amcl_configure_file_curve(src/ecdh.c.in src/ecdh_${TC}.c "${curve}" amcl_curve_${TC}_GEN_SRCS)
+  amcl_configure_file_curve(src/big.c.in           src/big_${BD}.c           "${curve}" amcl_curve_${TC}_GEN_SRCS)
+  amcl_configure_file_curve(src/fp.c.in            src/fp_${TF}.c            "${curve}" amcl_curve_${TC}_GEN_SRCS)
+  amcl_configure_file_curve(src/ecp.c.in           src/ecp_${TC}.c           "${curve}" amcl_curve_${TC}_GEN_SRCS)
+  amcl_configure_file_curve(src/ecdh.c.in          src/ecdh_${TC}.c          "${curve}" amcl_curve_${TC}_GEN_SRCS)
+  if(TC STREQUAL "BLS381")
+    amcl_configure_file_curve(src/hash_to_field.c.in src/hash_to_field_${TC}.c "${curve}" amcl_curve_${TC}_GEN_SRCS)
+  endif()
 
   message(STATUS "Build libamcl_curve_${TC}")
-  add_library(amcl_curve_${TC}
-    ${amcl_curve_${TC}_GEN_SRCS}
-    src/rom_curve_${TC}.c
-    src/rom_field_${TF}.c
-  )
+  if(TC STREQUAL "BLS381")
+    add_library(amcl_curve_${TC}
+      ${amcl_curve_${TC}_GEN_SRCS}
+      src/rom_curve_${TC}.c
+      src/rom_iso_${TC}.c
+      src/rom_field_${TF}.c
+    )
+  else()
+    add_library(amcl_curve_${TC}
+      ${amcl_curve_${TC}_GEN_SRCS}
+      src/rom_curve_${TC}.c
+      src/rom_field_${TF}.c
+    )
+  endif()
   list(APPEND AMCL_LIBRARIES amcl_curve_${TC})
 
   set_target_properties(amcl_curve_${TC} PROPERTIES
@@ -712,6 +733,55 @@
 endif()
 
 ##################################################
+# AMCL_BLS_IETF Library
+##################################################
+if(BUILD_BLS_IETF)
+  foreach(curve ${AMCL_CURVE})
+    amcl_curve_field(TC "${curve}")
+    amcl_curve_field(CS "${curve}")
+
+    if(TC STREQUAL "BLS381")
+        amcl_configure_file_curve(include/bls_ietf.h.in include/bls_ietf_${TC}.h "${curve}" amcl_bls_ietf_${TC}_GEN_HDRS)
+        amcl_configure_file_curve(src/bls_ietf.c.in     src/bls_ietf_${TC}.c     "${curve}" amcl_bls_ietf_${TC}_GEN_SRCS)
+
+      message(STATUS "Build libamcl_bls_ietf_${TC}")
+      add_library(amcl_bls_ietf_${TC}
+        ${amcl_bls_ietf_${TC}_GEN_SRCS}
+      )
+      list(APPEND AMCL_LIBRARIES amcl_bls_ietf_${TC})
+
+      set_target_properties(amcl_bls_ietf_${TC} PROPERTIES
+        EXPORT_NAME bls_ietf_${TC}
+        VERSION ${AMCL_VERSION}
+        SOVERSION ${AMCL_SOVERSION}
+      )
+
+      target_include_directories(amcl_bls_ietf_${TC} PUBLIC
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+      )
+
+      target_link_libraries(amcl_bls_ietf_${TC} PUBLIC
+        amcl_pairing_${TC}
+      )
+
+      install(TARGETS amcl_bls_ietf_${TC}
+        EXPORT AMCLTargets
+        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+      )
+
+      install(FILES
+        ${amcl_bls_ietf_${TC}_GEN_HDRS}
+        DESTINATION ${INSTALL_INCLUDESUBDIR}
+      )
+    endif(TC STREQUAL "BLS381")
+  endforeach()
+endif()
+
+##################################################
 # pkgconfig
 ##################################################
 foreach(lib ${AMCL_LIBRARIES})
@@ -782,8 +852,10 @@
 endif()
 
 if(BUILD_PYTHON)
-  message(STATUS "Build Python wrappers")
-  add_subdirectory(python)
+  if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "ASan")
+    message(STATUS "Build Python wrappers")
+    add_subdirectory(python)
+  endif()
 endif()
 
 if(BUILD_TESTING)
diff --git a/Dockerfile b/Dockerfile
index 5f4e797..cdd8312 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,24 +1,62 @@
-FROM ubuntu:bionic
+# Dockerfile
+#
+# Ubuntu 22.04 
+#
+# @author  Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
 
-RUN dpkg --add-architecture i386
+# ------------------------------------------------------------------------------
+# NOTES:
+#
+# Create the image:
+#     docker build -t libamcl .
+#
+# Run tests:
+#     docker run --rm libamcl ./scripts/test.sh
+#
+# Generate coverage figures:
+#     CONTAINER_ID=$(docker run -d libamcl ./scripts/coverage.sh)
+#     docker logs $CONTAINER_ID
+#     docker cp ${CONTAINER_ID}:"/root/target/Coverage/coverage" ./
+#     docker rm -f ${CONTAINER_ID} || true
+#
+# To login to container:
+#     docker run -it --rm libamcl bash
+# ------------------------------------------------------------------------------
 
-# add repositories cache
-RUN apt-get update -y
+FROM ubuntu:22.04
 
-# install packages
-RUN apt-get install -y \
-    build-essential \
-    cmake \
-    doxygen \
-    parallel \
-    mingw-w64 \
-    wine64 \
-    wine32 \
-    lcov \
-    python3-dev \
-    python3-pip \
-    gcc-multilib
+LABEL maintainer="kealanmccusker@gmail.com"
 
-RUN pip3 install cffi autopep8
+WORKDIR /root
 
-CMD ["/bin/bash"]
+ENV DEBIAN_FRONTEND=noninteractive
+
+ENV LD_LIBRARY_PATH=/usr/local/lib:./
+
+ENV ASAN_OPTIONS=verify_asan_link_order=0
+
+RUN echo "## Start building" \
+    && echo "## Update and install packages" \
+    && apt-get -y update \
+    && apt-get install -y --no-install-recommends \
+        build-essential \
+	cmake \
+	doxygen \
+	lcov \
+	python3-dev \
+	python3-pip \
+	wget \
+	git \
+	libffi-dev \
+    && echo "## Done"
+
+RUN pip3 install cffi
+
+ADD . /root
+
+RUN ./scripts/build.sh
+
+RUN ./scripts/test.sh
+
+
diff --git a/README.md b/README.md
index 615570f..31be4c9 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,8 @@
 
 # AMCL - *Apache Milagro Crypto Library*
 
+[![Master Branch](https://img.shields.io/badge/-master:-gray.svg)](https://github.com/apache/incubator-milagro-crypto-c/tree/master)
+
 * **category**:    Library
 * **copyright**:   2019 The Apache Software Foundation
 * **license**:     ASL 2.0 ([Apache License Version 2.0, January 2004](http://www.apache.org/licenses/LICENSE-2.0))
@@ -119,21 +121,23 @@
 
 ##### Quick start
 
-Either clone the repository using Git:
+Clone the repository
 
 ```
 git clone https://github.com/apache/incubator-milagro-crypto-c.git
 cd incubator-milagro-crypto-c
 ```
 
-Or, if using an official Apache release, download the compressed archive, extract it and navigate into its root directory.
-
-A Makefile is present at the project root that reads the options defined in
-config.mk. Change these options and then type the following to build and test
-the library.
+Edit and run this script
 
 ```
-make
+./scripts/build.sh
+```
+
+or use the docker build
+
+```
+./scripts/docker.sh -h
 ```
 
 ##### Multiple curves and RSA security levels
@@ -167,6 +171,12 @@
 sudo make install
 ```
 
+NOTE: When running the ASan tests, make sure to export the following variable:
+
+```
+export ASAN_OPTIONS=verify_asan_link_order=0
+```
+
 On Debian/Ubuntu machine instead of executing the *"sudo make install"* command it is possible to execute *"sudo checkinstall"* to build and install a DEB package.
 
 Now you can set the path to where libs and python package are installed:
@@ -300,7 +310,7 @@
 ```
 make format
 ```
-### Contributors
+### Contributors 
 
 The following people have contributed to milagro-crypto-c
 
diff --git a/amcl.pc.in b/amcl.pc.in
index 7b17086..c7e0f69 100644
--- a/amcl.pc.in
+++ b/amcl.pc.in
@@ -1,7 +1,7 @@
 prefix="@CMAKE_INSTALL_PREFIX@"
 exec_prefix=${prefix}
 libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/amcl
 
 Name: amcl
 Description: AMCL is a standards compliant C cryptographic library designed to support the Internet of Things (IoT).
diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt
index 782cbd4..1ef97ba 100644
--- a/benchmark/CMakeLists.txt
+++ b/benchmark/CMakeLists.txt
@@ -44,6 +44,11 @@
   add_executable(benchtest_ec_${TC} ${benchtest_ec_${TC}_GEN_SRCS} $<TARGET_OBJECTS:amcl_bench_utils>)
   target_link_libraries(benchtest_ec_${TC} PRIVATE amcl_curve_${TC})
 
+  # ECDSA Benchmark
+  amcl_configure_file_curve(benchtest_ecdsa_ZZZ.c.in benchtest_ecdsa_${TC}.c "${curve}" benchtest_ecdsa_${TC}_GEN_SRCS)
+  add_executable(benchtest_ecdsa_${TC} ${benchtest_ecdsa_${TC}_GEN_SRCS} $<TARGET_OBJECTS:amcl_bench_utils>)
+  target_link_libraries(benchtest_ecdsa_${TC} PRIVATE amcl_curve_${TC})
+
   # Pairing Benchmark
   if(TARGET amcl_pairing_${TC})
     amcl_configure_file_curve(benchtest_pair_ZZZ.c.in benchtest_pair_${TC}.c "${curve}" benchtest_pair_${TC}_GEN_SRCS)
@@ -57,7 +62,14 @@
     add_executable(benchtest_mpin_${TC} ${benchtest_mpin_${TC}_GEN_SRCS} $<TARGET_OBJECTS:amcl_bench_utils>)
     target_link_libraries(benchtest_mpin_${TC} PRIVATE amcl_mpin_${TC})
   endif()
-  
+
+  # BLS Benchmark
+  if(TARGET amcl_bls_${TC})
+    amcl_configure_file_curve(benchtest_bls_ZZZ.c.in benchtest_bls_${TC}.c "${curve}" benchtest_bls_${TC}_GEN_SRCS)
+    add_executable(benchtest_bls_${TC} ${benchtest_bls_${TC}_GEN_SRCS} $<TARGET_OBJECTS:amcl_bench_utils>)
+    target_link_libraries(benchtest_bls_${TC} PRIVATE amcl_bls_${TC})
+  endif()
+
 endforeach()
 
 foreach(level ${AMCL_RSA})
diff --git a/benchmark/bench.c.in b/benchmark/bench.c.in
index c49263b..a8924c3 100644
--- a/benchmark/bench.c.in
+++ b/benchmark/bench.c.in
@@ -78,7 +78,6 @@
 
 static void print_amcl_configuration()
 {
-    printf("Project Version:\t@BUILD_VERSION@\n");
     printf("CFLAGS:\t\t\t@CMAKE_C_FLAGS@\n");
     printf("Build type:\t\t@CMAKE_BUILD_TYPE@\n");
     printf("AMCL Version:\t\t%d.%d.%d\n", AMCL_VERSION_MAJOR, AMCL_VERSION_MINOR, AMCL_VERSION_PATCH);
diff --git a/benchmark/benchtest_bls_ZZZ.c.in b/benchmark/benchtest_bls_ZZZ.c.in
new file mode 100644
index 0000000..b9b941a
--- /dev/null
+++ b/benchmark/benchtest_bls_ZZZ.c.in
@@ -0,0 +1,133 @@
+/*
+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.
+*/
+
+/* Time BLS Protocol */
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "config_curve_ZZZ.h"
+#include "randapi.h"
+#include "bench.h"
+
+#if CURVE_SECURITY_ZZZ == 128
+#include "bls_ZZZ.h"
+#elif CURVE_SECURITY_ZZZ == 192
+#include "bls192_ZZZ.h"
+#elif CURVE_SECURITY_ZZZ == 256
+#include "bls256_ZZZ.h"
+#endif
+
+// Support multiple security levels
+#if CURVE_SECURITY_ZZZ == 128
+#define G2LEN 4*BFS_ZZZ
+#elif CURVE_SECURITY_ZZZ == 192
+#define G2LEN 8*BFS_ZZZ
+#elif CURVE_SECURITY_ZZZ == 256
+#define G2LEN 16*BFS_ZZZ
+#endif
+
+#define MIN_TIME 10.0
+#define MIN_ITERS 10
+
+int bls(csprng *RNG)
+{
+    int rc;
+
+    char m[2000];
+    octet M = {0,sizeof(m),m};
+
+    char sk1[BGS_ZZZ];
+    octet SK1 = {0,sizeof(sk1),sk1};
+    char pk1[G2LEN];
+    octet PK1 = {0,sizeof(pk1),pk1};
+    char sig1[BFS_ZZZ+1];
+    octet SIG1 = {0,sizeof(sig1),sig1};
+
+    int iterations;
+    clock_t start;
+    double elapsed;
+
+    printf("\nBenchmark test BLS - ");
+
+    printf("ZZZ Curve\n");
+
+    print_system_info();
+
+    // Generate key pairs
+    BLS_ZZZ_KEY_PAIR_GENERATE(RNG,&SK1,&PK1);
+
+    OCT_jstring(&M,"test message");
+
+    // Sign the message
+    iterations=0;
+    start=clock();
+    do
+    {
+      BLS_ZZZ_SIGN(&SIG1,&M,&SK1);
+      iterations++;
+      elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
+    }
+    while (elapsed<MIN_TIME || iterations<MIN_ITERS);
+    elapsed=1000.0*elapsed/iterations;
+    printf("BLS_ZZZ_SIGN \t %8d iterations  ",iterations);
+    printf(" %8.2lf ms per iteration\n",elapsed);
+
+    // Verify signature
+    iterations=0;
+    start=clock();
+    do
+    {
+      rc=BLS_ZZZ_VERIFY(&SIG1,&M,&PK1);
+      if (rc!=BLS_OK)
+	{
+	  printf("Error: Invalid Signature\n");
+          return 1;
+	}
+      iterations++;
+      elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
+    }
+    while (elapsed<MIN_TIME || iterations<MIN_ITERS);
+    elapsed=1000.0*elapsed/iterations;
+    printf("BLS_ZZZ_VERIFY \t %8d iterations  ",iterations);
+    printf(" %8.2lf ms per iteration\n",elapsed);
+
+    return 0;
+}
+
+int main()
+{
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    char seed[16] = {0};
+    octet SEED = {sizeof(seed),sizeof(seed),seed};
+
+    // CSPRNG
+    csprng RNG;
+
+    // fake random source
+    OCT_fromHex(&SEED,seedHex);
+
+    /* initialise strong RNG */
+    CREATE_CSPRNG(&RNG,&SEED);
+
+    bls(&RNG);
+
+    KILL_CSPRNG(&RNG);
+}
+
diff --git a/benchmark/benchtest_ec_ZZZ.c.in b/benchmark/benchtest_ec_ZZZ.c.in
index 4994062..e00a367 100644
--- a/benchmark/benchtest_ec_ZZZ.c.in
+++ b/benchmark/benchtest_ec_ZZZ.c.in
@@ -38,15 +38,18 @@
 #if CURVETYPE_ZZZ!=MONTGOMERY
     BIG_XXX y;
 #endif
-    BIG_XXX s,r,x;
-    ECP_ZZZ P,G;
-    int i,iterations;
+    BIG_XXX s;
+    BIG_XXX r;
+    BIG_XXX x;
+    ECP_ZZZ P;
+    ECP_ZZZ G;
+    int iterations;
     clock_t start;
     double elapsed;
     char pr[10];
-    unsigned long ran;
+    time_t ran;
 
-    printf("\nBechmark test EC - ");
+    printf("\nBenchmark test EC - ");
 
     printf("ZZZ Curve\n");
 
@@ -62,12 +65,12 @@
 
     print_system_info();
 
-    time((time_t *)&ran);
-    pr[0]=ran;
-    pr[1]=ran>>8;
-    pr[2]=ran>>16;
-    pr[3]=ran>>24;
-    for (i=4; i<10; i++) pr[i]=i;
+    time(&ran);
+    pr[0]=(char)ran;
+    pr[1]=(char)(ran>>4);
+    pr[2]=(char)(ran>>12);
+    pr[3]=(char)(ran>>16);
+    for (int i=4; i<10; i++) pr[i]=(char)i;
     RAND_seed(&RNG,10,pr);
 
     BIG_XXX_rcopy(x,CURVE_Gx_ZZZ);
@@ -97,7 +100,7 @@
         ECP_ZZZ_mul(&P,s);
 
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
diff --git a/benchmark/benchtest_ecdsa_ZZZ.c.in b/benchmark/benchtest_ecdsa_ZZZ.c.in
new file mode 100644
index 0000000..29e140d
--- /dev/null
+++ b/benchmark/benchtest_ecdsa_ZZZ.c.in
@@ -0,0 +1,138 @@
+/*
+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.
+*/
+
+/* Time ECDSA Protocol */
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "ecdh_ZZZ.h"
+#include "ecdh_support.h"
+#include "randapi.h"
+#include "bench.h"
+
+#define MIN_TIME 10.0
+#define MIN_ITERS 10
+
+int ecdsa(csprng *RNG)
+{
+    int rc;
+
+    char m[2000];
+    octet M = {0,sizeof(m),m};
+
+    char s0[2*EGS_ZZZ];
+    octet S0= {0,sizeof(s0),s0};
+
+    char w0[2*EFS_ZZZ+1];
+    octet W0= {0,sizeof(w0),w0};
+
+    char ds[EGS_ZZZ];
+    octet DS= {0,sizeof(ds),ds};
+
+    char cs[EGS_ZZZ];
+    octet CS= {0,sizeof(cs),cs};
+
+    int iterations;
+    clock_t start;
+    double elapsed;
+
+    printf("\nBenchmark test ECDSA - ");
+
+    printf("ZZZ Curve\n");
+
+    print_system_info();
+
+    // Generate key pair
+    ECP_ZZZ_KEY_PAIR_GENERATE(RNG,&S0,&W0);
+    rc=ECP_ZZZ_PUBLIC_KEY_VALIDATE(&W0);
+    if (rc!=0)
+    {
+        printf("ECP Public Key is invalid!\n");
+        return 0;
+    }
+
+
+#if CURVETYPE_ZZZ != MONTGOMERY
+
+    OCT_jstring(&M,"test message");
+
+    // Sign the message
+    iterations=0;
+    start=clock();
+    do
+    {
+      rc=ECP_ZZZ_SP_DSA(HASH_TYPE_ZZZ,RNG,NULL,&S0,&M,&CS,&DS);
+      if (rc!=0)
+	{
+	  printf("Error: ECP_ZZZ_SP_DSA\n");
+          return 1;
+	}
+      iterations++;
+      elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
+    }
+    while (elapsed<MIN_TIME || iterations<MIN_ITERS);
+    elapsed=1000.0*elapsed/iterations;
+    printf("ECDSA Signing \t %8d iterations  ",iterations);
+    printf(" %8.2lf ms per iteration\n",elapsed);
+
+    // Verify signature
+    iterations=0;
+    start=clock();
+    do
+    {
+      rc=ECP_ZZZ_VP_DSA(HASH_TYPE_ZZZ,&W0,&M,&CS,&DS);
+      if (rc!=0)
+	{
+	  printf("Error: ECP_ZZZ_VP_DSA\n");
+          return 1;
+	}
+      iterations++;
+      elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
+    }
+    while (elapsed<MIN_TIME || iterations<MIN_ITERS);
+    elapsed=1000.0*elapsed/iterations;
+    printf("ECDSA Verification \t %8d iterations  ",iterations);
+    printf(" %8.2lf ms per iteration\n",elapsed);
+
+#endif
+
+    return 0;
+}
+
+int main()
+{
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    char seed[16] = {0};
+    octet SEED = {sizeof(seed),sizeof(seed),seed};
+
+    // CSPRNG
+    csprng RNG;
+
+    // fake random source
+    OCT_fromHex(&SEED,seedHex);
+
+    /* initialise strong RNG */
+    CREATE_CSPRNG(&RNG,&SEED);
+
+    ecdsa(&RNG);
+
+    KILL_CSPRNG(&RNG);
+}
+
diff --git a/benchmark/benchtest_ff_WWW.c.in b/benchmark/benchtest_ff_WWW.c.in
index 537d551..0656310 100644
--- a/benchmark/benchtest_ff_WWW.c.in
+++ b/benchmark/benchtest_ff_WWW.c.in
@@ -48,8 +48,14 @@
     double elapsed;
 
     // Material for exponents
-    BIG_XXX A[FFLEN_WWW], B[FFLEN_WWW], C[FFLEN_WWW], D[FFLEN_WWW];
-    BIG_XXX E[FFLEN_WWW], F[FFLEN_WWW], G[FFLEN_WWW], H[FFLEN_WWW];
+    BIG_XXX A[FFLEN_WWW];
+    BIG_XXX B[FFLEN_WWW];
+    BIG_XXX C[FFLEN_WWW];
+    BIG_XXX D[FFLEN_WWW];
+    BIG_XXX E[FFLEN_WWW];
+    BIG_XXX F[FFLEN_WWW];
+    BIG_XXX G[FFLEN_WWW];
+    BIG_XXX H[FFLEN_WWW];
     BIG_XXX N[FFLEN_WWW];
     BIG_XXX R[FFLEN_WWW];
 
@@ -72,12 +78,11 @@
     octet OCT = {0,sizeof(oct),oct};
 
     /* Fake random source */
-    int i;
     char seed[256];
     csprng RNG;
 
     RAND_clean(&RNG);
-    for (i=0; i<256; i++) seed[i]=(char)i;
+    for (int i=0; i<256; i++) seed[i]=(char)i;
     RAND_seed(&RNG,256,seed);
 
     /* Read N from hex */
@@ -87,7 +92,7 @@
     /* Compute additional values */
     FF_WWW_invmod2m(ND, N, FFLEN_WWW);
 
-    printf("\nBechmark FF exponentiation - FF_WWW\n");
+    printf("\nBenchmark FF exponentiation - FF_WWW\n");
 
     print_system_info();
 
@@ -109,7 +114,7 @@
     {
         FF_WWW_nt_pow(R, A, E, N, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -122,7 +127,7 @@
     {
         FF_WWW_nt_pow_2(R, A, E, B, F, N, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -135,7 +140,7 @@
     {
         FF_WWW_nt_pow_3(R, A, E, B, F, C, G, N, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -148,14 +153,14 @@
     {
         FF_WWW_nt_pow_4(R, A, E, B, F, C, G, D, H, N, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
     printf("FF_WWW_nt_pow_4\t%8d iterations\t",iterations);
     printf("%8.2lf ms per iteration\n",elapsed);
 
-    /* Benchmark constant-time exponenets */
+    /* Benchmark constant-time exponents */
 
     iterations=0;
     start=clock();
@@ -163,7 +168,7 @@
     {
         FF_WWW_ct_pow(R, A, E, N, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -176,7 +181,7 @@
     {
         FF_WWW_ct_pow_2(R, A, E, B, F, N, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -189,7 +194,7 @@
     {
         FF_WWW_ct_pow_3(R, A, E, B, F, C, G, N, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -204,7 +209,7 @@
     {
         FF_WWW_2w_precompute(X, T, 4, 1, N, ND, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -217,7 +222,7 @@
     {
         FF_WWW_ct_2w_pow(R, T, EXP, 4, 1, N, ND, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -230,7 +235,7 @@
     {
         FF_WWW_nt_2w_pow(R, T, EXP, 4, 1, N, ND, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -243,7 +248,7 @@
     {
         FF_WWW_bi_precompute(X, T, 4, 3, N, ND, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -256,7 +261,7 @@
     {
         FF_WWW_bi_pow(R, T, EXP, 4, 3, N, ND, FFLEN_WWW, FFLEN_WWW);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
diff --git a/benchmark/benchtest_mpin_ZZZ.c.in b/benchmark/benchtest_mpin_ZZZ.c.in
index 1a8af0f..fdf5b4a 100644
--- a/benchmark/benchtest_mpin_ZZZ.c.in
+++ b/benchmark/benchtest_mpin_ZZZ.c.in
@@ -48,13 +48,34 @@
 
 int mpin(csprng *RNG)
 {
-    int pin,rtn;
+    int pin;
+    int rtn;
     int date=0;
-    char x[PGS_ZZZ],s[PGS_ZZZ],y[PGS_ZZZ],client_id[100],sst[G2LEN],token[2*PFS_ZZZ+1],sec[2*PFS_ZZZ+1],permit[2*PFS_ZZZ+1],xcid[2*PFS_ZZZ+1],xid[2*PFS_ZZZ+1],e[GTLEN],f[GTLEN];
-    char hcid[PFS_ZZZ],hsid[PFS_ZZZ],hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1],h[PGS_ZZZ];
-    char r[PGS_ZZZ],z[2*PFS_ZZZ+1],w[PGS_ZZZ],t[2*PFS_ZZZ+1];
-    char g1[GTLEN],g2[GTLEN];
-    char ck[AESKEY_ZZZ],sk[AESKEY_ZZZ];
+    char x[PGS_ZZZ];
+    char s[PGS_ZZZ];
+    char y[PGS_ZZZ];
+    char client_id[100];
+    char sst[G2LEN];
+    char token[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
+    char permit[2*PFS_ZZZ+1];
+    char xcid[2*PFS_ZZZ+1];
+    char xid[2*PFS_ZZZ+1];
+    char e[GTLEN];
+    char f[GTLEN];
+    char hcid[PFS_ZZZ];
+    char hsid[PFS_ZZZ];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
+    char h[PGS_ZZZ];
+    char r[PGS_ZZZ];
+    char z[2*PFS_ZZZ+1];
+    char w[PGS_ZZZ];
+    char t[2*PFS_ZZZ+1];
+    char g1[GTLEN];
+    char g2[GTLEN];
+    char ck[AESKEY_ZZZ];
+    char sk[AESKEY_ZZZ];
     octet S= {0,sizeof(s),s};
     octet X= {0,sizeof(x),x};
     octet Y= {0,sizeof(y),y};
@@ -80,14 +101,20 @@
     octet G2= {0,sizeof(g2),g2};
     octet SK= {0,sizeof(sk),sk};
     octet CK= {0,sizeof(ck),ck};
-    octet *pxID,*pxCID,*pHID,*pHTID,*pE,*pF,*pPERMIT,*prHID;
+    octet *pxID;
+    octet *pxCID;
+    octet *pHID;
+    octet *pHTID;
+    octet *pE;
+    octet *pF;
+    const octet *prHID;
     char idhex[100];
 
     int iterations;
     clock_t start;
     double elapsed;
 
-    printf("\nBechmark test MPIN - ");
+    printf("\nBenchmark test MPIN - ");
 
     printf("ZZZ Curve\n");
 
@@ -107,7 +134,7 @@
     printf("\n");
 
     OCT_toHex(&CLIENT_ID,idhex);
-    printf("Client ID= %s\n",idhex);// OCT_toHex(&CLIENT_ID); printf("\n");
+    printf("Client ID= %s\n",idhex);
 
     /* Client and Server are issued secrets by DTA */
     MPIN_ZZZ_GET_SERVER_SECRET(&S,&SST);
@@ -129,15 +156,9 @@
 
     /* MPin Protocol */
     pxID=&xID;
-    pxCID=&xCID;
     pHID=&HID;
-    pHTID=&HTID;
-    pE=&E;
-    pF=&F;
-    pPERMIT=&PERMIT;
 
     prHID=pHID;
-    pPERMIT=NULL;
     pxCID=NULL;
     pHTID=NULL;
     pE=NULL;
@@ -151,10 +172,10 @@
     start=clock();
     do
     {
-        MPIN_ZZZ_CLIENT(HASH_TYPE_ZZZ,date,&CLIENT_ID,RNG,&X,pin,&TOKEN,&SEC,pxID,pxCID,pPERMIT,NULL,timeValue,&Y);
+        MPIN_ZZZ_CLIENT(HASH_TYPE_ZZZ,date,&CLIENT_ID,RNG,&X,pin,&TOKEN,&SEC,pxID,pxCID,NULL,NULL,timeValue,&Y);
 
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -171,7 +192,7 @@
         rtn = MPIN_ZZZ_SERVER(HASH_TYPE_ZZZ,date,pHID,pHTID,&Y,&SST,pxID,pxCID,&SEC,pE,pF,&CLIENT_ID,NULL,timeValue,NULL);
 
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -235,23 +256,22 @@
 
 int main()
 {
-    int i;
-    unsigned long ran;
+    time_t ran;
 
     char raw[100];
     octet RAW= {0,sizeof(raw),raw};
     /* Crypto Strong RNG */
     csprng RNG;
 
-    time((time_t *)&ran);
+    time(&ran);
 
     /* fake random seed source */
     RAW.len=100;
-    RAW.val[0]=ran;
-    RAW.val[1]=ran>>8;
-    RAW.val[2]=ran>>16;
-    RAW.val[3]=ran>>24;
-    for (i=0; i<100; i++) RAW.val[i]=i+1;
+    RAW.val[0]=(char)ran;
+    RAW.val[1]=(char)(ran>>4);
+    RAW.val[2]=(char)(ran>>12);
+    RAW.val[3]=(char)(ran>>16);
+    for (int i=0; i<100; i++) RAW.val[i]=(char)(i+1);
 
     /* initialise strong RNG */
     CREATE_CSPRNG(&RNG,&RAW);
diff --git a/benchmark/benchtest_paillier.c.in b/benchmark/benchtest_paillier.c.in
index f10511b..31c4700 100644
--- a/benchmark/benchtest_paillier.c.in
+++ b/benchmark/benchtest_paillier.c.in
@@ -109,7 +109,7 @@
     {
         PAILLIER_KEY_PAIR(RNG, NULL, NULL,&PUB, &PRIV);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -135,7 +135,7 @@
     {
         PAILLIER_ENCRYPT(RNG, &PUB, &PTIN[0], &CT[0], NULL);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -144,14 +144,14 @@
 
     PAILLIER_ENCRYPT(RNG, &PUB, &PTIN[1], &CT[1], NULL);
 
-    // Multiple by constant
+    // Multiply by constant
     iterations=0;
     start=clock();
     do
     {
         PAILLIER_MULT(&PUB, &CT[0], &PTK[0], &CTA[0]);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -167,7 +167,7 @@
     {
         PAILLIER_ADD(&PUB, &CTA[0], &CTA[1], &CT3);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -181,7 +181,7 @@
     {
         PAILLIER_DECRYPT(&PRIV, &CT3, &PT3);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -219,7 +219,7 @@
 
 int main()
 {
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/benchmark/benchtest_pair_ZZZ.c.in b/benchmark/benchtest_pair_ZZZ.c.in
index 0be66ff..a7411e9 100644
--- a/benchmark/benchtest_pair_ZZZ.c.in
+++ b/benchmark/benchtest_pair_ZZZ.c.in
@@ -78,19 +78,19 @@
 int main()
 {
     csprng RNG;
-    unsigned long ran;
+    time_t ran;
     char pr[10];
 
     printf("Bechmark test PAIR - ZZZ Curve\n");
 
     print_system_info();
 
-    time((time_t *)&ran);
-    pr[0]=ran;
-    pr[1]=ran>>8;
-    pr[2]=ran>>16;
-    pr[3]=ran>>24;
-    for (int i=4; i<10; i++) pr[i]=i;
+    time(&ran);
+    pr[0]=(char)ran;
+    pr[1]=(char)(ran>>4);
+    pr[2]=(char)(ran>>12);
+    pr[3]=(char)(ran>>16);
+    for (int i=4; i<10; i++) pr[i]=(char)i;
 
     RAND_seed(&RNG,10,pr);
 
@@ -98,22 +98,30 @@
     clock_t start;
     double elapsed;
 
-    ECP_ZZZ P,G;
+    ECP_ZZZ P;
+    ECP_ZZZ G;
 #if CURVE_SECURITY_ZZZ == 128
-    ECP2_ZZZ Q,W;
-    FP12_YYY g,w;
+    ECP2_ZZZ Q;
+    ECP2_ZZZ W;
+    FP12_YYY g;
+    FP12_YYY w;
     FP4_YYY cm;
 #elif CURVE_SECURITY_ZZZ == 192
-    ECP4_ZZZ Q,W;
-    FP24_YYY g,w;
+    ECP4_ZZZ Q;
+    ECP4_ZZZ W;
+    FP24_YYY g;
+    FP24_YYY w;
     FP8_YYY cm;
 #elif CURVE_SECURITY_ZZZ == 256
-    ECP8_ZZZ Q,W;
-    FP48_YYY g,w;
+    ECP8_ZZZ Q;
+    ECP8_ZZZ W;
+    FP48_YYY g;
+    FP48_YYY w;
     FP16_YYY cm;
 #endif
 
-    BIG_XXX s,r;
+    BIG_XXX s;
+    BIG_XXX r;
     printf("\nTesting/Timing ZZZ Pairings\n");
 
     ECP_ZZZ_generator(&G);
@@ -137,7 +145,7 @@
         PAIR_ZZZ_G1mul(&P,s);
 
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -163,7 +171,7 @@
         PAIR_ZZZ_G2mul(&Q,s);
 
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -191,7 +199,7 @@
         PAIR_ZZZ_GTpow(&g,s);
 
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -206,7 +214,7 @@
     {
         GT_ZZZ_compow(&cm,&g,s,r);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -219,7 +227,7 @@
     {
         PAIR_ZZZ_ate(&w,&Q,&P);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -233,7 +241,7 @@
         GT_ZZZ_copy(&g,&w);
         PAIR_ZZZ_fexp(&g);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
diff --git a/benchmark/benchtest_rsa_WWW.c.in b/benchmark/benchtest_rsa_WWW.c.in
index 4e803ed..4aa0014 100644
--- a/benchmark/benchtest_rsa_WWW.c.in
+++ b/benchmark/benchtest_rsa_WWW.c.in
@@ -37,27 +37,30 @@
 {
     csprng RNG;
 
-    int i,iterations;
+    int i;
+    int iterations;
     clock_t start;
     double elapsed;
     char pr[10];
 
-    unsigned long ran;
+    time_t ran;
     rsa_public_key_WWW pub;
     rsa_private_key_WWW priv;
-    char m[RFS_WWW],d[RFS_WWW],c[RFS_WWW];
+    char m[RFS_WWW];
+    char d[RFS_WWW];
+    char c[RFS_WWW];
     octet M= {0,sizeof(m),m};
     octet D= {0,sizeof(d),d};
     octet C= {0,sizeof(c),c};
 
     print_system_info();
 
-    time((time_t *)&ran);
-    pr[0]=ran;
-    pr[1]=ran>>8;
-    pr[2]=ran>>16;
-    pr[3]=ran>>24;
-    for (i=4; i<10; i++) pr[i]=i;
+    time(&ran);
+    pr[0]=(char)ran;
+    pr[1]=(char)(ran>>4);
+    pr[2]=(char)(ran>>12);
+    pr[3]=(char)(ran>>16);
+    for (i=4; i<10; i++) pr[i]=(char)i;
     RAND_seed(&RNG,10,pr);
 
     printf("Generating %d-bit RSA public/private key pair\n",FFLEN_WWW*BIGBITS_XXX);
@@ -68,17 +71,15 @@
     {
         RSA_WWW_KEY_PAIR(&RNG,65537,&priv,&pub,NULL,NULL);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
     printf("RSA gen - %8d iterations  ",iterations);
     printf(" %8.2lf ms per iteration\n",elapsed);
 
-    //FF_randomnum(plain,pub.n,&RNG,FFLEN);
-
     M.len=RFS_WWW;
-    for (i=0; i<RFS_WWW; i++) M.val[i]=i%128;
+    for (i=0; i<RFS_WWW; i++) M.val[i]=(char)(i%128);
 
     iterations=0;
     start=clock();
@@ -86,7 +87,7 @@
     {
         RSA_WWW_ENCRYPT(&pub,&M,&C);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
@@ -99,7 +100,7 @@
     {
         RSA_WWW_DECRYPT(&priv,&C,&D);
         iterations++;
-        elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
+        elapsed=(double)(clock()-start)/(double)CLOCKS_PER_SEC;
     }
     while (elapsed<MIN_TIME || iterations<MIN_ITERS);
     elapsed=1000.0*elapsed/iterations;
diff --git a/cmake/AMCLParameters.cmake b/cmake/AMCLParameters.cmake
index b9f8a93..09f0940 100644
--- a/cmake/AMCLParameters.cmake
+++ b/cmake/AMCLParameters.cmake
@@ -34,65 +34,65 @@
 #######################################
 # AMCL Curve parameters
 #######################################
-set(AMCL_CURVE_FIELDS        TB  TF         TC         NB  BASE NBT M8 MT                   CT          PF  ST     SX        CS )
-set(AMCL_CURVE_64_ED25519    256 25519      ED25519    32  56   255 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_64_C25519     256 25519      C25519     32  56   255 5  PSEUDO_MERSENNE      MONTGOMERY  NOT .      .         128)
-set(AMCL_CURVE_64_NIST256    256 NIST256    NIST256    32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_BRAINPOOL  256 BRAINPOOL  BRAINPOOL  32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_ANSSI      256 ANSSI      ANSSI      32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_HIFIVE     336 HIFIVE     HIFIVE     42  60   336 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_64_GOLDILOCKS 448 GOLDILOCKS GOLDILOCKS 56  58   448 7  GENERALISED_MERSENNE EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_64_NIST384    384 NIST384    NIST384    48  56   384 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_C41417     416 C41417     C41417     52  60   414 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_64_NIST521    528 NIST521    NIST521    66  60   521 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_NUMS256W   256 256PMW     NUMS256W   32  56   256 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_NUMS256E   256 256PME     NUMS256E   32  56   256 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_64_NUMS384W   384 384PM      NUMS384W   48  56   384 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_NUMS384E   384 384PM      NUMS384E   48  56   384 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_64_NUMS512W   512 512PM      NUMS512W   64  56   512 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_NUMS512E   512 512PM      NUMS512E   64  56   512 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_64_SECP256K1  256 SECP256K1  SECP256K1  32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_64_BN254      256 BN254      BN254      32  56   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_64_BN254CX    256 BN254CX    BN254CX    32  56   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_64_BLS381     384 BLS381     BLS381     48  58   381 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_64_BLS383     384 BLS383     BLS383     48  58   383 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 128)
-set(AMCL_CURVE_64_BLS24      480 BLS24      BLS24      60  56   479 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 192)
-set(AMCL_CURVE_64_BLS48      560 BLS48      BLS48      70  58   556 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 256)
-set(AMCL_CURVE_64_FP256BN    256 FP256BN    FP256BN    32  56   256 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_64_FP512BN    512 FP512BN    FP512BN    64  60   512 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE POSITIVEX 128)
-set(AMCL_CURVE_64_BLS461     464 BLS461     BLS461     58  60   461 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128)
-#  (                         TB  TF         TC         NB  BASE NBT M8 MT                   CT          PF  ST     SX        CS )
-set(AMCL_CURVE_32_ED25519    256 25519      ED25519    32  29   255 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_32_C25519     256 25519      C25519     32  29   255 5  PSEUDO_MERSENNE      MONTGOMERY  NOT .      .         128)
-set(AMCL_CURVE_32_NIST256    256 NIST256    NIST256    32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_BRAINPOOL  256 BRAINPOOL  BRAINPOOL  32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_ANSSI      256 ANSSI      ANSSI      32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_HIFIVE     336 HIFIVE     HIFIVE     42  29   336 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_32_GOLDILOCKS 448 GOLDILOCKS GOLDILOCKS 56  29   448 7  GENERALISED_MERSENNE EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_32_NIST384    384 NIST384    NIST384    48  29   384 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_C41417     416 C41417     C41417     52  29   414 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_32_NIST521    528 NIST521    NIST521    66  28   521 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_NUMS256W   256 256PMW     NUMS256W   32  28   256 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_NUMS256E   256 256PME     NUMS256E   32  29   256 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_32_NUMS384W   384 384PM      NUMS384W   48  29   384 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_NUMS384E   384 384PM      NUMS384E   48  29   384 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_32_NUMS512W   512 512PM      NUMS512W   64  29   512 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_NUMS512E   512 512PM      NUMS512E   64  29   512 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_32_SECP256K1  256 SECP256K1  SECP256K1  32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128)
-set(AMCL_CURVE_32_BN254      256 BN254      BN254      32  28   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_32_BN254CX    256 BN254CX    BN254CX    32  28   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_32_BLS381     384 BLS381     BLS381     48  29   381 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_32_BLS383     384 BLS383     BLS383     48  29   383 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 128)
-set(AMCL_CURVE_32_BLS24      480 BLS24      BLS24      60  29   479 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 192)
-set(AMCL_CURVE_32_BLS48      560 BLS48      BLS48      70  29   556 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 256)
-set(AMCL_CURVE_32_FP256BN    256 FP256BN    FP256BN    32  28   256 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_32_FP512BN    512 FP512BN    FP512BN    64  29   512 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE POSITIVEX 128)
-set(AMCL_CURVE_32_BLS461     464 BLS461     BLS461     58  28   461 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128)
-#  (                         TB  TF         TC         NB  BASE NBT M8 MT                   CT          PF  ST     SX        CS )
-set(AMCL_CURVE_16_ED25519    256 25519      ED25519    32  13   255 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_16_NUMS256E   256 256PME     NUMS256E   32  13   256 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128)
-set(AMCL_CURVE_16_BN254      256 BN254      BN254      32  13   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128)
-set(AMCL_CURVE_16_BN254CX    256 BN254CX    BN254CX    32  13   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128)
+set(AMCL_CURVE_FIELDS        TB  TF         TC         NB  BASE NBT M8 MT                   CT          PF  ST     SX        CS  AB)
+set(AMCL_CURVE_64_ED25519    256 25519      ED25519    32  56   255 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_64_C25519     256 25519      C25519     32  56   255 5  PSEUDO_MERSENNE      MONTGOMERY  NOT .      .         128 . )
+set(AMCL_CURVE_64_NIST256    256 NIST256    NIST256    32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_BRAINPOOL  256 BRAINPOOL  BRAINPOOL  32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_ANSSI      256 ANSSI      ANSSI      32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_HIFIVE     336 HIFIVE     HIFIVE     42  60   336 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_64_GOLDILOCKS 448 GOLDILOCKS GOLDILOCKS 56  58   448 7  GENERALISED_MERSENNE EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_64_NIST384    384 NIST384    NIST384    48  56   384 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_C41417     416 C41417     C41417     52  60   414 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_64_NIST521    528 NIST521    NIST521    66  60   521 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_NUMS256W   256 256PMW     NUMS256W   32  56   256 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_NUMS256E   256 256PME     NUMS256E   32  56   256 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_64_NUMS384W   384 384PM      NUMS384W   48  56   384 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_NUMS384E   384 384PM      NUMS384E   48  56   384 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_64_NUMS512W   512 512PM      NUMS512W   64  56   512 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_NUMS512E   512 512PM      NUMS512E   64  56   512 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_64_SECP256K1  256 SECP256K1  SECP256K1  32  56   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_64_BN254      256 BN254      BN254      32  56   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128 . )
+set(AMCL_CURVE_64_BN254CX    256 BN254CX    BN254CX    32  56   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128 . )
+set(AMCL_CURVE_64_BLS381     384 BLS381     BLS381     48  58   381 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128 65)
+set(AMCL_CURVE_64_BLS383     384 BLS383     BLS383     48  58   383 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 128 . )
+set(AMCL_CURVE_64_BLS24      480 BLS24      BLS24      60  56   479 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 192 . )
+set(AMCL_CURVE_64_BLS48      560 BLS48      BLS48      70  58   556 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 256 . )
+set(AMCL_CURVE_64_FP256BN    256 FP256BN    FP256BN    32  56   256 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE NEGATIVEX 128 . )
+set(AMCL_CURVE_64_FP512BN    512 FP512BN    FP512BN    64  60   512 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE POSITIVEX 128 . )
+set(AMCL_CURVE_64_BLS461     464 BLS461     BLS461     58  60   461 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128 . )
+#  (                         TB  TF         TC         NB  BASE NBT M8 MT                   CT          PF  ST     SX        CS  AB)
+set(AMCL_CURVE_32_ED25519    256 25519      ED25519    32  29   255 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_32_C25519     256 25519      C25519     32  29   255 5  PSEUDO_MERSENNE      MONTGOMERY  NOT .      .         128 . )
+set(AMCL_CURVE_32_NIST256    256 NIST256    NIST256    32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_BRAINPOOL  256 BRAINPOOL  BRAINPOOL  32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_ANSSI      256 ANSSI      ANSSI      32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_HIFIVE     336 HIFIVE     HIFIVE     42  29   336 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_32_GOLDILOCKS 448 GOLDILOCKS GOLDILOCKS 56  29   448 7  GENERALISED_MERSENNE EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_32_NIST384    384 NIST384    NIST384    48  29   384 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_C41417     416 C41417     C41417     52  29   414 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_32_NIST521    528 NIST521    NIST521    66  28   521 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_NUMS256W   256 256PMW     NUMS256W   32  28   256 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_NUMS256E   256 256PME     NUMS256E   32  29   256 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_32_NUMS384W   384 384PM      NUMS384W   48  29   384 3  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_NUMS384E   384 384PM      NUMS384E   48  29   384 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_32_NUMS512W   512 512PM      NUMS512W   64  29   512 7  PSEUDO_MERSENNE      WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_NUMS512E   512 512PM      NUMS512E   64  29   512 7  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_32_SECP256K1  256 SECP256K1  SECP256K1  32  28   256 7  NOT_SPECIAL          WEIERSTRASS NOT .      .         128 . )
+set(AMCL_CURVE_32_BN254      256 BN254      BN254      32  28   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128 . )
+set(AMCL_CURVE_32_BN254CX    256 BN254CX    BN254CX    32  28   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128 . )
+set(AMCL_CURVE_32_BLS381     384 BLS381     BLS381     48  29   381 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128 65)
+set(AMCL_CURVE_32_BLS383     384 BLS383     BLS383     48  29   383 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 128 . )
+set(AMCL_CURVE_32_BLS24      480 BLS24      BLS24      60  29   479 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 192 . )
+set(AMCL_CURVE_32_BLS48      560 BLS48      BLS48      70  29   556 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE POSITIVEX 256 . )
+set(AMCL_CURVE_32_FP256BN    256 FP256BN    FP256BN    32  28   256 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE NEGATIVEX 128 . )
+set(AMCL_CURVE_32_FP512BN    512 FP512BN    FP512BN    64  29   512 3  NOT_SPECIAL          WEIERSTRASS BN  M_TYPE POSITIVEX 128 . )
+set(AMCL_CURVE_32_BLS461     464 BLS461     BLS461     58  28   461 3  NOT_SPECIAL          WEIERSTRASS BLS M_TYPE NEGATIVEX 128 . )
+#  (                         TB  TF         TC         NB  BASE NBT M8 MT                   CT          PF  ST     SX        CS  AB)
+set(AMCL_CURVE_16_ED25519    256 25519      ED25519    32  13   255 5  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_16_NUMS256E   256 256PME     NUMS256E   32  13   256 3  PSEUDO_MERSENNE      EDWARDS     NOT .      .         128 . )
+set(AMCL_CURVE_16_BN254      256 BN254      BN254      32  13   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128 . )
+set(AMCL_CURVE_16_BN254CX    256 BN254CX    BN254CX    32  13   254 3  NOT_SPECIAL          WEIERSTRASS BN  D_TYPE NEGATIVEX 128 . )
 
 #######################################
 # AMCL RSA parameters
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 7c5445a..df41320 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -2509,15 +2509,6 @@
 # The default value is: NO.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
 DOT_MULTI_TARGETS      = NO
 
 # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index d22cffe..8ffcc97 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -50,12 +50,12 @@
     amcl_configure_file_curve(example_bls_ZZZ.c.in example_bls_${TC}.c "${curve}" example_bls_${TC}_GEN_SRCS)
     add_executable(example_bls_${TC} ${example_bls_${TC}_GEN_SRCS})
     target_link_libraries(example_bls_${TC} PRIVATE amcl_bls_${TC})
-    
+
     amcl_configure_file_curve(example_bls_sss_ZZZ.c.in example_bls_sss_${TC}.c "${curve}" example_bls_sss_${TC}_GEN_SRCS)
     add_executable(example_bls_sss_${TC} ${example_bls_sss_${TC}_GEN_SRCS})
     target_link_libraries(example_bls_sss_${TC} PRIVATE amcl_bls_${TC})
   endif()
-  
+
 endforeach()
 
 foreach(level ${AMCL_RSA})
diff --git a/examples/example_bls_ZZZ.c.in b/examples/example_bls_ZZZ.c.in
index 27111d6..3b60f56 100644
--- a/examples/example_bls_ZZZ.c.in
+++ b/examples/example_bls_ZZZ.c.in
@@ -21,7 +21,7 @@
 
   Build executable after installation:
 
-  1. Change headers;
+  1. Change headers
 
     #include "bls_ZZZ.h" -> #include <amcl/bls_ZZZ.h>
 
@@ -274,7 +274,7 @@
     printf("%d bit build\n",CHUNK);
 #endif
 
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/examples/example_bls_sss_ZZZ.c.in b/examples/example_bls_sss_ZZZ.c.in
index b9c0aeb..3c15705 100644
--- a/examples/example_bls_sss_ZZZ.c.in
+++ b/examples/example_bls_sss_ZZZ.c.in
@@ -21,7 +21,7 @@
 
   Build executable after installation:
 
-  1. Change headers;
+  1. Change headers
 
     #include "bls_ZZZ.h" -> #include <amcl/bls_ZZZ.h>
 
@@ -221,7 +221,7 @@
     printf("%d bit build\n",CHUNK);
 #endif
 
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/examples/example_dvs_ZZZ.c.in b/examples/example_dvs_ZZZ.c.in
index d706595..3888885 100644
--- a/examples/example_dvs_ZZZ.c.in
+++ b/examples/example_dvs_ZZZ.c.in
@@ -50,7 +50,9 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256+G2LEN];
     octet ID = {0,sizeof(id),id};
@@ -63,13 +65,16 @@
     char hm[PFS_ZZZ];
     octet HM= {0,sizeof(hm), hm};
 
-    char x[PGS_ZZZ],y1[PGS_ZZZ],y2[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y1[PGS_ZZZ];
+    char y2[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y1= {0,sizeof(y1),y1};
     octet Y2= {0,sizeof(y2),y2};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -78,18 +83,23 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Client Public Key and z */
-    char z[PGS_ZZZ], pa[G2LEN];
+    char z[PGS_ZZZ];
+    char pa[G2LEN];
     octet Z= {0,sizeof(z),z};
     octet Pa= {0,sizeof(pa),pa};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
@@ -120,7 +130,7 @@
 
     /* unrandom seed value! */
     SEED.len=32;
-    for (i=0; i<32; i++) SEED.val[i]=i+1;
+    for (int i=0; i<32; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
@@ -244,7 +254,7 @@
     /* Client: Sign message */
     TimeValue = GET_TIME();
     printf("TimeValue %d \n", TimeValue);
-    char* message = "sign this message";
+    const char* message = "sign this message";
     OCT_jstring(&M,message);
     HASH_ID(HASH_TYPE_ZZZ,&M,&HM);
     printf("HM: 0x");
diff --git a/examples/example_ecdh_ZZZ.c.in b/examples/example_ecdh_ZZZ.c.in
index 1bbfc29..2691db3 100644
--- a/examples/example_ecdh_ZZZ.c.in
+++ b/examples/example_ecdh_ZZZ.c.in
@@ -29,13 +29,22 @@
 
 int ecdh(csprng *RNG)
 {
-    int i,res;
+    int i;
+    int res;
     char *pp="M0ng00se";
     /* These octets are automatically protected against buffer overflow attacks */
     /* Note salt must be big enough to include an appended word */
     /* Note ECIES ciphertext C must be big enough to include at least 1 appended block */
     /* Recall EFS_ZZZ is field size in bytes. So EFS_ZZZ=32 for 256-bit curve */
-    char s0[2*EGS_ZZZ],s1[EGS_ZZZ],w0[2*EFS_ZZZ+1],w1[2*EFS_ZZZ+1],z0[EFS_ZZZ],z1[EFS_ZZZ],key[AESKEY_ZZZ],salt[40],pw[40];
+    char s0[2*EGS_ZZZ];
+    char s1[EGS_ZZZ];
+    char w0[2*EFS_ZZZ+1];
+    char w1[2*EFS_ZZZ+1];
+    char z0[EFS_ZZZ];
+    char z1[EFS_ZZZ];
+    char key[AESKEY_ZZZ];
+    char salt[40];
+    char pw[40];
     octet S0= {0,sizeof(s0),s0};
     octet S1= {0,sizeof(s1),s1};
     octet W0= {0,sizeof(w0),w0};
@@ -47,7 +56,7 @@
     octet PW= {0,sizeof(pw),pw};
 
     SALT.len=8;
-    for (i=0; i<8; i++) SALT.val[i]=i+1; // set Salt
+    for (i=0; i<8; i++) SALT.val[i]=(char)(i+1); // set Salt
 
     printf("Alice's Passphrase= %s\n",pp);
 
@@ -107,7 +116,14 @@
 
 #if CURVETYPE_ZZZ != MONTGOMERY
 
-    char ds[EGS_ZZZ],p1[30],p2[30],v[2*EFS_ZZZ+1],m[32],c[64],t[32],cs[EGS_ZZZ];
+    char ds[EGS_ZZZ];
+    char p1[30];
+    char p2[30];
+    char v[2*EFS_ZZZ+1];
+    char m[32];
+    char c[64];
+    char t[32];
+    char cs[EGS_ZZZ];
     octet DS= {0,sizeof(ds),ds};
     octet CS= {0,sizeof(cs),cs};
     octet P1= {0,sizeof(p1),p1};
@@ -130,7 +146,7 @@
     P2.val[3]=0x3;
 
     M.len=17;
-    for (i=0; i<=16; i++) M.val[i]=i;
+    for (i=0; i<=16; i++) M.val[i]=(char)i;
 
     ECP_ZZZ_ECIES_ENCRYPT(HASH_TYPE_ZZZ,&P1,&P2,RNG,&W1,&M,12,&V,&C,&T);
 
@@ -203,7 +219,6 @@
 
 int main()
 {
-    int i;
     unsigned long ran;
 
     char raw[100];
@@ -215,11 +230,11 @@
 
     /* fake random seed source */
     RAW.len=100;
-    RAW.val[0]=ran;
-    RAW.val[1]=ran>>8;
-    RAW.val[2]=ran>>16;
-    RAW.val[3]=ran>>24;
-    for (i=0; i<100; i++) RAW.val[i]=i+1;
+    RAW.val[0]=(char)ran;
+    RAW.val[1]=(char)(ran>>8);
+    RAW.val[2]=(char)(ran>>16);
+    RAW.val[3]=(char)(ran>>24);
+    for (int i=0; i<100; i++) RAW.val[i]=(char)(i+1);
 
     /* initialise strong RNG */
     CREATE_CSPRNG(&RNG,&RAW);
diff --git a/examples/example_mpin_ZZZ.c.in b/examples/example_mpin_ZZZ.c.in
index 91e78de..f27d276 100644
--- a/examples/example_mpin_ZZZ.c.in
+++ b/examples/example_mpin_ZZZ.c.in
@@ -50,25 +50,48 @@
 #endif
 #define GTLEN 3*G2LEN
 
-//#define PERMITS  /* for time permits ON or OFF */
+//#define PERMITS   //for time permits ON or OFF
 #define PINERROR /* For PIN ERROR detection ON or OFF */
 #define FULL     /* for M-Pin Full or M-Pin regular */
-//#define SINGLE_MPIN_PASS /* SINGLE MPIN_PASS M-Pin */
+//#define SINGLE_MPIN_PASS //SINGLE MPIN_PASS M-Pin
 
 int mpin(csprng *RNG)
 {
-    int pin,pin2,rtn,err;
+    int pin;
+    int pin2;
+    int rtn;
+    int err;
 #ifdef PERMITS
     int date=today();
 #else
     int date=0;
 #endif
-    char x[PGS_ZZZ],s[PGS_ZZZ],y[PGS_ZZZ],client_id[100],sst[G2LEN],token[2*PFS_ZZZ+1],sec[2*PFS_ZZZ+1],permit[2*PFS_ZZZ+1],xcid[2*PFS_ZZZ+1],xid[2*PFS_ZZZ+1],e[GTLEN],f[GTLEN];
-    char hcid[PFS_ZZZ],hsid[PFS_ZZZ],hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1],h[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char s[PGS_ZZZ];
+    char y[PGS_ZZZ];
+    char client_id[100];
+    char sst[G2LEN];
+    char token[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
+    char permit[2*PFS_ZZZ+1];
+    char xcid[2*PFS_ZZZ+1];
+    char xid[2*PFS_ZZZ+1];
+    char e[GTLEN];
+    char f[GTLEN];
+    char hcid[PFS_ZZZ];
+    char hsid[PFS_ZZZ];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
+    char h[PGS_ZZZ];
 #ifdef FULL
-    char r[PGS_ZZZ],z[2*PFS_ZZZ+1],w[PGS_ZZZ],t[2*PFS_ZZZ+1];
-    char g1[GTLEN],g2[GTLEN];
-    char ck[AESKEY_ZZZ],sk[AESKEY_ZZZ];
+    char r[PGS_ZZZ];
+    char z[2*PFS_ZZZ+1];
+    char w[PGS_ZZZ];
+    char t[2*PFS_ZZZ+1];
+    char g1[GTLEN];
+    char g2[GTLEN];
+    char ck[AESKEY_ZZZ];
+    char sk[AESKEY_ZZZ];
 #endif
     octet S= {0,sizeof(s),s};
     octet X= {0,sizeof(x),x};
@@ -97,7 +120,14 @@
     octet SK= {0,sizeof(sk),sk};
     octet CK= {0,sizeof(ck),ck};
 #endif
-    octet *pxID,*pxCID,*pHID,*pHTID,*pE,*pF,*pPERMIT,*prHID;
+    octet *pxID;
+    octet *pxCID;
+    octet *pHID;
+    octet *pHTID;
+    octet *pE;
+    octet *pF;
+    const octet *pPERMIT;
+    const octet *prHID;
     char idhex[100];
 
     /* Trusted Authority set-up */
@@ -114,7 +144,7 @@
     printf("\n");
 
     OCT_toHex(&CLIENT_ID,idhex);
-    printf("Client ID= %s\n",idhex);// OCT_toHex(&CLIENT_ID); printf("\n");
+    printf("Client ID= %s\n",idhex);
 
     /* Client and Server are issued secrets by DTA */
     MPIN_ZZZ_GET_SERVER_SECRET(&S,&SST);
@@ -168,7 +198,8 @@
 
     /* Client enters PIN */
     printf("\nPIN= ");
-    if(scanf("%d",&pin)) {};
+    while(! scanf("%d",&pin))
+        printf("scan error");
     /* to avoid silly compile error */
     getchar();
 
@@ -189,18 +220,16 @@
     */
 
     pxID=&xID;
-    pxCID=&xCID;
     pHID=&HID;
-    pHTID=&HTID;
-    pE=&E;
-    pF=&F;
-    pPERMIT=&PERMIT;
 
 #ifdef PERMITS
     prHID=pHTID;
+    pHTID=&HTID;
+    pxCID=&xCID;
+    pPERMIT=&PERMIT;
+
 #ifndef PINERROR
     pxID=NULL;
-//   pHID=NULL;  //new
 #endif
 #else
     prHID=pHID;
@@ -211,6 +240,9 @@
 #ifndef PINERROR
     pE=NULL;
     pF=NULL;
+#else
+    pE=&E;
+    pF=&F;
 #endif
 
 #ifdef SINGLE_MPIN_PASS
@@ -344,7 +376,7 @@
 
 int main()
 {
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/examples/example_paillier.c b/examples/example_paillier.c
index 98eebc6..e024af6 100644
--- a/examples/example_paillier.c
+++ b/examples/example_paillier.c
@@ -205,7 +205,7 @@
 
 int main()
 {
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/examples/example_rsa_WWW.c.in b/examples/example_rsa_WWW.c.in
index 8d03d05..21c1f22 100644
--- a/examples/example_rsa_WWW.c.in
+++ b/examples/example_rsa_WWW.c.in
@@ -26,7 +26,11 @@
 
 int rsa(csprng *RNG)
 {
-    char m[RFS_WWW],ml[RFS_WWW],c[RFS_WWW],e[RFS_WWW],s[RFS_WWW];
+    char m[RFS_WWW];
+    char ml[RFS_WWW];
+    char c[RFS_WWW];
+    char e[RFS_WWW];
+    char s[RFS_WWW];
     rsa_public_key_WWW pub;
     rsa_private_key_WWW priv;
 
@@ -81,7 +85,6 @@
 
 int main()
 {
-    int i;
     unsigned long ran;
 
     char raw[100];
@@ -91,11 +94,11 @@
     time((time_t *)&ran);
 
     RAW.len=100;				/* fake random seed source */
-    RAW.val[0]=ran;
-    RAW.val[1]=ran>>8;
-    RAW.val[2]=ran>>16;
-    RAW.val[3]=ran>>24;
-    for (i=0; i<100; i++) RAW.val[i]=i+1;
+    RAW.val[0]=(char)ran;
+    RAW.val[1]=(char)(ran>>8);
+    RAW.val[2]=(char)(ran>>16);
+    RAW.val[3]=(char)(ran>>24);
+    for (int i=0; i<100; i++) RAW.val[i]=(char)(i+1);
 
     CREATE_CSPRNG(&RNG,&RAW);   /* initialise strong RNG */
 
diff --git a/include/amcl.h.in b/include/amcl.h.in
index ea9175c..8eda4c4 100644
--- a/include/amcl.h.in
+++ b/include/amcl.h.in
@@ -98,6 +98,7 @@
     int len;           /**< Hash length in bytes */
 } sha3;
 
+
 #define SHA256 32 /**< SHA-256 hashing */
 #define SHA384 48 /**< SHA-384 hashing */
 #define SHA512 64 /**< SHA-512 hashing */
@@ -110,6 +111,21 @@
 #define SHAKE128 16 /**< SHAKE128   hash */
 #define SHAKE256 32 /**< SHAKE256 hash */
 
+#define SHA256_HASH_SIZE  32
+#define SHA256_BLOCK_SIZE 64
+// Return codes for HMAC
+#define SUCCESS                 0x00000000
+#define ERR_NULLPOINTER_HMAC    0x00000001
+#define ERR_KEYSIZE_HMAC        0x00000002
+#define ERR_BADARGLEN_HMAC      0x00000003
+/**
+ * @brief HMAC-SHA256 function instance.
+ */
+typedef struct {
+    hash256 sha256_ctx; 			/**< SHA-256 function instance */
+    char 	k0[SHA256_BLOCK_SIZE]; 	/**< The key after any required pre-processing */
+} hmac_sha256;
+
 
 /* NewHope parameters */
 
@@ -139,7 +155,7 @@
 #define CTR8  37 /**< Counter Mode - 8 bytes */
 #define CTR16 45 /**< Counter Mode - 16 bytes */
 
-#define uchar unsigned char  /**<  Unsigned char */
+typedef unsigned char uchar;  /**<  Unsigned char */
 
 /**
 	@brief AES instance
@@ -219,12 +235,12 @@
  *
 	@param O Octet to be output
  */
-extern void OCT_output(octet *O);
+extern void OCT_output(const octet *O);
 /**	@brief Formats and outputs an octet to the console as a character string
  *
 	@param O Octet to be output
  */
-extern void OCT_output_string(octet *O);
+extern void OCT_output_string(const octet *O);
 /**	@brief Wipe clean an octet
  *
 	@param O Octet to be cleaned
@@ -237,7 +253,7 @@
 	@param P second Octet to be compared
 	@return 1 if equal, else 0
  */
-extern int  OCT_comp(octet *O,octet *P);
+extern int  OCT_comp(const octet *O,const octet *P);
 /**	@brief Compare first n bytes of two octets
  *
     Terminates early if O.len > n or P.len > n
@@ -246,14 +262,14 @@
 	@param n number of bytes to compare
 	@return 1 if equal, else 0
  */
-extern int  OCT_ncomp(octet *O,octet *P,int n);
+extern int  OCT_ncomp(const octet *O,const octet *P,int n);
 /**	@brief Join from a C string to end of an octet
  *
 	Truncates if there is no room
 	@param O Octet to be written to
 	@param s zero terminated string to be joined to octet
  */
-extern void OCT_jstring(octet *O,char *s);
+extern void OCT_jstring(octet *O,const char *s);
 /**	@brief Join bytes to end of an octet
  *
 	Truncates if there is no room
@@ -261,7 +277,7 @@
 	@param s bytes to be joined to end of octet
 	@param n number of bytes to join
  */
-extern void OCT_jbytes(octet *O,char *s,int n);
+extern void OCT_jbytes(octet *O,const char *s,int n);
 /**	@brief Join single byte to end of an octet, repeated n times
  *
 	Truncates if there is no room
@@ -276,13 +292,13 @@
 	@param O Octet to be written to
 	@param P Octet to be joined to the end of O
  */
-extern void OCT_joctet(octet *O,octet *P);
+extern void OCT_joctet(octet *O,const octet *P);
 /**	@brief XOR common bytes of a pair of Octets
  *
 	@param O Octet - on exit = O xor P
 	@param P Octet to be xored into O
  */
-extern void OCT_xor(octet *O,octet *P);
+extern void OCT_xor(octet *O,const octet *P);
 /**	@brief reset Octet to zero length
  *
 	@param O Octet to be emptied
@@ -300,21 +316,21 @@
 	@param b zero terminated byte array to take base64 conversion
 	@param O Octet to be converted
  */
-extern void OCT_tobase64(char *b,octet *O);
+extern void OCT_tobase64(char *b,const octet *O);
 /**	@brief Populate an Octet from base64 number
  *
  	@param O Octet to be populated
 	@param b zero terminated base64 string
 
  */
-extern void OCT_frombase64(octet *O,char *b);
+extern void OCT_frombase64(octet *O,const char *b);
 /**	@brief Copy one Octet into another
  *
  	@param O Octet to be copied to
 	@param P Octet to be copied from
 
  */
-extern void OCT_copy(octet *O,octet *P);
+extern void OCT_copy(octet *O,const octet *P);
 /**	@brief XOR every byte of an octet with input m
  *
  	@param O Octet
@@ -361,21 +377,20 @@
 	@param dst Octet
 	@param src Hex string to be converted
  */
-extern void OCT_fromHex(octet *dst,char *src);
+extern void OCT_fromHex(octet *dst,const char *src);
 /**	@brief Convert an Octet to printable hex number
  *
     Truncates if there is no room
 	@param dst hex value
 	@param src Octet to be converted
  */
-extern void OCT_toHex(octet *src,char *dst);
+extern void OCT_toHex(const octet *src,char *dst);
 /**	@brief Convert an Octet to string
  *
 	@param dst string value
 	@param src Octet to be converted
  */
-extern void OCT_toStr(octet *src,char *dst);
-
+extern void OCT_toStr(const octet *src,char *dst);
 
 
 /* Hash function */
@@ -396,6 +411,91 @@
 	@param h is the output 32-byte hash
  */
 extern void HASH256_hash(hash256 *H,char *h);
+/**
+ * @brief One-shot API for SHA-256
+ * 
+ * @param digest The output 32-byte hash
+ * @param in     The input to hash
+ * @param inlen  The input length (in bytes)
+ */
+extern void HASH256_oneshot(char *digest,
+                    const char *in, int inlen);
+
+/* HMAC functions */
+/**	@brief Initialise an instance of HMAC-SHA256
+ *
+ * @param  hmac_sha256_ctx An instance of HMAC-SHA256
+ * @param  key             Secret key
+ * @param  keylen          Key length in bytes
+ * 
+ * @return	0 if success, error code otherwise
+ */
+extern int HMAC_SHA256_init(hmac_sha256 *hmac_sha256_ctx,
+                    		const char* key,    int keylen);
+/**	@brief Update an instance of HMAC-SHA256 by adding data to authenticate
+ *
+ * @param  sha256_ctx An instance of SHA256
+ * @param  in         Input data to authenticate
+ * @param  inlen      Input length in bytes
+ * 
+ * @return	0 if success, error code otherwise
+ */
+extern int HMAC_SHA256_update(hash256 *sha256_ctx,
+                        	const char* in,     int inlen);
+/**	@brief Finalize an instance of HMAC-SHA256 by producing the output tag
+ *
+ * @param  hmac_sha256_ctx  An instance of HMAC-SHA256
+ * @param  out              MAC
+ * @param  outlen           MAC length in bytes (fixed at 32) 
+ * 
+ * @return	0 if success, error code otherwise
+ */
+extern int HMAC_SHA256_final(hmac_sha256 *hmac_sha256_ctx,
+							char* out, int outlen);
+/**	@brief Generate message authentication code using HMAC-SHA256 (one-shot)
+ *
+ * @param  out      MAC
+ * @param  outlen   MAC length in bytes (fixed at 32) 
+ * @param  key      Secret key
+ * @param  keylen   Key length in bytes
+ * @param  in       Input data to authenticate
+ * @param  inlen    Input length in bytes
+ * 
+ * @return	0 if success, error code otherwise
+ */
+extern int HMAC_SHA256_oneshot(char* out, 			int outlen,
+                				const char* key, 	int keylen,
+                				const char* in, 	int inlen);
+
+/* HKDf functions */
+/**	@brief Takes the input keying material and extracts from it a fixed-length
+ * pseudorandom key K as defined in RFC5869.
+ *
+ * @param  prk      Output pseudorandom key
+ * @param  salt     Optional salt value (set to HashLen zeros if omitted)
+ * @param  saltlen  Salt length in bytes
+ * @param  ikm      Input Keying Material
+ * @param  ikmlen   IKM length in bytes
+ * 
+ * @return	0 if success, error code otherwise
+ */
+extern int HKDF_SHA256_extract(char prk[SHA256_HASH_SIZE],
+                        const char *salt, unsigned int saltlen,
+                        const char *ikm,  unsigned int ikmlen);
+/**	@brief Expands the pseudorandom key to the desired length as defined in
+ * RFC 5869.
+ *
+ * @param  okm      Output Keying Material
+ * @param  okmlen   OKM length in bytes (should be <= 255 according to the RFC)
+ * @param  prk      Pseudorandom key
+ * @param  info     Optional context and application specific information
+ * @param  infolen  Info length in bytes
+ * 
+ * @return	0 if success, error code otherwise
+ */
+extern int HKDF_SHA256_expand(char *okm, unsigned int okmlen,
+                        const char *prk, unsigned int prklen,
+                        const char *info, unsigned int infolen);
 
 
 /**	@brief Initialise an instance of SHA384
@@ -478,13 +578,13 @@
 	@param m is the new active mode of operation (ECB, CBC, OFB, CFB etc)
 	@param iv the new Initialisation Vector
  */
-extern void AES_reset(amcl_aes *A,int m,char *iv);
+extern void AES_reset(amcl_aes *A,int m,const char *iv);
 /**	@brief Extract chaining vector from AMCL_AES instance
  *
 	@param A an instance of the AMCL_AES
 	@param f the extracted chaining vector
  */
-extern void AES_getreg(amcl_aes *A,char * f);
+extern void AES_getreg(const amcl_aes *A,char * f);
 /**	@brief Initialise an instance of AMCL_AES and its mode of operation
  *
 	@param A an instance AMCL_AES
@@ -494,19 +594,19 @@
 	@param iv the Initialisation Vector
 	@return 0 for invalid n
  */
-extern int AES_init(amcl_aes *A,int m,int n,char *k,char *iv);
+extern int AES_init(amcl_aes *A,int m,int n,char *k,const char *iv);
 /**	@brief Encrypt a single 16 byte block in ECB mode
  *
 	@param A an instance of the AMCL_AES
 	@param b is an array of 16 plaintext bytes, on exit becomes ciphertext
  */
-extern void AES_ecb_encrypt(amcl_aes *A,uchar * b);
+extern void AES_ecb_encrypt(const amcl_aes *A,uchar * b);
 /**	@brief Decrypt a single 16 byte block in ECB mode
  *
 	@param A an instance of the AMCL_AES
 	@param b is an array of 16 cipherext bytes, on exit becomes plaintext
  */
-extern void AES_ecb_decrypt(amcl_aes *A,uchar * b);
+extern void AES_ecb_decrypt(const amcl_aes *A,uchar * b);
 /**	@brief Encrypt a single 16 byte block in active mode
  *
 	@param A an instance of the AMCL_AES
@@ -537,7 +637,7 @@
 	@param n the number of bytes in the Initialisation Vector (IV)
 	@param iv the IV
  */
-extern void GCM_init(gcm *G,int nk,char *k,int n,char *iv);
+extern void GCM_init(gcm *G,int nk,char *k,int n,const char *iv);
 /**	@brief Add header (material to be authenticated but not encrypted)
  *
 	Note that this function can be called any number of times with n a multiple of 16, and then one last time with any value for n
@@ -545,7 +645,7 @@
 	@param b is the header material to be added
 	@param n the number of bytes in the header
  */
-extern int GCM_add_header(gcm *G,char *b,int n);
+extern int GCM_add_header(gcm *G,const char *b,int n);
 /**	@brief Add plaintext and extract ciphertext
  *
 	Note that this function can be called any number of times with n a multiple of 16, and then one last time with any value for n
@@ -554,7 +654,7 @@
 	@param p is the plaintext material to be added
 	@param n the number of bytes in the plaintext
  */
-extern int GCM_add_plain(gcm *G,char *c,char *p,int n);
+extern int GCM_add_plain(gcm *G,char *c,const char *p,int n);
 /**	@brief Add ciphertext and extract plaintext
  *
 	Note that this function can be called any number of times with n a multiple of 16, and then one last time with any value for n
@@ -563,7 +663,7 @@
 	@param c is the ciphertext material to be added
 	@param n the number of bytes in the ciphertext
  */
-extern int GCM_add_cipher(gcm *G,char *p,char *c,int n);
+extern int GCM_add_cipher(gcm *G,char *p,const char *c,int n);
 /**	@brief Finish off and extract authentication tag (HMAC)
  *
 	@param G is an active instance AES-GCM
@@ -582,7 +682,7 @@
 	@param b an array of seed bytes
 
  */
-extern void RAND_seed(csprng *R,int n,char *b);
+extern void RAND_seed(csprng *R,int n,const char *b);
 /**	@brief Delete all internal state of a random number generator
  *
 	@param R an instance of a Cryptographically Secure Random Number Generator
diff --git a/include/arch.h.in b/include/arch.h.in
index aa726db..e417554 100644
--- a/include/arch.h.in
+++ b/include/arch.h.in
@@ -67,16 +67,16 @@
 #define unsign64 unsigned long long  /**< 64-bit unsigned integer */
 #else
 #include <stdint.h>
-#define byte uint8_t			/**< 8-bit unsigned integer */
+typedef uint8_t byte;   		/**< 8-bit unsigned integer */
 #define sign8 int8_t			/**< 8-bit signed integer */
 #define sign16 int16_t			/**< 16-bit signed integer */
-#define sign32 int32_t			/**< 32-bit signed integer */
+typedef int32_t sign32;   		/**< 32-bit signed integer */
 #define sign64 int64_t			/**< 64-bit signed integer */
-#define unsign32 uint32_t		/**< 32-bit unsigned integer */
-#define unsign64 uint64_t		/**< 64-bit unsigned integer */
+typedef uint32_t unsign32; 		/**< 32-bit unsigned integer */
+typedef uint64_t unsign64;  	/**< 64-bit unsigned integer */
 #endif
 
-#define uchar unsigned char  /**<  Unsigned char */
+typedef unsigned char uchar;  /**<  Unsigned char */
 
 /* Don't mess with anything below this line unless you know what you are doing */
 /* This next is probably OK, but may need changing for non-C99-standard environments */
@@ -106,13 +106,13 @@
 #if CHUNK == 64
 
 #ifndef C99
-#define chunk __int64		/**< C type corresponding to word length */
+#define chunk __int64 		/**< C type corresponding to word length */
 /**< Note - no 128-bit type available    */
 #else
 #define chunk int64_t		/**< C type corresponding to word length */
 
 #if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16
-#define dchunk __int128                /**< Always define double length chunk type if available (supported by GCC & Clang on 64-bit architectures) */
+#define dchunk __int128      /**< Always define double length chunk type if available (supported by GCC & Clang on 64-bit architectures) */
 #endif
 
 #endif
diff --git a/include/big.h.in b/include/big.h.in
index 1da1f71..0b8f4f1 100644
--- a/include/big.h.in
+++ b/include/big.h.in
@@ -66,29 +66,29 @@
 	@param x a BIG number
 	@return 1 if zero, else returns 0
  */
-extern int BIG_XXX_iszilch(BIG_XXX x);
+extern int BIG_XXX_iszilch(const BIG_XXX x);
 /**	@brief Tests for BIG equal to one - input must be normalised
  *
 	@param x a BIG number
 	@return 1 if one, else returns 0
  */
-extern int BIG_XXX_isunity(BIG_XXX x);
+extern int BIG_XXX_isunity(const BIG_XXX x);
 /**	@brief Tests for DBIG equal to zero - input must be normalised
  *
 	@param x a DBIG number
 	@return 1 if zero, else returns 0
  */
-extern int BIG_XXX_diszilch(DBIG_XXX x);
+extern int BIG_XXX_diszilch(const DBIG_XXX x);
 /**	@brief Outputs a BIG number to the console
  *
 	@param x a BIG number
  */
-extern void BIG_XXX_output(BIG_XXX x);
+extern void BIG_XXX_output(const BIG_XXX x);
 /**	@brief Outputs a BIG number to the console in raw form (for debugging)
  *
 	@param x a BIG number
  */
-extern void BIG_XXX_rawoutput(BIG_XXX x);
+extern void BIG_XXX_rawoutput(const BIG_XXX x);
 /**	@brief Conditional constant time swap of two BIG numbers
  *
 	Conditionally swaps parameters in constant time (without branching)
@@ -104,7 +104,7 @@
 	@param y another BIG number
 	@param s copy takes place if not equal to 0
  */
-extern void BIG_XXX_cmove(BIG_XXX x,BIG_XXX y,int s);
+extern void BIG_XXX_cmove(BIG_XXX x,const BIG_XXX y,int s);
 /**	@brief Conditional copy of DBIG number
  *
 	Conditionally copies second parameter to the first (without branching)
@@ -112,33 +112,33 @@
 	@param y another DBIG number
 	@param s copy takes place if not equal to 0
  */
-extern void BIG_XXX_dcmove(BIG_XXX x,BIG_XXX y,int s);
+extern void BIG_XXX_dcmove(DBIG_XXX x,const DBIG_XXX y,int s);
 /**	@brief Convert from BIG number to byte array
  *
 	@param a byte array
 	@param x BIG number
  */
-extern void BIG_XXX_toBytes(char *a,BIG_XXX x);
+extern void BIG_XXX_toBytes(char *a,const BIG_XXX x);
 /**	@brief Convert to BIG number from byte array
  *
 	@param x BIG number
 	@param a byte array
  */
-extern void BIG_XXX_fromBytes(BIG_XXX x,char *a);
+extern void BIG_XXX_fromBytes(BIG_XXX x,const char *a);
 /**	@brief Convert to BIG number from byte array of given length
  *
 	@param x BIG number
 	@param a byte array
 	@param s byte array length
  */
-extern void BIG_XXX_fromBytesLen(BIG_XXX x,char *a,int s);
+extern void BIG_XXX_fromBytesLen(BIG_XXX x,const char *a,int s);
 /**@brief Convert to DBIG number from byte array of given length
  *
    @param x DBIG number
    @param a byte array
    @param s byte array length
  */
-extern void BIG_XXX_dfromBytesLen(DBIG_XXX x,char *a,int s);
+extern void BIG_XXX_dfromBytesLen(DBIG_XXX x,const char *a,int s);
 /**	@brief Outputs a DBIG number to the console
  *
 	@param x a DBIG number
@@ -149,7 +149,7 @@
  *
 	@param x a DBIG number
  */
-extern void BIG_XXX_drawoutput(DBIG_XXX x);
+extern void BIG_XXX_drawoutput(const DBIG_XXX x);
 
 /**	@brief Copy BIG from Read-Only Memory to a BIG
  *
@@ -162,37 +162,37 @@
 	@param x BIG number
 	@param y BIG number to be copied
  */
-extern void BIG_XXX_copy(BIG_XXX x,BIG_XXX y);
+extern void BIG_XXX_copy(BIG_XXX x,const BIG_XXX y);
 /**	@brief Copy DBIG to another DBIG
  *
 	@param x DBIG number
 	@param y DBIG number to be copied
  */
-extern void BIG_XXX_dcopy(DBIG_XXX x,DBIG_XXX y);
+extern void BIG_XXX_dcopy(DBIG_XXX x,const DBIG_XXX y);
 /**	@brief Copy BIG to upper half of DBIG
  *
 	@param x DBIG number
 	@param y BIG number to be copied
  */
-extern void BIG_XXX_dsucopy(DBIG_XXX x,BIG_XXX y);
+extern void BIG_XXX_dsucopy(DBIG_XXX x,const BIG_XXX y);
 /**	@brief Copy BIG to lower half of DBIG
  *
 	@param x DBIG number
 	@param y BIG number to be copied
  */
-extern void BIG_XXX_dscopy(DBIG_XXX x,BIG_XXX y);
+extern void BIG_XXX_dscopy(DBIG_XXX x,const BIG_XXX y);
 /**	@brief Copy lower half of DBIG to a BIG
  *
 	@param x BIG number
 	@param y DBIG number to be copied
  */
-extern void BIG_XXX_sdcopy(BIG_XXX x,DBIG_XXX y);
+extern void BIG_XXX_sdcopy(BIG_XXX x,const DBIG_XXX y);
 /**	@brief Copy upper half of DBIG to a BIG
  *
 	@param x BIG number
 	@param y DBIG number to be copied
  */
-extern void BIG_XXX_sducopy(BIG_XXX x,DBIG_XXX y);
+extern void BIG_XXX_sducopy(BIG_XXX x,const DBIG_XXX y);
 /**	@brief Set BIG to zero
  *
 	@param x BIG number to be set to zero
@@ -219,7 +219,7 @@
 	@param y BIG number
 	@param z BIG number
  */
-extern void BIG_XXX_add(BIG_XXX x,BIG_XXX y,BIG_XXX z);
+extern void BIG_XXX_add(BIG_XXX x,const BIG_XXX y,const BIG_XXX z);
 
 /**	@brief Set BIG to logical or of two BIGs - output normalised
  *
@@ -241,7 +241,7 @@
 	@param y BIG number
 	@param z BIG number
  */
-extern void BIG_XXX_sub(BIG_XXX x,BIG_XXX y,BIG_XXX z);
+extern void BIG_XXX_sub(BIG_XXX x,const BIG_XXX y,const BIG_XXX z);
 /**	@brief Decrement BIG by a small integer - output not normalised
  *
 	@param x BIG number to be decremented
@@ -254,21 +254,21 @@
 	@param y DBIG number
 	@param z DBIG number
  */
-extern void BIG_XXX_dadd(DBIG_XXX x,DBIG_XXX y,DBIG_XXX z);
+extern void BIG_XXX_dadd(DBIG_XXX x,const DBIG_XXX y,const DBIG_XXX z);
 /**	@brief Set DBIG to difference of two DBIGs
  *
 	@param x DBIG number, difference of other two - output not normalised
 	@param y DBIG number
 	@param z DBIG number
  */
-extern void BIG_XXX_dsub(DBIG_XXX x,DBIG_XXX y,DBIG_XXX z);
+extern void BIG_XXX_dsub(DBIG_XXX x,const DBIG_XXX y,const DBIG_XXX z);
 /**	@brief Multiply BIG by a small integer - output not normalised
  *
 	@param x BIG number, product of other two
 	@param y BIG number
 	@param i small integer
  */
-extern void BIG_XXX_imul(BIG_XXX x,BIG_XXX y,int i);
+extern void BIG_XXX_imul(BIG_XXX x,const BIG_XXX y,int i);
 /**	@brief Multiply BIG by not-so-small small integer - output normalised
  *
 	@param x BIG number, product of other two
@@ -276,7 +276,7 @@
 	@param i small integer
 	@return Overflowing bits
  */
-extern chunk BIG_XXX_pmul(BIG_XXX x,BIG_XXX y,int i);
+extern chunk BIG_XXX_pmul(BIG_XXX x,const BIG_XXX y,int i);
 /**	@brief Divide BIG by 3 - output normalised
  *
 	@param x BIG number
@@ -289,14 +289,14 @@
 	@param y BIG number
 	@param i small integer
  */
-extern void BIG_XXX_pxmul(DBIG_XXX x,BIG_XXX y,int i);
+extern void BIG_XXX_pxmul(DBIG_XXX x,const BIG_XXX y,int i);
 /**	@brief Multiply BIG by another BIG resulting in DBIG - inputs normalised and output normalised
  *
 	@param x DBIG number, product of other two
 	@param y BIG number
 	@param z BIG number
  */
-extern void BIG_XXX_mul(DBIG_XXX x,BIG_XXX y,BIG_XXX z);
+extern void BIG_XXX_mul(DBIG_XXX x,const BIG_XXX y,const BIG_XXX z);
 /**	@brief Multiply BIG by another BIG resulting in another BIG - inputs normalised and output normalised
  *
 	Note that the product must fit into a BIG, and x must be distinct from y and z
@@ -304,13 +304,13 @@
 	@param y BIG number
 	@param z BIG number
  */
-extern void BIG_XXX_smul(BIG_XXX x,BIG_XXX y,BIG_XXX z);
+extern void BIG_XXX_smul(BIG_XXX x,const BIG_XXX y,const BIG_XXX z);
 /**	@brief Square BIG resulting in a DBIG - input normalised and output normalised
  *
 	@param x DBIG number, square of a BIG
 	@param y BIG number to be squared
  */
-extern void BIG_XXX_sqr(DBIG_XXX x,BIG_XXX y);
+extern void BIG_XXX_sqr(DBIG_XXX x,const BIG_XXX y);
 
 /**	@brief Montgomery reduction of a DBIG to a BIG  - input normalised and output normalised
  *
@@ -319,7 +319,7 @@
 	@param MC the Montgomery Constant
 	@param d DBIG number to be reduced
  */
-extern void BIG_XXX_monty(BIG_XXX a,BIG_XXX md,chunk MC,DBIG_XXX d);
+extern void BIG_XXX_monty(BIG_XXX a,const BIG_XXX md,chunk MC,const DBIG_XXX d);
 
 /**	@brief Shifts a BIG left by any number of bits - input must be normalised, output normalised
  *
@@ -355,7 +355,7 @@
 	@param m BIG number to be shifted and subtracted
 	@return sign of r
  */
-extern int BIG_XXX_ssn(BIG_XXX r,BIG_XXX a, BIG_XXX m);
+extern int BIG_XXX_ssn(BIG_XXX r,const BIG_XXX a, BIG_XXX m);
 
 /**	@brief Fast shifts a BIG right by a small number of bits - input must be normalised, output will be normalised
  *
@@ -381,7 +381,7 @@
 	@param s Bit position at which to split
 	@return carry-out from top half
  */
-extern chunk BIG_XXX_split(BIG_XXX x,BIG_XXX y,DBIG_XXX z,int s);
+extern chunk BIG_XXX_split(BIG_XXX x,BIG_XXX y,const DBIG_XXX z,int s);
 /**	@brief Normalizes a BIG number - output normalised
  *
 	All digits of the input BIG are reduced mod 2^BASEBITS
@@ -400,40 +400,40 @@
 	@param y second BIG number to be compared
 	@return -1 is x<y, 0 if x=y, 1 if x>y
  */
-extern int BIG_XXX_comp(BIG_XXX x,BIG_XXX y);
+extern int BIG_XXX_comp(const BIG_XXX x,const BIG_XXX y);
 /**	@brief Compares two DBIG numbers. Inputs must be normalised externally
  *
 	@param x first DBIG number to be compared
 	@param y second DBIG number to be compared
 	@return -1 is x<y, 0 if x=y, 1 if x>y
  */
-extern int BIG_XXX_dcomp(DBIG_XXX x,DBIG_XXX y);
+extern int BIG_XXX_dcomp(const DBIG_XXX x,const DBIG_XXX y);
 /**	@brief Calculate number of bits in a BIG - output normalised - leaks log2(x)
  *
 	@param x BIG number
 	@return Number of bits in x
  */
-extern int BIG_XXX_nbits(BIG_XXX x);
+extern int BIG_XXX_nbits(const BIG_XXX x);
 /**	@brief Calculate number of bits in a DBIG - output normalised - leaks log2(x)
  *
 	@param x DBIG number
 	@return Number of bits in x
  */
-extern int BIG_XXX_dnbits(DBIG_XXX x);
+extern int BIG_XXX_dnbits(const DBIG_XXX x);
 /**	@brief Reduce x mod n - input and output normalised - leaks log2(x)-log2(n)
  *
 	Slow but rarely used
 	@param x BIG number to be reduced mod n
 	@param n The modulus
  */
-extern void BIG_XXX_mod(BIG_XXX x,BIG_XXX n);
+extern void BIG_XXX_mod(BIG_XXX x,const BIG_XXX n);
 /**	@brief Divide x by n - output normalised - leaks log2(x)-log2(n)
  *
 	Slow but rarely used
 	@param x BIG number to be divided by n
 	@param n The Divisor
  */
-extern void BIG_XXX_sdiv(BIG_XXX x,BIG_XXX n);
+extern void BIG_XXX_sdiv(BIG_XXX x,const BIG_XXX n);
 /**	@brief  x=y mod n - output normalised - leaks log2(y)-log2(n)
  *
 	Slow but rarely used. y is destroyed.
@@ -441,7 +441,7 @@
 	@param y DBIG number
 	@param n Modulus
  */
-extern void BIG_XXX_dmod(BIG_XXX x,DBIG_XXX y,BIG_XXX n);
+extern void BIG_XXX_dmod(BIG_XXX x,DBIG_XXX y,const BIG_XXX n);
 /**	@brief  x=y/n - output normalised - leaks log2(y)-log2(n)
  *
 	Slow but rarely used. y is destroyed.
@@ -449,20 +449,20 @@
 	@param y DBIG number
 	@param n Modulus
  */
-extern void BIG_XXX_ddiv(BIG_XXX x,DBIG_XXX y,BIG_XXX n);
+extern void BIG_XXX_ddiv(BIG_XXX x,DBIG_XXX y,const BIG_XXX n);
 /**	@brief  return parity of BIG, that is the least significant bit
  *
 	@param x BIG number
 	@return 0 or 1
  */
-extern int BIG_XXX_parity(BIG_XXX x);
+extern int BIG_XXX_parity(const BIG_XXX x);
 /**	@brief  return i-th of BIG
  *
 	@param x BIG number
 	@param i the bit of x to be returned
 	@return 0 or 1
  */
-extern int BIG_XXX_bit(BIG_XXX x,int i);
+extern int BIG_XXX_bit(const BIG_XXX x,int i);
 /**	@brief  return i-th of BIG
  *
 	@param x BIG number
@@ -470,7 +470,7 @@
 	@param w the width of the window to return
 	@return bits in the window as an integer
  */
-int BIG_XXX_bits(BIG_XXX x, int i, int w);
+int BIG_XXX_bits(const BIG_XXX x, int i, int w);
 /**	@brief  return least significant bits of a BIG
  *
 	@param x BIG number
@@ -492,7 +492,7 @@
 	@param n The modulus
 	@param r A pointer to a Cryptographically Secure Random Number Generator
  */
-extern void BIG_XXX_randomnum(BIG_XXX x,BIG_XXX n,csprng *r);
+extern void BIG_XXX_randomnum(BIG_XXX x,const BIG_XXX n,csprng *r);
 /**	brief  return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised
  *
 	Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any
@@ -512,7 +512,7 @@
 	@param z BIG number
 	@param n The BIG Modulus
  */
-extern void BIG_XXX_modmul(BIG_XXX x,BIG_XXX y,BIG_XXX z,BIG_XXX n);
+extern void BIG_XXX_modmul(BIG_XXX x,const BIG_XXX y,const BIG_XXX z,const BIG_XXX n);
 /**	@brief  Calculate x=y/z mod n - leaks log2(x)-log2(n)
  *
 	Slow method for modular division
@@ -521,7 +521,7 @@
 	@param z BIG number
 	@param n The BIG Modulus
  */
-extern void BIG_XXX_moddiv(BIG_XXX x,BIG_XXX y,BIG_XXX z,BIG_XXX n);
+extern void BIG_XXX_moddiv(BIG_XXX x,const BIG_XXX y,const BIG_XXX z,const BIG_XXX n);
 /**	@brief  Calculate x=y^2 mod n - leaks log2(x)-log2(n)
  *
 	Slow method for modular squaring
@@ -529,7 +529,7 @@
 	@param y BIG number
 	@param n The BIG Modulus
  */
-extern void BIG_XXX_modsqr(BIG_XXX x,BIG_XXX y,BIG_XXX n);
+extern void BIG_XXX_modsqr(BIG_XXX x,const BIG_XXX y,const BIG_XXX n);
 /**	@brief  Calculate x=-y mod n - leaks log2(x)-log2(n)
  *
 	Modular negation
@@ -537,14 +537,14 @@
 	@param y BIG number
 	@param n The BIG Modulus
  */
-extern void BIG_XXX_modneg(BIG_XXX x,BIG_XXX y,BIG_XXX n);
+extern void BIG_XXX_modneg(BIG_XXX x,const BIG_XXX y,const BIG_XXX n);
 /**	@brief  Calculate jacobi Symbol (x/y) - not constant time
  *
 	@param x BIG number
 	@param y BIG number
 	@return Jacobi symbol, -1,0 or 1
  */
-extern int BIG_XXX_jacobi(BIG_XXX x,BIG_XXX y);
+extern int BIG_XXX_jacobi(BIG_XXX x,const BIG_XXX y);
 /**	@brief  Calculate x=1/y mod n
  *
 	Modular Inversion - This is slow. Uses binary method.
@@ -552,7 +552,7 @@
 	@param y BIG number
 	@param n The BIG Modulus
  */
-extern void BIG_XXX_invmodp(BIG_XXX x,BIG_XXX y,BIG_XXX n);
+extern void BIG_XXX_invmodp(BIG_XXX x,const BIG_XXX y,const BIG_XXX n);
 /** @brief Calculate x=x mod 2^m
  *
 	Truncation
@@ -596,8 +596,14 @@
 
 static inline chunk muladd_XXX(chunk x,chunk y,chunk c,chunk *r)
 {
-    chunk x0,x1,y0,y1;
-    chunk bot,top,mid,carry;
+    chunk x0;
+    chunk x1;
+    chunk y0;
+    chunk y1;
+    chunk bot;
+    chunk top;
+    chunk mid;
+    chunk carry;
     x0=x&HMASK_XXX;
     x1=(x>>HBITS_XXX);
     y0=y&HMASK_XXX;
diff --git a/include/bls.h.in b/include/bls.h.in
index 2e0bd91..07d7968 100644
--- a/include/bls.h.in
+++ b/include/bls.h.in
@@ -62,7 +62,7 @@
 	@param S    Private key
 	@return     Zero for success or else an error code
  */
-int BLS_ZZZ_SIGN(octet *SIG,octet *M,octet *S);
+int BLS_ZZZ_SIGN(octet *SIG,const octet *M,const octet *S);
 
 /**	@brief Verify a signature
  *
@@ -71,7 +71,7 @@
 	@param W    Public key
 	@return     Zero for success or else an error code
  */
-int BLS_ZZZ_VERIFY(octet *SIG,octet *M,octet *W);
+int BLS_ZZZ_VERIFY(const octet *SIG,const octet *M,const octet *W);
 
 /**	@brief Add two members from the group G1
  *
@@ -80,7 +80,7 @@
 	@param  R   member of G1. R = R1+R2
 	@return     Zero for success or else an error code
  */
-int BLS_ZZZ_ADD_G1(octet *R1,octet *R2,octet *R);
+int BLS_ZZZ_ADD_G1(const octet *R1,const octet *R2,octet *R);
 
 /**	@brief Add two members from the group G2
  *
@@ -89,7 +89,7 @@
 	@param  W   member of G2. W = W1+W2
 	@return     Zero for success or else an error code
  */
-int BLS_ZZZ_ADD_G2(octet *W1,octet *W2,octet *W);
+int BLS_ZZZ_ADD_G2(const octet *W1,const octet *W2,octet *W);
 
 /**	@brief Use Shamir's secret sharing to distribute BLS secret keys
  *
@@ -102,7 +102,7 @@
 	@param  SKO Secret key that is shared
 	@return     Zero for success or else an error code
  */
-int BLS_ZZZ_MAKE_SHARES(int k, int n, csprng *RNG, octet* X, octet* Y, octet* SKI, octet* SKO);
+int BLS_ZZZ_MAKE_SHARES(int k, int n, csprng *RNG, octet* X, octet* Y, const octet* SKI, octet* SKO);
 
 /**	@brief Use Shamir's secret sharing to recover a BLS secret key
  *
@@ -112,7 +112,7 @@
 	@param  SK  Secret key that is recovered
 	@return     Zero for success or else an error code
  */
-int BLS_ZZZ_RECOVER_SECRET(int k, octet* X, octet* Y, octet* SK);
+int BLS_ZZZ_RECOVER_SECRET(int k, const octet* X, const octet* Y, octet* SK);
 
 /**	@brief Use Shamir's secret sharing to recover a BLS signature
  *
@@ -122,7 +122,7 @@
 	@param  SIG Signature that is recovered
 	@return     Zero for success or else an error code
  */
-int BLS_ZZZ_RECOVER_SIGNATURE(int k, octet* X, octet* Y, octet* SIG);
+int BLS_ZZZ_RECOVER_SIGNATURE(int k, const octet* X, const octet* Y, octet* SIG);
 
 #endif
 
diff --git a/include/bls_ietf.h.in b/include/bls_ietf.h.in
new file mode 100644
index 0000000..5abf133
--- /dev/null
+++ b/include/bls_ietf.h.in
@@ -0,0 +1,439 @@
+/*
+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.
+*/
+
+/**
+ * @file bls_ietf_ZZZ.h
+ *
+ * @author Alexandre Adomnicai
+ *
+ * @date December 2022
+ *
+ * @brief BLS Header file IETF-compliant according to https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-05
+ *
+ */
+
+#ifndef BLS_IETF_ZZZ_H
+#define BLS_IETF_ZZZ_H
+
+#include "pair_ZZZ.h"
+
+#if CURVE_SECURITY_ZZZ == 128
+#define SK_LEN      32
+#else
+#error "IETF-compliant BLS currently only supports 128-bit security level (i.e. BLS12-381)"
+#endif
+
+/* Field size is assumed to be greater than or equal to group size */
+
+#define BGS_ZZZ MODBYTES_XXX  /**< BLS Group Size */
+#define BFS_ZZZ MODBYTES_XXX  /**< BLS Field Size */
+
+#define SUCCESS               0x00000000
+#define ERR_NULLPOINTER_BLS   0x00000201
+#define ERR_BADARGLEN_BLS     0x00000202
+#define ERR_BADENCODING_BLS   0x00000203
+#define ERR_NOTONCURVE_BLS    0x00000204
+#define ERR_BADSIGNATURE_BLS  0x00000205
+#define ERR_INVALIDPUBKEY_BLS 0x00000206
+#define ERR_BADPOP_BLS        0x00000207
+
+extern const BIG_XXX ISO11_XNUM_BLS381[12]; /**< constants used to compute x_num for the 11-isogeny map for BLS12-381 G1 */
+extern const BIG_XXX ISO11_XDEN_BLS381[11]; /**< constants used to compute x_den for the 11-isogeny map for BLS12-381 G1 */
+extern const BIG_XXX ISO11_YNUM_BLS381[16]; /**< constants used to compute y_num for the 11-isogeny map for BLS12-381 G1 */
+extern const BIG_XXX ISO11_YDEN_BLS381[16]; /**< constants used to compute y_den for the 11-isogeny map for BLS12-381 G1 */
+
+extern const BIG_XXX ISO3_XNUMre_BLS381[4]; /**< constants used to compute x_num for the 3-isogeny map for BLS12-381 G2 */
+extern const BIG_XXX ISO3_XNUMim_BLS381[4]; /**< constants used to compute x_num for the 3-isogeny map for BLS12-381 G2 */
+extern const BIG_XXX ISO3_XDENre_BLS381[2]; /**< constants used to compute x_den for the 3-isogeny map for BLS12-381 G2 */
+extern const BIG_XXX ISO3_XDENim_BLS381[2]; /**< constants used to compute x_den for the 3-isogeny map for BLS12-381 G2 */
+extern const BIG_XXX ISO3_YNUMre_BLS381[4]; /**< constants used to compute y_num for the 3-isogeny map for BLS12-381 G2 */
+extern const BIG_XXX ISO3_YNUMim_BLS381[4]; /**< constants used to compute y_num for the 3-isogeny map for BLS12-381 G2 */
+extern const BIG_XXX ISO3_YDENre_BLS381[3]; /**< constants used to compute y_den for the 3-isogeny map for BLS12-381 G2 */
+extern const BIG_XXX ISO3_YDENim_BLS381[3]; /**< constants used to compute y_den for the 3-isogeny map for BLS12-381 G2 */
+
+/* BLS API functions */
+
+/**
+ * @brief Generation of a BLS secret key according to the RFC draft (Section 2.3).
+ *
+ * @param sk      Output secret key
+ * @param ikm     Secret input keying material
+ * @param ikmlen  Input keying material length in bytes (>= 32)
+ * @param salt    Salt value
+ * @param saltlen Salt length in bytes (>= 0)
+ * @param info    Optional octet string (empty string if omitted)
+ * @param infolen Info length in bytes (>= 0)
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_keygen(char sk[SK_LEN],
+  const char *ikm,  unsigned int ikmlen,
+  const char *salt, unsigned int saltlen,
+  const char *info, unsigned int infolen);
+
+/**
+ * @brief Derivation of a BLS public key in G1 (i.e. minimal-pubkey-size setting)
+ * from a secret key according to the RFC draft (Section 2.4).
+ *
+ * @param pk Output public key
+ * @param sk Secret key
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_sk_to_pk_G1(ECP_ZZZ *pk, const char *sk);
+
+/**
+ * @brief Derivation of a BLS public key in G2 (i.e. minimal-sig-size setting)
+ * from a secret key according to the RFC draft (Section 2.4).
+ *
+ * @param pk Output public key
+ * @param sk Secret key
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_sk_to_pk_G2(ECP2_ZZZ *pk, const char *sk);
+
+/**
+ * @brief Serialization of a point in G1 into an octet string.
+ * Same as ECP_ZZZ_toOctet but the order differs to match the Zcash
+ * serialization format: FP elements are encoded in big-endian format
+ * (i.e. imaginary|real) while ECP2_ZZZ_toOctet uses little-endian
+ * (i.e. real|imaginary).
+ *
+ * @param bytes Output octet string
+ * @param point Point in G1
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_serialize_G1(octet *bytes, const ECP_ZZZ *point);
+
+/**
+ * @brief Serialization of a point in G2 into an octet string.
+ * Same as ECP_ZZZ_fromOctet but the order differs to match the Zcash
+ * serialization format: FP elements are encoded in big-endian format
+ * (i.e. imaginary|real) while ECP_ZZZ_fromOctet uses little-endian
+ * (i.e. real|imaginary).
+ *
+ * @param point Output Point in G1
+ * @param bytes octet string
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_deserialize_G1(ECP_ZZZ *point, const octet *bytes);
+
+/**
+ * @brief Serialization of a point in G2 into an octet string.
+ * Same as ECP2_ZZZ_toOctet but the order differs to match the Zcash
+ * serialization format: FP elements are encoded in big-endian format
+ * (i.e. imaginary|real) while ECP2_ZZZ_toOctet uses little-endian
+ * (i.e. real|imaginary).
+ *
+ * @param bytes Output octet string
+ * @param point Point in G2
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_serialize_G2(octet *bytes, const ECP2_ZZZ *point);
+
+/**
+ * @brief Deserialization of an octet string into a point in G2.
+ * Same as ECP2_ZZZ_fromOctet but the order differs to match the Zcash
+ * serialization format: FP elements are encoded in big-endian format
+ * (i.e. imaginary|real) while ECP2_ZZZ_fromOctet uses little-endian
+ * (i.e. real|imaginary).
+ *
+ * @param point Output Point in G2
+ * @param bytes octet string
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_deserialize_G2(ECP2_ZZZ *point, const octet *bytes);
+
+/**
+ * @brief Compression of a point in G1 into an octet string.
+ * The most-significant 3 bits are encoded according to ZCash serialization format:
+ * https://github.com/zkcrypto/pairing/blob/34aa52b0f7bef705917252ea63e5a13fa01af551/src/bls12_381/README.md#serialization
+ *
+ * @param bytes Output octet string
+ * @param point Point in G1
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_compress_G1(octet *bytes, const ECP_ZZZ *point);
+
+/**
+ * @brief Uncompression of a compressed point in G1.
+ *
+ * @param point Output uncompressed point in G1
+ * @param bytes Compressed point in G1
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_uncompress_G1(ECP_ZZZ *point, const octet *bytes);
+
+/**
+ * @brief Compression of a point in G2 into an octet string.
+ * The most-significant 3 bits are encoded according to ZCash serialization format:
+ * https://github.com/zkcrypto/pairing/blob/34aa52b0f7bef705917252ea63e5a13fa01af551/src/bls12_381/README.md#serialization
+ *
+ * @param bytes Output octet string
+ * @param point Point in G2
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_compress_G2(octet *bytes, const ECP2_ZZZ *point);
+
+/**
+ * @brief Uncompression of a compressed point in G2.
+ *
+ * @param point Output uncompressed point in G2
+ * @param bytes Compressed point in G2
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_uncompress_G2(ECP2_ZZZ *point, const octet *bytes);
+
+/**
+ * @brief Hash a byte string into an elliptic curve point on G1 using an uniform encoding type.
+ *
+ * @param P Output point
+ * @param msg Input byte string
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_hash2curve_G1(ECP_ZZZ *P, const octet* msg, const octet* dst);
+
+/**
+ * @brief Hash a byte string into an elliptic curve point on G1 using a non-uniform encoding type.
+ *
+ * @param P Output point
+ * @param msg Input byte string
+ * @param dst Domain seperation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_encode2curve_G1(ECP_ZZZ *P, const octet* msg, const octet* dst);
+
+/**
+ * @brief Hash a byte string into an elliptic curve point on G2 using an uniform encoding type.
+ *
+ * @param P Output point
+ * @param msg Input byte string
+ * @param dst Domain seperation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_hash2curve_G2(ECP2_ZZZ *P, const octet* msg, const octet* dst);
+
+/**
+ * @brief Hash a byte string into an elliptic curve point on G2 using a non-uniform encoding type.
+ *
+ * @param P Output point
+ * @param msg Input byte string
+ * @param dst Domain seperation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_encode2curve_G2(ECP2_ZZZ *P, const octet* msg, const octet* dst);
+
+/**
+ * @brief Generate a signature in the minimal-signature-size setting. Note that
+ * the output signature is in the compressed serialization formats as stated in
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-bls-signature-05.html#appendix-A.
+ *
+ * @param sig Output signature
+ * @param sk Private key
+ * @param msg Message to sign
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_core_sign_G1(octet *sig, const char *sk, const octet *msg, const octet *dst);
+
+/**
+ * @brief Generate a signature in the minimal-pubkey-size setting. Note that
+ * the output signature is in the compressed serialization formats as stated in
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-bls-signature-05.html#appendix-A.
+ *
+ * @param sig Output signature
+ * @param sk Private key
+ * @param msg Message to sign
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_core_sign_G2(octet *sig, const char *sk, const octet *msg, const octet *dst);
+
+/**
+ * @brief Verify a signature in the minimal-signature-size setting.
+ *
+ * @param sig Signature
+ * @param pk Public key in G2
+ * @param msg Signed message
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_core_verify_G1(const octet *sig, const ECP2_ZZZ *PK, const octet *msg, const octet *dst);
+
+/**
+ * @brief Verify a signature in the minimal-pubkey-size setting.
+ *
+ * @param sig Signature
+ * @param pk Public key in G1
+ * @param msg Signed message
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_core_verify_G2(const octet *sig, const ECP_ZZZ *PK, const octet *msg, const octet *dst);
+
+/**
+ * @brief Aggregate multiple signatures into a single one in the minimal-signature-size setting.
+ * Note that the output signature is in the compressed serialization formats as stated in
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-bls-signature-05.html#appendix-A.
+ *
+ * @param out Output signature
+ * @param in Input signatures to aggregate
+ * @param n Number of input signatures
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_aggregate_G1(octet *out, const octet *in, unsigned int n);
+
+/**
+ * @brief Aggregate multiple signatures into a single one in the minimal-pubkey-size setting.
+ * Note that the output signature is in the compressed serialization formats as stated in
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-bls-signature-05.html#appendix-A.
+ *
+ * @param out Output signature
+ * @param in Input signatures to aggregate
+ * @param n Number of input signatures
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_aggregate_G2(octet *out, const octet *in, unsigned int n);
+
+/**
+ * @brief Verify an aggregated signature in the minimal-signature-size setting.
+ *
+ * @param sig Aggregated signature
+ * @param pk Public keys in G2
+ * @param msg Signed messages
+ * @param n Number of public keys/messages
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_core_aggregate_verify_G1(const octet *sig, const ECP2_ZZZ PK[], const octet msg[], unsigned int n, const octet *dst);
+
+/**
+ * @brief Verify an aggregated signature in the minimal-pubkey-size setting.
+ *
+ * @param sig Aggregated signature
+ * @param pk Public keys in G1
+ * @param msg Signed messages
+ * @param n Number of public keys/messages
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_core_aggregate_verify_G2(const octet *sig, const ECP_ZZZ PK[], const octet msg[], unsigned int n, const octet *dst);
+
+/**
+ * @brief Generate a proof of possession (POP) for a given secret key in the
+ * minimal-sig-size setting.
+ *
+ * @param proof Output proof of possession
+ * @param sk Secret key
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_pop_prove_G1(octet *proof, const char *sk);
+
+/**
+ * @brief Generate a proof of possession (POP) for a given secret key in the
+ * minimal-pubkey-size setting.
+ *
+ * @param proof Output proof of possession
+ * @param sk Secret key
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_pop_prove_G2(octet *proof, const char *sk);
+
+/**
+ * @brief Verify a proof of possession and its corresponding public key in the
+ * minimal-sig-size setting.
+ *
+ * @param proof Proof of possession
+ * @param PK Public key associated to the proof of possession
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_pop_verify_G1(const octet *proof, const ECP2_ZZZ *PK);
+
+/**
+ * @brief Verify a proof of possession and its corresponding public key in the
+ * minimal-pubkey-size setting.
+ *
+ * @param proof Proof of possession
+ * @param PK Public key associated to the proof of possession
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_pop_verify_G2(const octet *proof, const ECP_ZZZ *PK);
+
+/**
+ * @brief Verify an aggregated signature of the same message under different
+ * public keys in the minimal-sig-size setting.
+ * Note it is the responsibility of the caller that all public keys passed as
+ * arguments to this algorithm MUST have a corresponding proof of possession,
+ * and the result of evaluating PopVerify on each public key and its proof MUST
+ * be VALID.
+ *
+ * @param sig Aggregated signature
+ * @param pk Public keys in G2
+ * @param msg Signed message
+ * @param n Number of public keys
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_fast_aggregate_verify_G1(const octet *sig, const ECP2_ZZZ PK[], const octet *msg, unsigned int n, const octet *dst);
+
+/**
+ * @brief Verify an aggregated signature of the same message under different
+ * public keys in the minimal-pubkey-size setting.
+ * Note it is the responsibility of the caller that all public keys passed as
+ * arguments to this algorithm MUST have a corresponding proof of possession,
+ * and the result of evaluating PopVerify on each public key and its proof MUST
+ * be VALID.
+ *
+ * @param sig Aggregated signature
+ * @param pk Public keys in G1
+ * @param msg Signed message
+ * @param n Number of public keys
+ * @param dst Domain separation tag
+ *
+ * @return 0 if successful, error code otherwise
+ */
+int BLS_IETF_ZZZ_fast_aggregate_verify_G2(const octet *sig, const ECP_ZZZ PK[], const octet *msg, unsigned int n, const octet *dst);
+
+#endif
diff --git a/include/config_curve.h.in b/include/config_curve.h.in
index 9b28c1a..08953b5 100644
--- a/include/config_curve.h.in
+++ b/include/config_curve.h.in
@@ -31,8 +31,8 @@
 
 
 #if PAIRING_FRIENDLY_ZZZ != NOT
-//#define USE_GLV_ZZZ	  /**< Note this method is patented (GLV), so maybe you want to comment this out */
-//#define USE_GS_G2_ZZZ /**< Well we didn't patent it :) But may be covered by GLV patent :( */
+//#define USE_GLV_ZZZ	//Note this method is patented (GLV), so maybe you want to comment this out
+//#define USE_GS_G2_ZZZ //Well we didn't patent it :) But may be covered by GLV patent :(
 #define USE_GS_GT_ZZZ /**< Not patented, so probably safe to always use this */
 
 #define POSITIVEX 0
diff --git a/include/ecdh.h.in b/include/ecdh.h.in
index cbeae6a..d37c6d9 100644
--- a/include/ecdh.h.in
+++ b/include/ecdh.h.in
@@ -34,8 +34,8 @@
 
 /*** START OF USER CONFIGURABLE SECTION -  ***/
 
-//#define EAS_ZZZ 16 /**< Symmetric Key size - 128 bits */
-//#define HASH_TYPE_ECC_ZZZ SHA512  /**< Hash type */
+//#define //EAS_ZZZ 16 Symmetric Key size - 128 bits
+//#define //HASH_TYPE_ECC_ZZZ SHA512 Hash type
 
 /*** END OF USER CONFIGURABLE SECTION ***/
 
@@ -66,7 +66,7 @@
 	@param W the input public key to be validated
 	@return 0 if public key is OK, or an error code
  */
-extern int  ECP_ZZZ_PUBLIC_KEY_VALIDATE(octet *W);
+extern int  ECP_ZZZ_PUBLIC_KEY_VALIDATE(const octet *W);
 
 /* ECDH primitives */
 
@@ -78,8 +78,7 @@
 	@param K the output shared key, in fact the x-coordinate of s.W
 	@return 0 or an error code
  */
-extern int ECP_ZZZ_SVDP_DH(octet *s,octet *W,octet *K);
-/*extern int ECPSVDP_DHC(octet *,octet *,int,octet *);*/
+extern int ECP_ZZZ_SVDP_DH(const octet *s,const octet *W,octet *K);
 
 /*#if CURVETYPE!=MONTGOMERY */
 /* ECIES functions */
@@ -99,7 +98,7 @@
 	@param C the output ciphertext
 	@param T the output HMAC tag, part of the ciphertext
  */
-extern void ECP_ZZZ_ECIES_ENCRYPT(int h,octet *P1,octet *P2,csprng *R,octet *W,octet *M,int len,octet *V,octet *C,octet *T);
+extern void ECP_ZZZ_ECIES_ENCRYPT(int h,const octet *P1,const octet *P2,csprng *R,const octet *W,const octet *M,int len,octet *V,octet *C,octet *T);
 /**	@brief ECIES Decryption
  *
 	IEEE-1363 ECIES Decryption
@@ -113,7 +112,7 @@
 	@param M the output plaintext message
 	@return 1 if successful, else 0
  */
-extern int ECP_ZZZ_ECIES_DECRYPT(int h,octet *P1,octet *P2,octet *V,octet *C,octet *T,octet *U,octet *M);
+extern int ECP_ZZZ_ECIES_DECRYPT(int h,const octet *P1,const octet *P2,const octet *V,octet *C,const octet *T,const octet *U,octet *M);
 
 /* ECDSA functions */
 /**	@brief ECDSA Signature
@@ -128,7 +127,7 @@
 	@param d component of the output signature
 
  */
-extern int ECP_ZZZ_SP_DSA(int h,csprng *R,octet *k,octet *s,octet *M,octet *c,octet *d);
+extern int ECP_ZZZ_SP_DSA(int h,csprng *R,const octet *k,const octet *s,const octet *M,octet *c,octet *d);
 /**	@brief ECDSA Signature Verification
  *
 	IEEE-1363 ECDSA Signature Verification
@@ -139,7 +138,7 @@
 	@param d component of the input signature
 	@return 0 or an error code
  */
-extern int ECP_ZZZ_VP_DSA(int h,octet *W,octet *M,octet *c,octet *d);
+extern int ECP_ZZZ_VP_DSA(int h,const octet *W,const octet *M,octet *c,octet *d);
 /*#endif*/
 
 #endif
diff --git a/include/ecdh_support.h b/include/ecdh_support.h
index 85b200d..78fb167 100644
--- a/include/ecdh_support.h
+++ b/include/ecdh_support.h
@@ -40,7 +40,7 @@
 	@param w output
 	@param pad padding
  */
-extern void ehashit(int sha,octet *p,int n,octet *x,octet *w,int pad);
+extern void ehashit(int sha,const octet *p,int n,const octet *x,octet *w,int pad);
 
 /**	@brief hash an octet into another octet
  *
@@ -48,7 +48,7 @@
 	@param I input octet
 	@param O output octet - H(I)
  */
-extern void HASH(int h,octet *I,octet *O);
+extern void HASH(int h,const octet *I,octet *O);
 /**	@brief HMAC of message M using key K to create tag of length len in octet tag
  *
 	IEEE-1363 MAC1 function. Uses SHA256 internally.
@@ -59,9 +59,7 @@
 	@param tag is the output HMAC
 	@return 0 for bad parameters, else 1
  */
-extern int HMAC(int h,octet *M,octet *K,int len,octet *tag);
-
-/*extern void KDF1(octet *,int,octet *);*/
+extern int HMAC(int h,const octet *M,const octet *K,int len,octet *tag);
 
 /**	@brief Key Derivation Function - generates key K from inputs Z and P
  *
@@ -72,7 +70,7 @@
 	@param len is output desired length of key
 	@param K is the derived key
  */
-extern void KDF2(int h,octet *Z,octet *P,int len,octet *K);
+extern void KDF2(int h,const octet *Z,const octet *P,int len,octet *K);
 /**	@brief Password Based Key Derivation Function - generates key K from password, salt and repeat counter
  *
 	PBKDF2 Password Based Key Derivation Function. Uses SHA256 internally.
@@ -83,7 +81,7 @@
 	@param len is output desired length
 	@param K is the derived key
  */
-extern void PBKDF2(int h,octet *P,octet *S,int rep,int len,octet *K);
+extern void PBKDF2(int h,const octet *P,octet *S,int rep,int len,octet *K);
 /**	@brief AES encrypts a plaintext to a ciphtertext
  *
 	IEEE-1363 AES_CBC_IV0_ENCRYPT function. Encrypts in CBC mode with a zero IV, padding as necessary to create a full final block.
@@ -91,7 +89,7 @@
 	@param P input plaintext octet
 	@param C output ciphertext octet
  */
-extern void AES_CBC_IV0_ENCRYPT(octet *K,octet *P,octet *C);
+extern void AES_CBC_IV0_ENCRYPT(octet *K,const octet *P,octet *C);
 /**	@brief AES encrypts a plaintext to a ciphtertext
  *
 	IEEE-1363 AES_CBC_IV0_DECRYPT function. Decrypts in CBC mode with a zero IV.
@@ -100,7 +98,7 @@
 	@param P output plaintext octet
 	@return 0 if bad input, else 1
  */
-extern int AES_CBC_IV0_DECRYPT(octet *K,octet *C,octet *P);
+extern int AES_CBC_IV0_DECRYPT(octet *K,const octet *C,octet *P);
 
 /* ECDH primitives - support functions */
 /**	@brief Generate an ECC public/private key pair
diff --git a/include/ecp.h.in b/include/ecp.h.in
index f07230b..a0ca988 100644
--- a/include/ecp.h.in
+++ b/include/ecp.h.in
@@ -97,6 +97,10 @@
 extern const BIG_XXX CURVE_WB_ZZZ[4];	 /**< BN curve constant for GS decomposition */
 extern const BIG_XXX CURVE_BB_ZZZ[4][4]; /**< BN curve constant for GS decomposition */
 
+extern const BIG_XXX SSWU_A1_ZZZ; /**< Parameter A' of the Weierstrass curve for 11-isogeny for BLS12-381 G1 */
+extern const BIG_XXX SSWU_B1_ZZZ; /**< Parameter B' of the Weierstrass curve for 11-isogeny for BLS12-381 G1 */
+extern const BIG_XXX SSWU_Z1_ZZZ; /**< A non-zero element of finite field for EC mapping */
+extern const BIG_XXX H_EFF_G1;    /**< Scalar parameter for clear_cofactor for BLS12-381 G1 */
 
 /**
 	@brief ECP structure - Elliptic Curve Point over base field
@@ -104,7 +108,7 @@
 
 typedef struct
 {
-//    int inf; /**< Infinity Flag - not needed for Edwards representation */
+//    int inf; //Infinity Flag - not needed for Edwards representation
 
     FP_YYY x; /**< x-coordinate of point */
 #if CURVETYPE_ZZZ!=MONTGOMERY
@@ -120,20 +124,20 @@
 	@param P ECP point to be tested
 	@return 1 if infinity, else returns 0
  */
-extern int ECP_ZZZ_isinf(ECP_ZZZ *P);
+extern int ECP_ZZZ_isinf(const ECP_ZZZ *P);
 /**	@brief Tests for equality of two ECPs
  *
 	@param P ECP instance to be compared
 	@param Q ECP instance to be compared
 	@return 1 if P=Q, else returns 0
  */
-extern int ECP_ZZZ_equals(ECP_ZZZ *P,ECP_ZZZ *Q);
+extern int ECP_ZZZ_equals(const ECP_ZZZ *P,const ECP_ZZZ *Q);
 /**	@brief Copy ECP point to another ECP point
  *
 	@param P ECP instance, on exit = Q
 	@param Q ECP instance to be copied
  */
-extern void ECP_ZZZ_copy(ECP_ZZZ *P,ECP_ZZZ *Q);
+extern void ECP_ZZZ_copy(ECP_ZZZ *P,const ECP_ZZZ *Q);
 /**	@brief Negation of an ECP point
  *
 	@param P ECP instance, on exit = -P
@@ -168,7 +172,7 @@
 	@param P ECP instance (x,[y])
 	@return -1 if P is point-at-infinity, else 0
  */
-extern int ECP_ZZZ_get(BIG_XXX x,ECP_ZZZ *P);
+extern int ECP_ZZZ_get(BIG_XXX x,const ECP_ZZZ *P);
 /**	@brief Adds ECP instance Q to ECP instance P, given difference D=P-Q
  *
 	Differential addition of points on a Montgomery curve
@@ -186,7 +190,7 @@
 	@param y BIG y coordinate of point
 	@return 1 if point exists, else 0
  */
-extern int ECP_ZZZ_set(ECP_ZZZ *P,BIG_XXX x,BIG_XXX y);
+extern int ECP_ZZZ_set(ECP_ZZZ *P,const BIG_XXX x,const BIG_XXX y);
 /**	@brief Extract x and y coordinates of an ECP point P
  *
 	If x=y, returns only x
@@ -195,19 +199,19 @@
 	@param P ECP instance (x,y)
 	@return sign of y, or -1 if P is point-at-infinity
  */
-extern int ECP_ZZZ_get(BIG_XXX x,BIG_XXX y,ECP_ZZZ *P);
+extern int ECP_ZZZ_get(BIG_XXX x,BIG_XXX y,const ECP_ZZZ *P);
 /**	@brief Adds ECP instance Q to ECP instance P
  *
 	@param P ECP instance, on exit =P+Q
 	@param Q ECP instance to be added to P
  */
-extern void ECP_ZZZ_add(ECP_ZZZ *P,ECP_ZZZ *Q);
+extern void ECP_ZZZ_add(ECP_ZZZ *P,const ECP_ZZZ *Q);
 /**	@brief Subtracts ECP instance Q from ECP instance P
  *
 	@param P ECP instance, on exit =P-Q
 	@param Q ECP instance to be subtracted from P
  */
-extern void ECP_ZZZ_sub(ECP_ZZZ *P,ECP_ZZZ *Q);
+extern void ECP_ZZZ_sub(ECP_ZZZ *P,const ECP_ZZZ *Q);
 /**	@brief Set ECP to point(x,y) given just x and sign of y
  *
 	Point P set to infinity if no such point on the curve. If x is on the curve then y is calculated from the curve equation.
@@ -216,7 +220,7 @@
 	@param x BIG x coordinate of point
 	@param s an integer representing the "sign" of y, in fact its least significant bit.
  */
-extern int ECP_ZZZ_setx(ECP_ZZZ *P,BIG_XXX x,int s);
+extern int ECP_ZZZ_setx(ECP_ZZZ *P,const BIG_XXX x,int s);
 
 #endif
 
@@ -231,7 +235,7 @@
 	@param Q ECP instance of correct order
 	@param w OCTET byte array to be mapped
  */
-extern void ECP_ZZZ_mapit(ECP_ZZZ *Q,octet *w);
+extern void ECP_ZZZ_mapit(ECP_ZZZ *Q,const octet *w);
 
 /**	@brief Converts an ECP point from Projective (x,y,z) coordinates to affine (x,y) coordinates
  *
@@ -253,7 +257,7 @@
  *
 	@param P ECP instance to be printed
  */
-extern void ECP_ZZZ_rawoutput(ECP_ZZZ * P);
+extern void ECP_ZZZ_rawoutput(const ECP_ZZZ * P);
 
 /**	@brief Formats and outputs an ECP point to an octet string
 	The octet string is normally in the standard form 0x04|x|y
@@ -264,7 +268,7 @@
 	@param S output octet string
 	@param P ECP instance to be converted to an octet string
  */
-extern void ECP_ZZZ_toOctet(octet *S,ECP_ZZZ *P,bool c);
+extern void ECP_ZZZ_toOctet(octet *S,const ECP_ZZZ *P,bool c);
 /**	@brief Creates an ECP point from an octet string
  *
 	The octet string is normally in the standard form 0x04|x|y
@@ -275,7 +279,7 @@
 	@param S input octet string
 	return 1 if octet string corresponds to a point on the curve, else 0
  */
-extern int ECP_ZZZ_fromOctet(ECP_ZZZ *P,octet *S);
+extern int ECP_ZZZ_fromOctet(ECP_ZZZ *P,const octet *S);
 /**	@brief Doubles an ECP instance P
  *
 	@param P ECP instance, on exit =2*P
@@ -295,7 +299,7 @@
 	@param b BIG number multiplier
 
  */
-extern void ECP_ZZZ_mul(ECP_ZZZ *P,BIG_XXX b);
+extern void ECP_ZZZ_mul(ECP_ZZZ *P,const BIG_XXX b);
 /**	@brief Calculates double multiplication P=e*P+f*Q, side-channel resistant
  *
 	@param P ECP instance, on exit =e*P+f*Q
@@ -303,12 +307,23 @@
 	@param e BIG number multiplier
 	@param f BIG number multiplier
  */
-extern void ECP_ZZZ_mul2(ECP_ZZZ *P,ECP_ZZZ *Q,BIG_XXX e,BIG_XXX f);
+extern void ECP_ZZZ_mul2(ECP_ZZZ *P,const ECP_ZZZ *Q,const BIG_XXX e,const BIG_XXX f);
 /**	@brief Get Group Generator from ROM
  *
 	@param G ECP instance
  */
 extern void ECP_ZZZ_generator(ECP_ZZZ *G);
 
+/**
+ * @brief Maps a field element to an EC point using Simplified Shallue-van de Woestijne-Ulas (SSWU) method as defined at
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-simplified-swu-for-ab-0.
+ * 
+ * @param x x-coordinate of output EC point
+ * @param y y-coordinate of output EC point
+ * @param u Input field element
+ * 
+ * @return 0 if successful, error code otherwise
+ */
+extern int ECP_ZZZ_sswu(FP_YYY *x, FP_YYY *y, FP_YYY u);
 
 #endif
diff --git a/include/ecp2.h.in b/include/ecp2.h.in
index 046953a..12c7557 100644
--- a/include/ecp2.h.in
+++ b/include/ecp2.h.in
@@ -30,13 +30,15 @@
 #include "fp2_YYY.h"
 #include "config_curve_ZZZ.h"
 
+#define ERR_NULLPOINTER_ECP2 0x00000081
+
 /**
 	@brief ECP2 Structure - Elliptic Curve Point over quadratic extension field
 */
 
 typedef struct
 {
-//    int inf; /**< Infinity Flag */
+//    int inf;  //Infinity Flag
     FP2_YYY x;   /**< x-coordinate of point */
     FP2_YYY y;   /**< y-coordinate of point */
     FP2_YYY z;   /**< z-coordinate of point */
@@ -67,19 +69,27 @@
 extern const BIG_XXX CURVE_Pya_ZZZ; /**< real part of y-coordinate of generator point in group G2 */
 extern const BIG_XXX CURVE_Pyb_ZZZ; /**< imaginary part of y-coordinate of generator point in group G2 */
 
+/* For SSWU with AB == 0 */
+extern const BIG_XXX SSWU_A2re_ZZZ; /**< Parameter A' (real part) of the Weierstrass curve for 3-isogeny for BLS12-381 G2 */
+extern const BIG_XXX SSWU_A2im_ZZZ; /**< Parameter A' (imaginary part) of the Weierstrass curve for 3-isogeny for BLS12-381 G2 */
+extern const BIG_XXX SSWU_B2re_ZZZ; /**< Parameter B' (real part) of the Weierstrass curve for 3-isogeny for BLS12-381 G2 */
+extern const BIG_XXX SSWU_B2im_ZZZ; /**< Parameter B' (imaginary part) of the Weierstrass curve for 3-isogeny for BLS12-381 G2 */
+extern const BIG_XXX SSWU_Z2re_ZZZ; /**< A non-zero element (real part) of finite field for EC mapping */
+extern const BIG_XXX SSWU_Z2im_ZZZ; /**< A non-zero element (imaginary part) of finite field for EC mapping */
+
 /* ECP2 E(Fp2) prototypes */
 /**	@brief Tests for ECP2 point equal to infinity
  *
 	@param P ECP2 point to be tested
 	@return 1 if infinity, else returns 0
  */
-extern int ECP2_ZZZ_isinf(ECP2_ZZZ *P);
+extern int ECP2_ZZZ_isinf(const ECP2_ZZZ *P);
 /**	@brief Copy ECP2 point to another ECP2 point
  *
 	@param P ECP2 instance, on exit = Q
 	@param Q ECP2 instance to be copied
  */
-extern void ECP2_ZZZ_copy(ECP2_ZZZ *P,ECP2_ZZZ *Q);
+extern void ECP2_ZZZ_copy(ECP2_ZZZ *P,const ECP2_ZZZ *Q);
 /**	@brief Set ECP2 to point-at-infinity
  *
 	@param P ECP2 instance to be set to infinity
@@ -105,17 +115,17 @@
 	@param P ECP2 instance (x,y)
 	@return -1 if P is point-at-infinity, else 0
  */
-extern int ECP2_ZZZ_get(FP2_YYY *x,FP2_YYY *y,ECP2_ZZZ *P);
+extern int ECP2_ZZZ_get(FP2_YYY *x,FP2_YYY *y,const ECP2_ZZZ *P);
 /**	@brief Formats and outputs an ECP2 point to the console, converted to affine coordinates
  *
 	@param P ECP2 instance to be printed
  */
-extern void ECP2_ZZZ_output(ECP2_ZZZ *P);
+extern void ECP2_ZZZ_output(const ECP2_ZZZ *P);
 /**	@brief Formats and outputs an ECP2 point to the console, in projective coordinates
  *
 	@param P ECP2 instance to be printed
  */
-extern void ECP2_ZZZ_outputxyz(ECP2_ZZZ *P);
+extern void ECP2_ZZZ_outputxyz(const ECP2_ZZZ *P);
 /**	@brief Formats and outputs an ECP2 point to an octet string
  *
 	The octet string is created in the form x|y.
@@ -123,7 +133,7 @@
 	@param S output octet string
 	@param P ECP2 instance to be converted to an octet string
  */
-extern void ECP2_ZZZ_toOctet(octet *S,ECP2_ZZZ *P);
+extern void ECP2_ZZZ_toOctet(octet *S,const ECP2_ZZZ *P);
 /**	@brief Creates an ECP2 point from an octet string
  *
 	The octet string is in the form x|y
@@ -132,7 +142,7 @@
 	@param S input octet string
 	return 1 if octet string corresponds to a point on the curve, else 0
  */
-extern int ECP2_ZZZ_fromOctet(ECP2_ZZZ *P,octet *S);
+extern int ECP2_ZZZ_fromOctet(ECP2_ZZZ *P,const octet *S);
 /**	@brief Calculate Right Hand Side of curve equation y^2=f(x)
  *
 	Function f(x)=x^3+Ax+B
@@ -140,7 +150,7 @@
 	@param r FP2 value of f(x)
 	@param x FP2 instance
  */
-extern void ECP2_ZZZ_rhs(FP2_YYY *r,FP2_YYY *x);
+extern void ECP2_ZZZ_rhs(FP2_YYY *r,const FP2_YYY *x);
 /**	@brief Set ECP2 to point(x,y) given x and y
  *
 	Point P set to infinity if no such point on the curve.
@@ -149,7 +159,7 @@
 	@param y FP2 y coordinate of point
 	@return 1 if point exists, else 0
  */
-extern int ECP2_ZZZ_set(ECP2_ZZZ *P,FP2_YYY *x,FP2_YYY *y);
+extern int ECP2_ZZZ_set(ECP2_ZZZ *P,const FP2_YYY *x,const FP2_YYY *y);
 /**	@brief Set ECP to point(x,[y]) given x
  *
 	Point P set to infinity if no such point on the curve. Otherwise y coordinate is calculated from x.
@@ -157,7 +167,7 @@
 	@param x BIG x coordinate of point
 	@return 1 if point exists, else 0
  */
-extern int ECP2_ZZZ_setx(ECP2_ZZZ *P,FP2_YYY *x);
+extern int ECP2_ZZZ_setx(ECP2_ZZZ *P,const FP2_YYY *x);
 /**	@brief Negation of an ECP2 point
  *
 	@param P ECP2 instance, on exit = -P
@@ -173,13 +183,13 @@
 	@param P ECP2 instance, on exit =P+Q
 	@param Q ECP2 instance to be added to P
  */
-extern int ECP2_ZZZ_add(ECP2_ZZZ *P,ECP2_ZZZ *Q);
+extern int ECP2_ZZZ_add(ECP2_ZZZ *P,const ECP2_ZZZ *Q);
 /**	@brief Subtracts ECP instance Q from ECP2 instance P
  *
 	@param P ECP2 instance, on exit =P-Q
 	@param Q ECP2 instance to be subtracted from P
  */
-extern void ECP2_ZZZ_sub(ECP2_ZZZ *P,ECP2_ZZZ *Q);
+extern void ECP2_ZZZ_sub(ECP2_ZZZ *P,const ECP2_ZZZ *Q);
 /**	@brief Multiplies an ECP2 instance P by a BIG, side-channel resistant
  *
 	Uses fixed sized windows.
@@ -187,7 +197,7 @@
 	@param b BIG number multiplier
 
  */
-extern void ECP2_ZZZ_mul(ECP2_ZZZ *P,BIG_XXX b);
+extern void ECP2_ZZZ_mul(ECP2_ZZZ *P,const BIG_XXX b);
 /**	@brief Multiplies an ECP2 instance P by the internal modulus p, using precalculated Frobenius constant f
  *
 	Fast point multiplication using Frobenius
@@ -202,14 +212,14 @@
 	@param Q ECP2 array of 4 points
 	@param b BIG array of 4 multipliers
  */
-extern void ECP2_ZZZ_mul4(ECP2_ZZZ *P,ECP2_ZZZ *Q,BIG_XXX *b);
+extern void ECP2_ZZZ_mul4(ECP2_ZZZ *P,const ECP2_ZZZ Q[4],const BIG_XXX b[4]);
 
 /**	@brief Maps random BIG to curve point of correct order
  *
 	@param P ECP2 instance of correct order
 	@param w OCTET byte array to be mapped
  */
-extern void ECP2_ZZZ_mapit(ECP2_ZZZ *P,octet *w);
+extern void ECP2_ZZZ_mapit(ECP2_ZZZ *P,const octet *w);
 
 /**	@brief Get Group Generator from ROM
  *
@@ -217,4 +227,21 @@
  */
 extern void ECP2_ZZZ_generator(ECP2_ZZZ *G);
 
+/**
+ * @brief Maps a quadratic extension field element to an ECP2 using Simplified Shallue-van de Woestijne-Ulas (SSWU) method as defined at
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-simplified-swu-for-ab-0.
+ * 
+ * @param x x-coordinate of output ECP2
+ * @param y y-coordinate of output ECP2
+ * @param u Input quadratic extension field element
+ */
+extern int ECP2_ZZZ_sswu(FP2_YYY *x, FP2_YYY *y, FP2_YYY u);
+
+/**
+ * @brief Cofactor clearing 
+ * 
+ * @param P Input/output point
+ */
+extern int ECP2_ZZZ_clearcofactor(ECP2_ZZZ *P);
+
 #endif
diff --git a/include/ff.h.in b/include/ff.h.in
index 931dd54..16cc6c2 100644
--- a/include/ff.h.in
+++ b/include/ff.h.in
@@ -33,9 +33,8 @@
 #define HFLEN_WWW (FFLEN_WWW/2) /**< Useful for half-size RSA private key operations */
 #define P_MBITS_WWW (MODBYTES_XXX*8) /**< Number of bits in modulus */
 #define P_TBITS_WWW (P_MBITS_WWW%BASEBITS_XXX) /**< TODO  */
-#define P_EXCESS_WWW(a) (((a[NLEN_XXX-1])>>(P_TBITS_WWW))+1) /**< TODO */
-#define P_FEXCESS_WWW ((chunk)1<<(BASEBITS_XXX*NLEN_XXX-P_MBITS_WWW-1)) /**< TODO */
-
+#define P_EXCESS_WWW(a) (((a[NLEN_XXX-1])>>(P_TBITS_WWW))+1) /**< TODO  */
+#define P_FEXCESS_WWW ((chunk)1<<(BASEBITS_XXX*NLEN_XXX-P_MBITS_WWW-1)) /**< TODO  */
 
 /* Finite Field Prototypes */
 /**	@brief Copy one FF element of given length to another
@@ -175,7 +174,7 @@
 	@param S input octet string
 	@param n size of FF in BIGs
  */
-extern void FF_WWW_fromOctet(BIG_XXX *x,octet *S,int n);
+extern void FF_WWW_fromOctet(BIG_XXX *x,const octet *S,int n);
 /**	@brief Multiplication of two FFs
  *
 	Uses Karatsuba method internally
@@ -341,7 +340,7 @@
 	@param p FF modulus
 	@param n size of FF in BIGs
  */
-extern void FF_WWW_ct_pow_big(BIG_XXX *r,BIG_XXX *x,BIG_XXX e,BIG_XXX *p,int n);
+extern void FF_WWW_ct_pow_big(BIG_XXX *r,BIG_XXX *x,const BIG_XXX e,BIG_XXX *p,int n);
 /**	@brief Calculate r=x^e.y^f mod p for FF e and f, side channel resistant
  *
 	@param r  FF instance, on exit = x^e.y^f mod p
diff --git a/include/fp.h.in b/include/fp.h.in
index 245e6e5..23a5615 100644
--- a/include/fp.h.in
+++ b/include/fp.h.in
@@ -64,7 +64,7 @@
 	@param x BIG number to be tested
 	@return 1 if zero, else returns 0
  */
-extern int FP_YYY_iszilch(FP_YYY *x);
+extern int FP_YYY_iszilch(const FP_YYY *x);
 
 
 /**	@brief Set FP to zero
@@ -78,7 +78,7 @@
 	@param y FP number to be copied to
 	@param x FP to be copied from
  */
-extern void FP_YYY_copy(FP_YYY *y,FP_YYY *x);
+extern void FP_YYY_copy(FP_YYY *y,const FP_YYY *x);
 
 /**	@brief Copy from ROM to an FP
  *
@@ -94,7 +94,7 @@
 	@param y FP number
 	@return 1 if equal, else returns 0
  */
-extern int FP_YYY_equals(FP_YYY *x,FP_YYY *y);
+extern int FP_YYY_equals(const FP_YYY *x,const FP_YYY *y);
 
 
 /**	@brief Conditional constant time swap of two FP numbers
@@ -112,19 +112,19 @@
 	@param y another FP number
 	@param s copy takes place if not equal to 0
  */
-extern void FP_YYY_cmove(FP_YYY *x,FP_YYY *y,int s);
+extern void FP_YYY_cmove(FP_YYY *x,const FP_YYY *y,int s);
 /**	@brief Converts from BIG integer to residue form mod Modulus
  *
 	@param x BIG number to be converted
 	@param y FP result
  */
-extern void FP_YYY_nres(FP_YYY *y,BIG_XXX x);
+extern void FP_YYY_nres(FP_YYY *y,const BIG_XXX x);
 /**	@brief Converts from residue form back to BIG integer form
  *
 	@param y FP number to be converted to BIG
 	@param x BIG result
  */
-extern void FP_YYY_redc(BIG_XXX x,FP_YYY *y);
+extern void FP_YYY_redc(BIG_XXX x,const FP_YYY *y);
 /**	@brief Sets FP to representation of unity in residue form
  *
 	@param x FP number to be set equal to unity.
@@ -136,7 +136,7 @@
 	@param r BIG number, on exit = d mod Modulus
 	@param d DBIG number to be reduced
  */
-extern void FP_YYY_mod(BIG_XXX r,DBIG_XXX d);
+extern void FP_YYY_mod(BIG_XXX r,const DBIG_XXX d);
 
 #ifdef FUSED_MODMUL
 extern void FP_YYY_modmul(BIG_XXX,BIG_XXX,BIG_XXX);
@@ -149,14 +149,14 @@
 	@param y FP number, the multiplicand
 	@param z FP number, the multiplier
  */
-extern void FP_YYY_mul(FP_YYY *x,FP_YYY *y,FP_YYY *z);
+extern void FP_YYY_mul(FP_YYY *x,const FP_YYY *y,const FP_YYY *z);
 /**	@brief Fast Modular multiplication of an FP, by a small integer, mod Modulus
  *
 	@param x FP number, on exit the modular product = y*i mod Modulus
 	@param y FP number, the multiplicand
 	@param i a small number, the multiplier
  */
-extern void FP_YYY_imul(FP_YYY *x,FP_YYY *y,int i);
+extern void FP_YYY_imul(FP_YYY *x,const FP_YYY *y,int i);
 /**	@brief Fast Modular squaring of an FP, mod Modulus
  *
 	Uses appropriate fast modular reduction method
@@ -171,20 +171,20 @@
 	@param y FP number
 	@param z FP number
  */
-extern void FP_YYY_add(FP_YYY *x,FP_YYY *y,FP_YYY *z);
+extern void FP_YYY_add(FP_YYY *x,const FP_YYY *y,const FP_YYY *z);
 /**	@brief Modular subtraction of two FPs, mod Modulus
  *
 	@param x FP number, on exit the modular difference = y-z mod Modulus
 	@param y FP number
 	@param z FP number
  */
-extern void FP_YYY_sub(FP_YYY *x,FP_YYY *y,FP_YYY *z);
+extern void FP_YYY_sub(FP_YYY *x,const FP_YYY *y,const FP_YYY *z);
 /**	@brief Modular division by 2 of an FP, mod Modulus
  *
 	@param x FP number, on exit =y/2 mod Modulus
 	@param y FP number
  */
-extern void FP_YYY_div2(FP_YYY *x,FP_YYY *y);
+extern void FP_YYY_div2(FP_YYY *x,const FP_YYY *y);
 /**	@brief Fast Modular exponentiation of an FP, to the power of a BIG, mod Modulus
  *
 	@param x FP number, on exit  = y^z mod Modulus
@@ -204,18 +204,18 @@
 	@param x FP number, on exit = -y mod Modulus
 	@param y FP number
  */
-extern void FP_YYY_neg(FP_YYY *x,FP_YYY *y);
+extern void FP_YYY_neg(FP_YYY *x,const FP_YYY *y);
 /**	@brief Outputs an FP number to the console
  *
 	Converts from residue form before output
 	@param x an FP number
  */
-extern void FP_YYY_output(FP_YYY *x);
+extern void FP_YYY_output(const FP_YYY *x);
 /**	@brief Outputs an FP number to the console, in raw form
  *
 	@param x a BIG number
  */
-extern void FP_YYY_rawoutput(FP_YYY *x);
+extern void FP_YYY_rawoutput(const FP_YYY *x);
 /**	@brief Reduces possibly unreduced FP mod Modulus
  *
 	@param x FP number, on exit reduced mod Modulus
diff --git a/include/fp12.h.in b/include/fp12.h.in
index 5cb5d83..38ff93c 100644
--- a/include/fp12.h.in
+++ b/include/fp12.h.in
@@ -50,19 +50,19 @@
 	@param x FP12 number to be tested
 	@return 1 if zero, else returns 0
  */
-extern int FP12_YYY_iszilch(FP12_YYY *x);
+extern int FP12_YYY_iszilch(const FP12_YYY *x);
 /**	@brief Tests for FP12 equal to unity
  *
 	@param x FP12 number to be tested
 	@return 1 if unity, else returns 0
  */
-extern int FP12_YYY_isunity(FP12_YYY *x);
+extern int FP12_YYY_isunity(const FP12_YYY *x);
 /**	@brief Copy FP12 to another FP12
  *
 	@param x FP12 instance, on exit = y
 	@param y FP12 instance to be copied
  */
-extern void FP12_YYY_copy(FP12_YYY *x,FP12_YYY *y);
+extern void FP12_YYY_copy(FP12_YYY *x,const FP12_YYY *y);
 /**	@brief Set FP12 to unity
  *
 	@param x FP12 instance to be set to one
@@ -81,21 +81,21 @@
 	@param y FP12 instance to be compared
 	@return 1 if x=y, else returns 0
  */
-extern int FP12_YYY_equals(FP12_YYY *x,FP12_YYY *y);
+extern int FP12_YYY_equals(const FP12_YYY *x,const FP12_YYY *y);
 /**	@brief Conjugation of FP12
  *
 	If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c))
 	@param x FP12 instance, on exit = conj(y)
 	@param y FP12 instance
  */
-extern void FP12_YYY_conj(FP12_YYY *x,FP12_YYY *y);
+extern void FP12_YYY_conj(FP12_YYY *x,const FP12_YYY *y);
 /**	@brief Initialise FP12 from single FP4
  *
 	Sets first FP4 component of an FP12, other components set to zero
 	@param x FP12 instance to be initialised
 	@param a FP4 to form first part of FP4
  */
-extern void FP12_YYY_from_FP4(FP12_YYY *x,FP4_YYY *a);
+extern void FP12_YYY_from_FP4(FP12_YYY *x,const FP4_YYY *a);
 /**	@brief Initialise FP12 from three FP4s
  *
 	@param x FP12 instance to be initialised
@@ -103,7 +103,7 @@
 	@param b FP4 to form second part of FP12
 	@param c FP4 to form third part of FP12
  */
-extern void FP12_YYY_from_FP4s(FP12_YYY *x,FP4_YYY *a,FP4_YYY* b,FP4_YYY *c);
+extern void FP12_YYY_from_FP4s(FP12_YYY *x,const FP4_YYY *a,const FP4_YYY* b,const FP4_YYY *c);
 /**	@brief Fast Squaring of an FP12 in "unitary" form
  *
 	@param x FP12 instance, on exit = y^2
@@ -122,14 +122,14 @@
 	@param x FP12 instance, on exit = x*y
 	@param y FP12 instance, of special form
  */
-extern void FP12_YYY_smul(FP12_YYY *x,FP12_YYY *y);
+extern void FP12_YYY_smul(FP12_YYY *x,const FP12_YYY *y);
 
 /**	@brief Fast multiplication of what may be sparse multiplicands
  *
 	@param x FP12 instance, on exit = x*y
 	@param y FP12 instance, of special form
  */
-extern void FP12_YYY_ssmul(FP12_YYY *x,FP12_YYY *y);
+extern void FP12_YYY_ssmul(FP12_YYY *x,const FP12_YYY *y);
 
 
 /**	@brief Full unconditional Multiplication of two FP12s
@@ -137,7 +137,7 @@
 	@param x FP12 instance, on exit = x*y
 	@param y FP12 instance, the multiplier
  */
-extern void FP12_YYY_mul(FP12_YYY *x,FP12_YYY *y);
+extern void FP12_YYY_mul(FP12_YYY *x,const FP12_YYY *y);
 /**	@brief Inverting an FP12
  *
 	@param x FP12 instance, on exit = 1/y
@@ -150,7 +150,7 @@
 	@param x FP12 instance
 	@param b BIG number
  */
-extern void FP12_YYY_pow(FP12_YYY *r,FP12_YYY *x,BIG_XXX b);
+extern void FP12_YYY_pow(FP12_YYY *r,const FP12_YYY *x,const BIG_XXX b);
 /**	@brief Raises an FP12 instance x to a small integer power, side-channel resistant
  *
 	@param x FP12 instance, on exit = x^i
@@ -166,7 +166,7 @@
 	@param e BIG exponent
 	@param r BIG group order
  */
-extern void FP12_YYY_compow(FP4_YYY *c,FP12_YYY *x,BIG_XXX e,BIG_XXX r);
+extern void FP12_YYY_compow(FP4_YYY *c,const FP12_YYY *x,const BIG_XXX e,const BIG_XXX r);
 
 /**	@brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant
  *
@@ -174,13 +174,13 @@
 	@param x FP12 array with 4 FP12s
 	@param b BIG array of 4 exponents
  */
-extern void FP12_YYY_pow4(FP12_YYY *r,FP12_YYY *x,BIG_XXX *b);
+extern void FP12_YYY_pow4(FP12_YYY *r,const FP12_YYY *x,const BIG_XXX b[4]);
 /**	@brief Raises an FP12 to the power of the internal modulus p, using the Frobenius
  *
 	@param x FP12 instance, on exit = x^p
 	@param f FP2 precalculated Frobenius constant
  */
-extern void FP12_YYY_frob(FP12_YYY *x,FP2_YYY *f);
+extern void FP12_YYY_frob(FP12_YYY *x,const FP2_YYY *f);
 /**	@brief Reduces all components of possibly unreduced FP12 mod Modulus
  *
 	@param x FP12 instance, on exit reduced mod Modulus
@@ -202,7 +202,7 @@
 	@param S output octet string
 	@param x FP12 instance to be converted to an octet string
  */
-extern void FP12_YYY_toOctet(octet *S,FP12_YYY *x);
+extern void FP12_YYY_toOctet(octet *S,const FP12_YYY *x);
 /**	@brief Creates an FP12 instance from an octet string
  *
 	De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components.
@@ -210,14 +210,14 @@
 	@param S input octet string
 
  */
-extern void FP12_YYY_fromOctet(FP12_YYY *x,octet *S);
+extern void FP12_YYY_fromOctet(FP12_YYY *x,const octet *S);
 /**	@brief Calculate the trace of an FP12
  *
 	@param t FP4 trace of x, on exit = tr(x)
 	@param x FP12 instance
 
  */
-extern void FP12_YYY_trace(FP4_YYY *t,FP12_YYY *x);
+extern void FP12_YYY_trace(FP4_YYY *t,const FP12_YYY *x);
 
 /**	@brief Conditional copy of FP12 number
  *
@@ -226,7 +226,7 @@
 	@param y another FP12 instance
 	@param s copy only takes place if not equal to 0
  */
-extern void FP12_YYY_cmove(FP12_YYY *x,FP12_YYY *y,int s);
+extern void FP12_YYY_cmove(FP12_YYY *x,const FP12_YYY *y,int s);
 
 
 #endif
diff --git a/include/fp16.h.in b/include/fp16.h.in
index bb13ed3..c1ecdb0 100644
--- a/include/fp16.h.in
+++ b/include/fp16.h.in
@@ -157,7 +157,7 @@
 	@param y FP16 instance
 	@param i an integer
  */
-extern void FP16_YYY_imul(FP16_YYY *x,FP16_YYY *y,int i);
+extern void FP16_YYY_imul(FP16_YYY *x,const FP16_YYY *y,int i);
 /**	@brief Squaring an FP16
  *
 	@param x FP16 instance, on exit = y^2
diff --git a/include/fp2.h.in b/include/fp2.h.in
index 8442141..76b8434 100644
--- a/include/fp2.h.in
+++ b/include/fp2.h.in
@@ -46,7 +46,7 @@
 	@param x FP2 number to be tested
 	@return 1 if zero, else returns 0
  */
-extern int FP2_YYY_iszilch(FP2_YYY *x);
+extern int FP2_YYY_iszilch(const FP2_YYY *x);
 /**	@brief Conditional copy of FP2 number
  *
 	Conditionally copies second parameter to the first (without branching)
@@ -54,54 +54,54 @@
 	@param y another FP2 instance
 	@param s copy only takes place if not equal to 0
  */
-extern void FP2_YYY_cmove(FP2_YYY *x,FP2_YYY *y,int s);
+extern void FP2_YYY_cmove(FP2_YYY *x,const FP2_YYY *y,int s);
 /**	@brief Tests for FP2 equal to one
  *
 	@param x FP2 instance to be tested
 	@return 1 if x=1, else returns 0
  */
-extern int FP2_YYY_isunity(FP2_YYY *x);
+extern int FP2_YYY_isunity(const FP2_YYY *x);
 /**	@brief Tests for equality of two FP2s
  *
 	@param x FP2 instance to be compared
 	@param y FP2 instance to be compared
 	@return 1 if x=y, else returns 0
  */
-extern int FP2_YYY_equals(FP2_YYY *x,FP2_YYY *y);
+extern int FP2_YYY_equals(const FP2_YYY *x,const FP2_YYY *y);
 /**	@brief Initialise FP2 from two FP numbers
  *
 	@param x FP2 instance to be initialised
 	@param a FP to form real part of FP2
 	@param b FP to form imaginary part of FP2
  */
-extern void FP2_YYY_from_FPs(FP2_YYY *x,FP_YYY *a,FP_YYY *b);
+extern void FP2_YYY_from_FPs(FP2_YYY *x,const FP_YYY *a,const FP_YYY *b);
 /**	@brief Initialise FP2 from two BIG integers
  *
 	@param x FP2 instance to be initialised
 	@param a BIG to form real part of FP2
 	@param b BIG to form imaginary part of FP2
  */
-extern void FP2_YYY_from_BIGs(FP2_YYY *x,BIG_XXX a,BIG_XXX b);
+extern void FP2_YYY_from_BIGs(FP2_YYY *x,const BIG_XXX a,const BIG_XXX b);
 /**	@brief Initialise FP2 from single FP
  *
 	Imaginary part is set to zero
 	@param x FP2 instance to be initialised
 	@param a FP to form real part of FP2
  */
-extern void FP2_YYY_from_FP(FP2_YYY *x,FP_YYY *a);
+extern void FP2_YYY_from_FP(FP2_YYY *x,const FP_YYY *a);
 /**	@brief Initialise FP2 from single BIG
  *
 	Imaginary part is set to zero
 	@param x FP2 instance to be initialised
 	@param a BIG to form real part of FP2
  */
-extern void FP2_YYY_from_BIG(FP2_YYY *x,BIG_XXX a);
+extern void FP2_YYY_from_BIG(FP2_YYY *x,const BIG_XXX a);
 /**	@brief Copy FP2 to another FP2
  *
 	@param x FP2 instance, on exit = y
 	@param y FP2 instance to be copied
  */
-extern void FP2_YYY_copy(FP2_YYY *x,FP2_YYY *y);
+extern void FP2_YYY_copy(FP2_YYY *x,const FP2_YYY *y);
 /**	@brief Set FP2 to zero
  *
 	@param x FP2 instance to be set to zero
@@ -117,55 +117,55 @@
 	@param x FP2 instance, on exit = -y
 	@param y FP2 instance
  */
-extern void FP2_YYY_neg(FP2_YYY *x,FP2_YYY *y);
+extern void FP2_YYY_neg(FP2_YYY *x,const FP2_YYY *y);
 /**	@brief Conjugation of FP2
  *
 	If y=(a,b) on exit x=(a,-b)
 	@param x FP2 instance, on exit = conj(y)
 	@param y FP2 instance
  */
-extern void FP2_YYY_conj(FP2_YYY *x,FP2_YYY *y);
+extern void FP2_YYY_conj(FP2_YYY *x,const FP2_YYY *y);
 /**	@brief addition of two FP2s
  *
 	@param x FP2 instance, on exit = y+z
 	@param y FP2 instance
 	@param z FP2 instance
  */
-extern void FP2_YYY_add(FP2_YYY *x,FP2_YYY *y,FP2_YYY *z);
+extern void FP2_YYY_add(FP2_YYY *x,const FP2_YYY *y,const FP2_YYY *z);
 /**	@brief subtraction of two FP2s
  *
 	@param x FP2 instance, on exit = y-z
 	@param y FP2 instance
 	@param z FP2 instance
  */
-extern void FP2_YYY_sub(FP2_YYY *x,FP2_YYY *y,FP2_YYY *z);
+extern void FP2_YYY_sub(FP2_YYY *x,const FP2_YYY *y,const FP2_YYY *z);
 /**	@brief Multiplication of an FP2 by an FP
  *
 	@param x FP2 instance, on exit = y*b
 	@param y FP2 instance
 	@param b FP residue
  */
-extern void FP2_YYY_pmul(FP2_YYY *x,FP2_YYY *y,FP_YYY *b);
+extern void FP2_YYY_pmul(FP2_YYY *x,const FP2_YYY *y,const FP_YYY *b);
 /**	@brief Multiplication of an FP2 by a small integer
  *
 	@param x FP2 instance, on exit = y*i
 	@param y FP2 instance
 	@param i an integer
  */
-extern void FP2_YYY_imul(FP2_YYY *x,FP2_YYY *y,int i);
+extern void FP2_YYY_imul(FP2_YYY *x,const FP2_YYY *y,int i);
 /**	@brief Squaring an FP2
  *
 	@param x FP2 instance, on exit = y^2
 	@param y FP2 instance
  */
-extern void FP2_YYY_sqr(FP2_YYY *x,FP2_YYY *y);
+extern void FP2_YYY_sqr(FP2_YYY *x,const FP2_YYY *y);
 /**	@brief Multiplication of two FP2s
  *
 	@param x FP2 instance, on exit = y*z
 	@param y FP2 instance
 	@param z FP2 instance
  */
-extern void FP2_YYY_mul(FP2_YYY *x,FP2_YYY *y,FP2_YYY *z);
+extern void FP2_YYY_mul(FP2_YYY *x,FP2_YYY *y,const FP2_YYY *z);
 /**	@brief Formats and outputs an FP2 to the console
  *
 	@param x FP2 instance
@@ -175,7 +175,7 @@
  *
 	@param x FP2 instance
  */
-extern void FP2_YYY_rawoutput(FP2_YYY *x);
+extern void FP2_YYY_rawoutput(const FP2_YYY *x);
 /**	@brief Inverting an FP2
  *
 	@param x FP2 instance, on exit = 1/y
@@ -187,7 +187,7 @@
 	@param x FP2 instance, on exit = y/2
 	@param y FP2 instance
  */
-extern void FP2_YYY_div2(FP2_YYY *x,FP2_YYY *y);
+extern void FP2_YYY_div2(FP2_YYY *x,const FP2_YYY *y);
 /**	@brief Multiply an FP2 by (1+sqrt(-1))
  *
 	Note that (1+sqrt(-1)) is irreducible for FP4
@@ -222,13 +222,13 @@
 	@param y FP2 instance
 	@param b BIG number
  */
-extern void FP2_YYY_pow(FP2_YYY *x,FP2_YYY *y,BIG_XXX b);
+extern void FP2_YYY_pow(FP2_YYY *x,const FP2_YYY *y,BIG_XXX b);
 /**	@brief Square root of an FP2
  *
 	@param x FP2 instance, on exit = sqrt(y)
 	@param y FP2 instance
  */
-extern int FP2_YYY_sqrt(FP2_YYY *x,FP2_YYY *y);
+extern int FP2_YYY_sqrt(FP2_YYY *x,const FP2_YYY *y);
 
 /**	@brief Multiply an FP2 by sqrt(-1)
  *
diff --git a/include/fp4.h.in b/include/fp4.h.in
index 4c6dda9..29697aa 100644
--- a/include/fp4.h.in
+++ b/include/fp4.h.in
@@ -47,40 +47,40 @@
 	@param x FP4 number to be tested
 	@return 1 if zero, else returns 0
  */
-extern int FP4_YYY_iszilch(FP4_YYY *x);
+extern int FP4_YYY_iszilch(const FP4_YYY *x);
 /**	@brief Tests for FP4 equal to unity
  *
 	@param x FP4 number to be tested
 	@return 1 if unity, else returns 0
  */
-extern int FP4_YYY_isunity(FP4_YYY *x);
+extern int FP4_YYY_isunity(const FP4_YYY *x);
 /**	@brief Tests for equality of two FP4s
  *
 	@param x FP4 instance to be compared
 	@param y FP4 instance to be compared
 	@return 1 if x=y, else returns 0
  */
-extern int FP4_YYY_equals(FP4_YYY *x,FP4_YYY *y);
+extern int FP4_YYY_equals(const FP4_YYY *x,const FP4_YYY *y);
 /**	@brief Tests for FP4 having only a real part and no imaginary part
  *
 	@param x FP4 number to be tested
 	@return 1 if real, else returns 0
  */
-extern int FP4_YYY_isreal(FP4_YYY *x);
+extern int FP4_YYY_isreal(const FP4_YYY *x);
 /**	@brief Initialise FP4 from two FP2s
  *
 	@param x FP4 instance to be initialised
 	@param a FP2 to form real part of FP4
 	@param b FP2 to form imaginary part of FP4
  */
-extern void FP4_YYY_from_FP2s(FP4_YYY *x,FP2_YYY *a,FP2_YYY *b);
+extern void FP4_YYY_from_FP2s(FP4_YYY *x,const FP2_YYY *a,const FP2_YYY *b);
 /**	@brief Initialise FP4 from single FP2
  *
 	Imaginary part is set to zero
 	@param x FP4 instance to be initialised
 	@param a FP2 to form real part of FP4
  */
-extern void FP4_YYY_from_FP2(FP4_YYY *x,FP2_YYY *a);
+extern void FP4_YYY_from_FP2(FP4_YYY *x,const FP2_YYY *a);
 
 /**	@brief Initialise FP4 from single FP2
  *
@@ -88,7 +88,7 @@
 	@param x FP4 instance to be initialised
 	@param a FP2 to form imaginary part of FP4
  */
-extern void FP4_YYY_from_FP2H(FP4_YYY *x,FP2_YYY *a);
+extern void FP4_YYY_from_FP2H(FP4_YYY *x,const FP2_YYY *a);
 
 
 /**	@brief Copy FP4 to another FP4
@@ -96,7 +96,7 @@
 	@param x FP4 instance, on exit = y
 	@param y FP4 instance to be copied
  */
-extern void FP4_YYY_copy(FP4_YYY *x,FP4_YYY *y);
+extern void FP4_YYY_copy(FP4_YYY *x,const FP4_YYY *y);
 /**	@brief Set FP4 to zero
  *
 	@param x FP4 instance to be set to zero
@@ -119,35 +119,35 @@
 	@param x FP4 instance, on exit = conj(y)
 	@param y FP4 instance
  */
-extern void FP4_YYY_conj(FP4_YYY *x,FP4_YYY *y);
+extern void FP4_YYY_conj(FP4_YYY *x,const FP4_YYY *y);
 /**	@brief Negative conjugation of FP4
  *
 	If y=(a,b) on exit x=(-a,b)
 	@param x FP4 instance, on exit = -conj(y)
 	@param y FP4 instance
  */
-extern void FP4_YYY_nconj(FP4_YYY *x,FP4_YYY *y);
+extern void FP4_YYY_nconj(FP4_YYY *x,const FP4_YYY *y);
 /**	@brief addition of two FP4s
  *
 	@param x FP4 instance, on exit = y+z
 	@param y FP4 instance
 	@param z FP4 instance
  */
-extern void FP4_YYY_add(FP4_YYY *x,FP4_YYY *y,FP4_YYY *z);
+extern void FP4_YYY_add(FP4_YYY *x,const FP4_YYY *y,const FP4_YYY *z);
 /**	@brief subtraction of two FP4s
  *
 	@param x FP4 instance, on exit = y-z
 	@param y FP4 instance
 	@param z FP4 instance
  */
-extern void FP4_YYY_sub(FP4_YYY *x,FP4_YYY *y,FP4_YYY *z);
+extern void FP4_YYY_sub(FP4_YYY *x,const FP4_YYY *y,FP4_YYY *z);
 /**	@brief Multiplication of an FP4 by an FP2
  *
 	@param x FP4 instance, on exit = y*a
 	@param y FP4 instance
 	@param a FP2 multiplier
  */
-extern void FP4_YYY_pmul(FP4_YYY *x,FP4_YYY *y,FP2_YYY *a);
+extern void FP4_YYY_pmul(FP4_YYY *x,FP4_YYY *y,const FP2_YYY *a);
 
 /**	@brief Multiplication of an FP4 by an FP
  *
@@ -155,7 +155,7 @@
 	@param y FP4 instance
 	@param a FP multiplier
  */
-extern void FP4_YYY_qmul(FP4_YYY *x,FP4_YYY *y,FP_YYY *a);
+extern void FP4_YYY_qmul(FP4_YYY *x,const FP4_YYY *y,const FP_YYY *a);
 
 /**	@brief Multiplication of an FP4 by a small integer
  *
@@ -163,7 +163,7 @@
 	@param y FP4 instance
 	@param i an integer
  */
-extern void FP4_YYY_imul(FP4_YYY *x,FP4_YYY *y,int i);
+extern void FP4_YYY_imul(FP4_YYY *x,const FP4_YYY *y,int i);
 /**	@brief Squaring an FP4
  *
 	@param x FP4 instance, on exit = y^2
@@ -176,13 +176,13 @@
 	@param y FP4 instance
 	@param z FP4 instance
  */
-extern void FP4_YYY_mul(FP4_YYY *x,FP4_YYY *y,FP4_YYY *z);
+extern void FP4_YYY_mul(FP4_YYY *x,FP4_YYY *y,const FP4_YYY *z);
 /**	@brief Inverting an FP4
  *
 	@param x FP4 instance, on exit = 1/y
 	@param y FP4 instance
  */
-extern void FP4_YYY_inv(FP4_YYY *x,FP4_YYY *y);
+extern void FP4_YYY_inv(FP4_YYY *x,const FP4_YYY *y);
 /**	@brief Formats and outputs an FP4 to the console
  *
 	@param x FP4 instance to be printed
@@ -192,7 +192,7 @@
  *
 	@param x FP4 instance to be printed
  */
-extern void FP4_YYY_rawoutput(FP4_YYY *x);
+extern void FP4_YYY_rawoutput(const FP4_YYY *x);
 /**	@brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1))
  *
 	@param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x
@@ -214,7 +214,7 @@
 	@param y FP4 instance
 	@param b BIG number
  */
-extern void FP4_YYY_pow(FP4_YYY *x,FP4_YYY *y,BIG_XXX b);
+extern void FP4_YYY_pow(FP4_YYY *x,const FP4_YYY *y,const BIG_XXX b);
 /**	@brief Raises an FP4 to the power of the internal modulus p, using the Frobenius
  *
 	@param x FP4 instance, on exit = x^p
@@ -229,13 +229,13 @@
 	@param y FP4 instance
 	@param z FP4 instance
  */
-extern void FP4_YYY_xtr_A(FP4_YYY *r,FP4_YYY *w,FP4_YYY *x,FP4_YYY *y,FP4_YYY *z);
+extern void FP4_YYY_xtr_A(FP4_YYY *r,const FP4_YYY *w,const FP4_YYY *x,FP4_YYY *y,const FP4_YYY *z);
 /**	@brief Calculates the XTR doubling function r=x^2-2*conj(x)
  *
 	@param r FP4 instance, on exit = x^2-2*conj(x)
 	@param x FP4 instance
  */
-extern void FP4_YYY_xtr_D(FP4_YYY *r,FP4_YYY *x);
+extern void FP4_YYY_xtr_D(FP4_YYY *r,const FP4_YYY *x);
 /**	@brief Calculates FP4 trace of an FP12 raised to the power of a BIG number
  *
 	XTR single exponentiation
@@ -243,7 +243,7 @@
 	@param x FP4 instance, trace of an FP12 w
 	@param b BIG number
  */
-extern void FP4_YYY_xtr_pow(FP4_YYY *r,FP4_YYY *x,BIG_XXX b);
+extern void FP4_YYY_xtr_pow(FP4_YYY *r,const FP4_YYY *x,const BIG_XXX b);
 /**	@brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s
  *
 	XTR double exponentiation
@@ -256,7 +256,7 @@
 	@param a BIG number
 	@param b BIG number
  */
-extern void FP4_YYY_xtr_pow2(FP4_YYY *r,FP4_YYY *c,FP4_YYY *d,FP4_YYY *e,FP4_YYY *f,BIG_XXX a,BIG_XXX b);
+extern void FP4_YYY_xtr_pow2(FP4_YYY *r,const FP4_YYY *c,const FP4_YYY *d,const FP4_YYY *e,const FP4_YYY *f,const BIG_XXX a,const BIG_XXX b);
 
 /**	@brief Conditional copy of FP4 number
  *
@@ -265,7 +265,7 @@
 	@param y another FP4 instance
 	@param s copy only takes place if not equal to 0
  */
-extern void FP4_YYY_cmove(FP4_YYY *x,FP4_YYY *y,int s);
+extern void FP4_YYY_cmove(FP4_YYY *x,const FP4_YYY *y,int s);
 
 
 /**	@brief Calculate square root of an FP4
@@ -299,7 +299,7 @@
 	@param x FP4 instance, on exit = y/2
 	@param y FP4 instance
  */
-extern void FP4_YYY_div2(FP4_YYY *x,FP4_YYY *y);
+extern void FP4_YYY_div2(FP4_YYY *x,const FP4_YYY *y);
 
 #endif
 
diff --git a/include/fp8.h.in b/include/fp8.h.in
index a7f040a..b891d47 100644
--- a/include/fp8.h.in
+++ b/include/fp8.h.in
@@ -157,7 +157,7 @@
 	@param y FP8 instance
 	@param a FP multiplier
  */
-extern void FP8_YYY_tmul(FP8_YYY *x,FP8_YYY *y,FP_YYY *a);
+extern void FP8_YYY_tmul(FP8_YYY *x,const FP8_YYY *y,FP_YYY *a);
 
 /**	@brief Multiplication of an FP8 by a small integer
  *
@@ -165,7 +165,7 @@
 	@param y FP8 instance
 	@param i an integer
  */
-extern void FP8_YYY_imul(FP8_YYY *x,FP8_YYY *y,int i);
+extern void FP8_YYY_imul(FP8_YYY *x,const FP8_YYY *y,int i);
 /**	@brief Squaring an FP8
  *
 	@param x FP8 instance, on exit = y^2
diff --git a/include/hash_to_field.h.in b/include/hash_to_field.h.in
new file mode 100644
index 0000000..3ad449e
--- /dev/null
+++ b/include/hash_to_field.h.in
@@ -0,0 +1,56 @@
+/*
+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.
+*/
+
+/**
+ * @file hash_to_field.h
+ * 
+ * @author Alexandre Adomnicai
+ * 
+ * @brief Header file for implementation of standard hash to curve functions according to https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/
+ */
+#ifndef HASH_TO_FIELD_ZZZ_H
+#define HASH_TO_FIELD_ZZZ_H
+
+#include "fp_YYY.h"
+#include "config_curve_ZZZ.h"
+
+#define SUCCESS                    0x00000000
+#define ERR_NULLPOINTER_HASH2FIELD 0x00000401
+#define ERR_BADARGLEN_HASH2FIELD   0x00000402
+
+/** 
+ * @brief Hash a byte string msg of arbitrary length into one or more finite
+ * field elements according to the draft-irtf-cfrg-hash-to-curve-16 spec.
+ * Relies on expand_message_xmd function with SHA-256.
+ * 
+ * @param elems Output finite field elements
+ * @param nelems Number of finite field elements (is 'count * m' from spec)
+ * @param m Extension degree of finite field (m >= 1)
+ * @param msg Input byte string
+ * @param msglen Byte string length (in bytes)
+ * @param DST Domain separation tag
+ * @param DSTlen Domain separation tag length (in bytes)
+ * 
+ * @return 0 if successful, error code otherwise
+ */
+extern int hash_to_field_YYY(BIG_XXX elems[], unsigned int nelems, unsigned int m,
+  const char *msg, unsigned int msglen,
+  const char *DST, unsigned int DSTlen);
+
+#endif
diff --git a/include/mpin.h.in b/include/mpin.h.in
index e0c7227..b96ffa2 100644
--- a/include/mpin.h.in
+++ b/include/mpin.h.in
@@ -35,7 +35,6 @@
 
 #define PGS_ZZZ MODBYTES_XXX  /**< MPIN Group Size */
 #define PFS_ZZZ MODBYTES_XXX  /**< MPIN Field Size */
-//#define PAS_ZZZ 16            /**< MPIN Symmetric Key Size */
 
 #define MPIN_OK             0   /**< Function completed without error */
 #define MPIN_INVALID_POINT  -14	/**< Point is NOT on the curve */
@@ -45,7 +44,6 @@
 #define MAXPIN 10000         /**< max PIN */
 #define PBLEN 14             /**< max length of PIN in bits */
 
-//#define HASH_TYPE_MPIN_ZZZ SHA256   /**< Choose Hash function */
 
 #define MESSAGE_SIZE 256        /**< Signature message size  */
 #define M_SIZE_ZZZ (MESSAGE_SIZE+2*PFS_ZZZ+1)   /**< Signature message size and G1 size */
@@ -62,7 +60,7 @@
 	@param O is an input octet
 	@param Y is the output octet
 */
-void MPIN_ZZZ_GET_Y(int h,int t,octet *O,octet *Y);
+void MPIN_ZZZ_GET_Y(int h,int t,const octet *O,octet *Y);
 
 /**	@brief Extract a PIN number from a client secret
  *
@@ -73,7 +71,7 @@
 	@param CS is the client secret from which the factor is to be extracted
 	@return 0 or an error code
  */
-int MPIN_ZZZ_EXTRACT_FACTOR(int h,octet *ID,int factor,int facbits,octet *CS);
+int MPIN_ZZZ_EXTRACT_FACTOR(int h,const octet *ID,int factor,int facbits,octet *CS);
 
 /**	@brief Extract a PIN number from a client secret
  *
@@ -84,7 +82,7 @@
 	@param CS is the client secret to which the factor is to be added
 	@return 0 or an error code
  */
-int MPIN_ZZZ_RESTORE_FACTOR(int h,octet *ID,int factor,int facbits,octet *CS);
+int MPIN_ZZZ_RESTORE_FACTOR(int h,const octet *ID,int factor,int facbits,octet *CS);
 
 
 /**	@brief Extract a PIN number from a client secret
@@ -95,7 +93,7 @@
 	@param CS is the client secret from which the PIN is to be extracted
 	@return 0 or an error code
  */
-int MPIN_ZZZ_EXTRACT_PIN(int h,octet *ID,int pin,octet *CS);
+int MPIN_ZZZ_EXTRACT_PIN(int h,const octet *ID,int pin,octet *CS);
 
 
 
@@ -120,7 +118,7 @@
 	@param y is output H(t|U) or H(t|UT) if Time Permits enabled
 	@return 0 or an error code
  */
-int MPIN_ZZZ_CLIENT(int h,int d,octet *ID,csprng *R,octet *x,int pin,octet *T,octet *V,octet *U,octet *UT,octet *TP, octet* MESSAGE, int t, octet *y);
+int MPIN_ZZZ_CLIENT(int h,int d,const octet *ID,csprng *R,octet *x,int pin,const octet *T,octet *V,octet *U,octet *UT,const octet *TP,const octet* MESSAGE, int t, octet *y);
 /**	@brief Perform first pass of the client side of the 3-pass version of the M-Pin protocol
  *
 	If Time Permits are disabled, set d = 0, and UT is not generated and can be set to NULL.
@@ -139,7 +137,7 @@
 	@param TP is the input time permit
 	@return 0 or an error code
  */
-int MPIN_ZZZ_CLIENT_1(int h,int d,octet *ID,csprng *R,octet *x,int pin,octet *T,octet *S,octet *U,octet *UT,octet *TP);
+int MPIN_ZZZ_CLIENT_1(int h,int d,const octet *ID,csprng *R,octet *x,int pin,const octet *T,octet *S,octet *U,octet *UT,const octet *TP);
 /**	@brief Generate a random group element
  *
 	@param R is a pointer to a cryptographically secure random number generator
@@ -154,7 +152,7 @@
 	@param V on output = -(x+y).V
 	@return 0 or an error code
  */
-int MPIN_ZZZ_CLIENT_2(octet *x,octet *y,octet *V);
+int MPIN_ZZZ_CLIENT_2(const octet *x,const octet *y,octet *V);
 /**	@brief Perform server side of the one-pass version of the M-Pin protocol
  *
 	If Time Permits are disabled, set d = 0, and UT and HTID are not generated and can be set to NULL.
@@ -177,7 +175,7 @@
 	@param Pa is input from the client z.Q or NULL if the key-escrow less scheme is not used
 	@return 0 or an error code
  */
-int MPIN_ZZZ_SERVER(int h,int d,octet *HID,octet *HTID,octet *y,octet *SS,octet *U,octet *UT,octet *V,octet *E,octet *F,octet *ID,octet *MESSAGE, int t, octet *Pa);
+int MPIN_ZZZ_SERVER(int h,int d,octet *HID,octet *HTID,octet *y,const octet *SS,const octet *U,const octet *UT,const octet *V,octet *E,octet *F,const octet *ID,const octet *MESSAGE, int t,const octet *Pa);
 /**	@brief Perform first pass of the server side of the 3-pass version of the M-Pin protocol
  *
  	@param h is the hash type
@@ -187,7 +185,7 @@
 	@param HTID is output H(ID)+H(d|H(ID))
 	@return 0 or an error code
  */
-void MPIN_ZZZ_SERVER_1(int h,int d,octet *ID,octet *HID,octet *HTID);
+void MPIN_ZZZ_SERVER_1(int h,int d,const octet *ID,octet *HID,octet *HTID);
 /**	@brief Perform third pass on the server side of the 3-pass version of the M-Pin protocol
  *
 	If Time Permits are disabled, set d = 0, and UT and HTID are not needed and can be set to NULL.
@@ -206,7 +204,7 @@
 	@param Pa is the input public key from the client, z.Q or NULL if the client uses regular mpin
 	@return 0 or an error code
  */
-int MPIN_ZZZ_SERVER_2(int d,octet *HID,octet *HTID,octet *y,octet *SS,octet *U,octet *UT,octet *V,octet *E,octet *F,octet *Pa);
+int MPIN_ZZZ_SERVER_2(int d,const octet *HID,const octet *HTID,const octet *y,const octet *SS,const octet *U,const octet *UT,const octet *V,octet *E,octet *F,const octet *Pa);
 /**	@brief Add two members from the group G1
  *
 	@param Q1 an input member of G1
@@ -214,7 +212,7 @@
 	@param Q an output member of G1 = Q1+Q2
 	@return 0 or an error code
  */
-int MPIN_ZZZ_RECOMBINE_G1(octet *Q1,octet *Q2,octet *Q);
+int MPIN_ZZZ_RECOMBINE_G1(const octet *Q1,const octet *Q2,octet *Q);
 /**	@brief Add two members from the group G2
  *
 	@param P1 an input member of G2
@@ -222,14 +220,14 @@
 	@param P an output member of G2 = P1+P2
 	@return 0 or an error code
  */
-int MPIN_ZZZ_RECOMBINE_G2(octet *P1,octet *P2,octet *P);
+int MPIN_ZZZ_RECOMBINE_G2(const octet *P1,const octet *P2,octet *P);
 /**	@brief Use Kangaroos to find PIN error
  *
 	@param E a member of the group GT
 	@param F a member of the group GT =  E^e
 	@return 0 if Kangaroos failed, or the PIN error e
  */
-int MPIN_ZZZ_KANGAROO(octet *E,octet *F);
+int MPIN_ZZZ_KANGAROO(const octet *E,const octet *F);
 /**	@brief Encoding of a Time Permit to make it indistinguishable from a random string
  *
 	@param R is a pointer to a cryptographically secure random number generator
@@ -253,7 +251,7 @@
 	@param W the output =x.G or x.M(G), where M(.) is a mapping
 	@return 0 or an error code
  */
-int MPIN_ZZZ_GET_G1_MULTIPLE(csprng *R,int type,octet *x,octet *G,octet *W);
+int MPIN_ZZZ_GET_G1_MULTIPLE(csprng *R,int type,octet *x,const octet *G,octet *W);
 /**	@brief Find a random multiple of a point in G1
  *
 	@param R is a pointer to a cryptographically secure random number generator
@@ -263,7 +261,7 @@
 	@param W the output =x.G or (1/x).G
 	@return 0 or an error code
  */
-int MPIN_ZZZ_GET_G2_MULTIPLE(csprng *R,int type,octet *x,octet *G,octet *W);
+int MPIN_ZZZ_GET_G2_MULTIPLE(csprng *R,int type,octet *x,const octet *G,octet *W);
 
 /**	@brief Create a client secret in G1 from a master secret and the client ID
  *
@@ -272,7 +270,7 @@
 	@param CS is the full client secret = s.H(ID)
 	@return 0 or an error code
  */
-int MPIN_ZZZ_GET_CLIENT_SECRET(octet *S,octet *ID,octet *CS);
+int MPIN_ZZZ_GET_CLIENT_SECRET(octet *S,const octet *ID,octet *CS);
 /**	@brief Create a Time Permit in G1 from a master secret and the client ID
  *
   	@param h is the hash type
@@ -282,15 +280,14 @@
 	@param TP is a Time Permit for the given date = s.H(d|H(ID))
 	@return 0 or an error code
  */
-int MPIN_ZZZ_GET_CLIENT_PERMIT(int h,int d,octet *S,octet *ID,octet *TP);
+int MPIN_ZZZ_GET_CLIENT_PERMIT(int h,int d,const octet *S,const octet *ID,octet *TP);
 /**	@brief Create a server secret in G2 from a master secret
  *
 	@param S is an input master secret
 	@param SS is the server secret = s.Q where Q is a fixed generator of G2
 	@return 0 or an error code
  */
-int MPIN_ZZZ_GET_SERVER_SECRET(octet *S,octet *SS);
-/* int MPIN_TEST_PAIRING(octet *,octet *); */
+int MPIN_ZZZ_GET_SERVER_SECRET(const octet *S,octet *SS);
 
 /* For M-Pin Full */
 /**	@brief Precompute values for use by the client side of M-Pin Full
@@ -302,7 +299,7 @@
 	@param g2 precomputed output
 	@return 0 or an error code
  */
-int MPIN_ZZZ_PRECOMPUTE(octet *T,octet *ID,octet *CP,octet *g1,octet *g2);
+int MPIN_ZZZ_PRECOMPUTE(const octet *T,const octet *ID,const octet *CP,octet *g1,octet *g2);
 /**	@brief Calculate Key on Server side for M-Pin Full
  *
 	Uses UT internally for the key calculation, unless not available in which case U is used
@@ -317,7 +314,7 @@
 	@param K is the output calculated shared key
 	@return 0 or an error code
  */
-int MPIN_ZZZ_SERVER_KEY(int h,octet *Z,octet *SS,octet *w,octet *p,octet *I,octet *U,octet *UT,octet *K);
+int MPIN_ZZZ_SERVER_KEY(int h,const octet *Z,const octet *SS,const octet *w,const octet *p,const octet *I,const octet *U,const octet *UT,octet *K);
 /**	@brief Calculate Key on Client side for M-Pin Full
  *
   	@param h is the hash type
@@ -331,7 +328,7 @@
 	@param K is the output calculated shared key
 	@return 0 or an error code
  */
-int MPIN_ZZZ_CLIENT_KEY(int h,octet *g1,octet *g2,int pin,octet *r,octet *x,octet *p,octet *T,octet *K);
+int MPIN_ZZZ_CLIENT_KEY(int h,const octet *g1,const octet *g2,int pin,const octet *r,const octet *x,const octet *p,const octet *T,octet *K);
 
 /** @brief Generates a random public key for the client z.Q
  *
diff --git a/include/paillier.h b/include/paillier.h
index 7ce3a72..992751b 100644
--- a/include/paillier.h
+++ b/include/paillier.h
@@ -94,7 +94,7 @@
  *  @param  PUB              Public key
  *  @param  PRIV             Private key
  */
-void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV);
+void PAILLIER_KEY_PAIR(csprng *RNG, const octet *P, const octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV);
 
 /*! \brief Clear private key
  *
@@ -118,7 +118,7 @@
  *  @param  CT               Ciphertext
  *  @param  R                R value for testing. If RNG is NULL then this value is read.
  */
-void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* CT, octet* R);
+void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, const octet* PT, octet* CT, octet* R);
 
 /*! \brief Decrypt ciphertext
  *
@@ -136,7 +136,7 @@
  *  @param   CT               Ciphertext
  *  @param   PT               Plaintext
  */
-void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT);
+void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, const octet* CT, octet* PT);
 
 /*! \brief Homomorphic addition of plaintexts
  *
@@ -150,9 +150,8 @@
  *  @param   CT1              Ciphertext one
  *  @param   CT2              Ciphertext two
  *  @param   CT               Ciphertext
- *  @return                   Returns 0 or else error code
  */
-void PAILLIER_ADD(PAILLIER_public_key *PUB, octet* CT1, octet* CT2, octet* CT);
+void PAILLIER_ADD(PAILLIER_public_key *PUB, const octet* CT1, const octet* CT2, octet* CT);
 
 /*! \brief Homomorphic multipication of plaintexts
  *
@@ -167,14 +166,14 @@
  *  @param   PT               Plaintext constant
  *  @param   CT               Ciphertext
  */
-void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT);
+void PAILLIER_MULT(PAILLIER_public_key *PUB, const octet* CT1, const octet* PT, octet* CT);
 
 /*! \brief Read a public key from its octet representation
  *
  * @param   PUB   Public key
  * @param   PK    Octet representation of the public key
  */
-void PAILLIER_PK_fromOctet(PAILLIER_public_key *PUB, octet *PK);
+void PAILLIER_PK_fromOctet(PAILLIER_public_key *PUB, const octet *PK);
 
 /*! \brief Write a public key to an octet
  *
diff --git a/include/pair.h.in b/include/pair.h.in
index a7350bd..bd70b1f 100644
--- a/include/pair.h.in
+++ b/include/pair.h.in
@@ -50,7 +50,7 @@
 	@param QV ECP instance, an element of G1
 
  */
-extern void PAIR_ZZZ_another(FP12_YYY r[],ECP2_ZZZ* PV,ECP_ZZZ* QV);
+extern void PAIR_ZZZ_another(FP12_YYY r[],const ECP2_ZZZ* PV,const ECP_ZZZ* QV);
 
 /**	@brief Calculate Miller loop for Optimal ATE pairing e(P,Q)
  *
@@ -59,7 +59,7 @@
 	@param Q ECP instance, an element of G1
 
  */
-extern void PAIR_ZZZ_ate(FP12_YYY *r,ECP2_ZZZ *P,ECP_ZZZ *Q);
+extern void PAIR_ZZZ_ate(FP12_YYY *r,const ECP2_ZZZ *P,const ECP_ZZZ *Q);
 /**	@brief Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)
  *
 	Faster than calculating two separate pairings
@@ -69,7 +69,7 @@
 	@param R ECP2 instance, an element of G2
 	@param S ECP instance, an element of G1
  */
-extern void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P,ECP_ZZZ *Q,ECP2_ZZZ *R,ECP_ZZZ *S);
+extern void PAIR_ZZZ_double_ate(FP12_YYY *r,const ECP2_ZZZ *P,const ECP_ZZZ *Q,const ECP2_ZZZ *R,const ECP_ZZZ *S);
 /**	@brief Final exponentiation of pairing, converts output of Miller loop to element in GT
  *
 	Here p is the internal modulus, and r is the group order
@@ -83,7 +83,7 @@
 	@param b BIG multiplier
 
  */
-extern void PAIR_ZZZ_G1mul(ECP_ZZZ *Q,BIG_XXX b);
+extern void PAIR_ZZZ_G1mul(ECP_ZZZ *Q,const BIG_XXX b);
 /**	@brief Fast point multiplication of a member of the group G2 by a BIG number
  *
 	May exploit endomorphism for speed.
@@ -91,7 +91,7 @@
 	@param b BIG multiplier
 
  */
-extern void PAIR_ZZZ_G2mul(ECP2_ZZZ *P,BIG_XXX b);
+extern void PAIR_ZZZ_G2mul(ECP2_ZZZ *P,const BIG_XXX b);
 /**	@brief Fast raising of a member of GT to a BIG power
  *
 	May exploit endomorphism for speed.
@@ -99,7 +99,7 @@
 	@param b BIG exponent
 
  */
-extern void PAIR_ZZZ_GTpow(FP12_YYY *x,BIG_XXX b);
+extern void PAIR_ZZZ_GTpow(FP12_YYY *x,const BIG_XXX b);
 /**	@brief Tests FP12 for membership of GT
  *
 	@param x FP12 instance
@@ -131,6 +131,6 @@
 	@param r FP12 precomputed array of accumulated line functions
 
  */
-extern void PAIR_ZZZ_miller(FP12_YYY *res,FP12_YYY r[]);
+extern void PAIR_ZZZ_miller(FP12_YYY *res,const FP12_YYY r[]);
 
 #endif
diff --git a/include/pbc_support.h b/include/pbc_support.h
index 4fe82d9..1b94648 100644
--- a/include/pbc_support.h
+++ b/include/pbc_support.h
@@ -39,7 +39,7 @@
 	@param x octect involved in the h ash
 	@param w output
  */
-extern void mhashit(int sha,int n,octet *x,octet *w);
+extern void mhashit(int sha,int n,const octet *x,octet *w);
 
 /**	@brief Supply today's date as days from the epoch
  *
@@ -57,14 +57,14 @@
 	@param W is the server part response
 	@param H the output is the hash of all of the above that apply
 */
-void HASH_ALL(int h,octet *I,octet *U,octet *CU,octet *Y,octet *V,octet *R,octet *W,octet *H);
+void HASH_ALL(int h,const octet *I,const octet *U,const octet *CU,const octet *Y,const octet *V,const octet *R,const octet *W,octet *H);
 /**	@brief Hash an M-Pin Identity to an octet string
  *
  	@param h is the hash type
 	@param ID an octet containing the identity
 	@param HID an octet containing the hashed identity
  */
-void HASH_ID(int h,octet *ID,octet *HID);
+void HASH_ID(int h,const octet *ID,octet *HID);
 /**	@brief Get epoch time as unsigned integer
  *
 	@return current epoch time in seconds
@@ -79,7 +79,7 @@
 	@param C Ciphertext
 	@param T Checksum
  */
-void AES_GCM_ENCRYPT(octet *K,octet *IV,octet *H,octet *P,octet *C,octet *T);
+void AES_GCM_ENCRYPT(octet *K,const octet *IV,const octet *H,const octet *P,octet *C,octet *T);
 
 /**	@brief AES-GCM Decryption
  *
@@ -90,7 +90,7 @@
 	@param C Ciphertext
 	@param T Checksum
  */
-void AES_GCM_DECRYPT(octet *K,octet *IV,octet *H,octet *C,octet *P,octet *T);
+void AES_GCM_DECRYPT(octet *K,const octet *IV,const octet *H,const octet *C,octet *P,octet *T);
 
 
 #endif
diff --git a/include/randapi.h b/include/randapi.h
index 9a6807e..c40b04f 100644
--- a/include/randapi.h
+++ b/include/randapi.h
@@ -34,7 +34,7 @@
 	@param R is a pointer to a cryptographically secure random number generator
 	@param S is an input truly random seed value
  */
-extern void CREATE_CSPRNG(csprng *R,octet *S);
+extern void CREATE_CSPRNG(csprng *R,const octet *S);
 /**	@brief Kill a random number generator
  *
 	Deletes all internal state
diff --git a/include/rsa.h.in b/include/rsa.h.in
index 08a744f..947f3a2 100644
--- a/include/rsa.h.in
+++ b/include/rsa.h.in
@@ -57,11 +57,11 @@
 
 typedef struct
 {
-    BIG_XXX p[FFLEN_WWW/2];  /**< secret prime p  */
-    BIG_XXX q[FFLEN_WWW/2];  /**< secret prime q  */
-    BIG_XXX dp[FFLEN_WWW/2]; /**< decrypting exponent mod (p-1)  */
-    BIG_XXX dq[FFLEN_WWW/2]; /**< decrypting exponent mod (q-1)  */
-    BIG_XXX c[FFLEN_WWW/2];  /**< 1/p mod q */
+    BIG_XXX p[HFLEN_WWW];  /**< secret prime p  */
+    BIG_XXX q[HFLEN_WWW];  /**< secret prime q  */
+    BIG_XXX dp[HFLEN_WWW]; /**< decrypting exponent mod (p-1)  */
+    BIG_XXX dq[HFLEN_WWW]; /**< decrypting exponent mod (q-1)  */
+    BIG_XXX c[HFLEN_WWW];  /**< 1/p mod q */
 } rsa_private_key_WWW;
 
 /* RSA Auxiliary Functions */
@@ -72,10 +72,10 @@
 	@param e the encryption exponent
 	@param PRIV the output RSA private key
 	@param PUB the output RSA public key
-        @param P Input prime number. Used when R is equal to NULL for testing
-        @param Q Inpuy prime number. Used when R is equal to NULL for testing
+    @param P Input prime number. Used when R is equal to NULL for testing
+    @param Q Inpuy prime number. Used when R is equal to NULL for testing
  */
-extern void RSA_WWW_KEY_PAIR(csprng *R,sign32 e,rsa_private_key_WWW* PRIV,rsa_public_key_WWW* PUB,octet *P, octet* Q);
+extern void RSA_WWW_KEY_PAIR(csprng *R,sign32 e,rsa_private_key_WWW* PRIV,rsa_public_key_WWW* PUB,const octet *P, const octet* Q);
 
 /**	@brief RSA encryption of suitably padded plaintext
  *
@@ -83,7 +83,7 @@
 	@param F is input padded message
 	@param G is the output ciphertext
  */
-extern void RSA_WWW_ENCRYPT(rsa_public_key_WWW* PUB,octet *F,octet *G);
+extern void RSA_WWW_ENCRYPT(rsa_public_key_WWW* PUB,const octet *F,octet *G);
 /**	@brief RSA decryption of ciphertext
  *
 	@param PRIV the input RSA private key
@@ -91,7 +91,7 @@
 	@param F is output plaintext (requires unpadding)
 
  */
-extern void RSA_WWW_DECRYPT(rsa_private_key_WWW* PRIV,octet *G,octet *F);
+extern void RSA_WWW_DECRYPT(rsa_private_key_WWW* PRIV,const octet *G,octet *F);
 /**	@brief Destroy an RSA private Key
  *
 	@param PRIV the input RSA private key. Destroyed on output.
@@ -103,7 +103,7 @@
 	@param x FF instance to be created from an octet string
 	@param S input octet string
  */
-extern void RSA_WWW_fromOctet(BIG_XXX *x,octet *S);
+extern void RSA_WWW_fromOctet(BIG_XXX *x,const octet *S);
 
 
 
diff --git a/include/rsa_support.h b/include/rsa_support.h
index 519d012..2a21729 100644
--- a/include/rsa_support.h
+++ b/include/rsa_support.h
@@ -38,7 +38,7 @@
 	@param W is the output encoding, ready for RSA signature
 	@return 1 if OK, else 0
  */
-extern int PKCS15(int h,octet *M,octet *W);
+extern int PKCS15(int h,const octet *M,octet *W);
 /**	@brief OAEP padding of a message prior to RSA encryption
  *
 	@param h is the hash type
@@ -48,7 +48,7 @@
 	@param F is the output encoding, ready for RSA encryption
 	@return 0 if OK, else 1
  */
-extern int	OAEP_ENCODE(int h,octet *M,csprng *R,octet *P,octet *F);
+extern int	OAEP_ENCODE(int h,const octet *M,csprng *R,const octet *P,octet *F);
 /**	@brief OAEP unpadding of a message after RSA decryption
  *
 	Unpadding is done in-place
@@ -57,6 +57,6 @@
 	@param F is input padded message, unpadded on output
 	@return 0 if OK, else 1
  */
-extern int  OAEP_DECODE(int h,octet *P,octet *F);
+extern int  OAEP_DECODE(int h,const octet *P,octet *F);
 
 #endif
diff --git a/include/utils.h b/include/utils.h
index 34c05ae..ad8f47b 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -52,7 +52,7 @@
  * @param src_len length binary string
  * @param dst_len length hex encoded string
  */
-void amcl_bin2hex(char *src, char *dst, size_t src_len, size_t dst_len);
+void amcl_bin2hex(const char *src, char *dst, size_t src_len, size_t dst_len);
 
 /**
  * @brief Print encoded binary string in hex
@@ -62,7 +62,7 @@
  * @param src     Binary string
  * @param src_len length binary string
  */
-void amcl_print_hex(char *src, size_t src_len);
+void amcl_print_hex(const char *src, size_t src_len);
 
 /**
  * @brief Generate a random Octet
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 05d8ba2..df8065e 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -19,6 +19,8 @@
 
 include(PythonSiteDirs)
 
+add_subdirectory(benchmark)
+
 foreach(curve ${AMCL_CURVE})
   amcl_curve_field(PF "${curve}")
   amcl_curve_field(TC "${curve}")
@@ -29,7 +31,7 @@
     amcl_configure_file_curve(TestMPINInstall_ZZZ.py.in TestMPINInstall_${TC}.py ${curve} __no_install)
 
     install(FILES "${amcl_mpin_${TC}_GEN_PYS}" DESTINATION ${PYTHON3_SITE_PACKAGES})
-  
+
     add_test(test_python_mpin_install_${TC} python3 TestMPINInstall_${TC}.py)
 
     # Set the LD_LIBRARY_PATH or equivalent to the libraries can be
@@ -53,8 +55,8 @@
 
   if(TARGET amcl_bls_${TC})
     amcl_configure_file_curve(bls_ZZZ.py.in bls_${TC}.py ${curve} amcl_bls_${TC}_GEN_PYS)
-    amcl_configure_file_curve(run_bls_ZZZ.py.in run_bls_${TC}.py ${curve} __no_install)    
+    amcl_configure_file_curve(run_bls_ZZZ.py.in run_bls_${TC}.py ${curve} __no_install)
     install(FILES "${amcl_bls_${TC}_GEN_PYS}" DESTINATION ${PYTHON3_SITE_PACKAGES})
   endif()
-  
+
 endforeach()
diff --git a/python/run_bls_ZZZ.py.in b/python/run_bls_ZZZ.py.in
index bf6c86b..25c540f 100755
--- a/python/run_bls_ZZZ.py.in
+++ b/python/run_bls_ZZZ.py.in
@@ -22,7 +22,6 @@
 
 """
 example for using bls
-
 """
 
 import cffi
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100755
index 0000000..432402d
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# build.sh
+#
+# Build AMCL
+#
+# @author Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
+
+# NOTES:
+
+set -Cue -o pipefail
+
+PROJECT_HOME="$(cd "$(dirname "${0}")/.." && pwd)"
+cd "$PROJECT_HOME"
+
+declare -a arr=("Release" "Debug" "Coverage" "ASan")
+
+for i in "${arr[@]}"
+do
+    (
+	echo "$i"
+        rm -rf target/$i
+        mkdir -p target/$i
+        cd target/$i
+
+        cmake -D CMAKE_BUILD_TYPE=$i \
+              -D BUILD_SHARED_LIBS=ON \
+              -D DEBUG_NORM=OFF \
+              -D AMCL_CHUNK=64 \
+              -D AMCL_CURVE="BLS381,SECP256K1,ED25519" \
+              -D AMCL_RSA="2048,4096" \
+              -D BUILD_PAILLIER=ON \
+              -D BUILD_PYTHON=ON \
+              -D BUILD_BLS=ON \
+              -D BUILD_BLS_IETF=ON \
+              -D BUILD_WCC=OFF \
+              -D BUILD_MPIN=ON \
+              -D BUILD_X509=OFF \
+              -D CMAKE_INSTALL_PREFIX=/usr/local ../..
+
+        make
+  )
+done
diff --git a/scripts/coverage.sh b/scripts/coverage.sh
new file mode 100755
index 0000000..6a23063
--- /dev/null
+++ b/scripts/coverage.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+#
+# coverage.sh
+#
+# Generate coverage figures
+#
+# @author Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
+
+# NOTES:
+
+CURRENTDIR=${PWD}
+
+function coverage()
+{
+  echo "coverage"
+  cd $CURRENTDIR/target/Coverage
+  mkdir coverage
+  lcov --capture --initial --directory . --output-file coverage/libamcl.info
+  lcov --no-checksum --directory . --capture --output-file coverage/libamcl.info
+  lcov --remove coverage/libamcl.info "*/test_*" --output-file coverage/libamcl.info
+  genhtml -o coverage -t "AMCL Test Coverage" coverage/libamcl.info
+}
+
+coverage
diff --git a/scripts/delete.sh b/scripts/delete.sh
new file mode 100755
index 0000000..b521ab6
--- /dev/null
+++ b/scripts/delete.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# delete.sh
+#
+# Delete build files
+#
+# @author Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
+
+# NOTES:
+
+function delete()
+{
+  echo "remove build files"
+  rm -rf target
+  rm -rf build
+  rm -rf coverage
+}
+
+delete
diff --git a/scripts/docker.sh b/scripts/docker.sh
new file mode 100755
index 0000000..a44fe26
--- /dev/null
+++ b/scripts/docker.sh
@@ -0,0 +1,111 @@
+#!/bin/bash
+#
+# docker.sh
+#
+# Build and test code in docker
+#
+# @author Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
+
+# NOTES:
+
+set -Cue -o pipefail
+
+SCRIPT_HOME="$(cd "$(dirname "${0}")" && pwd)"
+cd "$SCRIPT_HOME/.."
+
+usage()
+{
+cat << EOF
+usage: $0 options
+
+OPTIONS:
+   -b      Build docker image
+   -t      Run tests
+   -c      Get coverage figures
+   -i      Login to containerAdd docker images to microk8s
+   -k      Stop and remove containers
+   -h      Print usage
+
+EXAMPLE:
+
+   ./docker.sh -b -t -c -i -k -h
+EOF
+}
+
+function build()
+{
+  echo "echo docker build -t libamcl ."
+  docker build -t libamcl .
+}
+
+function test()
+{
+  echo "docker run --cap-add SYS_PTRACE --rm libamcl"
+  docker run --cap-add SYS_PTRACE --rm libamcl
+}
+
+function coverage()
+{
+  echo "docker run --cap-add SYS_PTRACE libamcl ./scripts/coverage.sh"
+  docker run --cap-add SYS_PTRACE libamcl ./scripts/coverage.sh
+}
+
+function login()
+{
+  echo "docker run -it --rm libamcl bash"
+  docker run -it --rm libamcl bash
+}
+
+function kill()
+{
+    CONTAINER_ID=`docker ps -a | grep libamcl | cut -c1-12`
+
+    if [ "${CONTAINER_ID}" ];
+    then
+	echo "docker stop $CONTAINER_ID"
+	docker stop "$CONTAINER_ID"
+	docker rm  "$CONTAINER_ID"
+    fi
+}
+
+while getopts "btcikh" OPTION
+do
+     case $OPTION in
+         b)
+             build
+             ;;
+         t)
+	     test
+             ;;
+         c)
+             coverage
+             ;;
+         i)
+             login
+             ;;
+         k)
+             kill
+             ;;
+         h)
+             usage
+             exit 1
+             ;;
+         :)
+             echo "Missing required argument" 1>&2
+             usage
+             exit 1
+             ;;
+         \?)
+             echo "Invalid option: -$OPTARG" 1>&2
+             usage
+             exit 1
+             ;;
+     esac
+done
+
+if [ "$1" == "" ]
+then
+    usage
+    exit 1
+fi
diff --git a/scripts/format.sh b/scripts/format.sh
new file mode 100755
index 0000000..6924503
--- /dev/null
+++ b/scripts/format.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+#
+# format.sh
+#
+# Format the source code
+#
+# @author Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
+
+# NOTES:
+
+astyle --style=allman --recursive --suffix=none '*.c'
+astyle --style=allman --recursive --suffix=none '*.c.in'
+astyle --style=allman --recursive --suffix=none '*.h'
diff --git a/scripts/gitleaks.sh b/scripts/gitleaks.sh
new file mode 100755
index 0000000..8f3ba92
--- /dev/null
+++ b/scripts/gitleaks.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# gitleaks.sh
+#
+# Detect secrets
+#
+# @author Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
+
+# NOTES:
+#
+# https://qredo.atlassian.net/wiki/spaces/SEC/pages/1002340428/Secret+Detection#Running-the-Secret-detection-locally
+# https://github.com/zricethezav/gitleaks
+
+# EXAMPLE USAGE:
+#
+# ./gitleaks.sh
+
+set -Cue -o pipefail
+
+PROJECT_HOME="$(cd "$(dirname "${0}")/.." && pwd)"
+cd "$PROJECT_HOME"
+
+function detect_secrets()
+{
+  # Check gitleaks image exists
+  if [ ! "$(docker images | grep "^zricethezav/gitleaks .*latest")" ];
+  then
+      echo "docker pull ghcr.io/zricethezav/gitleaks:latest"
+      docker pull ghcr.io/zricethezav/gitleaks:latest
+  else
+      echo "zricethezav/gitleaks:latest downloaded"
+  fi
+
+  # Get config file
+  git clone git@gitlab.qredo.com:security/security-ci-cd-templates.git
+  cp security-ci-cd-templates/secret-detection/qredo-secret-detection-config.toml  .
+
+  # Run gitleaks
+  docker run -v $PWD:/path zricethezav/gitleaks:latest detect --source="/path"  --verbose --config /path/qredo-secret-detection-config.toml --report-format json --report-path /path/gitleaks_report.json
+}
+
+detect_secrets
diff --git a/scripts/test.sh b/scripts/test.sh
new file mode 100755
index 0000000..9773dbd
--- /dev/null
+++ b/scripts/test.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+#
+# test.sh
+#
+# Test all the library build configurations
+#
+# @author Kealan McCusker <kealanmccusker@gmail.com>
+# ------------------------------------------------------------------------------
+
+# NOTES:
+
+set -Cue -o pipefail
+
+PROJECT_HOME="$(cd "$(dirname "${0}")/.." && pwd)"
+cd "$PROJECT_HOME"
+
+declare -a arr=("Release" "Debug" "Coverage" "ASan")
+
+for i in "${arr[@]}"
+do
+    (
+	echo "$i"
+        cd target/$i
+        make test ARGS=-j8
+    )
+done
diff --git a/src/aes.c b/src/aes.c
index 656a031..c96f143 100644
--- a/src/aes.c
+++ b/src/aes.c
@@ -256,7 +256,8 @@
 static uchar product(unsign32 x,unsign32 y)
 {
     /* dot product of two 4-byte arrays */
-    uchar xb[4],yb[4];
+    uchar xb[4];
+    uchar yb[4];
     unpack(x,xb);
     unpack(y,yb);
     return bmul(xb[0],yb[0])^bmul(xb[1],yb[1])^bmul(xb[2],yb[2])^bmul(xb[3],yb[3]);
@@ -265,7 +266,8 @@
 static unsign32 InvMixCol(unsign32 x)
 {
     /* matrix Multiplication */
-    unsign32 y,m;
+    unsign32 y;
+    unsign32 m;
     uchar b[4];
 
     m=pack(InCo);
@@ -282,7 +284,7 @@
 
 /* SU= 8 */
 /* reset cipher */
-void AES_reset(amcl_aes *a,int mode,char *iv)
+void AES_reset(amcl_aes *a,int mode,const char *iv)
 {
     /* reset mode, or reset iv */
     int i;
@@ -296,19 +298,22 @@
     }
 }
 
-void AES_getreg(amcl_aes *a,char *ir)
+void AES_getreg(const amcl_aes *a,char *ir)
 {
-    int i;
-    for (i=0; i<4*NB; i++) ir[i]=a->f[i];
+    for (int i=0; i<4*NB; i++) ir[i]=a->f[i];
 }
 
 /* SU= 72 */
 /* Initialise cipher */
-int AES_init(amcl_aes* a,int mode,int nk,char *key,char *iv)
+int AES_init(amcl_aes* a,int mode,int nk,char *key,const char *iv)
 {
     /* Key length Nk=16, 24 or 32 bytes */
     /* Key Scheduler. Create expanded encryption key */
-    int i,j,k,N,nr;
+    int i;
+    int j;
+    int k;
+    int N;
+    int nr;
     unsign32 CipherKey[8];
 
     nk/=4;
@@ -327,8 +332,8 @@
     for (i=j=0; i<nk; i++,j+=4)
     {
         CipherKey[i]=pack((uchar *)&key[j]);
+        a->fkey[i]=CipherKey[i];
     }
-    for (i=0; i<nk; i++) a->fkey[i]=CipherKey[i];
     for (j=nk,k=0; j<N; j+=nk,k++)
     {
         a->fkey[j]=a->fkey[j-nk]^SubByte(ROTL24(a->fkey[j-1]))^rco[k];
@@ -361,14 +366,20 @@
 
 /* SU= 80 */
 /* Encrypt a single block */
-void AES_ecb_encrypt(amcl_aes *a,uchar *buff)
+void AES_ecb_encrypt(const amcl_aes *a,uchar *buff)
 {
-    int i,j,k;
-    unsign32 p[4],q[4],*x,*y,*t;
+    int i;
+    int j;
+    int k;
+    unsign32 p[4];
+    unsign32 q[4];
+    unsign32 *x;
+    unsign32 *y;
+    unsign32 *t;
 
     for (i=j=0; i<NB; i++,j+=4)
     {
-        p[i]=pack((uchar *)&buff[j]);
+        p[i]=pack(&buff[j]);
         p[i]^=a->fkey[i];
     }
 
@@ -424,21 +435,27 @@
 
     for (i=j=0; i<NB; i++,j+=4)
     {
-        unpack(y[i],(uchar *)&buff[j]);
+        unpack(y[i],&buff[j]);
         x[i]=y[i]=0;   /* clean up stack */
     }
 }
 
 /* SU= 80 */
 /* Decrypt a single block */
-void AES_ecb_decrypt(amcl_aes *a,uchar *buff)
+void AES_ecb_decrypt(const amcl_aes *a,uchar *buff)
 {
-    int i,j,k;
-    unsign32 p[4],q[4],*x,*y,*t;
+    int i;
+    int j;
+    int k;
+    unsign32 p[4];
+    unsign32 q[4];
+    unsign32 *x;
+    unsign32 *y;
+    unsign32 *t;
 
     for (i=j=0; i<NB; i++,j+=4)
     {
-        p[i]=pack((uchar *)&buff[j]);
+        p[i]=pack(&buff[j]);
         p[i]^=a->rkey[i];
     }
 
@@ -495,7 +512,7 @@
 
     for (i=j=0; i<NB; i++,j+=4)
     {
-        unpack(y[i],(uchar *)&buff[j]);
+        unpack(y[i],&buff[j]);
         x[i]=y[i]=0;   /* clean up stack */
     }
 
@@ -504,8 +521,7 @@
 /* simple default increment function */
 static void increment(char *f)
 {
-    int i;
-    for (i=0; i<16; i++)
+    for (int i=0; i<16; i++)
     {
         f[i]++;
         if (f[i]!=0) break;
@@ -516,7 +532,8 @@
 /* Encrypt using selected mode of operation */
 unsign32 AES_encrypt(amcl_aes* a,char *buff)
 {
-    int j,bytes;
+    int j;
+    int bytes;
     char st[16];
     unsign32 fell_off;
 
@@ -582,7 +599,8 @@
 /* Decrypt using selected mode of operation */
 unsign32 AES_decrypt(amcl_aes *a,char *buff)
 {
-    int j,bytes;
+    int j;
+    int bytes;
     char st[16];
     unsign32 fell_off;
 
@@ -658,47 +676,3 @@
     for (i=0; i<4*NB; i++)
         a->f[i]=0;
 }
-
-
-/*
-#include <stdio.h>
-
-#define KK 32
-
-int main()
-{
-    int i;
-    amcl_aes a;
-	unsign32 t;
-	uchar x,y;
-
-    char key[KK];
-    char block[16];
-    char iv[16];
-    for (i=0;i<KK;i++) key[i]=5;
-    key[0]=1;
-    for (i=0;i<16;i++) iv[i]=i;
-    for (i=0;i<16;i++) block[i]=i;
-
-    AES_init(&a,CTR16,KK,key,iv);
-
-    printf("Plain=   ");
-    for (i=0;i<16;i++) printf("%02x",block[i]);
-    printf("\n");
-    AES_encrypt(&a,block);
-    printf("Encrypt= ");
-    for (i=0;i<16;i++) printf("%02x",(uchar)block[i]);
-    printf("\n");
-    AES_reset(&a,CTR16,iv);
-    AES_decrypt(&a,block);
-    printf("Decrypt= ");
-    for (i=0;i<16;i++) printf("%02x",(uchar)block[i]);
-    printf("\n");
-
-    AES_end(&a);
-
-    return 0;
-}
-
-*/
-
diff --git a/src/big.c.in b/src/big.c.in
index 3358ae1..4aa7214 100644
--- a/src/big.c.in
+++ b/src/big.c.in
@@ -24,16 +24,15 @@
 
 /* test a=0? */
 /* libsodium constant time implementation */
-int BIG_XXX_iszilch(BIG_XXX a)
+int BIG_XXX_iszilch(const BIG_XXX a)
 {
-    int i;
     chunk d = 0;
 
 #ifdef DEBUG_NORM
     if ((a[MPV_XXX]!=1 && a[MPV_XXX]!=0) || a[MNV_XXX]!=0) printf("Input to iszilch not normed\n");
 #endif
 
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         d |= a[i];
 
     return (1 & ((d-1)>>BASEBITS_XXX));
@@ -44,16 +43,15 @@
    comparison to zero of a[1],..,a[NLEN_XXX-1]
    then checking if a[0] == 1
  */
-int BIG_XXX_isunity(BIG_XXX a)
+int BIG_XXX_isunity(const BIG_XXX a)
 {
-    int i;
     chunk d = 0;
 
 #ifdef DEBUG_NORM
     if ((a[MPV_XXX]!=1 && a[MPV_XXX]!=0) || a[MNV_XXX]!=0) printf("Input to isunity not normed\n");
 #endif
 
-    for(i=1; i<NLEN_XXX; i++)
+    for(int i=1; i<NLEN_XXX; i++)
         d |= a[i];
 
     return (1 & ((d-1)>>BASEBITS_XXX) & ((a[0]^1)-1)>>BASEBITS_XXX);
@@ -61,16 +59,15 @@
 
 /* test a=0? */
 /* libsodium constant time implementation */
-int BIG_XXX_diszilch(DBIG_XXX a)
+int BIG_XXX_diszilch(const DBIG_XXX a)
 {
-    int i;
     chunk d = 0;
 
 #ifdef DEBUG_NORM
     if ((a[DMPV_XXX]!=1 && a[DMPV_XXX]!=0) || a[DMNV_XXX]!=0) printf("Input to diszilch not normed\n");
 #endif
 
-    for (i=0; i<DNLEN_XXX; i++)
+    for (int i=0; i<DNLEN_XXX; i++)
         d |= a[i];
 
     return (1 & ((d-1)>>BASEBITS_XXX));
@@ -78,10 +75,10 @@
 
 /* SU= 56 */
 /* output a */
-void BIG_XXX_output(BIG_XXX a)
+void BIG_XXX_output(const BIG_XXX a)
 {
     BIG_XXX b;
-    int i,len;
+    int len;
     len=BIG_XXX_nbits(a);
     if (len%4==0) len/=4;
     else
@@ -91,7 +88,7 @@
     }
     if (len<MODBYTES_XXX*2) len=MODBYTES_XXX*2;
 
-    for (i=len-1; i>=0; i--)
+    for (int i=len-1; i>=0; i--)
     {
         BIG_XXX_copy(b,a);
         BIG_XXX_shr(b,i*4);
@@ -100,11 +97,10 @@
 }
 
 /* SU= 16 */
-void BIG_XXX_rawoutput(BIG_XXX a)
+void BIG_XXX_rawoutput(const BIG_XXX a)
 {
-    int i;
     printf("(");
-    for (i=0; i<NLEN_XXX-1; i++)
+    for (int i=0; i<NLEN_XXX-1; i++)
 #if CHUNK==64
         printf("%"PRIxMAX",",(uintmax_t) a[i]);
     printf("%"PRIxMAX")",(uintmax_t) a[NLEN_XXX-1]);
@@ -117,13 +113,13 @@
 /* Swap a and b if d=1 */
 void BIG_XXX_cswap(BIG_XXX a,BIG_XXX b,int d)
 {
-    int i;
-    chunk t,c=d;
+    chunk t;
+    chunk c=d;
     c=~(c-1);
 #ifdef DEBUG_NORM
     for (i=0; i<NLEN_XXX+2; i++)
 #else
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
 #endif
     {
         t=c&(a[i]^b[i]);
@@ -133,14 +129,13 @@
 }
 
 /* Move b to a if d=1 */
-void BIG_XXX_cmove(BIG_XXX f,BIG_XXX g,int d)
+void BIG_XXX_cmove(BIG_XXX f,const BIG_XXX g,int d)
 {
-    int i;
     chunk b=(chunk)-d;
 #ifdef DEBUG_NORM
     for (i=0; i<NLEN_XXX+2; i++)
 #else
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
 #endif
     {
         f[i]^=(f[i]^g[i])&b;
@@ -148,14 +143,13 @@
 }
 
 /* Move g to f if d=1 */
-void BIG_XXX_dcmove(DBIG_XXX f,DBIG_XXX g,int d)
+void BIG_XXX_dcmove(DBIG_XXX f,const DBIG_XXX g,int d)
 {
-    int i;
     chunk b=(chunk)-d;
 #ifdef DEBUG_NORM
     for (i=0; i<DNLEN_XXX+2; i++)
 #else
-    for (i=0; i<DNLEN_XXX; i++)
+    for (int i=0; i<DNLEN_XXX; i++)
 #endif
     {
         f[i]^=(f[i]^g[i])&b;
@@ -164,13 +158,12 @@
 
 /* convert BIG to/from bytes */
 /* SU= 64 */
-void BIG_XXX_toBytes(char *b,BIG_XXX a)
+void BIG_XXX_toBytes(char *b,const BIG_XXX a)
 {
-    int i;
     BIG_XXX c;
     BIG_XXX_copy(c,a);
     BIG_XXX_norm(c);
-    for (i=MODBYTES_XXX-1; i>=0; i--)
+    for (int i=MODBYTES_XXX-1; i>=0; i--)
     {
         b[i]=c[0]&0xff;
         BIG_XXX_fshr(c,8);
@@ -178,11 +171,10 @@
 }
 
 /* SU= 16 */
-void BIG_XXX_fromBytes(BIG_XXX a,char *b)
+void BIG_XXX_fromBytes(BIG_XXX a,const char *b)
 {
-    int i;
     BIG_XXX_zero(a);
-    for (i=0; i<MODBYTES_XXX; i++)
+    for (int i=0; i<MODBYTES_XXX; i++)
     {
         BIG_XXX_fshl(a,8);
         a[0]+=(int)(unsigned char)b[i];
@@ -193,13 +185,13 @@
 #endif
 }
 
-void BIG_XXX_fromBytesLen(BIG_XXX a,char *b,int s)
+void BIG_XXX_fromBytesLen(BIG_XXX a,const char *b,int s)
 {
-    int i,len=s;
+    int len=s;
     BIG_XXX_zero(a);
 
     if (len>MODBYTES_XXX) len=MODBYTES_XXX;
-    for (i=0; i<len; i++)
+    for (int i=0; i<len; i++)
     {
         BIG_XXX_fshl(a,8);
         a[0]+=(int)(unsigned char)b[i];
@@ -216,7 +208,7 @@
 void BIG_XXX_doutput(DBIG_XXX a)
 {
     DBIG_XXX b;
-    int i,len;
+    int len;
     BIG_XXX_dnorm(a);
     len=BIG_XXX_dnbits(a);
     if (len%4==0) len/=4;
@@ -226,7 +218,7 @@
         len++;
     }
 
-    for (i=len-1; i>=0; i--)
+    for (int i=len-1; i>=0; i--)
     {
         BIG_XXX_dcopy(b,a);
         BIG_XXX_dshr(b,i*4);
@@ -235,11 +227,10 @@
 }
 
 
-void BIG_XXX_drawoutput(DBIG_XXX a)
+void BIG_XXX_drawoutput(const DBIG_XXX a)
 {
-    int i;
     printf("(");
-    for (i=0; i<DNLEN_XXX-1; i++)
+    for (int i=0; i<DNLEN_XXX-1; i++)
 #if CHUNK==64
         printf("%"PRIxMAX",",(uintmax_t) a[i]);
     printf("%"PRIxMAX")",(uintmax_t) a[DNLEN_XXX-1]);
@@ -250,10 +241,9 @@
 }
 
 /* Copy b=a */
-void BIG_XXX_copy(BIG_XXX b,BIG_XXX a)
+void BIG_XXX_copy(BIG_XXX b,const BIG_XXX a)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         b[i]=a[i];
 #ifdef DEBUG_NORM
     b[MPV_XXX]=a[MPV_XXX];
@@ -264,8 +254,7 @@
 /* Copy from ROM b=a */
 void BIG_XXX_rcopy(BIG_XXX b,const BIG_XXX a)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         b[i]=a[i];
 #ifdef DEBUG_NORM
     b[MPV_XXX]=1;
@@ -274,10 +263,9 @@
 }
 
 /* double length DBIG copy b=a */
-void BIG_XXX_dcopy(DBIG_XXX b,DBIG_XXX a)
+void BIG_XXX_dcopy(DBIG_XXX b,const DBIG_XXX a)
 {
-    int i;
-    for (i=0; i<DNLEN_XXX; i++)
+    for (int i=0; i<DNLEN_XXX; i++)
         b[i]=a[i];
 #ifdef DEBUG_NORM
     b[DMPV_XXX]=a[DMPV_XXX];
@@ -286,7 +274,7 @@
 }
 
 /* Copy BIG to bottom half of DBIG */
-void BIG_XXX_dscopy(DBIG_XXX b,BIG_XXX a)
+void BIG_XXX_dscopy(DBIG_XXX b,const BIG_XXX a)
 {
     int i;
     for (i=0; i<NLEN_XXX-1; i++)
@@ -303,7 +291,7 @@
 }
 
 /* Copy BIG to top half of DBIG */
-void BIG_XXX_dsucopy(DBIG_XXX b,BIG_XXX a)
+void BIG_XXX_dsucopy(DBIG_XXX b,const BIG_XXX a)
 {
     int i;
     for (i=0; i<NLEN_XXX; i++)
@@ -317,22 +305,20 @@
 }
 
 /* Copy bottom half of DBIG to BIG */
-void BIG_XXX_sdcopy(BIG_XXX b,DBIG_XXX a)
+void BIG_XXX_sdcopy(BIG_XXX a,const DBIG_XXX b)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++)
-        b[i]=a[i];
+    for (int i=0; i<NLEN_XXX; i++)
+        a[i]=b[i];
 #ifdef DEBUG_NORM
-    b[MPV_XXX]=a[DMPV_XXX];
-    b[MNV_XXX]=a[DMNV_XXX];
+    a[MPV_XXX]=b[DMPV_XXX];
+    a[MNV_XXX]=b[DMNV_XXX];
 #endif
 }
 
 /* Copy top half of DBIG to BIG */
-void BIG_XXX_sducopy(BIG_XXX b,DBIG_XXX a)
+void BIG_XXX_sducopy(BIG_XXX b,const DBIG_XXX a)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         b[i]=a[i+NLEN_XXX];
 #ifdef DEBUG_NORM
     b[MPV_XXX]=a[DMPV_XXX];
@@ -344,8 +330,7 @@
 /* Set a=0 */
 void BIG_XXX_zero(BIG_XXX a)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         a[i]=0;
 #ifdef DEBUG_NORM
     a[MPV_XXX]=a[MNV_XXX]=0;
@@ -354,8 +339,7 @@
 
 void BIG_XXX_dzero(DBIG_XXX a)
 {
-    int i;
-    for (i=0; i<DNLEN_XXX; i++)
+    for (int i=0; i<DNLEN_XXX; i++)
         a[i]=0;
 #ifdef DEBUG_NORM
     a[DMPV_XXX]=a[DMNV_XXX]=0;
@@ -365,9 +349,8 @@
 /* set a=1 */
 void BIG_XXX_one(BIG_XXX a)
 {
-    int i;
     a[0]=1;
-    for (i=1; i<NLEN_XXX; i++)
+    for (int i=1; i<NLEN_XXX; i++)
         a[i]=0;
 #ifdef DEBUG_NORM
     a[MPV_XXX]=1;
@@ -379,10 +362,9 @@
 
 /* Set c=a+b */
 /* SU= 8 */
-void BIG_XXX_add(BIG_XXX c,BIG_XXX a,BIG_XXX b)
+void BIG_XXX_add(BIG_XXX c,const BIG_XXX a,const BIG_XXX b)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         c[i]=a[i]+b[i];
 #ifdef DEBUG_NORM
     c[MPV_XXX]=a[MPV_XXX]+b[MPV_XXX];
@@ -396,10 +378,9 @@
 /* Set c=a or b */
 void BIG_XXX_or(BIG_XXX c,BIG_XXX a,BIG_XXX b)
 {
-    int i;
     BIG_XXX_norm(a);
     BIG_XXX_norm(b);
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         c[i]=a[i]|b[i];
 #ifdef DEBUG_NORM
     c[MPV_XXX]=1;
@@ -420,10 +401,9 @@
 
 /* Set c=a-b */
 /* SU= 8 */
-void BIG_XXX_sub(BIG_XXX c,BIG_XXX a,BIG_XXX b)
+void BIG_XXX_sub(BIG_XXX c,const BIG_XXX a,const BIG_XXX b)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
         c[i]=a[i]-b[i];
 #ifdef DEBUG_NORM
     c[MPV_XXX]=a[MPV_XXX]+b[MNV_XXX];
@@ -436,10 +416,9 @@
 
 /* SU= 8 */
 
-void BIG_XXX_dsub(DBIG_XXX c,DBIG_XXX a,DBIG_XXX b)
+void BIG_XXX_dsub(DBIG_XXX c,const DBIG_XXX a,const DBIG_XXX b)
 {
-    int i;
-    for (i=0; i<DNLEN_XXX; i++)
+    for (int i=0; i<DNLEN_XXX; i++)
         c[i]=a[i]-b[i];
 #ifdef DEBUG_NORM
     c[DMPV_XXX]=a[DMPV_XXX]+b[DMNV_XXX];
@@ -449,10 +428,9 @@
 #endif
 }
 
-void BIG_XXX_dadd(DBIG_XXX c,DBIG_XXX a,DBIG_XXX b)
+void BIG_XXX_dadd(DBIG_XXX c,const DBIG_XXX a,const DBIG_XXX b)
 {
-    int i;
-    for (i=0; i<DNLEN_XXX; i++)
+    for (int i=0; i<DNLEN_XXX; i++)
         c[i]=a[i]+b[i];
 #ifdef DEBUG_NORM
     c[DMPV_XXX]=a[DMPV_XXX]+b[DMNV_XXX];
@@ -473,10 +451,9 @@
 }
 
 /* multiplication r=a*c by c<=NEXCESS_XXX */
-void BIG_XXX_imul(BIG_XXX r,BIG_XXX a,int c)
+void BIG_XXX_imul(BIG_XXX r,const BIG_XXX a,int c)
 {
-    int i;
-    for (i=0; i<NLEN_XXX; i++) r[i]=a[i]*c;
+    for (int i=0; i<NLEN_XXX; i++) r[i]=a[i]*c;
 #ifdef DEBUG_NORM
     r[MPV_XXX]=a[MPV_XXX]*c;
     r[MNV_XXX]=a[MNV_XXX]*c;
@@ -488,11 +465,11 @@
 
 /* multiplication r=a*c by larger integer - c<=FEXCESS */
 /* SU= 24 */
-chunk BIG_XXX_pmul(BIG_XXX r,BIG_XXX a,int c)
+chunk BIG_XXX_pmul(BIG_XXX r,const BIG_XXX a,int c)
 {
-    int i;
-    chunk ak,carry=0;
-    for (i=0; i<NLEN_XXX; i++)
+    chunk ak;
+    chunk carry=0;
+    for (int i=0; i<NLEN_XXX; i++)
     {
         ak=a[i];
         r[i]=0;
@@ -509,11 +486,12 @@
 /* SU= 16 */
 int BIG_XXX_div3(BIG_XXX r)
 {
-    int i;
-    chunk ak,base,carry=0;
+    chunk ak;
+    chunk base;
+    chunk carry=0;
     BIG_XXX_norm(r);
     base=((chunk)1<<BASEBITS_XXX);
-    for (i=NLEN_XXX-1; i>=0; i--)
+    for (int i=NLEN_XXX-1; i>=0; i--)
     {
         ak=(carry*base+r[i]);
         r[i]=ak/3;
@@ -524,13 +502,12 @@
 
 /* multiplication c=a*b by even larger integer b>FEXCESS, resulting in DBIG */
 /* SU= 24 */
-void BIG_XXX_pxmul(DBIG_XXX c,BIG_XXX a,int b)
+void BIG_XXX_pxmul(DBIG_XXX c,const BIG_XXX a,int b)
 {
-    int j;
     chunk carry;
     BIG_XXX_dzero(c);
     carry=0;
-    for (j=0; j<NLEN_XXX; j++)
+    for (int j=0; j<NLEN_XXX; j++)
         carry=muladd_XXX(a[j],(chunk)b,carry,&c[j]);
     c[NLEN_XXX]=carry;
 #ifdef DEBUG_NORM
@@ -541,16 +518,15 @@
 
 /* .. if you know the result will fit in a BIG, c must be distinct from a and b */
 /* SU= 40 */
-void BIG_XXX_smul(BIG_XXX c,BIG_XXX a,BIG_XXX b)
+void BIG_XXX_smul(BIG_XXX c,const BIG_XXX a,const BIG_XXX b)
 {
-    int i,j;
     chunk carry;
 
     BIG_XXX_zero(c);
-    for (i=0; i<NLEN_XXX; i++)
+    for (int i=0; i<NLEN_XXX; i++)
     {
         carry=0;
-        for (j=0; j<NLEN_XXX; j++)
+        for (int j=0; j<NLEN_XXX; j++)
         {
             if (i+j<NLEN_XXX)
                 carry=muladd_XXX(a[i],b[j],carry,&c[i+j]);
@@ -565,11 +541,12 @@
 
 /* Set c=a*b */
 /* SU= 72 */
-void BIG_XXX_mul(DBIG_XXX c,BIG_XXX a,BIG_XXX b)
+void BIG_XXX_mul(DBIG_XXX c,const BIG_XXX a,const BIG_XXX b)
 {
     int i;
 #ifdef dchunk
-    dchunk t,co;
+    dchunk t;
+    dchunk co;
     dchunk s;
     dchunk d[NLEN_XXX];
     int k;
@@ -619,13 +596,12 @@
 #endif
 
 #else
-    int j;
     chunk carry;
     BIG_XXX_dzero(c);
     for (i=0; i<NLEN_XXX; i++)
     {
         carry=0;
-        for (j=0; j<NLEN_XXX; j++)
+        for (int j=0; j<NLEN_XXX; j++)
             carry=muladd_XXX(a[i],b[j],carry,&c[i+j]);
 
         c[NLEN_XXX+i]=carry;
@@ -641,11 +617,13 @@
 
 /* Set c=a*a */
 /* SU= 80 */
-void BIG_XXX_sqr(DBIG_XXX c,BIG_XXX a)
+void BIG_XXX_sqr(DBIG_XXX c,const BIG_XXX a)
 {
-    int i,j;
+    int i;
+    int j;
 #ifdef dchunk
-    dchunk t,co;
+    dchunk t;
+    dchunk co;
 #endif
 
 #ifdef DEBUG_NORM
@@ -758,12 +736,15 @@
 }
 
 /* Montgomery reduction */
-void BIG_XXX_monty(BIG_XXX a,BIG_XXX md,chunk MC,DBIG_XXX d)
+void BIG_XXX_monty(BIG_XXX a,const BIG_XXX md,chunk MC,const DBIG_XXX d)
 {
-    int i,k;
+    int i;
+    int k;
 
 #ifdef dchunk
-    dchunk t,c,s;
+    dchunk t;
+    dchunk c;
+    dchunk s;
     dchunk dd[NLEN_XXX];
     chunk v[NLEN_XXX];
 #endif
@@ -807,13 +788,13 @@
 
 
 #else
-    int j;
-    chunk m,carry;
+    chunk m;
+    chunk carry;
     for (i=0; i<NLEN_XXX; i++)
     {
         m = (MC*d[i])&BMASK_XXX;
         carry=0;
-        for (j=0; j<NLEN_XXX; j++)
+        for (int j=0; j<NLEN_XXX; j++)
             carry=muladd_XXX(m,md[j],carry,&d[i+j]);
         d[NLEN_XXX+i]+=carry;
     }
@@ -837,7 +818,7 @@
     int n=k%BASEBITS_XXX;
     int m=k/BASEBITS_XXX;
 
-    a[NLEN_XXX-1]=((a[NLEN_XXX-1-m]<<n));
+    a[NLEN_XXX-1]=(a[NLEN_XXX-1-m]<<n);
     if (NLEN_XXX>=m+2) a[NLEN_XXX-1]|=(a[NLEN_XXX-m-2]>>(BASEBITS_XXX-n));
 
     for (i=NLEN_XXX-2; i>m; i--)
@@ -852,10 +833,8 @@
 /* SU= 16 */
 int BIG_XXX_fshl(BIG_XXX a,int n)
 {
-    int i;
-
-    a[NLEN_XXX-1]=((a[NLEN_XXX-1]<<n))|(a[NLEN_XXX-2]>>(BASEBITS_XXX-n)); /* top word not masked */
-    for (i=NLEN_XXX-2; i>0; i--)
+    a[NLEN_XXX-1]=(a[NLEN_XXX-1]<<n)|(a[NLEN_XXX-2]>>(BASEBITS_XXX-n)); /* top word not masked */
+    for (int i=NLEN_XXX-2; i>0; i--)
         a[i]=((a[i]<<n)&BMASK_XXX)|(a[i-1]>>(BASEBITS_XXX-n));
     a[0]=(a[0]<<n)&BMASK_XXX;
 
@@ -870,7 +849,7 @@
     int n=k%BASEBITS_XXX;
     int m=k/BASEBITS_XXX;
 
-    a[DNLEN_XXX-1]=((a[DNLEN_XXX-1-m]<<n))|(a[DNLEN_XXX-m-2]>>(BASEBITS_XXX-n));
+    a[DNLEN_XXX-1]=(a[DNLEN_XXX-1-m]<<n)|(a[DNLEN_XXX-m-2]>>(BASEBITS_XXX-n));
 
     for (i=DNLEN_XXX-2; i>m; i--)
         a[i]=((a[i-m]<<n)&BMASK_XXX)|(a[i-m-1]>>(BASEBITS_XXX-n));
@@ -895,16 +874,16 @@
 }
 
 /* Fast combined shift, subtract and norm. Return sign of result */
-int BIG_XXX_ssn(BIG_XXX r,BIG_XXX a,BIG_XXX m)
+int BIG_XXX_ssn(BIG_XXX r,const BIG_XXX a,BIG_XXX m)
 {
-    int i,n=NLEN_XXX-1;
+    int n=NLEN_XXX-1;
     chunk carry;
     m[0]=(m[0]>>1)|((m[1]<<(BASEBITS_XXX-1))&BMASK_XXX);
     r[0]=a[0]-m[0];
     carry=r[0]>>BASEBITS_XXX;
     r[0]&=BMASK_XXX;
 
-    for (i=1; i<n; i++)
+    for (int i=1; i<n; i++)
     {
         m[i]=(m[i]>>1)|((m[i+1]<<(BASEBITS_XXX-1))&BMASK_XXX);
         r[i]=a[i]-m[i]+carry;
@@ -926,9 +905,8 @@
 /* SU= 16 */
 int BIG_XXX_fshr(BIG_XXX a,int k)
 {
-    int i;
     chunk r=a[0]&(((chunk)1<<k)-1); /* shifted out part */
-    for (i=0; i<NLEN_XXX-1; i++)
+    for (int i=0; i<NLEN_XXX-1; i++)
         a[i]=(a[i]>>k)|((a[i+1]<<(BASEBITS_XXX-k))&BMASK_XXX);
     a[NLEN_XXX-1]=a[NLEN_XXX-1]>>k;
     return (int)r;
@@ -950,10 +928,11 @@
 /* Split DBIG d into two BIGs t|b. Split happens at n bits, where n falls into NLEN word */
 /* d MUST be normalised */
 /* SU= 24 */
-chunk BIG_XXX_split(BIG_XXX t,BIG_XXX b,DBIG_XXX d,int n)
+chunk BIG_XXX_split(BIG_XXX t,BIG_XXX b,const DBIG_XXX d,int n)
 {
     int i;
-    chunk nw,carry=0;
+    chunk nw;
+    chunk carry=0;
     int m=n%BASEBITS_XXX;
 
     if (m==0)
@@ -996,9 +975,9 @@
 /* normalise BIG - force all digits < 2^BASEBITS */
 chunk BIG_XXX_norm(BIG_XXX a)
 {
-    int i;
-    chunk d,carry=0;
-    for (i=0; i<NLEN_XXX-1; i++)
+    chunk d;
+    chunk carry=0;
+    for (int i=0; i<NLEN_XXX-1; i++)
     {
         d=a[i]+carry;
         a[i]=d&BMASK_XXX;
@@ -1015,9 +994,9 @@
 
 void BIG_XXX_dnorm(DBIG_XXX a)
 {
-    int i;
-    chunk d,carry=0;
-    for (i=0; i<DNLEN_XXX-1; i++)
+    chunk d;
+    chunk carry=0;
+    for (int i=0; i<DNLEN_XXX-1; i++)
     {
         d=a[i]+carry;
         a[i]=d&BMASK_XXX;
@@ -1033,9 +1012,8 @@
 /* Compare a and b. Return 1 for a>b, -1 for a<b, 0 for a==b */
 /* a and b MUST be normalised before call */
 /* libsodium constant time implementation */
-int BIG_XXX_comp(BIG_XXX b1,BIG_XXX b2)
+int BIG_XXX_comp(const BIG_XXX b1,const BIG_XXX b2)
 {
-    int i;
     chunk gt = 0;
     chunk eq = 1;
 
@@ -1044,7 +1022,7 @@
     if ((b2[MPV_XXX]!=1 && b2[MPV_XXX]!=0) || b2[MNV_XXX]!=0) printf("Second input to comp not normed\n");
 #endif
 
-    for (i = NLEN_XXX-1; i>=0; i--)
+    for (int i = NLEN_XXX-1; i>=0; i--)
     {
         gt |= ((b2[i]-b1[i]) >> BASEBITS_XXX) & eq;
         eq &= ((b2[i]^b1[i])-1) >> BASEBITS_XXX;
@@ -1056,9 +1034,8 @@
 /* Compare b1 and b2. Return 1 for b1>b2, -1 for a<b, 0 for a==b */
 /* a and b MUST be normalised before call */
 /* libsodium constant time implementation */
-int BIG_XXX_dcomp(DBIG_XXX b1,DBIG_XXX b2)
+int BIG_XXX_dcomp(const DBIG_XXX b1,const DBIG_XXX b2)
 {
-    int i;
     chunk gt = 0;
     chunk eq = 1;
 
@@ -1067,7 +1044,7 @@
     if ((b2[DMPV_XXX]!=1 && b2[DMPV_XXX]!=0) || b2[DMNV_XXX]!=0) printf("Second input to dcomp not normed\n");
 #endif
 
-    for (i=DNLEN_XXX-1; i>=0; i--)
+    for (int i=DNLEN_XXX-1; i>=0; i--)
     {
         gt |= ((b2[i]-b1[i]) >> BASEBITS_XXX) & eq;
         eq &= ((b2[i]^b1[i])-1) >> BASEBITS_XXX;
@@ -1078,9 +1055,10 @@
 
 /* return number of bits in a */
 /* SU= 8 */
-int BIG_XXX_nbits(BIG_XXX a)
+int BIG_XXX_nbits(const BIG_XXX a)
 {
-    int bts,k=NLEN_XXX-1;
+    int bts;
+    int k=NLEN_XXX-1;
     BIG_XXX t;
     chunk c;
     BIG_XXX_copy(t,a);
@@ -1098,9 +1076,10 @@
 }
 
 /* SU= 8, Calculate number of bits in a DBIG - output normalised */
-int BIG_XXX_dnbits(DBIG_XXX a)
+int BIG_XXX_dnbits(const DBIG_XXX a)
 {
-    int bts,k=DNLEN_XXX-1;
+    int bts;
+    int k=DNLEN_XXX-1;
     DBIG_XXX t;
     chunk c;
     BIG_XXX_dcopy(t,a);
@@ -1120,7 +1099,7 @@
 
 /* Set b=b mod c */
 /* SU= 16 */
-void BIG_XXX_mod(BIG_XXX b,BIG_XXX c1)
+void BIG_XXX_mod(BIG_XXX b,const BIG_XXX c1)
 {
     int k=0;
     BIG_XXX r; /**/
@@ -1151,10 +1130,11 @@
 
 /* Set a=b mod c, b is destroyed. Slow but rarely used. */
 /* SU= 96 */
-void BIG_XXX_dmod(BIG_XXX a,DBIG_XXX b,BIG_XXX c)
+void BIG_XXX_dmod(BIG_XXX a,DBIG_XXX b,const BIG_XXX c)
 {
     int k=0;
-    DBIG_XXX m,r;
+    DBIG_XXX m;
+    DBIG_XXX r;
     BIG_XXX_dnorm(b);
     BIG_XXX_dscopy(m,c);
 
@@ -1187,11 +1167,14 @@
 /* Set a=b/c,  b is destroyed. Slow but rarely used. */
 /* SU= 136 */
 
-void BIG_XXX_ddiv(BIG_XXX a,DBIG_XXX b,BIG_XXX c)
+void BIG_XXX_ddiv(BIG_XXX a,DBIG_XXX b,const BIG_XXX c)
 {
-    int d,k=0;
-    DBIG_XXX m,dr;
-    BIG_XXX e,r;
+    int d;
+    int k=0;
+    DBIG_XXX m;
+    DBIG_XXX dr;
+    BIG_XXX e;
+    BIG_XXX r;
     BIG_XXX_dnorm(b);
     BIG_XXX_dscopy(m,c);
 
@@ -1226,10 +1209,14 @@
 
 /* SU= 136 */
 
-void BIG_XXX_sdiv(BIG_XXX a,BIG_XXX c)
+void BIG_XXX_sdiv(BIG_XXX a,const BIG_XXX c)
 {
-    int d,k=0;
-    BIG_XXX m,e,b,r;
+    int d;
+    int k=0;
+    BIG_XXX m;
+    BIG_XXX e;
+    BIG_XXX b;
+    BIG_XXX r;
     BIG_XXX_norm(a);
     BIG_XXX_copy(b,a);
     BIG_XXX_copy(m,c);
@@ -1263,24 +1250,24 @@
 }
 
 /* return LSB of a */
-int BIG_XXX_parity(BIG_XXX a)
+int BIG_XXX_parity(const BIG_XXX a)
 {
     return a[0]%2;
 }
 
 /* return n-th bit of a */
 /* SU= 16 */
-int BIG_XXX_bit(BIG_XXX a,int n)
+int BIG_XXX_bit(const BIG_XXX a,int n)
 {
     return ((int)(a[n/BASEBITS_XXX]>>(n%BASEBITS_XXX))) & 1;
 }
 
 /* return w bits of a starting from the n-th */
-int BIG_XXX_bits(BIG_XXX a, int n, int w)
+int BIG_XXX_bits(const BIG_XXX a, int n, int w)
 {
-    int i, b = 0;
+    int b = 0;
 
-    for (i=n+w-1; i>=n; i--)
+    for (int i=n+w-1; i>=n; i--)
     {
         b <<=1;
         b |= ((int)(a[i/BASEBITS_XXX]>>(i%BASEBITS_XXX))) & 1;
@@ -1301,12 +1288,14 @@
 /* get 8*MODBYTES size random number */
 void BIG_XXX_random(BIG_XXX m,csprng *rng)
 {
-    int i,b,j=0,r=0;
+    int b;
+    int j=0;
+    int r=0;
     int len=8*MODBYTES_XXX;
 
     BIG_XXX_zero(m);
     /* generate random BIG */
-    for (i=0; i<len; i++)
+    for (int i=0; i<len; i++)
     {
         if (j==0) r=RAND_byte(rng);
         else r>>=1;
@@ -1325,13 +1314,15 @@
 
 /* get random BIG from rng, modulo q. Done one bit at a time, so its portable */
 
-void BIG_XXX_randomnum(BIG_XXX m,BIG_XXX q,csprng *rng)
+void BIG_XXX_randomnum(BIG_XXX m,const BIG_XXX q,csprng *rng)
 {
-    int i,b,j=0,r=0;
+    int b;
+    int j=0;
+    int r=0;
     DBIG_XXX d;
     BIG_XXX_dzero(d);
     /* generate random DBIG */
-    for (i=0; i<2*BIG_XXX_nbits(q); i++)
+    for (int i=0; i<2*BIG_XXX_nbits(q); i++)
     {
         if (j==0) r=RAND_byte(rng);
         else r>>=1;
@@ -1351,10 +1342,11 @@
 
 /* Set r=a*b mod m */
 /* SU= 96 */
-void BIG_XXX_modmul(BIG_XXX r,BIG_XXX a1,BIG_XXX b1,BIG_XXX m)
+void BIG_XXX_modmul(BIG_XXX r,const BIG_XXX a1,const BIG_XXX b1,const BIG_XXX m)
 {
     DBIG_XXX d;
-    BIG_XXX a,b;
+    BIG_XXX a;
+    BIG_XXX b;
     BIG_XXX_copy(a,a1);
     BIG_XXX_copy(b,b1);
     BIG_XXX_mod(a,m);
@@ -1366,7 +1358,7 @@
 
 /* Set a=a*a mod m */
 /* SU= 88 */
-void BIG_XXX_modsqr(BIG_XXX r,BIG_XXX a1,BIG_XXX m)
+void BIG_XXX_modsqr(BIG_XXX r,const BIG_XXX a1,const BIG_XXX m)
 {
     DBIG_XXX d;
     BIG_XXX a;
@@ -1378,7 +1370,7 @@
 
 /* Set r=-a mod m */
 /* SU= 16 */
-void BIG_XXX_modneg(BIG_XXX r,BIG_XXX a1,BIG_XXX m)
+void BIG_XXX_modneg(BIG_XXX r,const BIG_XXX a1,const BIG_XXX m)
 {
     BIG_XXX a;
     BIG_XXX_copy(a,a1);
@@ -1388,11 +1380,12 @@
 
 /* Set a=a/b mod m */
 /* SU= 136 */
-void BIG_XXX_moddiv(BIG_XXX r,BIG_XXX a1,BIG_XXX b1,BIG_XXX m)
+void BIG_XXX_moddiv(BIG_XXX r,const BIG_XXX a1,const BIG_XXX b1,const BIG_XXX m)
 {
     DBIG_XXX d;
     BIG_XXX z;
-    BIG_XXX a,b;
+    BIG_XXX a;
+    BIG_XXX b;
     BIG_XXX_copy(a,a1);
     BIG_XXX_copy(b,b1);
 
@@ -1406,10 +1399,16 @@
 
 /* Get jacobi Symbol (a/p). Returns 0, 1 or -1 */
 /* SU= 216 */
-int BIG_XXX_jacobi(BIG_XXX a,BIG_XXX p)
+int BIG_XXX_jacobi(BIG_XXX a,const BIG_XXX p)
 {
-    int n8,k,m=0;
-    BIG_XXX t,x,n,zilch,one;
+    int n8;
+    int k;
+    int m=0;
+    BIG_XXX t;
+    BIG_XXX x;
+    BIG_XXX n;
+    BIG_XXX zilch;
+    BIG_XXX one;
     BIG_XXX_one(one);
     BIG_XXX_zero(zilch);
     if (BIG_XXX_parity(p)==0 || BIG_XXX_comp(a,zilch)==0 || BIG_XXX_comp(p,one)<=0) return 0;
@@ -1445,7 +1444,11 @@
 /* Arazi and Qi inversion mod 256 */
 static int invmod256(int a)
 {
-    int U,t1,t2,b,c;
+    int U;
+    int t1;
+    int t2;
+    int b;
+    int c;
     t1=0;
     c=(a>>1)&1;
     t1+=c;
@@ -1486,11 +1489,13 @@
 /* a=1/a mod 2^BIGBITS. This is very fast! */
 void BIG_XXX_invmod2m(BIG_XXX a)
 {
-    int i;
-    BIG_XXX U,t1,b,c;
+    BIG_XXX U;
+    BIG_XXX t1;
+    BIG_XXX b;
+    BIG_XXX c;
     BIG_XXX_zero(U);
     BIG_XXX_inc(U,invmod256(BIG_XXX_lastbits(a,8)));
-    for (i=8; i<BIGBITS_XXX; i<<=1)
+    for (int i=8; i<BIGBITS_XXX; i<<=1)
     {
         BIG_XXX_norm(U);
         BIG_XXX_copy(b,a);
@@ -1527,10 +1532,18 @@
 }
 
 /* Set r=1/a mod p. Kaliski method - on entry a < p*/
-void BIG_XXX_invmodp(BIG_XXX r,BIG_XXX a,BIG_XXX p)
+void BIG_XXX_invmodp(BIG_XXX r,const BIG_XXX a,const BIG_XXX p)
 {
-    int k, p1, pu, pv, psw, pmv;
-    BIG_XXX u, v, s, w;
+    int k;
+    int p1;
+    int pu;
+    int pv;
+    int psw;
+    int pmv;
+    BIG_XXX u;
+    BIG_XXX v;
+    BIG_XXX s;
+    BIG_XXX w;
 
     BIG_XXX_copy(u, p);
     BIG_XXX_copy(v, a);
@@ -1609,7 +1622,8 @@
 /* set x = x mod 2^m */
 void BIG_XXX_mod2m(BIG_XXX x,int m)
 {
-    int i,wd,bt;
+    int wd;
+    int bt;
     chunk msk;
     BIG_XXX_norm(x);
 
@@ -1617,13 +1631,14 @@
     bt=m%BASEBITS_XXX;
     msk=((chunk)1<<bt)-1;
     x[wd]&=msk;
-    for (i=wd+1; i<NLEN_XXX; i++) x[i]=0;
+    for (int i=wd+1; i<NLEN_XXX; i++) x[i]=0;
 }
 
 /* set x = x mod 2^m */
 void BIG_XXX_dmod2m(DBIG_XXX x,int m)
 {
-    int i,wd,bt;
+    int wd;
+    int bt;
     chunk msk;
     BIG_XXX_norm(x);
 
@@ -1631,17 +1646,17 @@
     bt=m%BASEBITS_XXX;
     msk=((chunk)1<<bt)-1;
     x[wd]&=msk;
-    for (i=wd+1; i<DNLEN_XXX; i++) x[i]=0;
+    for (int i=wd+1; i<DNLEN_XXX; i++) x[i]=0;
 }
 
 // new
 /* Convert to DBIG number from byte array of given length */
-void BIG_XXX_dfromBytesLen(DBIG_XXX a,char *b,int s)
+void BIG_XXX_dfromBytesLen(DBIG_XXX a,const char *b,int s)
 {
-    int i,len=s;
+    int len=s;
     BIG_XXX_dzero(a);
 
-    for (i=0; i<len; i++)
+    for (int i=0; i<len; i++)
     {
         BIG_XXX_dshl(a,8);
         a[0]+=(int)(unsigned char)b[i];
diff --git a/src/bls.c.in b/src/bls.c.in
index 94e6061..623622e 100644
--- a/src/bls.c.in
+++ b/src/bls.c.in
@@ -26,7 +26,7 @@
 #include "bls_ZZZ.h"
 
 // Polynomial interpolation coefficients
-static void recover_coefficients(int k, octet* X, BIG_XXX* coefs)
+static void recover_coefficients(int k, const octet* X, BIG_XXX* coefs)
 {
     BIG_XXX r;
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
@@ -93,15 +93,14 @@
 }
 
 /* hash a message, M, to an ECP point, using SHA3 */
-static void BLS_HASHIT(ECP_ZZZ *P,octet *M)
+static void BLS_HASHIT(ECP_ZZZ *P,const octet *M)
 {
-    int i;
     int j;
     sha3 hs;
     char h[MODBYTES_XXX];
     octet HM= {0,sizeof(h),h};
     SHA3_init(&hs,SHAKE256);
-    for (i=0; i<M->len; i++)
+    for (int i=0; i<M->len; i++)
     {
         j = (unsigned char) M->val[i];
         SHA3_process(&hs,j);
@@ -115,7 +114,8 @@
 int BLS_ZZZ_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W)
 {
     ECP2_ZZZ G;
-    BIG_XXX s,q;
+    BIG_XXX s;
+    BIG_XXX q;
     BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
     ECP2_ZZZ_generator(&G);
 
@@ -138,7 +138,7 @@
 }
 
 /* Sign message M using private key S to produce signature SIG */
-int BLS_ZZZ_SIGN(octet *SIG,octet *M,octet *S)
+int BLS_ZZZ_SIGN(octet *SIG,const octet *M,const octet *S)
 {
     BIG_XXX s;
     ECP_ZZZ D;
@@ -152,11 +152,13 @@
 }
 
 /* Verify signature of message M, the signature SIG, and the public key W */
-int BLS_ZZZ_VERIFY(octet *SIG,octet *M,octet *W)
+int BLS_ZZZ_VERIFY(const octet *SIG,const octet *M,const octet *W)
 {
     FP12_YYY v;
-    ECP2_ZZZ G,PK;
-    ECP_ZZZ D,HM;
+    ECP2_ZZZ G;
+    ECP2_ZZZ PK;
+    ECP_ZZZ D;
+    ECP_ZZZ HM;
     BLS_HASHIT(&HM,M);
 
     if (!ECP_ZZZ_fromOctet(&D,SIG))
@@ -183,7 +185,7 @@
 }
 
 /* R=R1+R2 in group G1 */
-int BLS_ZZZ_ADD_G1(octet *R1,octet *R2,octet *R)
+int BLS_ZZZ_ADD_G1(const octet *R1,const octet *R2,octet *R)
 {
     ECP_ZZZ P;
     ECP_ZZZ T;
@@ -205,7 +207,7 @@
 }
 
 /* W=W1+W2 in group G2 */
-int BLS_ZZZ_ADD_G2(octet *W1,octet *W2,octet *W)
+int BLS_ZZZ_ADD_G2(const octet *W1,const octet *W2,octet *W)
 {
     ECP2_ZZZ Q;
     ECP2_ZZZ T;
@@ -226,7 +228,7 @@
     return BLS_OK;
 }
 
-int BLS_ZZZ_MAKE_SHARES(int k, int n, csprng *RNG, octet* X, octet* Y, octet* SKI, octet* SKO)
+int BLS_ZZZ_MAKE_SHARES(int k, int n, csprng *RNG, octet* X, octet* Y, const octet* SKI, octet* SKO)
 {
     BIG_XXX r;
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
@@ -287,7 +289,7 @@
     return BLS_OK;
 }
 
-int BLS_ZZZ_RECOVER_SECRET(int k, octet* X, octet* Y, octet* SK)
+int BLS_ZZZ_RECOVER_SECRET(int k,const octet* X, const octet* Y, octet* SK)
 {
     BIG_XXX r;
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
@@ -323,7 +325,7 @@
     return BLS_OK;
 }
 
-int BLS_ZZZ_RECOVER_SIGNATURE(int k, octet* X, octet* Y, octet* SIG)
+int BLS_ZZZ_RECOVER_SIGNATURE(int k, const octet* X, const octet* Y, octet* SIG)
 {
     BIG_XXX coefs[k];
     ECP_ZZZ y;
diff --git a/src/bls_ietf.c.in b/src/bls_ietf.c.in
new file mode 100644
index 0000000..1f42936
--- /dev/null
+++ b/src/bls_ietf.c.in
@@ -0,0 +1,1275 @@
+/*
+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.
+*/
+
+/* Boneh-Lynn-Shacham signature 128-bit API */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "config_curve_ZZZ.h"
+#include "hash_to_field_YYY.h"
+
+#if CURVE_SECURITY_ZZZ == 128
+#include "bls_ietf_ZZZ.h"
+#else
+#error "IETF-compliant BLS currently only supports 128-bit security level (i.e. BLS12-381)"
+#endif
+
+int BLS_IETF_ZZZ_keygen(char sk[SK_LEN],
+    const char *ikm,  unsigned int ikmlen,
+    const char *salt, unsigned int saltlen,
+    const char *info, unsigned int infolen)
+{
+
+    if (ikm == NULL || salt == NULL || (info == NULL && infolen))
+        return ERR_NULLPOINTER_BLS;
+    if (ikmlen < 32 || saltlen < SHA256_HASH_SIZE)
+        return ERR_BADARGLEN_BLS;
+
+    int ret;
+    // L = ceil((3 * ceil(log2(r))) / 16) as defined in RFC
+    unsigned int L = (3*(unsigned int)BIG_XXX_nbits(CURVE_Order_ZZZ) + 15) / 16; // 15 is added to ensure ceiling-division
+    char okm[L];
+    char prk[SHA256_HASH_SIZE];
+    char ikm_prime[ikmlen + 1];
+    char info_prime[infolen + 2];
+    char salt_prime[saltlen];
+    BIG_XXX s;
+
+    for(unsigned int i = 0; i < saltlen; i++)
+        salt_prime[i] = salt[i];
+
+    for(unsigned int i = 0; i < ikmlen; i++)
+        ikm_prime[i] = ikm[i];
+    // ikm_prime = ikm || I2OSP(0, 1)
+    ikm_prime[ikmlen] = 0x00;
+
+    for(unsigned int i = 0; i < infolen; i++)
+        info_prime[i] = info[i];
+    // info_prime = info || I2OSP(L, 2)
+    info_prime[infolen]     = (char)(L >> 8);   // most significant byte
+    info_prime[infolen + 1] = (char)(L & 0xff); // least significant byte
+
+    while (1) {
+        // PRK = HKDF-Extract(salt, IKM || I2OSP(0, 1))
+        ret = HKDF_SHA256_extract(prk, salt_prime, saltlen, ikm_prime, ikmlen + 1);
+        // OKM = HKDF-Expand(PRK, key_info || I2OSP(L, 2), L)
+        ret |= HKDF_SHA256_expand(okm, L, prk, SHA256_HASH_SIZE, info_prime, infolen + 2);
+        if (ret != SUCCESS)
+            return ret;
+        // SK = OS2IP(OKM) mod r
+        BIG_XXX_fromBytesLen(s, okm, L);
+        BIG_XXX_mod(s, CURVE_Order_ZZZ);
+        // if SK != 0
+        if (!BIG_XXX_iszilch(s)) {
+            // return SK
+            BIG_XXX_toBytes(okm, s);
+            // SK is only 32-byte long and requires BE encoding
+            for(unsigned int i = 0; i < SK_LEN; i++)
+                sk[i] = okm[L - SK_LEN + i];
+            break;
+        }
+        // salt = H(salt)
+        HASH256_oneshot(salt_prime, salt_prime, saltlen);
+        // the initial saltlen may be greater than the hash size
+        saltlen = SHA256_HASH_SIZE;
+    }
+
+    // zeroize pseudo-random key
+    for(unsigned int i = 0; i < SHA256_HASH_SIZE; i++)
+        prk[i] = 0x00;
+    // zeroize output keying material
+    for(unsigned int i = 0; i < L; i++)
+        okm[i] = 0x00;
+    // zeroize big variable
+    BIG_XXX_zero(s);
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_sk_to_pk_G1(ECP_ZZZ *pk, const char *sk)
+{
+    if (pk == NULL || sk == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX s;
+
+    // s <- SK
+    BIG_XXX_fromBytesLen(s, sk, SK_LEN);
+    // PK <- G
+    ECP_ZZZ_generator(pk);
+    // PK <- s*G
+    ECP_ZZZ_mul(pk, s);
+    // zeroize big variable
+    BIG_XXX_zero(s);
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_sk_to_pk_G2(ECP2_ZZZ *pk, const char *sk)
+{
+    if (pk == NULL || sk == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX s;
+
+    // s <- SK
+    BIG_XXX_fromBytesLen(s, sk, SK_LEN);
+    // PK <- G
+    ECP2_ZZZ_generator(pk);
+    // PK <- s*G
+    ECP2_ZZZ_mul(pk, s);
+    // zeroize big variable
+    BIG_XXX_zero(s);
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_serialize_G1(octet *bytes, const ECP_ZZZ *point)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX x;
+    BIG_XXX y;
+
+    if (ECP_ZZZ_get(x, y, point) == -1)
+        return ERR_NOTONCURVE_BLS;
+
+    BIG_XXX_toBytes(bytes->val, x);
+    BIG_XXX_toBytes(bytes->val + BFS_ZZZ, y);
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_deserialize_G1(ECP_ZZZ *point, const octet *bytes)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX x;
+    BIG_XXX y;
+
+    BIG_XXX_fromBytes(x, bytes->val);
+    BIG_XXX_fromBytes(y, bytes->val + BFS_ZZZ);
+
+    if (ECP_ZZZ_set(point, x, y) == 0)
+        return ERR_NOTONCURVE_BLS;
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_serialize_G2(octet *bytes, const ECP2_ZZZ *point)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX b;
+    FP2_YYY qx;
+    FP2_YYY qy;
+
+    if (ECP2_ZZZ_get(&qx, &qy, point) == -1)
+        return ERR_NOTONCURVE_BLS;
+
+    FP_YYY_redc(b, &(qx.b));
+    BIG_XXX_toBytes(bytes->val, b);
+    bytes->len = BFS_ZZZ;
+
+    FP_YYY_redc(b, &(qx.a));
+    BIG_XXX_toBytes(bytes->val + BFS_ZZZ, b);
+    bytes->len += BFS_ZZZ;
+
+    FP_YYY_redc(b, &(qy.b));
+    BIG_XXX_toBytes(bytes->val + 2*BFS_ZZZ, b);
+    bytes->len += BFS_ZZZ;
+
+    FP_YYY_redc(b, &(qy.a));
+    BIG_XXX_toBytes(bytes->val + 3*BFS_ZZZ, b);
+    bytes->len += BFS_ZZZ;
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_deserialize_G2(ECP2_ZZZ *point, const octet *bytes)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX re;
+    BIG_XXX im;
+    FP2_YYY x;
+    FP2_YYY y;
+
+    // First FP2 element
+    BIG_XXX_fromBytes(im, bytes->val);
+    BIG_XXX_fromBytes(re, bytes->val + BFS_ZZZ);
+    FP2_YYY_from_BIGs(&x, re, im);
+
+    // Second FP2 element
+    BIG_XXX_fromBytes(im, bytes->val + 2*BFS_ZZZ);
+    BIG_XXX_fromBytes(re, bytes->val + 3*BFS_ZZZ);
+    FP2_YYY_from_BIGs(&y, re, im);
+
+    if (ECP2_ZZZ_set(point, &x, &y) == 0)
+        return ERR_NOTONCURVE_BLS;
+
+    return SUCCESS;
+}
+
+/**
+ * @brief Indicates if given a y-coordinate is the lexicographically greatest
+ * as well as its parity.
+ *
+ * @param y y-coordinate
+ *
+ * @return A 2-bit value where:
+ * - the most-significant bit is set to 1 if the y-coordinate is the
+ * lexicographically largest of the two associated with its x-coordinate.
+ * - the least-significant bit is set to 1 if the y-coordinate is odd.
+ */
+static int sgn0_big(const BIG_XXX y)
+{
+    int i;
+    int carry;
+    int ret;
+    chunk borrow;
+    chunk chunkx;
+    BIG_XXX tmp;
+
+    ret = y[0] & 1;
+
+    for (carry=0, i=0; i<NLEN_XXX; i++) {
+        tmp[i] = (y[i] << 1) | carry;
+        carry = y[i] >> (BASEBITS_XXX - 1);
+    }
+
+    for (borrow=0, i=0; i<NLEN_XXX; i++) {
+        chunkx = tmp[i] - (Modulus_ZZZ[i] + borrow);
+        borrow = (chunkx >> BASEBITS_XXX) & 1;
+    }
+
+    ret |= ((carry - (int)borrow) & 2) ^ 2;
+
+    return ret;
+}
+
+/**
+ * @brief Indicates if given a y-coordinate (FP2 element) is the
+ * lexicographically greatest as well as its parity.
+ *
+ * @param y y-coordinate
+ *
+ * @return A 2-bit value where:
+ * - the most-significant bit is set to 1 if the y-coordinate is the
+ * lexicographically largest of the two associated with its x-coordinate.
+ * - the least-significant bit is set to 1 if the y-coordinate is odd.
+ */
+static int sgn0_fp2(const FP2_YYY y)
+{
+    int re;
+    int im;
+    int sign;
+    int prty;
+
+    BIG_XXX a;
+    BIG_XXX b;
+
+    FP_YYY_redc(a, &(y.a));
+    FP_YYY_redc(b, &(y.b));
+
+    re = sgn0_big(a);
+    im = sgn0_big(b);
+
+    // y->b != 0 ? sgn0_big(y->b) : sgn0_big(a->a)
+    sign = 0 - BIG_XXX_iszilch(b);
+    sign = (re & sign) | (im & ~sign);
+
+    // y->a == 0 ? prty(y->b) : prty(a->a)
+    prty = 0 - BIG_XXX_iszilch(a);
+    prty = (im & prty) | (re & ~prty);
+
+    return (sign & 2) | (prty & 1);
+}
+
+int BLS_IETF_ZZZ_compress_G1(octet *bytes, const ECP_ZZZ *point)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int sign;
+    BIG_XXX x;
+    BIG_XXX y;
+
+    if (ECP_ZZZ_isinf(point)) {
+        for(int i = 0; i < BFS_ZZZ; i++)
+            bytes->val[i] = 0x00;
+        bytes->val[0] = 0xc0; // compressed and infinity bits
+    } else {
+        if (ECP_ZZZ_get(x, y, point) == -1)
+            return ERR_NOTONCURVE_BLS;
+        BIG_XXX_toBytes(bytes->val, x);
+        sign = sgn0_big(y);
+        bytes->val[0] |= (unsigned char)(0x80 | ((sign & 2) << 4)); // compressed and not infinity
+    }
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_uncompress_G1(ECP_ZZZ *point, const octet *bytes)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if ((bytes->val[0] & 0x80) == 0x00)
+        return ERR_BADENCODING_BLS;
+
+    int sign;
+    BIG_XXX a;
+    BIG_XXX b;
+    FP_YYY x;
+    FP_YYY y;
+    char bytes_prime[BFS_ZZZ];
+
+    if (bytes->val[0] & 0x40) {
+        /**
+         * Ensure that all bytes are equal to zero
+         */
+        if ((bytes->val[0] & 0x3f) != 0x00)
+            return ERR_BADENCODING_BLS;
+        for(int i = 1; i < BFS_ZZZ; i++) {
+            if ((bytes->val[i]) != 0x00)
+                return ERR_BADENCODING_BLS;
+        }
+        ECP_ZZZ_inf(point);
+        return SUCCESS;
+    }
+
+    for(int i = 0; i < BFS_ZZZ; i++)
+        bytes_prime[i] = bytes->val[i];
+    bytes_prime[0] &= 0x1f; //discard top 3 bits
+
+    BIG_XXX_fromBytes(a, bytes_prime);
+    FP_YYY_nres(&x, a);
+
+    ECP_ZZZ_rhs(&y, &x);
+    FP_YYY_sqrt(&y, &y);
+    FP_YYY_redc(b, &y);
+
+    sign = sgn0_big(b);
+    sign >>= 1; // discard parity bit
+    if (sign != ((bytes->val[0] & 0x20) >> 5)) {
+        FP_YYY_neg(&y, &y);
+        FP_YYY_redc(b, &y);
+    }
+
+    if (ECP_ZZZ_set(point, a, b) == 0)
+        return ERR_NOTONCURVE_BLS;
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_compress_G2(octet *bytes, const ECP2_ZZZ *point)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int sign;
+    BIG_XXX b;
+    FP2_YYY x;
+    FP2_YYY y;
+
+    if (ECP2_ZZZ_isinf(point)) {
+        for(int i = 1; i < 2*BFS_ZZZ; i++)
+            bytes->val[i] = 0x00;
+        bytes->val[0] = 0xc0; // compressed and infinity bits
+    } else {
+        if (ECP2_ZZZ_get(&x, &y, point) == -1)
+            return ERR_NOTONCURVE_BLS;
+
+        FP_YYY_redc(b, &(x.b));
+        BIG_XXX_toBytes(bytes->val, b);
+
+        FP_YYY_redc(b, &(x.a));
+        BIG_XXX_toBytes(bytes->val + BFS_ZZZ, b);
+
+        sign = sgn0_fp2(y);
+        bytes->val[0] |= (unsigned char)(0x80 | ((sign & 2) << 4)); // compressed and not infinity
+    }
+
+    return SUCCESS;
+}
+
+int BLS_IETF_ZZZ_uncompress_G2(ECP2_ZZZ *point, const octet *bytes)
+{
+    if (bytes == NULL || point == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if ((bytes->val[0] & 0x80) == 0x00)
+        return ERR_BADENCODING_BLS;
+
+    int sign;
+    BIG_XXX re;
+    BIG_XXX im;
+    FP2_YYY x;
+    FP2_YYY y;
+    char bytes_prime[2*BFS_ZZZ];
+
+    if (bytes->val[0] & 0x40) {
+        /**
+         * Ensure that all bytes are equal to zero
+         */
+        if ((bytes->val[0] & 0x3f) != 0x00)
+            return ERR_BADENCODING_BLS;
+        for(int i = 1; i < 2*BFS_ZZZ; i++) {
+            if ((bytes->val[i]) != 0x00)
+                return ERR_BADENCODING_BLS;
+        }
+        ECP2_ZZZ_inf(point);
+        return SUCCESS;
+    }
+
+    for(int i = 0; i < 2*BFS_ZZZ; i++)
+        bytes_prime[i] = bytes->val[i];
+    bytes_prime[0] &= 0x1f; //discard top 3 bits
+
+    BIG_XXX_fromBytes(im, bytes_prime);
+    BIG_XXX_fromBytes(re, bytes_prime + BFS_ZZZ);
+    FP2_YYY_from_BIGs(&x, re, im);
+
+    ECP2_ZZZ_rhs(&y, &x);
+    FP2_YYY_sqrt(&y, &y);
+
+    sign = sgn0_fp2(y);
+    sign >>= 1; // discard parity bit
+    if (sign != ((bytes->val[0] & 0x20) >> 5))
+        FP2_YYY_neg(&y, &y);
+
+    if (ECP2_ZZZ_set(point, &x, &y) == 0)
+        return ERR_NOTONCURVE_BLS;
+
+    return SUCCESS;
+}
+
+/**
+ * @brief Calculates the 11-isogeny mapping for BLS12-381 G1.
+ *
+ * @param P Output point
+ * @param x_prime x-coordinate of input point
+ * @param y_prime y-coordinate of input point
+ *
+ * @return 0 if successful, error code otherwise
+ */
+static int iso11_to_ecp(ECP_ZZZ *P, FP_YYY x_prime, FP_YYY y_prime)
+{
+    if (P == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX x;
+    BIG_XXX y;
+    FP_YYY k;
+    FP_YYY xnum;
+    FP_YYY xden;
+    FP_YYY ynum;
+    FP_YYY yden;
+
+    FP_YYY_zero(&xnum);
+    FP_YYY_zero(&ynum);
+    FP_YYY_copy(&xden, &x_prime);
+    FP_YYY_copy(&yden, &x_prime);
+
+    // x_num = k_(1,11) * x'^11 + k_(1,10) * x'^10 + k_(1,9) * x'^9 + ... + k_(1,0)
+    for(int i = 11; i > 0; i--) {
+        FP_YYY_nres(&k, ISO11_XNUM_BLS381[i]);
+        FP_YYY_add(&xnum, &xnum, &k);
+        FP_YYY_mul(&xnum, &xnum, &x_prime);
+    }
+    FP_YYY_nres(&k, ISO11_XNUM_BLS381[0]);
+    FP_YYY_add(&xnum, &xnum, &k);
+
+    // x_den = x'^10 + k_(2,9) * x'^9 + k_(2,8) * x'^8 + ... + k_(2,0)
+    for(int i = 9; i > 0; i--) {
+        FP_YYY_nres(&k, ISO11_XDEN_BLS381[i]);
+        FP_YYY_add(&xden, &xden, &k);
+        FP_YYY_mul(&xden, &xden, &x_prime);
+    }
+    FP_YYY_nres(&k, ISO11_XDEN_BLS381[0]);
+    FP_YYY_add(&xden, &xden, &k);
+
+    // y_num = k_(3,15) * x'^15 + k_(3,14) * x'^14 + k_(3,13) * x'^13 + ... + k_(3,0)
+    for(int i = 15; i > 0; i--) {
+        FP_YYY_nres(&k, ISO11_YNUM_BLS381[i]);
+        FP_YYY_add(&ynum, &ynum, &k);
+        FP_YYY_mul(&ynum, &ynum, &x_prime);
+    }
+    FP_YYY_nres(&k, ISO11_YNUM_BLS381[0]);
+    FP_YYY_add(&ynum, &ynum, &k);
+
+    // y_den = x'^15 + k_(4,14) * x'^14 + k_(4,13) * x'^13 + ... + k_(4,0)
+    for(int i = 14; i > 0; i--) {
+        FP_YYY_nres(&k, ISO11_YDEN_BLS381[i]);
+        FP_YYY_add(&yden, &yden, &k);
+        FP_YYY_mul(&yden, &yden, &x_prime);
+    }
+    FP_YYY_nres(&k, ISO11_YDEN_BLS381[0]);
+    FP_YYY_add(&yden, &yden, &k);
+
+    // x = x_num / x_den
+    FP_YYY_inv(&xden, &xden);
+    FP_YYY_mul(&xnum, &xnum, &xden);
+    // y = y' * y_num / y_den
+    FP_YYY_inv(&yden, &yden);
+    FP_YYY_mul(&ynum, &ynum, &yden);
+    FP_YYY_mul(&ynum, &ynum, &y_prime);
+    // P = (x, y)
+    FP_YYY_redc(x, &xnum);
+    FP_YYY_redc(y, &ynum);
+    if (ECP_ZZZ_set(P, x, y) == 0)
+        return ERR_NOTONCURVE_BLS;
+
+    return SUCCESS;
+}
+
+/**
+ * @brief Calculates the 3-isogeny mapping for BLS12-381 G2.
+ *
+ * @param P Output point
+ * @param x_prime x-coordinate of input point
+ * @param y_prime y-coordinate of input point
+ *
+ * @return 0 if successful, error code otherwise
+ */
+static int iso3_to_ecp(ECP2_ZZZ *P, FP2_YYY x_prime, FP2_YYY y_prime)
+{
+    if (P == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    FP2_YYY k;
+    FP2_YYY xnum;
+    FP2_YYY xden;
+    FP2_YYY ynum;
+    FP2_YYY yden;
+
+    FP2_YYY_zero(&xnum);
+    FP2_YYY_zero(&ynum);
+    FP2_YYY_copy(&yden, &x_prime);
+
+    // x_num = k_(1,3) * x'^3 + k_(1,2) * x'^2 + k_(1,1) * x' + k_(1,0)
+    for(int i = 3; i > 0; i--) {
+        FP2_YYY_from_BIGs(&k, ISO3_XNUMre_BLS381[i], ISO3_XNUMim_BLS381[i]);
+        FP2_YYY_add(&xnum, &xnum, &k);
+        FP2_YYY_mul(&xnum, &xnum, &x_prime);
+    }
+    FP2_YYY_from_BIGs(&k, ISO3_XNUMre_BLS381[0], ISO3_XNUMim_BLS381[0]);
+    FP2_YYY_add(&xnum, &xnum, &k);
+
+    // x_den = x'^2 + k_(2,1) * x' + k_(2,0)
+    FP2_YYY_from_BIGs(&k, ISO3_XDENre_BLS381[1], ISO3_XDENim_BLS381[1]);
+    FP2_YYY_add(&xden, &x_prime, &k);
+    FP2_YYY_mul(&xden, &xden, &x_prime);
+    FP2_YYY_from_BIGs(&k, ISO3_XDENre_BLS381[0], ISO3_XDENim_BLS381[0]);
+    FP2_YYY_add(&xden, &xden, &k);
+
+    // y_num = k_(3,3) * x'^3 + k_(3,2) * x'^2 + k_(3,1) * x' + k_(3,0)
+    for(int i = 3; i > 0; i--) {
+        FP2_YYY_from_BIGs(&k, ISO3_YNUMre_BLS381[i], ISO3_YNUMim_BLS381[i]);
+        FP2_YYY_add(&ynum, &ynum, &k);
+        FP2_YYY_mul(&ynum, &ynum, &x_prime);
+    }
+    FP2_YYY_from_BIGs(&k, ISO3_YNUMre_BLS381[0], ISO3_YNUMim_BLS381[0]);
+    FP2_YYY_add(&ynum, &ynum, &k);
+
+    // y_den = x'^3 + k_(4,2) * x'^2 + k_(4,1) * x' + k_(4,0)
+    for(int i = 2; i > 0; i--) {
+        FP2_YYY_from_BIGs(&k, ISO3_YDENre_BLS381[i], ISO3_YDENim_BLS381[i]);
+        FP2_YYY_add(&yden, &yden, &k);
+        FP2_YYY_mul(&yden, &yden, &x_prime);
+    }
+    FP2_YYY_from_BIGs(&k, ISO3_YDENre_BLS381[0], ISO3_YDENim_BLS381[0]);
+    FP2_YYY_add(&yden, &yden, &k);
+
+    // x = x_num / x_den
+    FP2_YYY_inv(&xden, &xden);
+    FP2_YYY_mul(&xnum, &xnum, &xden);
+    // y = y' * y_num / y_den
+    FP2_YYY_inv(&yden, &yden);
+    FP2_YYY_mul(&ynum, &ynum, &yden);
+    FP2_YYY_mul(&ynum, &ynum, &y_prime);
+    // P = (x, y)
+    ECP2_ZZZ_set(P, &xnum, &ynum);
+
+    return SUCCESS;
+}
+
+/**
+ * @brief Calculates a point on the elliptic curve E from an element of the finite field F over which E is defined.
+ * Follows the Simplified SWU for AB == 0 method as defined at
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-simplified-swu-for-ab-0 (§ 6.6.3)
+ *
+ * @param P Output EC point
+ * @param u Input finite field element
+ *
+ * @return 0 if successful, error code otherwise
+ */
+static int map_to_curve_G1(ECP_ZZZ *P, FP_YYY u)
+{
+    if (P == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    FP_YYY x;
+    FP_YYY y;
+    int ret = SUCCESS;
+
+    // (x, y) = map_to_curve_simple_swu(u)
+    ret |= ECP_ZZZ_sswu(&x, &y, u);
+    // P = (x, y) = iso_map(x, y)
+    ret |= iso11_to_ecp(P, x, y);
+
+    return ret;
+}
+
+/**
+ * @brief Calculates a point on the elliptic curve from a quadratic extension field element.
+ * Follows the Simplified SWU for AB == 0 method as defined at
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-simplified-swu-for-ab-0
+ *
+ * @param P Output EC point
+ * @param u Input finite field element
+ *
+ * @return 0 if successful, error code otherwise
+ */
+static int map_to_curve_G2(ECP2_ZZZ *P, FP2_YYY u)
+{
+    if (P == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    FP2_YYY x;
+    FP2_YYY y;
+
+    // (x, y) = map_to_curve_simple_swu(u)
+    ret |= ECP2_ZZZ_sswu(&x, &y, u);
+    // P = (x, y) = iso_map(x, y)
+    ret |= iso3_to_ecp(P, x, y);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_hash2curve_G1(ECP_ZZZ *P, const octet *msg, const octet *dst)
+{
+    if (P == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX elems[2];
+    FP_YYY u;
+    ECP_ZZZ Q;
+    int ret = SUCCESS;
+
+    // u = hash_to_field(msg, 2)
+    ret |= hash_to_field_YYY(elems, 2, 1, msg->val, msg->len, dst->val, dst->len);
+    // P = map_to_curve(u[0])
+    FP_YYY_nres(&u, elems[0]);
+    ret |= map_to_curve_G1(P, u);
+    // Q = map_to_curve(u[1])
+    FP_YYY_nres(&u, elems[1]);
+    ret |= map_to_curve_G1(&Q, u);
+    // P = P + Q
+    ECP_ZZZ_add(P, &Q);
+    // P = clear_cofactor(P)
+    ECP_ZZZ_mul(P, H_EFF_G1);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_encode2curve_G1(ECP_ZZZ *P, const octet *msg, const octet *dst)
+{
+    if (P == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX elems;
+    FP_YYY u;
+    int ret = SUCCESS;
+
+    // u = hash_to_field(msg, 1)
+    ret |= hash_to_field_YYY(&elems, 1, 1, msg->val, msg->len, dst->val, dst->len);
+    //P = map_to_curve(u[0])
+    FP_YYY_nres(&u, elems);
+    ret |= map_to_curve_G1(P, u);
+    // P = P = clear_cofactor(P)
+    ECP_ZZZ_mul(P, H_EFF_G1);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_hash2curve_G2(ECP2_ZZZ *P, const octet *msg, const octet *dst)
+{
+    if (P == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    BIG_XXX elems[4];
+    FP2_YYY u;
+    ECP2_ZZZ Q;
+
+    // u = hash_to_field(msg, 2)
+    ret |= hash_to_field_YYY(elems, 2, 2, msg->val, msg->len, dst->val, dst->len);
+    // P = map_to_curve(u[0])
+    FP2_YYY_from_BIGs(&u, elems[0], elems[1]);
+    ret |= map_to_curve_G2(P, u);
+    // Q = map_to_curve(u[1])
+    FP2_YYY_from_BIGs(&u, elems[2], elems[3]);
+    ret |= map_to_curve_G2(&Q, u);
+    // P = P + Q
+    ECP2_ZZZ_add(P, &Q);
+    // P = clear_cofactor(P)
+    ret |= ECP2_ZZZ_clearcofactor(P);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_encode2curve_G2(ECP2_ZZZ *P, const octet *msg, const octet *dst)
+{
+    if (P == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    BIG_XXX elems[2];
+    FP2_YYY u;
+
+    // u = hash_to_field(msg, 1)
+    ret |= hash_to_field_YYY(elems, 1, 2, msg->val, msg->len, dst->val, dst->len);
+    // P = map_to_curve(u[0])
+    FP2_YYY_from_BIGs(&u, elems[0], elems[1]);
+    ret |= map_to_curve_G2(P, u);
+    // P = clear_cofactor(P)
+    ret |= ECP2_ZZZ_clearcofactor(P);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_core_sign_G1(octet *sig, const char *sk, const octet *msg, const octet *dst)
+{
+    if (sig == NULL || sk == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX s;
+    ECP_ZZZ Q;
+    int ret = SUCCESS;
+
+    // s <- SK
+    BIG_XXX_fromBytesLen(s, sk, SK_LEN);
+    // Q <- hash_to_point(msg)
+    ret |= BLS_IETF_ZZZ_hash2curve_G1(&Q, msg, dst);
+    // Q <- s*Q
+    PAIR_ZZZ_G1mul(&Q, s);
+    // sig <- point_to_signature(Q)
+    ret |= BLS_IETF_ZZZ_compress_G1(sig, &Q);
+    // zeroization
+    BIG_XXX_zero(s);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_core_sign_G2(octet *sig, const char *sk, const octet *msg, const octet *dst)
+{
+    if (sig == NULL || sk == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    BIG_XXX s;
+    ECP2_ZZZ Q;
+    int ret = SUCCESS;
+
+    // s <- SK
+    BIG_XXX_fromBytesLen(s, sk, SK_LEN);
+    // Q <- hash_to_point(msg)
+    ret |= BLS_IETF_ZZZ_hash2curve_G2(&Q, msg, dst);
+    // Q <- s*Q
+    PAIR_ZZZ_G2mul(&Q, s);
+    // sig <- point_to_signature(Q)
+    ret |= BLS_IETF_ZZZ_compress_G2(sig, &Q);
+    // zeroization
+    BIG_XXX_zero(s);
+
+    return ret;
+}
+
+// TODO: Implement a faster variant based on https://eprint.iacr.org/2019/814
+static inline int subgroup_check_G1(ECP_ZZZ P)
+{
+    ECP_ZZZ_mul(&P, CURVE_Order_ZZZ);
+    return ECP_ZZZ_isinf(&P);
+}
+
+// TODO: Implement a faster variant based on https://eprint.iacr.org/2019/814
+static inline int subgroup_check_G2(ECP2_ZZZ P)
+{
+    ECP2_ZZZ_mul(&P, CURVE_Order_ZZZ);
+    return ECP2_ZZZ_isinf(&P);
+}
+
+int BLS_IETF_ZZZ_core_verify_G1(const octet *sig, const ECP2_ZZZ *PK, const octet *msg, const octet *dst)
+{
+    if (sig == NULL || PK == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    ECP_ZZZ  Q;
+    ECP_ZZZ  R;
+    ECP2_ZZZ P;
+    FP12_YYY f;
+    FP12_YYY acc[ATE_BITS_ZZZ];
+
+    // R <- signature_to_point(sig)
+    ret |= BLS_IETF_ZZZ_uncompress_G1(&R, sig);
+    if (ret != SUCCESS)
+        return ERR_BADSIGNATURE_BLS;
+
+    if (!subgroup_check_G1(R))
+        return ERR_NOTONCURVE_BLS;
+
+    if(ECP2_ZZZ_isinf(PK) || !subgroup_check_G2(*PK))
+        return ERR_INVALIDPUBKEY_BLS;
+
+    // Q <- hash_to_point(msg)
+    ret |= BLS_IETF_ZZZ_hash2curve_G1(&Q, msg, dst);
+
+    // pairing protocol according to https://eprint.iacr.org/2019/077.pdf
+    ECP2_ZZZ_generator(&P);
+    ECP2_ZZZ_neg(&P);
+    PAIR_ZZZ_initmp(acc);
+    PAIR_ZZZ_another(acc, &P, &R);
+    PAIR_ZZZ_another(acc, PK, &Q);
+    PAIR_ZZZ_miller(&f, acc);
+    PAIR_ZZZ_fexp(&f);
+
+    // ensure that pairing(Q, PK) * pairing(R, -P) == 1
+    if (!FP12_YYY_isunity(&f))
+        return ERR_BADSIGNATURE_BLS;
+
+    return ret;
+}
+
+
+int BLS_IETF_ZZZ_core_verify_G2(const octet *sig, const ECP_ZZZ *PK, const octet *msg, const octet *dst)
+{
+    if (sig == NULL || PK == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    ECP2_ZZZ Q;
+    ECP2_ZZZ R;
+    ECP_ZZZ  P;
+    FP12_YYY f;
+    FP12_YYY acc[ATE_BITS_ZZZ];
+
+    // R <- signature_to_point(sig)
+    ret |= BLS_IETF_ZZZ_uncompress_G2(&R, sig);
+    if (ret != SUCCESS)
+        return ERR_BADSIGNATURE_BLS;
+
+    if (!subgroup_check_G2(R))
+        return ERR_NOTONCURVE_BLS;
+
+    if(ECP_ZZZ_isinf(PK) || !subgroup_check_G1(*PK))
+        return ERR_INVALIDPUBKEY_BLS;
+
+    // Q <- hash_to_point(msg)
+    ret |= BLS_IETF_ZZZ_hash2curve_G2(&Q, msg, dst);
+
+    // pairing protocol according to https://eprint.iacr.org/2019/077.pdf
+    ECP_ZZZ_generator(&P);
+    ECP_ZZZ_neg(&P);
+    PAIR_ZZZ_initmp(acc);
+    PAIR_ZZZ_another(acc, &R, &P);
+    PAIR_ZZZ_another(acc, &Q, PK);
+    PAIR_ZZZ_miller(&f, acc);
+    PAIR_ZZZ_fexp(&f);
+
+    // ensure that pairing(Q, PK) * pairing(R, -P) == 1
+    if (!FP12_YYY_isunity(&f))
+        return ERR_BADSIGNATURE_BLS;
+
+    return ret;
+}
+
+
+int BLS_IETF_ZZZ_aggregate_G1(octet *out, const octet *in, unsigned int n)
+{
+    if (out == NULL || in == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if (n == 0)
+        return ERR_BADARGLEN_BLS;
+
+    int ret = SUCCESS;
+    ECP_ZZZ  A;
+    ECP_ZZZ  B;
+
+    // A <- signature_to_point(in)
+    ret |= BLS_IETF_ZZZ_uncompress_G1(&A, in);
+    if (ret != SUCCESS)
+        return ERR_BADSIGNATURE_BLS;
+
+    for (unsigned int i = 1; i < n; i++) {
+        // B <- signature_to_point(in + i)
+        ret |= BLS_IETF_ZZZ_uncompress_G1(&B, in + i);
+        if (ret != SUCCESS)
+            return ERR_BADSIGNATURE_BLS;
+        // A <- A + B
+        ECP_ZZZ_add(&A, &B);
+    }
+
+    // out <- point_to_signature(A)
+    ret |= BLS_IETF_ZZZ_compress_G1(out, &A);
+    return ret;
+}
+
+int BLS_IETF_ZZZ_aggregate_G2(octet *out, const octet *in, unsigned int n)
+{
+    if (out == NULL || in == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if (n == 0)
+        return ERR_BADARGLEN_BLS;
+
+    int ret = SUCCESS;
+    ECP2_ZZZ  A;
+    ECP2_ZZZ  B;
+
+    // A <- signature_to_point(in)
+    ret |= BLS_IETF_ZZZ_uncompress_G2(&A, in);
+    if (ret != SUCCESS)
+        return ERR_BADSIGNATURE_BLS;
+    for (unsigned int i = 1; i < n; i++) {
+        // B <- signature_to_point(in + i)
+        ret |= BLS_IETF_ZZZ_uncompress_G2(&B, in + i);
+        if (ret != SUCCESS)
+            return ERR_BADSIGNATURE_BLS;
+        // A <- A + B
+        ECP2_ZZZ_add(&A, &B);
+    }
+
+    // out <- point_to_signature(A)
+    ret |= BLS_IETF_ZZZ_compress_G2(out, &A);
+    return ret;
+}
+
+int BLS_IETF_ZZZ_core_aggregate_verify_G1(const octet *sig, const ECP2_ZZZ PK[], const octet msg[], unsigned int n, const octet *dst)
+{
+    if (sig == NULL || PK == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if (n == 0)
+        return ERR_BADARGLEN_BLS;
+
+    int ret = SUCCESS;
+    ECP_ZZZ  Q;
+    ECP_ZZZ  R;
+    ECP2_ZZZ P;
+    FP12_YYY f;
+    FP12_YYY acc[ATE_BITS_ZZZ];
+
+    // R <- signature_to_point(sig)
+    ret |= BLS_IETF_ZZZ_uncompress_G1(&R, sig);
+    if (ret != SUCCESS)
+        return ERR_BADSIGNATURE_BLS;
+
+    if (!subgroup_check_G1(R))
+        return ERR_NOTONCURVE_BLS;
+
+    // initialize the pairing protocol
+    ECP2_ZZZ_generator(&P);
+    ECP2_ZZZ_neg(&P);
+    PAIR_ZZZ_initmp(acc);
+    PAIR_ZZZ_another(acc, &P, &R);
+
+    for (unsigned int i = 0; i < n; i++) {
+        if(ECP2_ZZZ_isinf(PK + i) || !subgroup_check_G2(PK[i]))
+            return ERR_INVALIDPUBKEY_BLS;
+        if (ret != SUCCESS)
+            return ERR_BADSIGNATURE_BLS;
+        // Q <- hash_to_point(msg)
+        ret |= BLS_IETF_ZZZ_hash2curve_G1(&Q, msg + i, dst);
+        PAIR_ZZZ_another(acc, PK + i, &Q);
+
+    }
+
+    PAIR_ZZZ_miller(&f, acc);
+    PAIR_ZZZ_fexp(&f);
+
+    if (!FP12_YYY_isunity(&f))
+        return ERR_BADSIGNATURE_BLS;
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_core_aggregate_verify_G2(const octet *sig, const ECP_ZZZ PK[], const octet msg[], unsigned int n, const octet *dst)
+{
+    if (sig == NULL || PK == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if (n == 0)
+        return ERR_BADARGLEN_BLS;
+
+    int ret = SUCCESS;
+    ECP2_ZZZ Q;
+    ECP2_ZZZ R;
+    ECP_ZZZ  P;
+    FP12_YYY f;
+    FP12_YYY acc[ATE_BITS_ZZZ];
+
+    // R <- signature_to_point(sig)
+    ret |= BLS_IETF_ZZZ_uncompress_G2(&R, sig);
+    if (ret != SUCCESS)
+        return ERR_BADSIGNATURE_BLS;
+
+    if (!subgroup_check_G2(R))
+        return ERR_NOTONCURVE_BLS;
+
+    // initialize the pairing protocol
+    ECP_ZZZ_generator(&P);
+    ECP_ZZZ_neg(&P);
+    PAIR_ZZZ_initmp(acc);
+    PAIR_ZZZ_another(acc, &R, &P);
+
+    for (unsigned int i = 0; i < n; i++) {
+        if(ECP_ZZZ_isinf(PK + i) || !subgroup_check_G1(PK[i]))
+            return ERR_INVALIDPUBKEY_BLS;
+        if (ret != SUCCESS)
+            return ERR_BADSIGNATURE_BLS;
+        // Q <- hash_to_point(msg)
+        ret |= BLS_IETF_ZZZ_hash2curve_G2(&Q, msg + i, dst);
+        PAIR_ZZZ_another(acc, &Q, PK + i);
+
+    }
+
+    PAIR_ZZZ_miller(&f, acc);
+    PAIR_ZZZ_fexp(&f);
+
+    if (!FP12_YYY_isunity(&f))
+        return ERR_BADSIGNATURE_BLS;
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_pop_prove_G1(octet *proof, const char *sk)
+{
+    if (proof == NULL || sk == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    BIG_XXX s;
+    ECP_ZZZ Q;
+    ECP2_ZZZ PK;
+    char dst[43]  = "BLS_POP_BLS12381G1_XMD:SHA-256_SSWU_RO_POP_";
+    octet dst_oct = {43, 43, dst};
+    char pubkey[2*BFS_ZZZ];
+    octet pk_oct  = {2*BFS_ZZZ, 2*BFS_ZZZ, pubkey};
+
+    // s <- sk
+    BIG_XXX_fromBytesLen(s, sk, SK_LEN);
+    // PK <- SkToPk(sk)
+    ret |= BLS_IETF_ZZZ_sk_to_pk_G2(&PK, sk);
+    ret |= BLS_IETF_ZZZ_compress_G2(&pk_oct, &PK);
+    // Q <- hash_pubkey_to_point(PK)
+    ret |= BLS_IETF_ZZZ_hash2curve_G1(&Q, &pk_oct, &dst_oct);
+    // Q <- s*Q
+    ECP_ZZZ_mul(&Q, s);
+    // proof <- point_to_signature(Q)
+    ret |= BLS_IETF_ZZZ_compress_G1(proof, &Q);
+    // zeroize big variable
+    BIG_XXX_zero(s);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_pop_prove_G2(octet *proof, const char *sk)
+{
+    if (proof == NULL || sk == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    BIG_XXX s;
+    ECP2_ZZZ Q;
+    ECP_ZZZ PK;
+    char dst[43]  = "BLS_POP_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_";
+    octet dst_oct = {43, 43, dst};
+    char pubkey[BFS_ZZZ];
+    octet pk_oct  = {BFS_ZZZ, BFS_ZZZ, pubkey};
+
+    // s <- sk
+    BIG_XXX_fromBytesLen(s, sk, SK_LEN);
+    // PK <- SkToPk(sk)
+    ret |= BLS_IETF_ZZZ_sk_to_pk_G1(&PK, sk);
+    ret |= BLS_IETF_ZZZ_compress_G1(&pk_oct, &PK);
+    // Q <- hash_pubkey_to_point(PK)
+    ret |= BLS_IETF_ZZZ_hash2curve_G2(&Q, &pk_oct, &dst_oct);
+    // Q <- s*Q
+    ECP2_ZZZ_mul(&Q, s);
+    // proof <- point_to_signature(Q)
+    ret |= BLS_IETF_ZZZ_compress_G2(proof, &Q);
+    // zeroize big variable
+    BIG_XXX_zero(s);
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_pop_verify_G1(const octet *proof, const ECP2_ZZZ *PK)
+{
+    if (proof == NULL || PK == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    ECP_ZZZ  Q;
+    ECP_ZZZ  R;
+    ECP2_ZZZ P;
+    FP12_YYY f;
+    FP12_YYY acc[ATE_BITS_ZZZ];
+    char dst[43]  = "BLS_POP_BLS12381G1_XMD:SHA-256_SSWU_RO_POP_";
+    octet dst_oct = {43, 43, dst};
+    char pubkey[2*BFS_ZZZ];
+    octet pk_oct  = {2*BFS_ZZZ, 2*BFS_ZZZ, pubkey};
+
+    // R <- signature_to_point(proof)
+    ret |= BLS_IETF_ZZZ_uncompress_G1(&R, proof);
+    if (ret != SUCCESS)
+        return ERR_BADPOP_BLS;
+
+    if (!subgroup_check_G1(R))
+        return ERR_NOTONCURVE_BLS;
+
+    if(ECP2_ZZZ_isinf(PK) || !subgroup_check_G2(*PK))
+        return ERR_INVALIDPUBKEY_BLS;
+
+    // Q <- hash_pubkey_to_point(PK)
+    ret |= BLS_IETF_ZZZ_compress_G2(&pk_oct, PK);
+    ret |= BLS_IETF_ZZZ_hash2curve_G1(&Q, &pk_oct, &dst_oct);
+
+    // pairing protocol according to https://eprint.iacr.org/2019/077.pdf
+    ECP2_ZZZ_generator(&P);
+    ECP2_ZZZ_neg(&P);
+    PAIR_ZZZ_initmp(acc);
+    // accumulate 1st pairing(R, -P)
+    PAIR_ZZZ_another(acc, &P, &R);
+    // accumulate 2nd pairing(Q, PK)
+    PAIR_ZZZ_another(acc, PK, &Q);
+    // combined Miller loop calculation
+    PAIR_ZZZ_miller(&f, acc);
+    // final exponentiation
+    PAIR_ZZZ_fexp(&f);
+
+    // ensure that pairing(Q, PK) * pairing(R, -P) == 1
+    if (!FP12_YYY_isunity(&f))
+        return ERR_BADPOP_BLS;
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_pop_verify_G2(const octet *proof, const ECP_ZZZ *PK)
+{
+    if (proof == NULL || PK == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    int ret = SUCCESS;
+    ECP2_ZZZ Q;
+    ECP2_ZZZ R;
+    ECP_ZZZ  P;
+    FP12_YYY f;
+    FP12_YYY acc[ATE_BITS_ZZZ];
+    char dst[43]  = "BLS_POP_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_";
+    octet dst_oct = {43, 43, dst};
+    char pubkey[BFS_ZZZ];
+    octet pk_oct  = {BFS_ZZZ, BFS_ZZZ, pubkey};
+
+    // R <- signature_to_point(proof)
+    ret |= BLS_IETF_ZZZ_uncompress_G2(&R, proof);
+    if (ret != SUCCESS)
+        return ERR_BADPOP_BLS;
+
+    if (!subgroup_check_G2(R))
+        return ERR_NOTONCURVE_BLS;
+
+    if(ECP_ZZZ_isinf(PK) || !subgroup_check_G1(*PK))
+        return ERR_INVALIDPUBKEY_BLS;
+
+    // Q <- hash_pubkey_to_point(PK)
+    ret |= BLS_IETF_ZZZ_compress_G1(&pk_oct, PK);
+    ret |= BLS_IETF_ZZZ_hash2curve_G2(&Q, &pk_oct, &dst_oct);
+
+    // pairing protocol according to https://eprint.iacr.org/2019/077.pdf
+    ECP_ZZZ_generator(&P);
+    ECP_ZZZ_neg(&P);
+    PAIR_ZZZ_initmp(acc);
+    // accumulate 1st pairing(R, -P)
+    PAIR_ZZZ_another(acc, &R, &P);
+    // accumulate 2nd pairing(Q, PK)
+    PAIR_ZZZ_another(acc, &Q, PK);
+    // combined Miller loop calculation
+    PAIR_ZZZ_miller(&f, acc);
+    // final exponentiation
+    PAIR_ZZZ_fexp(&f);
+
+    // ensure that pairing(Q, PK) * pairing(R, -P) == 1
+    if (!FP12_YYY_isunity(&f))
+        return ERR_BADPOP_BLS;
+
+    return ret;
+}
+
+int BLS_IETF_ZZZ_fast_aggregate_verify_G1(const octet *sig, const ECP2_ZZZ PK[], const octet *msg, unsigned int n, const octet *dst)
+{
+    if (PK == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if (n == 0)
+        return ERR_BADARGLEN_BLS;
+
+    ECP2_ZZZ A;
+
+    // aggregate <- pubkey_to_point(PK_1)
+    ECP2_ZZZ_copy(&A, PK);
+
+    // aggregate <- aggregate + pubkey_to_point(PK_i)
+    for (unsigned int i = 1; i < n; i++)
+        ECP2_ZZZ_add(&A, PK + i);
+
+    // return CoreVerify(A, message, signature)
+    return BLS_IETF_ZZZ_core_verify_G1(sig, &A, msg, dst);
+}
+
+int BLS_IETF_ZZZ_fast_aggregate_verify_G2(const octet *sig, const ECP_ZZZ PK[], const octet *msg, unsigned int n, const octet *dst)
+{
+    if (PK == NULL || msg == NULL || dst == NULL)
+        return ERR_NULLPOINTER_BLS;
+
+    if (n == 0)
+        return ERR_BADARGLEN_BLS;
+
+    ECP_ZZZ A;
+
+    // aggregate <- pubkey_to_point(PK_1)
+    ECP_ZZZ_copy(&A, PK);
+
+    // aggregate <- aggregate + pubkey_to_point(PK_i)
+    for (unsigned int i = 1; i < n; i++)
+        ECP_ZZZ_add(&A, PK + i);
+
+    // return CoreVerify(A, message, signature)
+    return BLS_IETF_ZZZ_core_verify_G2(sig, &A, msg, dst);
+}
diff --git a/src/ecdh.c.in b/src/ecdh.c.in
index 216c509..5b86ada 100644
--- a/src/ecdh.c.in
+++ b/src/ecdh.c.in
@@ -33,7 +33,8 @@
  * otherwise it is generated randomly internally */
 int ECP_ZZZ_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W)
 {
-    BIG_XXX r,s;
+    BIG_XXX r;
+    BIG_XXX s;
     ECP_ZZZ G;
     int res=0;
 
@@ -65,11 +66,14 @@
 }
 
 /* Validate public key */
-int ECP_ZZZ_PUBLIC_KEY_VALIDATE(octet *W)
+int ECP_ZZZ_PUBLIC_KEY_VALIDATE(const octet *W)
 {
-    BIG_XXX q,r,k;
+    BIG_XXX q;
+    BIG_XXX r;
+    BIG_XXX k;
     ECP_ZZZ WP;
-    int valid,nb;
+    int valid;
+    int nb;
     int res=0;
 
     BIG_XXX_rcopy(q,Modulus_YYY);
@@ -101,9 +105,11 @@
 }
 
 /* IEEE-1363 Diffie-Hellman online calculation Z=S.WD */
-int ECP_ZZZ_SVDP_DH(octet *S,octet *WD,octet *Z)
+int ECP_ZZZ_SVDP_DH(const octet *S,const octet *WD,octet *Z)
 {
-    BIG_XXX r,s,wx;
+    BIG_XXX r;
+    BIG_XXX s;
+    BIG_XXX wx;
     int valid;
     ECP_ZZZ W;
     int res=0;
@@ -137,13 +143,21 @@
 #if CURVETYPE_ZZZ!=MONTGOMERY
 
 /* IEEE ECDSA Signature, C and D are signature on F using private key S */
-int ECP_ZZZ_SP_DSA(int sha,csprng *RNG,octet *K,octet *S,octet *F,octet *C,octet *D)
+int ECP_ZZZ_SP_DSA(int sha,csprng *RNG,const octet *K,const octet *S,const octet *F,octet *C,octet *D)
 {
     char h[128];
     octet H= {0,sizeof(h),h};
 
-    BIG_XXX r,s,f,c,d,u,vx,w;
-    ECP_ZZZ G,V;
+    BIG_XXX r;
+    BIG_XXX s;
+    BIG_XXX f;
+    BIG_XXX c;
+    BIG_XXX d;
+    BIG_XXX u;
+    BIG_XXX vx;
+    BIG_XXX w;
+    ECP_ZZZ G;
+    ECP_ZZZ V;
 
     ehashit(sha,F,-1,NULL,&H,sha);
 
@@ -225,14 +239,19 @@
 }
 
 /* IEEE1363 ECDSA Signature Verification. Signature C and D on F is verified using public key W */
-int ECP_ZZZ_VP_DSA(int sha,octet *W,octet *F, octet *C,octet *D)
+int ECP_ZZZ_VP_DSA(int sha,const octet *W,const octet *F, octet *C,octet *D)
 {
     char h[128];
     octet H= {0,sizeof(h),h};
 
-    BIG_XXX r,f,c,d,h2;
+    BIG_XXX r;
+    BIG_XXX f;
+    BIG_XXX c;
+    BIG_XXX d;
+    BIG_XXX h2;
     int res=0;
-    ECP_ZZZ G,WP;
+    ECP_ZZZ G;
+    ECP_ZZZ WP;
     int valid;
 
     ehashit(sha,F,-1,NULL,&H,sha);
@@ -252,8 +271,6 @@
 
     BIG_XXX_fromBytesLen(f,H.val,hlen);
 
-    //BIG_fromBytes(f,H.val);
-
     if (BIG_XXX_iszilch(c) || BIG_XXX_comp(c,r)>=0 || BIG_XXX_iszilch(d) || BIG_XXX_comp(d,r)>=0)
         res=ECDH_INVALID;
 
@@ -284,11 +301,17 @@
 }
 
 /* IEEE1363 ECIES encryption. Encryption of plaintext M uses public key W and produces ciphertext V,C,T */
-void ECP_ZZZ_ECIES_ENCRYPT(int sha,octet *P1,octet *P2,csprng *RNG,octet *W,octet *M,int tlen,octet *V,octet *C,octet *T)
+void ECP_ZZZ_ECIES_ENCRYPT(int sha,const octet *P1,const octet *P2,csprng *RNG,const octet *W,const octet *M,int tlen,octet *V,octet *C,octet *T)
 {
 
-    int i,len;
-    char z[EFS_ZZZ],vz[3*EFS_ZZZ+1],k[2*AESKEY_ZZZ],k1[AESKEY_ZZZ],k2[AESKEY_ZZZ],l2[8],u[EFS_ZZZ];
+    int len;
+    char z[EFS_ZZZ];
+    char vz[3*EFS_ZZZ+1];
+    char k[2*AESKEY_ZZZ];
+    char k1[AESKEY_ZZZ];
+    char k2[AESKEY_ZZZ];
+    char l2[8];
+    char u[EFS_ZZZ];
     octet Z= {0,sizeof(z),z};
     octet VZ= {0,sizeof(vz),vz};
     octet K= {0,sizeof(k),k};
@@ -306,7 +329,7 @@
     KDF2(sha,&VZ,P1,2*AESKEY_ZZZ,&K);
 
     K1.len=K2.len=AESKEY_ZZZ;
-    for (i=0; i<AESKEY_ZZZ; i++)
+    for (int i=0; i<AESKEY_ZZZ; i++)
     {
         K1.val[i]=K.val[i];
         K2.val[i]=K.val[AESKEY_ZZZ+i];
@@ -324,11 +347,17 @@
 }
 
 /* IEEE1363 ECIES decryption. Decryption of ciphertext V,C,T using private key U outputs plaintext M */
-int ECP_ZZZ_ECIES_DECRYPT(int sha,octet *P1,octet *P2,octet *V,octet *C,octet *T,octet *U,octet *M)
+int ECP_ZZZ_ECIES_DECRYPT(int sha,const octet *P1,const octet *P2,const octet *V,octet *C,const octet *T,const octet *U,octet *M)
 {
 
-    int i,len;
-    char z[EFS_ZZZ],vz[3*EFS_ZZZ+1],k[2*AESKEY_ZZZ],k1[AESKEY_ZZZ],k2[AESKEY_ZZZ],l2[8],tag[32];
+    int len;
+    char z[EFS_ZZZ];
+    char vz[3*EFS_ZZZ+1];
+    char k[2*AESKEY_ZZZ];
+    char k1[AESKEY_ZZZ];
+    char k2[AESKEY_ZZZ];
+    char l2[8];
+    char tag[32];
     octet Z= {0,sizeof(z),z};
     octet VZ= {0,sizeof(vz),vz};
     octet K= {0,sizeof(k),k};
@@ -345,7 +374,7 @@
     KDF2(sha,&VZ,P1,2*AESKEY_ZZZ,&K);
 
     K1.len=K2.len=AESKEY_ZZZ;
-    for (i=0; i<AESKEY_ZZZ; i++)
+    for (int i=0; i<AESKEY_ZZZ; i++)
     {
         K1.val[i]=K.val[i];
         K2.val[i]=K.val[AESKEY_ZZZ+i];
diff --git a/src/ecdh_support.c b/src/ecdh_support.c
index ee9397b..eec01de 100644
--- a/src/ecdh_support.c
+++ b/src/ecdh_support.c
@@ -19,20 +19,18 @@
 
 /* Symmetric crypto support functions Functions  */
 
-#include <stdio.h>
 #include <string.h>
-#include <stdlib.h>
-#include <time.h>
-
 #include "ecdh_support.h"
 
 #define ROUNDUP(a,b) ((a)-1)/(b)+1
 
 /* general purpose hash function w=hash(p|n|x|y) */
-/* pad or truncate ouput to length pad if pad!=0 */
-void ehashit(int sha,octet *p,int n,octet *x,octet *w,int pad)
+/* pad or truncate output to length pad if pad!=0 */
+void ehashit(int sha,const octet *p,int n,const octet *x,octet *w,int pad)
 {
-    int i,c[4],hlen;
+    int i;
+    int c[4];
+    int hlen;
     hash256 sha256;
     hash512 sha512;
     char hh[64];
@@ -48,6 +46,8 @@
     case SHA512:
         HASH512_init(&sha512);
         break;
+    default:
+        break;
     }
 
     hlen=sha;
@@ -65,6 +65,8 @@
         case SHA512:
             HASH512_process(&sha512,p->val[i]);
             break;
+        default:
+            break;
         }
     }
     if (n>0)
@@ -72,7 +74,7 @@
         c[0]=(n>>24)&0xff;
         c[1]=(n>>16)&0xff;
         c[2]=(n>>8)&0xff;
-        c[3]=(n)&0xff;
+        c[3]=n&0xff;
         for (i=0; i<4; i++)
         {
             switch(sha)
@@ -86,6 +88,8 @@
             case SHA512:
                 HASH512_process(&sha512,c[i]);
                 break;
+            default:
+                break;
             }
         }
     }
@@ -102,6 +106,8 @@
             case SHA512:
                 HASH512_process(&sha512,x->val[i]);
                 break;
+            default:
+                break;
             }
         }
 
@@ -116,6 +122,8 @@
     case SHA512:
         HASH512_hash(&sha512,hh);
         break;
+    default:
+        break;
     }
 
     OCT_empty(w);
@@ -129,28 +137,27 @@
         {
             OCT_jbyte(w,0,pad-hlen);
             OCT_jbytes(w,hh,hlen);
-
-//            OCT_jbytes(w,hh,hlen);
-//            OCT_jbyte(w,0,pad-hlen);
         }
     }
     return;
 }
 
 /* Hash octet p to octet w */
-void HASH(int sha,octet *p,octet *w)
+void HASH(int sha,const octet *p,octet *w)
 {
     ehashit(sha,p,-1,NULL,w,0);
 }
 
 /* Calculate HMAC of m using key k. HMAC is tag of length olen */
-int HMAC(int sha,octet *m,octet *k,int olen,octet *tag)
+int HMAC(int sha,const octet *m,const octet *k,int olen,octet *tag)
 {
     /* Input is from an octet m        *
      * olen is requested output length in bytes. k is the key  *
      * The output is the calculated tag */
-    int hlen,b;
-    char h[128],k0[128];
+    int hlen;
+    int b;
+    char h[128];
+    char k0[128];
     octet H= {0,sizeof(h),h};
     octet K0= {0,sizeof(k0),k0};
 
@@ -179,19 +186,19 @@
     return 1;
 }
 
-void KDF2(int sha,octet *z,octet *p,int olen,octet *key)
+void KDF2(int sha,const octet *z,const octet *p,int olen,octet *key)
 {
     /* NOTE: the parameter olen is the length of the output k in bytes */
     char h[64];
     octet H= {0,sizeof(h),h};
-    int counter,cthreshold;
+    int cthreshold;
     int hlen=sha;
 
     OCT_empty(key);
 
     cthreshold=ROUNDUP(olen,hlen);
 
-    for (counter=1; counter<=cthreshold; counter++)
+    for (int counter=1; counter<=cthreshold; counter++)
     {
         ehashit(sha,z,counter,p,&H,0);
         if (key->len+hlen>olen)  OCT_jbytes(key,H.val,olen%hlen);
@@ -203,15 +210,17 @@
 /* Password based Key Derivation Function */
 /* Input password p, salt s, and repeat count */
 /* Output key of length olen */
-void PBKDF2(int sha,octet *p,octet *s,int rep,int olen,octet *key)
+void PBKDF2(int sha,const octet *p,octet *s,int rep,int olen,octet *key)
 {
-    int i,j,len,d=ROUNDUP(olen,sha);
-    char f[64],u[64];
+    int len;
+    int d=ROUNDUP(olen,sha);
+    char f[64];
+    char u[64];
     octet F= {0,sizeof(f),f};
     octet U= {0,sizeof(u),u};
     OCT_empty(key);
 
-    for (i=1; i<=d; i++)
+    for (int i=1; i<=d; i++)
     {
         len=s->len;
         OCT_jint(s,i,4);
@@ -220,7 +229,7 @@
 
         s->len=len;
         OCT_copy(&U,&F);
-        for (j=2; j<=rep; j++)
+        for (int j=2; j<=rep; j++)
         {
             HMAC(sha,&U,p,sha,&U);
             OCT_xor(&F,&U);
@@ -233,14 +242,16 @@
 }
 
 /* AES encryption/decryption. Encrypt byte array M using key K and returns ciphertext */
-void AES_CBC_IV0_ENCRYPT(octet *k,octet *m,octet *c)
+void AES_CBC_IV0_ENCRYPT(octet *k,const octet *m,octet *c)
 {
     /* AES CBC encryption, with Null IV and key k */
     /* Input is from an octet string m, output is to an octet string c */
     /* Input is padded as necessary to make up a full final block */
     amcl_aes a;
     int fin;
-    int i,j,ipt,opt;
+    int i;
+    int ipt;
+    int opt;
     char buff[16];
     int padlen;
 
@@ -270,7 +281,7 @@
     /* last block, filled up to i-th index */
 
     padlen=16-i;
-    for (j=i; j<16; j++) buff[j]=padlen;
+    for (int j=i; j<16; j++) buff[j]=(char)padlen;
     AES_encrypt(&a,buff);
     for (i=0; i<16; i++)
         if (opt<c->max) c->val[opt++]=buff[i];
@@ -279,13 +290,17 @@
 }
 
 /* decrypts and returns TRUE if all consistent, else returns FALSE */
-int AES_CBC_IV0_DECRYPT(octet *k,octet *c,octet *m)
+int AES_CBC_IV0_DECRYPT(octet *k,const octet *c,octet *m)
 {
     /* padding is removed */
     amcl_aes a;
-    int i,ipt,opt,ch;
+    int i;
+    int ipt;
+    int opt;
+    int ch;
     char buff[16];
-    int fin,bad;
+    int fin;
+    int bad;
     int padlen;
     ipt=opt=0;
 
@@ -300,7 +315,7 @@
     {
         for (i=0; i<16; i++)
         {
-            buff[i]=ch;
+            buff[i]=(char)ch;
             if (ipt>=c->len)
             {
                 fin=1;
diff --git a/src/ecp.c.in b/src/ecp.c.in
index 8b1d938..ca54939 100644
--- a/src/ecp.c.in
+++ b/src/ecp.c.in
@@ -25,7 +25,7 @@
 #include "ecp_ZZZ.h"
 
 /* test for P=O point-at-infinity */
-int ECP_ZZZ_isinf(ECP_ZZZ *P)
+int ECP_ZZZ_isinf(const ECP_ZZZ *P)
 {
 
 #if CURVETYPE_ZZZ==EDWARDS
@@ -52,7 +52,7 @@
 
 #if CURVETYPE_ZZZ!=MONTGOMERY
 /* Conditional move Q to P dependant on d */
-static void ECP_ZZZ_cmove(ECP_ZZZ *P,ECP_ZZZ *Q,int d)
+static void ECP_ZZZ_cmove(ECP_ZZZ *P,const ECP_ZZZ *Q,int d)
 {
     FP_YYY_cmove(&(P->x),&(Q->x),d);
 #if CURVETYPE_ZZZ!=MONTGOMERY
@@ -66,13 +66,13 @@
 {
     sign32 x=b^c;
     x-=1;  // if x=0, x now -1
-    return (int)((x>>31)&1);
+    return (x>>31)&1;
 }
 #endif // CURVETYPE_ZZZ!=MONTGOMERY
 
 #if CURVETYPE_ZZZ!=MONTGOMERY
 /* Constant time select from pre-computed table */
-static void ECP_ZZZ_select(ECP_ZZZ *P,ECP_ZZZ W[],sign32 b)
+static void ECP_ZZZ_select(ECP_ZZZ *P,const ECP_ZZZ W[],sign32 b)
 {
     ECP_ZZZ MP;
     sign32 m=b>>31;
@@ -91,15 +91,16 @@
 
     ECP_ZZZ_copy(&MP,P);
     ECP_ZZZ_neg(&MP);  // minus P
-    ECP_ZZZ_cmove(P,&MP,(int)(m&1));
+    ECP_ZZZ_cmove(P,&MP,m&1);
 }
 #endif
 
 /* Test P == Q */
 /* SU=168 */
-int ECP_ZZZ_equals(ECP_ZZZ *P,ECP_ZZZ *Q)
+int ECP_ZZZ_equals(const ECP_ZZZ *P,const ECP_ZZZ *Q)
 {
-    FP_YYY a,b;
+    FP_YYY a;
+    FP_YYY b;
 
     FP_YYY_mul(&a,&(P->x),&(Q->z));
     FP_YYY_mul(&b,&(Q->x),&(P->z));
@@ -117,7 +118,7 @@
 
 /* Set P=Q */
 /* SU=16 */
-void ECP_ZZZ_copy(ECP_ZZZ *P,ECP_ZZZ *Q)
+void ECP_ZZZ_copy(ECP_ZZZ *P,const ECP_ZZZ *Q)
 {
     FP_YYY_copy(&(P->x),&(Q->x));
 #if CURVETYPE_ZZZ!=MONTGOMERY
@@ -184,7 +185,8 @@
 
 #if CURVETYPE_ZZZ==EDWARDS
     /* (Ax^2-1)/(Bx^2-1) */
-    FP_YYY t,one;
+    FP_YYY t;
+    FP_YYY one;
     FP_YYY_sqr(v,x);
     FP_YYY_one(&one);
     FP_YYY_rcopy(&t,CURVE_B_ZZZ);
@@ -246,7 +248,7 @@
 }
 
 /* Extract x coordinate as BIG */
-int ECP_ZZZ_get(BIG_XXX x,ECP_ZZZ *P)
+int ECP_ZZZ_get(BIG_XXX x,const ECP_ZZZ *P)
 {
     ECP_ZZZ W;
     ECP_ZZZ_copy(&W,P);
@@ -260,7 +262,7 @@
 #else
 /* Extract (x,y) and return sign of y. If x and y are the same return only x */
 /* SU=16 */
-int ECP_ZZZ_get(BIG_XXX x,BIG_XXX y,ECP_ZZZ *P)
+int ECP_ZZZ_get(BIG_XXX x,BIG_XXX y,const ECP_ZZZ *P)
 {
     ECP_ZZZ W;
     int s;
@@ -279,9 +281,10 @@
 
 /* Set P=(x,{y}) */
 /* SU=96 */
-int ECP_ZZZ_set(ECP_ZZZ *P,BIG_XXX x,BIG_XXX y)
+int ECP_ZZZ_set(ECP_ZZZ *P,const BIG_XXX x,const BIG_XXX y)
 {
-    FP_YYY rhs,y2;
+    FP_YYY rhs;
+    FP_YYY y2;
 
     FP_YYY_nres(&y2,y);
     FP_YYY_sqr(&y2,&y2);
@@ -304,10 +307,11 @@
 
 /* Set P=(x,y), where y is calculated from x with sign s */
 /* SU=136 */
-int ECP_ZZZ_setx(ECP_ZZZ *P,BIG_XXX x,int s)
+int ECP_ZZZ_setx(ECP_ZZZ *P,const BIG_XXX x,int s)
 {
     FP_YYY rhs;
-    BIG_XXX t,m;
+    BIG_XXX t;
+    BIG_XXX m;
     BIG_XXX_rcopy(m,Modulus_YYY);
 
     FP_YYY_nres(&rhs,x);
@@ -362,9 +366,10 @@
 /* map BIG to point on curve of correct order */
 /* The BIG should be the output of some hash function */
 
-void ECP_ZZZ_mapit(ECP_ZZZ *P,octet *W)
+void ECP_ZZZ_mapit(ECP_ZZZ *P,const octet *W)
 {
-    BIG_XXX q,x;
+    BIG_XXX q;
+    BIG_XXX x;
     BIG_XXX_fromBytes(x,W->val);
     BIG_XXX_rcopy(q,Modulus_YYY);
     BIG_XXX_mod(x,q);
@@ -391,7 +396,8 @@
 /* SU=160 */
 void ECP_ZZZ_affine(ECP_ZZZ *P)
 {
-    FP_YYY one,iz;
+    FP_YYY one;
+    FP_YYY iz;
     if (ECP_ZZZ_isinf(P)) return;
     FP_YYY_one(&one);
     if (FP_YYY_equals(&(P->z),&one)) return;
@@ -413,7 +419,8 @@
 /* SU=120 */
 void ECP_ZZZ_outputxyz(ECP_ZZZ *P)
 {
-    BIG_XXX x,z;
+    BIG_XXX x;
+    BIG_XXX z;
     if (ECP_ZZZ_isinf(P))
     {
         printf("Infinity\n");
@@ -475,9 +482,10 @@
 
 /* SU=16 */
 /* Output point P */
-void ECP_ZZZ_rawoutput(ECP_ZZZ *P)
+void ECP_ZZZ_rawoutput(const ECP_ZZZ *P)
 {
-    BIG_XXX x,z;
+    BIG_XXX x;
+    BIG_XXX z;
 
 #if CURVETYPE_ZZZ!=MONTGOMERY
     BIG_XXX y;
@@ -504,7 +512,7 @@
 
 /* SU=88 */
 /* Convert P to octet string */
-void ECP_ZZZ_toOctet(octet *W,ECP_ZZZ *P,bool compress)
+void ECP_ZZZ_toOctet(octet *W,const ECP_ZZZ *P,bool compress)
 {
 #if CURVETYPE_ZZZ==MONTGOMERY
     BIG_XXX x;
@@ -513,7 +521,8 @@
     W->val[0]=6;
     BIG_XXX_toBytes(&(W->val[1]),x);
 #else
-    BIG_XXX x,y;
+    BIG_XXX x;
+    BIG_XXX y;
     ECP_ZZZ_get(x,y,P);
     if (compress)
     {
@@ -534,7 +543,7 @@
 
 /* SU=88 */
 /* Restore P from octet string */
-int ECP_ZZZ_fromOctet(ECP_ZZZ *P,octet *W)
+int ECP_ZZZ_fromOctet(ECP_ZZZ *P,const octet *W)
 {
 #if CURVETYPE_ZZZ==MONTGOMERY
     BIG_XXX x;
@@ -542,7 +551,8 @@
     if (ECP_ZZZ_set(P,x)) return 1;
     return 0;
 #else
-    BIG_XXX x,y;
+    BIG_XXX x;
+    BIG_XXX y;
     int typ=W->val[0];
     BIG_XXX_fromBytes(x,&(W->val[1]));
     if (typ==0x04)
@@ -550,10 +560,8 @@
         BIG_XXX_fromBytes(y,&(W->val[MODBYTES_XXX+1]));
         if (ECP_ZZZ_set(P,x,y)) return 1;
     }
-    if (typ==0x02 || typ==0x03)
-    {
-        if (ECP_ZZZ_setx(P,x,typ&1)) return 1;
-    }
+    if ((typ==0x02 || typ==0x03) && (ECP_ZZZ_setx(P,x,typ&1)))
+        return 1;
     return 0;
 #endif
 }
@@ -564,145 +572,155 @@
 void ECP_ZZZ_dbl(ECP_ZZZ *P)
 {
 #if CURVETYPE_ZZZ==WEIERSTRASS
-    FP_YYY t0,t1,t2,t3,x3,y3,z3,b;
+    FP_YYY t0;
+    FP_YYY t1;
+    FP_YYY t2;
+    FP_YYY t3;
+    FP_YYY x3;
+    FP_YYY y3;
+    FP_YYY z3;
+    FP_YYY b;
 
     if (CURVE_A_ZZZ==0)
     {
-        FP_YYY_sqr(&t0,&(P->y));					//t0.sqr();
-        FP_YYY_mul(&t1,&(P->y),&(P->z));			//t1.mul(z);
+        FP_YYY_sqr(&t0,&(P->y));					//t0.sqr()
+        FP_YYY_mul(&t1,&(P->y),&(P->z));			//t1.mul(z)
 
-        FP_YYY_sqr(&t2,&(P->z));					//t2.sqr();
-        FP_YYY_add(&(P->z),&t0,&t0);		//z.add(t0);
-        FP_YYY_norm(&(P->z));					//z.norm();
-        FP_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
-        FP_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
-        FP_YYY_norm(&(P->z));					//z.norm();
+        FP_YYY_sqr(&t2,&(P->z));					//t2.sqr()
+        FP_YYY_add(&(P->z),&t0,&t0);		        //z.add(t0)
+        FP_YYY_norm(&(P->z));					    //z.norm()
+        FP_YYY_add(&(P->z),&(P->z),&(P->z));	    //z.add(z)
+        FP_YYY_add(&(P->z),&(P->z),&(P->z));	    //z.add(z)
+        FP_YYY_norm(&(P->z));					    //z.norm()
 
-        FP_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);		//t2.imul(3*ROM.CURVE_B_I);
-        FP_YYY_mul(&x3,&t2,&(P->z));			//x3.mul(z);
+        FP_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);		//t2.imul(3*ROM.CURVE_B_I)
+        FP_YYY_mul(&x3,&t2,&(P->z));			    //x3.mul(z)
 
-        FP_YYY_add(&y3,&t0,&t2);				//y3.add(t2);
-        FP_YYY_norm(&y3);						//y3.norm();
-        FP_YYY_mul(&(P->z),&(P->z),&t1);		//z.mul(t1);
+        FP_YYY_add(&y3,&t0,&t2);				    //y3.add(t2)
+        FP_YYY_norm(&y3);						    //y3.norm()
+        FP_YYY_mul(&(P->z),&(P->z),&t1);		    //z.mul(t1)
 
-        FP_YYY_add(&t1,&t2,&t2);				//t1.add(t2);
-        FP_YYY_add(&t2,&t2,&t1);				//t2.add(t1);
-        FP_YYY_sub(&t0,&t0,&t2);				//t0.sub(t2);
-        FP_YYY_norm(&t0);						//t0.norm();
-        FP_YYY_mul(&y3,&y3,&t0);				//y3.mul(t0);
-        FP_YYY_add(&y3,&y3,&x3);				//y3.add(x3);
-        FP_YYY_mul(&t1,&(P->x),&(P->y));			//t1.mul(y);
+        FP_YYY_add(&t1,&t2,&t2);				    //t1.add(t2)
+        FP_YYY_add(&t2,&t2,&t1);				    //t2.add(t1)
+        FP_YYY_sub(&t0,&t0,&t2);				    //t0.sub(t2)
+        FP_YYY_norm(&t0);						    //t0.norm()
+        FP_YYY_mul(&y3,&y3,&t0);				    //y3.mul(t0)
+        FP_YYY_add(&y3,&y3,&x3);				    //y3.add(x3)
+        FP_YYY_mul(&t1,&(P->x),&(P->y));			//t1.mul(y)
 
-        FP_YYY_norm(&t0);					//x.norm();
-        FP_YYY_mul(&(P->x),&t0,&t1);		//x.mul(t1);
-        FP_YYY_add(&(P->x),&(P->x),&(P->x));	//x.add(x);
-        FP_YYY_norm(&(P->x));					//x.norm();
-        FP_YYY_copy(&(P->y),&y3);				//y.copy(y3);
-        FP_YYY_norm(&(P->y));					//y.norm();
+        FP_YYY_norm(&t0);					        //x.norm()
+        FP_YYY_mul(&(P->x),&t0,&t1);		        //x.mul(t1)
+        FP_YYY_add(&(P->x),&(P->x),&(P->x));	    //x.add(x)
+        FP_YYY_norm(&(P->x));					    //x.norm()
+        FP_YYY_copy(&(P->y),&y3);				    //y.copy(y3)
+        FP_YYY_norm(&(P->y));					    //y.norm()
     }
     else // its -3
     {
 
-        if (CURVE_B_I_ZZZ==0)					//if (ROM.CURVE_B_I==0)
-            FP_YYY_rcopy(&b,CURVE_B_ZZZ);		//b.copy(new FP(new BIG(ROM.CURVE_B)));
+        if (CURVE_B_I_ZZZ==0)					    //if ROM.CURVE_B_I = 0
+            FP_YYY_rcopy(&b,CURVE_B_ZZZ);           //b.copy(new FP(new BIG(ROM.CURVE_B)))
 
-        FP_YYY_sqr(&t0,&(P->x));					//t0.sqr();  //1    x^2
-        FP_YYY_sqr(&t1,&(P->y));					//t1.sqr();  //2    y^2
-        FP_YYY_sqr(&t2,&(P->z));					//t2.sqr();  //3
+        FP_YYY_sqr(&t0,&(P->x));					//t0.sqr()  //1    x^2
+        FP_YYY_sqr(&t1,&(P->y));					//t1.sqr()  //2    y^2
+        FP_YYY_sqr(&t2,&(P->z));					//t2.sqr()  //3
 
-        FP_YYY_mul(&t3,&(P->x),&(P->y));			//t3.mul(y); //4
-        FP_YYY_add(&t3,&t3,&t3);				//t3.add(t3);
-        FP_YYY_norm(&t3);						//t3.norm();//5
+        FP_YYY_mul(&t3,&(P->x),&(P->y));			//t3.mul(y) //4
+        FP_YYY_add(&t3,&t3,&t3);				    //t3.add(t3)
+        FP_YYY_norm(&t3);						    //t3.norm() //5
 
-        FP_YYY_mul(&z3,&(P->z),&(P->x));			//z3.mul(x);   //6
-        FP_YYY_add(&z3,&z3,&z3);				//z3.add(z3);
-        FP_YYY_norm(&z3);						//z3.norm();//7
+        FP_YYY_mul(&z3,&(P->z),&(P->x));			//z3.mul(x)   //6
+        FP_YYY_add(&z3,&z3,&z3);				    //z3.add(z3)
+        FP_YYY_norm(&z3);						    //z3.norm() //7
 
-        if (CURVE_B_I_ZZZ==0)						//if (ROM.CURVE_B_I==0)
-            FP_YYY_mul(&y3,&t2,&b);				//y3.mul(b); //8
+        if (CURVE_B_I_ZZZ==0)						//if ROM.CURVE_B_I = 0
+            FP_YYY_mul(&y3,&t2,&b);				    //y3.mul(b) //8
         else
-            FP_YYY_imul(&y3,&t2,CURVE_B_I_ZZZ);	//y3.imul(ROM.CURVE_B_I);
+            FP_YYY_imul(&y3,&t2,CURVE_B_I_ZZZ);	    //y3.imul(ROM.CURVE_B_I)
 
-        FP_YYY_sub(&y3,&y3,&z3);				//y3.sub(z3); //y3.norm(); //9  ***
-        FP_YYY_add(&x3,&y3,&y3);				//x3.add(y3);
-        FP_YYY_norm(&x3);						//x3.norm();//10
+        FP_YYY_sub(&y3,&y3,&z3);				    //y3.sub(z3) //y3.norm() //9  ***
+        FP_YYY_add(&x3,&y3,&y3);				    //x3.add(y3)
+        FP_YYY_norm(&x3);						    //x3.norm() //10
 
-        FP_YYY_add(&y3,&y3,&x3);				//y3.add(x3); //y3.norm();//11
-        FP_YYY_sub(&x3,&t1,&y3);				//x3.sub(y3);
-        FP_YYY_norm(&x3);						//x3.norm();//12
-        FP_YYY_add(&y3,&y3,&t1);				//y3.add(t1);
-        FP_YYY_norm(&y3);						//y3.norm();//13
-        FP_YYY_mul(&y3,&y3,&x3);				//y3.mul(x3); //14
-        FP_YYY_mul(&x3,&x3,&t3);				//x3.mul(t3); //15
-        FP_YYY_add(&t3,&t2,&t2);				//t3.add(t2);  //16
-        FP_YYY_add(&t2,&t2,&t3);				//t2.add(t3); //17
+        FP_YYY_add(&y3,&y3,&x3);				    //y3.add(x3) //y3.norm() //11
+        FP_YYY_sub(&x3,&t1,&y3);				    //x3.sub(y3)
+        FP_YYY_norm(&x3);						    //x3.norm()//12
+        FP_YYY_add(&y3,&y3,&t1);				    //y3.add(t1)
+        FP_YYY_norm(&y3);						    //y3.norm() //13
+        FP_YYY_mul(&y3,&y3,&x3);				    //y3.mul(x3) //14
+        FP_YYY_mul(&x3,&x3,&t3);				    //x3.mul(t3) //15
+        FP_YYY_add(&t3,&t2,&t2);				    //t3.add(t2)  //16
+        FP_YYY_add(&t2,&t2,&t3);				    //t2.add(t3) //17
 
-        if (CURVE_B_I_ZZZ==0)					//if (ROM.CURVE_B_I==0)
-            FP_YYY_mul(&z3,&z3,&b);				//z3.mul(b); //18
+        if (CURVE_B_I_ZZZ==0)					    //if ROM.CURVE_B_I = 0
+            FP_YYY_mul(&z3,&z3,&b);				    //z3.mul(b) //18
         else
-            FP_YYY_imul(&z3,&z3,CURVE_B_I_ZZZ);	//z3.imul(ROM.CURVE_B_I);
+            FP_YYY_imul(&z3,&z3,CURVE_B_I_ZZZ);	    //z3.imul(ROM.CURVE_B_I)
 
-        FP_YYY_sub(&z3,&z3,&t2);				//z3.sub(t2); //z3.norm();//19
-        FP_YYY_sub(&z3,&z3,&t0);				//z3.sub(t0);
-        FP_YYY_norm(&z3);						//z3.norm();//20  ***
-        FP_YYY_add(&t3,&z3,&z3);				//t3.add(z3); //t3.norm();//21
+        FP_YYY_sub(&z3,&z3,&t2);				    //z3.sub(t2) //z3.norm() //19
+        FP_YYY_sub(&z3,&z3,&t0);				    //z3.sub(t0)
+        FP_YYY_norm(&z3);						    //z3.norm() //20  ***
+        FP_YYY_add(&t3,&z3,&z3);				    //t3.add(z3) //t3.norm() //21
 
-        FP_YYY_add(&z3,&z3,&t3);				//z3.add(t3);
-        FP_YYY_norm(&z3);						//z3.norm(); //22
-        FP_YYY_add(&t3,&t0,&t0);				//t3.add(t0); //t3.norm(); //23
-        FP_YYY_add(&t0,&t0,&t3);				//t0.add(t3); //t0.norm();//24
-        FP_YYY_sub(&t0,&t0,&t2);				//t0.sub(t2);
-        FP_YYY_norm(&t0);						//t0.norm();//25
+        FP_YYY_add(&z3,&z3,&t3);				    //z3.add(t3)
+        FP_YYY_norm(&z3);						    //z3.norm() //22
+        FP_YYY_add(&t3,&t0,&t0);				    //t3.add(t0) //t3.norm() //23
+        FP_YYY_add(&t0,&t0,&t3);				    //t0.add(t3) //t0.norm() //24
+        FP_YYY_sub(&t0,&t0,&t2);				    //t0.sub(t2)
+        FP_YYY_norm(&t0);						    //t0.norm() //25
 
-        FP_YYY_mul(&t0,&t0,&z3);				//t0.mul(z3);//26
-        FP_YYY_add(&y3,&y3,&t0);				//y3.add(t0); //y3.norm();//27
-        FP_YYY_mul(&t0,&(P->y),&(P->z));			//t0.mul(z);//28
-        FP_YYY_add(&t0,&t0,&t0);				//t0.add(t0);
-        FP_YYY_norm(&t0);						//t0.norm(); //29
-        FP_YYY_mul(&z3,&z3,&t0);				//z3.mul(t0);//30
-        FP_YYY_sub(&(P->x),&x3,&z3);				//x3.sub(z3); //x3.norm();//31
-        FP_YYY_add(&t0,&t0,&t0);				//t0.add(t0);
-        FP_YYY_norm(&t0);						//t0.norm();//32
-        FP_YYY_add(&t1,&t1,&t1);				//t1.add(t1);
-        FP_YYY_norm(&t1);						//t1.norm();//33
-        FP_YYY_mul(&(P->z),&t0,&t1);				//z3.mul(t1);//34
+        FP_YYY_mul(&t0,&t0,&z3);				    //t0.mul(z3) //26
+        FP_YYY_add(&y3,&y3,&t0);				    //y3.add(t0) //y3.norm() //27
+        FP_YYY_mul(&t0,&(P->y),&(P->z));			//t0.mul(z) //28
+        FP_YYY_add(&t0,&t0,&t0);				    //t0.add(t0)
+        FP_YYY_norm(&t0);						    //t0.norm() //29
+        FP_YYY_mul(&z3,&z3,&t0);				    //z3.mul(t0) //30
+        FP_YYY_sub(&(P->x),&x3,&z3);				//x3.sub(z3) //x3.norm() //31
+        FP_YYY_add(&t0,&t0,&t0);				    //t0.add(t0)
+        FP_YYY_norm(&t0);						    //t0.norm() //32
+        FP_YYY_add(&t1,&t1,&t1);				    //t1.add(t1)
+        FP_YYY_norm(&t1);						    //t1.norm() //33
+        FP_YYY_mul(&(P->z),&t0,&t1);				//z3.mul(t1) //34
 
-        FP_YYY_norm(&(P->x));					//x.norm();
-        FP_YYY_copy(&(P->y),&y3);				//y.copy(y3);
-        FP_YYY_norm(&(P->y));					//y.norm();
-        FP_YYY_norm(&(P->z));					//z.norm();
+        FP_YYY_norm(&(P->x));					    //x.norm()
+        FP_YYY_copy(&(P->y),&y3);				    //y.copy(y3)
+        FP_YYY_norm(&(P->y));					    //y.norm()
+        FP_YYY_norm(&(P->z));					    //z.norm()
     }
 #endif
 
 #if CURVETYPE_ZZZ==EDWARDS
     /* Not using square for multiplication swap, as (1) it needs more adds, and (2) it triggers more reductions */
 
-    FP_YYY C,D,H,J;
+    FP_YYY C;
+    FP_YYY D;
+    FP_YYY H;
+    FP_YYY J;
 
-    FP_YYY_sqr(&C,&(P->x));							//C.sqr();
+    FP_YYY_sqr(&C,&(P->x));							//C.sqr()
 
-    FP_YYY_mul(&(P->x),&(P->x),&(P->y));		//x.mul(y);
-    FP_YYY_add(&(P->x),&(P->x),&(P->x));		//x.add(x);
-    FP_YYY_norm(&(P->x));						//x.norm();
+    FP_YYY_mul(&(P->x),&(P->x),&(P->y));		    //x.mul(y)
+    FP_YYY_add(&(P->x),&(P->x),&(P->x));	    	//x.add(x)
+    FP_YYY_norm(&(P->x));					    	//x.norm()
 
-    FP_YYY_sqr(&D,&(P->y));							//D.sqr();
+    FP_YYY_sqr(&D,&(P->y));							//D.sqr()
 
-    if (CURVE_A_ZZZ==-1)				//if (ROM.CURVE_A==-1)
-        FP_YYY_neg(&C,&C);				//	C.neg();
+    if (CURVE_A_ZZZ==-1)			            	//if ROM.CURVE_A = -1
+        FP_YYY_neg(&C,&C);			             	//C.neg()
 
-    FP_YYY_add(&(P->y),&C,&D);		//y.add(D);
-    FP_YYY_norm(&(P->y));				//y.norm();
-    FP_YYY_sqr(&H,&(P->z));				//H.sqr();
-    FP_YYY_add(&H,&H,&H);				//H.add(H);
+    FP_YYY_add(&(P->y),&C,&D);		                //y.add(D)
+    FP_YYY_norm(&(P->y));				            //y.norm()
+    FP_YYY_sqr(&H,&(P->z));				            //H.sqr()
+    FP_YYY_add(&H,&H,&H);				            //H.add(H)
 
-    FP_YYY_sub(&J,&(P->y),&H);			//J.sub(H);
-    FP_YYY_norm(&J);					//J.norm();
+    FP_YYY_sub(&J,&(P->y),&H);		               	//J.sub(H)
+    FP_YYY_norm(&J);				            	//J.norm()
 
-    FP_YYY_mul(&(P->x),&(P->x),&J);		//x.mul(J);
-    FP_YYY_sub(&C,&C,&D);				//C.sub(D);
-    FP_YYY_norm(&C);					//C.norm();
-    FP_YYY_mul(&(P->z),&(P->y),&J);		//z.mul(J);
-    FP_YYY_mul(&(P->y),&(P->y),&C);		//y.mul(C);
+    FP_YYY_mul(&(P->x),&(P->x),&J);		            //x.mul(J)
+    FP_YYY_sub(&C,&C,&D);			            	//C.sub(D)
+    FP_YYY_norm(&C);				            	//C.norm()
+    FP_YYY_mul(&(P->z),&(P->y),&J);		            //z.mul(J)
+    FP_YYY_mul(&(P->y),&(P->y),&C);		            //y.mul(C)
 
 
 #endif
@@ -710,21 +728,21 @@
 #if CURVETYPE_ZZZ==MONTGOMERY
     FP_YYY A,B,AA,BB,C;
 
-    FP_YYY_add(&A,&(P->x),&(P->z));			//A.add(z);
-    FP_YYY_norm(&A);					//A.norm();
-    FP_YYY_sqr(&AA,&A);				//AA.sqr();
-    FP_YYY_sub(&B,&(P->x),&(P->z));			//B.sub(z);
-    FP_YYY_norm(&B);					//B.norm();
+    FP_YYY_add(&A,&(P->x),&(P->z));		        	//A.add(z)
+    FP_YYY_norm(&A);				            	//A.norm()
+    FP_YYY_sqr(&AA,&A);				                //AA.sqr()
+    FP_YYY_sub(&B,&(P->x),&(P->z));		        	//B.sub(z)
+    FP_YYY_norm(&B);					            //B.norm()
 
-    FP_YYY_sqr(&BB,&B);				//BB.sqr();
-    FP_YYY_sub(&C,&AA,&BB);				//C.sub(BB);
-    FP_YYY_norm(&C);					//C.norm();
-    FP_YYY_mul(&(P->x),&AA,&BB);	//x.mul(BB);
-    FP_YYY_imul(&A,&C,(CURVE_A_ZZZ+2)/4);	//A.imul((ROM.CURVE_A+2)/4);
+    FP_YYY_sqr(&BB,&B);			                	//BB.sqr()
+    FP_YYY_sub(&C,&AA,&BB);			            	//C.sub(BB)
+    FP_YYY_norm(&C);				            	//C.norm()
+    FP_YYY_mul(&(P->x),&AA,&BB);                	//x.mul(BB)
+    FP_YYY_imul(&A,&C,(CURVE_A_ZZZ+2)/4);       	//A.imul((ROM.CURVE_A+2)/4)
 
-    FP_YYY_add(&BB,&BB,&A);				//BB.add(A);
-    FP_YYY_norm(&BB);					//BB.norm();
-    FP_YYY_mul(&(P->z),&BB,&C);		//z.mul(C);
+    FP_YYY_add(&BB,&BB,&A);			            	//BB.add(A)
+    FP_YYY_norm(&BB);				            	//BB.norm()
+    FP_YYY_mul(&(P->z),&BB,&C);		                //z.mul(C)
 
 #endif
 }
@@ -736,29 +754,29 @@
 {
     FP_YYY A,B,C,D,DA,CB;
 
-    FP_YYY_add(&A,&(P->x),&(P->z));	//A.add(z);
-    FP_YYY_sub(&B,&(P->x),&(P->z));	//B.sub(z);
+    FP_YYY_add(&A,&(P->x),&(P->z));             	//A.add(z)
+    FP_YYY_sub(&B,&(P->x),&(P->z));	                //B.sub(z)
 
-    FP_YYY_add(&C,&(Q->x),&(Q->z));	//C.add(Q.z);
+    FP_YYY_add(&C,&(Q->x),&(Q->z));             	//C.add(Q.z)
 
-    FP_YYY_sub(&D,&(Q->x),&(Q->z));	//D.sub(Q.z);
-    FP_YYY_norm(&A);			//A.norm();
+    FP_YYY_sub(&D,&(Q->x),&(Q->z));             	//D.sub(Q.z)
+    FP_YYY_norm(&A);			                    //A.norm()
 
-    FP_YYY_norm(&D);			//D.norm();
-    FP_YYY_mul(&DA,&D,&A);			//DA.mul(A);
+    FP_YYY_norm(&D);			                    //D.norm()
+    FP_YYY_mul(&DA,&D,&A);		                	//DA.mul(A)
 
-    FP_YYY_norm(&C);			//C.norm();
-    FP_YYY_norm(&B);			//B.norm();
-    FP_YYY_mul(&CB,&C,&B);		//CB.mul(B);
+    FP_YYY_norm(&C);			                    //C.norm()
+    FP_YYY_norm(&B);		                    	//B.norm()
+    FP_YYY_mul(&CB,&C,&B);		                    //CB.mul(B)
 
-    FP_YYY_add(&A,&DA,&CB);		//A.add(CB);
-    FP_YYY_norm(&A);			//A.norm();
-    FP_YYY_sqr(&(P->x),&A);			//A.sqr();
-    FP_YYY_sub(&B,&DA,&CB);		//B.sub(CB);
-    FP_YYY_norm(&B);			//B.norm();
-    FP_YYY_sqr(&B,&B);			//B.sqr();
+    FP_YYY_add(&A,&DA,&CB);		                    //A.add(CB)
+    FP_YYY_norm(&A);		                    	//A.norm()
+    FP_YYY_sqr(&(P->x),&A);		                	//A.sqr()
+    FP_YYY_sub(&B,&DA,&CB);		                    //B.sub(CB)
+    FP_YYY_norm(&B);		                    	//B.norm()
+    FP_YYY_sqr(&B,&B);			                    //B.sqr()
 
-    FP_YYY_mul(&(P->z),&(W->x),&B);	//z.mul(B);
+    FP_YYY_mul(&(P->z),&(W->x),&B);             	//z.mul(B)
 
 }
 
@@ -766,221 +784,236 @@
 
 /* Set P+=Q */
 /* SU=248 */
-void ECP_ZZZ_add(ECP_ZZZ *P,ECP_ZZZ *Q)
+void ECP_ZZZ_add(ECP_ZZZ *P,const ECP_ZZZ *Q)
 {
 #if CURVETYPE_ZZZ==WEIERSTRASS
 
     int b3;
-    FP_YYY t0,t1,t2,t3,t4,x3,y3,z3,b;
+    FP_YYY t0;
+    FP_YYY t1;
+    FP_YYY t2;
+    FP_YYY t3;
+    FP_YYY t4;
+    FP_YYY x3;
+    FP_YYY y3;
+    FP_YYY z3;
+    FP_YYY b;
 
     if (CURVE_A_ZZZ==0)
     {
-        b3=3*CURVE_B_I_ZZZ;					//int b=3*ROM.CURVE_B_I;
-        FP_YYY_mul(&t0,&(P->x),&(Q->x));		//t0.mul(Q.x);
-        FP_YYY_mul(&t1,&(P->y),&(Q->y));		//t1.mul(Q.y);
-        FP_YYY_mul(&t2,&(P->z),&(Q->z));		//t2.mul(Q.z);
-        FP_YYY_add(&t3,&(P->x),&(P->y));		//t3.add(y);
-        FP_YYY_norm(&t3);					//t3.norm();
+        b3=3*CURVE_B_I_ZZZ;					        //int b=3*ROM.CURVE_B_I
+        FP_YYY_mul(&t0,&(P->x),&(Q->x));	    	//t0.mul(Q.x)
+        FP_YYY_mul(&t1,&(P->y),&(Q->y));	    	//t1.mul(Q.y)
+        FP_YYY_mul(&t2,&(P->z),&(Q->z));	    	//t2.mul(Q.z)
+        FP_YYY_add(&t3,&(P->x),&(P->y));	    	//t3.add(y)
+        FP_YYY_norm(&t3);					        //t3.norm()
 
-        FP_YYY_add(&t4,&(Q->x),&(Q->y));		//t4.add(Q.y);
-        FP_YYY_norm(&t4);					//t4.norm();
-        FP_YYY_mul(&t3,&t3,&t4);			//t3.mul(t4);
-        FP_YYY_add(&t4,&t0,&t1);			//t4.add(t1);
+        FP_YYY_add(&t4,&(Q->x),&(Q->y));	    	//t4.add(Q.y)
+        FP_YYY_norm(&t4);				          	//t4.norm()
+        FP_YYY_mul(&t3,&t3,&t4);		           	//t3.mul(t4)
+        FP_YYY_add(&t4,&t0,&t1);		        	//t4.add(t1)
 
-        FP_YYY_sub(&t3,&t3,&t4);			//t3.sub(t4);
-        FP_YYY_norm(&t3);					//t3.norm();
-        FP_YYY_add(&t4,&(P->y),&(P->z));		//t4.add(z);
-        FP_YYY_norm(&t4);					//t4.norm();
-        FP_YYY_add(&x3,&(Q->y),&(Q->z));		//x3.add(Q.z);
-        FP_YYY_norm(&x3);					//x3.norm();
+        FP_YYY_sub(&t3,&t3,&t4);		        	//t3.sub(t4)
+        FP_YYY_norm(&t3);				        	//t3.norm()
+        FP_YYY_add(&t4,&(P->y),&(P->z));    		//t4.add(z)
+        FP_YYY_norm(&t4);					        //t4.norm()
+        FP_YYY_add(&x3,&(Q->y),&(Q->z));	    	//x3.add(Q.z)
+        FP_YYY_norm(&x3);					        //x3.norm()
 
-        FP_YYY_mul(&t4,&t4,&x3);			//t4.mul(x3);
-        FP_YYY_add(&x3,&t1,&t2);			//x3.add(t2);
+        FP_YYY_mul(&t4,&t4,&x3);		   	        //t4.mul(x3)
+        FP_YYY_add(&x3,&t1,&t2);		        	//x3.add(t2)
 
-        FP_YYY_sub(&t4,&t4,&x3);			//t4.sub(x3);
-        FP_YYY_norm(&t4);					//t4.norm();
-        FP_YYY_add(&x3,&(P->x),&(P->z));		//x3.add(z);
-        FP_YYY_norm(&x3);					//x3.norm();
-        FP_YYY_add(&y3,&(Q->x),&(Q->z));		//y3.add(Q.z);
-        FP_YYY_norm(&y3);					//y3.norm();
-        FP_YYY_mul(&x3,&x3,&y3);			//x3.mul(y3);
+        FP_YYY_sub(&t4,&t4,&x3);		        	//t4.sub(x3)
+        FP_YYY_norm(&t4);				        	//t4.norm()
+        FP_YYY_add(&x3,&(P->x),&(P->z));	    	//x3.add(z)
+        FP_YYY_norm(&x3);				        	//x3.norm()
+        FP_YYY_add(&y3,&(Q->x),&(Q->z));	    	//y3.add(Q.z)
+        FP_YYY_norm(&y3);				        	//y3.norm()
+        FP_YYY_mul(&x3,&x3,&y3);		        	//x3.mul(y3)
 
-        FP_YYY_add(&y3,&t0,&t2);			//y3.add(t2);
-        FP_YYY_sub(&y3,&x3,&y3);			//y3.rsub(x3);
-        FP_YYY_norm(&y3);					//y3.norm();
-        FP_YYY_add(&x3,&t0,&t0);			//x3.add(t0);
-        FP_YYY_add(&t0,&t0,&x3);			//t0.add(x3);
-        FP_YYY_norm(&t0);					//t0.norm();
-        FP_YYY_imul(&t2,&t2,b3);				//t2.imul(b);
+        FP_YYY_add(&y3,&t0,&t2);		        	//y3.add(t2)
+        FP_YYY_sub(&y3,&x3,&y3);	        		//y3.rsub(x3)
+        FP_YYY_norm(&y3);			        		//y3.norm()
+        FP_YYY_add(&x3,&t0,&t0);	        		//x3.add(t0)
+        FP_YYY_add(&t0,&t0,&x3);	        		//t0.add(x3)
+        FP_YYY_norm(&t0);				        	//t0.norm()
+        FP_YYY_imul(&t2,&t2,b3);	        		//t2.imul(b)
 
-        FP_YYY_add(&z3,&t1,&t2);			//z3.add(t2);
-        FP_YYY_norm(&z3);					//z3.norm();
-        FP_YYY_sub(&t1,&t1,&t2);			//t1.sub(t2);
-        FP_YYY_norm(&t1);					//t1.norm();
-        FP_YYY_imul(&y3,&y3,b3);				//y3.imul(b);
+        FP_YYY_add(&z3,&t1,&t2);		        	//z3.add(t2)
+        FP_YYY_norm(&z3);				        	//z3.norm()
+        FP_YYY_sub(&t1,&t1,&t2);		        	//t1.sub(t2)
+        FP_YYY_norm(&t1);				        	//t1.norm()
+        FP_YYY_imul(&y3,&y3,b3);		       		//y3.imul(b)
 
-        FP_YYY_mul(&x3,&y3,&t4);			//x3.mul(t4);
-        FP_YYY_mul(&t2,&t3,&t1);			//t2.mul(t1);
-        FP_YYY_sub(&(P->x),&t2,&x3);			//x3.rsub(t2);
-        FP_YYY_mul(&y3,&y3,&t0);			//y3.mul(t0);
-        FP_YYY_mul(&t1,&t1,&z3);			//t1.mul(z3);
-        FP_YYY_add(&(P->y),&y3,&t1);			//y3.add(t1);
-        FP_YYY_mul(&t0,&t0,&t3);			//t0.mul(t3);
-        FP_YYY_mul(&z3,&z3,&t4);			//z3.mul(t4);
-        FP_YYY_add(&(P->z),&z3,&t0);			//z3.add(t0);
+        FP_YYY_mul(&x3,&y3,&t4);			        //x3.mul(t4)
+        FP_YYY_mul(&t2,&t3,&t1);		        	//t2.mul(t1)
+        FP_YYY_sub(&(P->x),&t2,&x3);	    		//x3.rsub(t2)
+        FP_YYY_mul(&y3,&y3,&t0);		        	//y3.mul(t0)
+        FP_YYY_mul(&t1,&t1,&z3);		        	//t1.mul(z3)
+        FP_YYY_add(&(P->y),&y3,&t1);	    		//y3.add(t1)
+        FP_YYY_mul(&t0,&t0,&t3);		        	//t0.mul(t3)
+        FP_YYY_mul(&z3,&z3,&t4);		        	//z3.mul(t4)
+        FP_YYY_add(&(P->z),&z3,&t0);	    		//z3.add(t0)
 
-        FP_YYY_norm(&(P->x));				//x.norm();
-        FP_YYY_norm(&(P->y));				//y.norm();
-        FP_YYY_norm(&(P->z));				//z.norm();
+        FP_YYY_norm(&(P->x));			        	//x.norm()
+        FP_YYY_norm(&(P->y));			        	//y.norm()
+        FP_YYY_norm(&(P->z));			        	//z.norm()
     }
     else
     {
 
-        if (CURVE_B_I_ZZZ==0)				//if (ROM.CURVE_B_I==0)
-            FP_YYY_rcopy(&b,CURVE_B_ZZZ);	//b.copy(new FP(new BIG(ROM.CURVE_B)));
+        if (CURVE_B_I_ZZZ==0)			        	//if ROM.CURVE_B_I = 0
+            FP_YYY_rcopy(&b,CURVE_B_ZZZ);	        //b.copy(new FP(new BIG(ROM.CURVE_B)))
 
-        FP_YYY_mul(&t0,&(P->x),&(Q->x));		//t0.mul(Q.x); //1
-        FP_YYY_mul(&t1,&(P->y),&(Q->y));		//t1.mul(Q.y); //2
-        FP_YYY_mul(&t2,&(P->z),&(Q->z));		//t2.mul(Q.z); //3
+        FP_YYY_mul(&t0,&(P->x),&(Q->x));	    	//t0.mul(Q.x) //1
+        FP_YYY_mul(&t1,&(P->y),&(Q->y));	    	//t1.mul(Q.y) //2
+        FP_YYY_mul(&t2,&(P->z),&(Q->z));	    	//t2.mul(Q.z) //3
 
-        FP_YYY_add(&t3,&(P->x),&(P->y));		//t3.add(y);
-        FP_YYY_norm(&t3);					//t3.norm(); //4
-        FP_YYY_add(&t4,&(Q->x),&(Q->y));		//t4.add(Q.y);
-        FP_YYY_norm(&t4);					//t4.norm();//5
-        FP_YYY_mul(&t3,&t3,&t4);			//t3.mul(t4);//6
+        FP_YYY_add(&t3,&(P->x),&(P->y));	    	//t3.add(y)
+        FP_YYY_norm(&t3);					        //t3.norm() //4
+        FP_YYY_add(&t4,&(Q->x),&(Q->y));	    	//t4.add(Q.y)
+        FP_YYY_norm(&t4);					        //t4.norm() //5
+        FP_YYY_mul(&t3,&t3,&t4);		        	//t3.mul(t4) //6
 
-        FP_YYY_add(&t4,&t0,&t1);			//t4.add(t1); //t4.norm(); //7
-        FP_YYY_sub(&t3,&t3,&t4);			//t3.sub(t4);
-        FP_YYY_norm(&t3);					//t3.norm(); //8
-        FP_YYY_add(&t4,&(P->y),&(P->z));		//t4.add(z);
-        FP_YYY_norm(&t4);					//t4.norm();//9
-        FP_YYY_add(&x3,&(Q->y),&(Q->z));		//x3.add(Q.z);
-        FP_YYY_norm(&x3);					//x3.norm();//10
-        FP_YYY_mul(&t4,&t4,&x3);			//t4.mul(x3); //11
-        FP_YYY_add(&x3,&t1,&t2);			//x3.add(t2); //x3.norm();//12
+        FP_YYY_add(&t4,&t0,&t1);		        	//t4.add(t1) //t4.norm() //7
+        FP_YYY_sub(&t3,&t3,&t4);		        	//t3.sub(t4)
+        FP_YYY_norm(&t3);			        		//t3.norm() //8
+        FP_YYY_add(&t4,&(P->y),&(P->z));	    	//t4.add(z)
+        FP_YYY_norm(&t4);				        	//t4.norm()//9
+        FP_YYY_add(&x3,&(Q->y),&(Q->z));    		//x3.add(Q.z)
+        FP_YYY_norm(&x3);				        	//x3.norm()//10
+        FP_YYY_mul(&t4,&t4,&x3);		        	//t4.mul(x3) //11
+        FP_YYY_add(&x3,&t1,&t2);		        	//x3.add(t2) //x3.norm() //12
 
-        FP_YYY_sub(&t4,&t4,&x3);			//t4.sub(x3);
-        FP_YYY_norm(&t4);					//t4.norm();//13
-        FP_YYY_add(&x3,&(P->x),&(P->z));		//x3.add(z);
-        FP_YYY_norm(&x3);					//x3.norm(); //14
-        FP_YYY_add(&y3,&(Q->x),&(Q->z));		//y3.add(Q.z);
-        FP_YYY_norm(&y3);					//y3.norm();//15
+        FP_YYY_sub(&t4,&t4,&x3);			        //t4.sub(x3)
+        FP_YYY_norm(&t4);					        //t4.norm() //13
+        FP_YYY_add(&x3,&(P->x),&(P->z));	    	//x3.add(z)
+        FP_YYY_norm(&x3);				        	//x3.norm() //14
+        FP_YYY_add(&y3,&(Q->x),&(Q->z));	    	//y3.add(Q.z)
+        FP_YYY_norm(&y3);				        	//y3.norm() //15
 
-        FP_YYY_mul(&x3,&x3,&y3);			//x3.mul(y3); //16
-        FP_YYY_add(&y3,&t0,&t2);			//y3.add(t2); //y3.norm();//17
+        FP_YYY_mul(&x3,&x3,&y3);		        	//x3.mul(y3) //16
+        FP_YYY_add(&y3,&t0,&t2);		        	//y3.add(t2) //y3.norm()//17
 
-        FP_YYY_sub(&y3,&x3,&y3);			//y3.rsub(x3);
-        FP_YYY_norm(&y3);					//y3.norm(); //18
+        FP_YYY_sub(&y3,&x3,&y3);		        	//y3.rsub(x3)
+        FP_YYY_norm(&y3);				        	//y3.norm() //18
 
-        if (CURVE_B_I_ZZZ==0)				//if (ROM.CURVE_B_I==0)
-            FP_YYY_mul(&z3,&t2,&b);			//z3.mul(b); //18
+        if (CURVE_B_I_ZZZ==0)			        	//if ROM.CURVE_B_I = 0
+            FP_YYY_mul(&z3,&t2,&b);		        	//z3.mul(b) //18
         else
-            FP_YYY_imul(&z3,&t2,CURVE_B_I_ZZZ);	//z3.imul(ROM.CURVE_B_I);
+            FP_YYY_imul(&z3,&t2,CURVE_B_I_ZZZ); 	//z3.imul(ROM.CURVE_B_I)
 
-        FP_YYY_sub(&x3,&y3,&z3);			//x3.sub(z3);
-        FP_YYY_norm(&x3);					//x3.norm(); //20
-        FP_YYY_add(&z3,&x3,&x3);			//z3.add(x3); //z3.norm(); //21
+        FP_YYY_sub(&x3,&y3,&z3);			        //x3.sub(z3)
+        FP_YYY_norm(&x3);				        	//x3.norm() //20
+        FP_YYY_add(&z3,&x3,&x3);		        	//z3.add(x3) //z3.norm() //21
 
-        FP_YYY_add(&x3,&x3,&z3);			//x3.add(z3); //x3.norm(); //22
-        FP_YYY_sub(&z3,&t1,&x3);			//z3.sub(x3);
-        FP_YYY_norm(&z3);					//z3.norm(); //23
-        FP_YYY_add(&x3,&x3,&t1);			//x3.add(t1);
-        FP_YYY_norm(&x3);					//x3.norm(); //24
+        FP_YYY_add(&x3,&x3,&z3);		        	//x3.add(z3) //x3.norm() //22
+        FP_YYY_sub(&z3,&t1,&x3);		        	//z3.sub(x3)
+        FP_YYY_norm(&z3);				        	//z3.norm() //23
+        FP_YYY_add(&x3,&x3,&t1);		        	//x3.add(t1)
+        FP_YYY_norm(&x3);				        	//x3.norm() //24
 
-        if (CURVE_B_I_ZZZ==0)				//if (ROM.CURVE_B_I==0)
-            FP_YYY_mul(&y3,&y3,&b);			//y3.mul(b); //18
+        if (CURVE_B_I_ZZZ==0)			        	//if ROM.CURVE_B_I = 0
+            FP_YYY_mul(&y3,&y3,&b);		        	//y3.mul(b) //18
         else
-            FP_YYY_imul(&y3,&y3,CURVE_B_I_ZZZ);	//y3.imul(ROM.CURVE_B_I);
+            FP_YYY_imul(&y3,&y3,CURVE_B_I_ZZZ); 	//y3.imul(ROM.CURVE_B_I)
 
-        FP_YYY_add(&t1,&t2,&t2);			//t1.add(t2); //t1.norm();//26
-        FP_YYY_add(&t2,&t2,&t1);			//t2.add(t1); //t2.norm();//27
+        FP_YYY_add(&t1,&t2,&t2);		        	//t1.add(t2) //t1.norm() //26
+        FP_YYY_add(&t2,&t2,&t1);		        	//t2.add(t1) //t2.norm() //27
 
-        FP_YYY_sub(&y3,&y3,&t2);			//y3.sub(t2); //y3.norm(); //28
+        FP_YYY_sub(&y3,&y3,&t2);		        	//y3.sub(t2) //y3.norm() //28
 
-        FP_YYY_sub(&y3,&y3,&t0);			//y3.sub(t0);
-        FP_YYY_norm(&y3);					//y3.norm(); //29
-        FP_YYY_add(&t1,&y3,&y3);			//t1.add(y3); //t1.norm();//30
-        FP_YYY_add(&y3,&y3,&t1);			//y3.add(t1);
-        FP_YYY_norm(&y3);					//y3.norm(); //31
+        FP_YYY_sub(&y3,&y3,&t0);		        	//y3.sub(t0)
+        FP_YYY_norm(&y3);				        	//y3.norm() //29
+        FP_YYY_add(&t1,&y3,&y3);		        	//t1.add(y3) //t1.norm() //30
+        FP_YYY_add(&y3,&y3,&t1);		        	//y3.add(t1)
+        FP_YYY_norm(&y3);				        	//y3.norm() //31
 
-        FP_YYY_add(&t1,&t0,&t0);			//t1.add(t0); //t1.norm(); //32
-        FP_YYY_add(&t0,&t0,&t1);			//t0.add(t1); //t0.norm();//33
-        FP_YYY_sub(&t0,&t0,&t2);			//t0.sub(t2);
-        FP_YYY_norm(&t0);					//t0.norm();//34
+        FP_YYY_add(&t1,&t0,&t0);		        	//t1.add(t0) //t1.norm() //32
+        FP_YYY_add(&t0,&t0,&t1);		        	//t0.add(t1) //t0.norm() //33
+        FP_YYY_sub(&t0,&t0,&t2);		        	//t0.sub(t2)
+        FP_YYY_norm(&t0);				        	//t0.norm() //34
 
-        FP_YYY_mul(&t1,&t4,&y3);			//t1.mul(y3);//35
-        FP_YYY_mul(&t2,&t0,&y3);			//t2.mul(y3);//36
-        FP_YYY_mul(&y3,&x3,&z3);			//y3.mul(z3);//37
-        FP_YYY_add(&(P->y),&y3,&t2);			//y3.add(t2); //y3.norm();//38
-        FP_YYY_mul(&x3,&x3,&t3);			//x3.mul(t3);//39
-        FP_YYY_sub(&(P->x),&x3,&t1);			//x3.sub(t1);//40
-        FP_YYY_mul(&z3,&z3,&t4);			//z3.mul(t4);//41
+        FP_YYY_mul(&t1,&t4,&y3);		        	//t1.mul(y3) //35
+        FP_YYY_mul(&t2,&t0,&y3);			        //t2.mul(y3) //36
+        FP_YYY_mul(&y3,&x3,&z3);		        	//y3.mul(z3) //37
+        FP_YYY_add(&(P->y),&y3,&t2);	       		//y3.add(t2) //y3.norm() //38
+        FP_YYY_mul(&x3,&x3,&t3);		        	//x3.mul(t3) //39
+        FP_YYY_sub(&(P->x),&x3,&t1);		    	//x3.sub(t1) //40
+        FP_YYY_mul(&z3,&z3,&t4);			        //z3.mul(t4) //41
 
-        FP_YYY_mul(&t1,&t3,&t0);			//t1.mul(t0);//42
-        FP_YYY_add(&(P->z),&z3,&t1);			//z3.add(t1);
-        FP_YYY_norm(&(P->x));				//x.norm();
+        FP_YYY_mul(&t1,&t3,&t0);		        	//t1.mul(t0) //42
+        FP_YYY_add(&(P->z),&z3,&t1);		    	//z3.add(t1)
+        FP_YYY_norm(&(P->x));			        	//x.norm()
 
-        FP_YYY_norm(&(P->y));				//y.norm();
-        FP_YYY_norm(&(P->z));				//z.norm();
+        FP_YYY_norm(&(P->y));			        	//y.norm()
+        FP_YYY_norm(&(P->z));			        	//z.norm()
     }
 
 #else
-    FP_YYY A,B,C,D,E,F,G,b;
+    FP_YYY A;
+    FP_YYY B;
+    FP_YYY C;
+    FP_YYY D;
+    FP_YYY E;
+    FP_YYY F;
+    FP_YYY G;
+    FP_YYY b;
 
-    FP_YYY_mul(&A,&(P->z),&(Q->z));		//A.mul(Q.z);
-    FP_YYY_sqr(&B,&A);					//B.sqr();
-    FP_YYY_mul(&C,&(P->x),&(Q->x));		//C.mul(Q.x);
-    FP_YYY_mul(&D,&(P->y),&(Q->y));		//D.mul(Q.y);
-    FP_YYY_mul(&E,&C,&D);				//E.mul(D);
+    FP_YYY_mul(&A,&(P->z),&(Q->z));		            //A.mul(Q.z)
+    FP_YYY_sqr(&B,&A);				            	//B.sqr()
+    FP_YYY_mul(&C,&(P->x),&(Q->x));	            	//C.mul(Q.x)
+    FP_YYY_mul(&D,&(P->y),&(Q->y));	            	//D.mul(Q.y)
+    FP_YYY_mul(&E,&C,&D);			            	//E.mul(D)
 
-    if (CURVE_B_I_ZZZ==0)			//if (ROM.CURVE_B_I==0)
+    if (CURVE_B_I_ZZZ==0)			                //if ROM.CURVE_B_I = 0
     {
-        FP_YYY_rcopy(&b,CURVE_B_ZZZ);	//FP b=new FP(new BIG(ROM.CURVE_B));
-        FP_YYY_mul(&E,&E,&b);			//E.mul(b);
+        FP_YYY_rcopy(&b,CURVE_B_ZZZ);	            //FP b=new FP(new BIG(ROM.CURVE_B))
+        FP_YYY_mul(&E,&E,&b);		            	//E.mul(b)
     }
     else
-        FP_YYY_imul(&E,&E,CURVE_B_I_ZZZ);	//E.imul(ROM.CURVE_B_I);
+        FP_YYY_imul(&E,&E,CURVE_B_I_ZZZ);	        //E.imul(ROM.CURVE_B_I)
 
-    FP_YYY_sub(&F,&B,&E);			//F.sub(E);
-    FP_YYY_add(&G,&B,&E);			//G.add(E);
+    FP_YYY_sub(&F,&B,&E);		                	//F.sub(E)
+    FP_YYY_add(&G,&B,&E);		                	//G.add(E)
 
-    if (CURVE_A_ZZZ==1)				//if (ROM.CURVE_A==1)
+    if (CURVE_A_ZZZ==1)			                	//if ROM.CURVE_A = 1
     {
-        FP_YYY_sub(&E,&D,&C);		//E.sub(C);
+        FP_YYY_sub(&E,&D,&C);		                //E.sub(C)
     }
-    FP_YYY_add(&C,&C,&D);			//C.add(D);
-    FP_YYY_add(&B,&(P->x),&(P->y));		//B.add(y);
+FP_YYY_add(&C,&C,&D);                               //C.add(D)
+    FP_YYY_add(&B,&(P->x),&(P->y));	            	//B.add(y)
 
-    FP_YYY_add(&D,&(Q->x),&(Q->y));		//D.add(Q.y);
-    FP_YYY_norm(&B);				//B.norm();
-    FP_YYY_norm(&D);				//D.norm();
-    FP_YYY_mul(&B,&B,&D);			//B.mul(D);
-    FP_YYY_sub(&B,&B,&C);			//B.sub(C);
-    FP_YYY_norm(&B);				//B.norm();
-    FP_YYY_norm(&F);				//F.norm();
-    FP_YYY_mul(&B,&B,&F);			//B.mul(F);
-    FP_YYY_mul(&(P->x),&A,&B); //x.mul(B);
-    FP_YYY_norm(&G);				//G.norm();
+    FP_YYY_add(&D,&(Q->x),&(Q->y));	            	//D.add(Q.y)
+    FP_YYY_norm(&B);				                //B.norm()
+    FP_YYY_norm(&D);			                	//D.norm()
+    FP_YYY_mul(&B,&B,&D);			                //B.mul(D)
+    FP_YYY_sub(&B,&B,&C);		                	//B.sub(C)
+    FP_YYY_norm(&B);			                	//B.norm()
+    FP_YYY_norm(&F);			                	//F.norm()
+    FP_YYY_mul(&B,&B,&F);		                	//B.mul(F)
+    FP_YYY_mul(&(P->x),&A,&B);                      //x.mul(B)
+    FP_YYY_norm(&G);			                   	//G.norm()
 
-    if (CURVE_A_ZZZ==1)				//if (ROM.CURVE_A==1)
+    if (CURVE_A_ZZZ==1)			                	//if ROM.CURVE_A = 1
     {
-        FP_YYY_norm(&E);			//E.norm();
-        FP_YYY_mul(&C,&E,&G);		//C.mul(G);
+        FP_YYY_norm(&E);		                	//E.norm()
+        FP_YYY_mul(&C,&E,&G);		                //C.mul(G)
     }
-    if (CURVE_A_ZZZ==-1)			//if (ROM.CURVE_A==-1)
+    if (CURVE_A_ZZZ==-1)			                //if ROM.CURVE_A = -1
     {
-        FP_YYY_norm(&C);			//C.norm();
-        FP_YYY_mul(&C,&C,&G);		//C.mul(G);
+        FP_YYY_norm(&C);		                	//C.norm()
+        FP_YYY_mul(&C,&C,&G);	                   	//C.mul(G)
     }
-    FP_YYY_mul(&(P->y),&A,&C);	//y.mul(C);
-    FP_YYY_mul(&(P->z),&F,&G);	//z.mul(G);
+    FP_YYY_mul(&(P->y),&A,&C);	                    //y.mul(C)
+    FP_YYY_mul(&(P->z),&F,&G);                  	//z.mul(G)
 
 #endif
 }
 
 /* Set P-=Q */
 /* SU=16 */
-void  ECP_ZZZ_sub(ECP_ZZZ *P,ECP_ZZZ *Q)
+void  ECP_ZZZ_sub(ECP_ZZZ *P,const ECP_ZZZ *Q)
 {
     ECP_ZZZ NQ;
     ECP_ZZZ_copy(&NQ,Q);
@@ -994,14 +1027,15 @@
 /* constant time multiply by small integer of length bts - use ladder */
 void ECP_ZZZ_pinmul(ECP_ZZZ *P,int e,int bts)
 {
-    int i,b;
-    ECP_ZZZ R0,R1;
+    int b;
+    ECP_ZZZ R0;
+    ECP_ZZZ R1;
 
     ECP_ZZZ_affine(P);
     ECP_ZZZ_inf(&R0);
     ECP_ZZZ_copy(&R1,P);
 
-    for (i=bts-1; i>=0; i--)
+    for (int i=bts-1; i>=0; i--)
     {
         b=(e>>i)&1;
         ECP_ZZZ_copy(P,&R1);
@@ -1018,12 +1052,14 @@
 
 /* Set P=r*P */
 /* SU=424 */
-void ECP_ZZZ_mul(ECP_ZZZ *P,BIG_XXX e)
+void ECP_ZZZ_mul(ECP_ZZZ *P,const BIG_XXX e)
 {
 #if CURVETYPE_ZZZ==MONTGOMERY
     /* Montgomery ladder */
-    int nb,i,b;
-    ECP_ZZZ R0,R1,D;
+    int b;
+    ECP_ZZZ R0;
+    ECP_ZZZ R1;
+    ECP_ZZZ D;
     if (ECP_ZZZ_isinf(P)) return;
     if (BIG_XXX_iszilch(e))
     {
@@ -1038,8 +1074,7 @@
     ECP_ZZZ_copy(&D,P);
     ECP_ZZZ_affine(&D);
 
-    nb=BIG_XXX_nbits(e);
-    for (i=nb-2; i>=0; i--)
+    for (int i=BIGBITS_XXX-2; i>=0; i--)
     {
         b=BIG_XXX_bit(e,i);
         ECP_ZZZ_copy(P,&R1);
@@ -1055,9 +1090,15 @@
 
 #else
     /* fixed size windows */
-    int i,nb,s,ns;
-    BIG_XXX mt,t;
-    ECP_ZZZ Q,W[8],C;
+    int i;
+    int nb;
+    int s;
+    int ns;
+    BIG_XXX mt;
+    BIG_XXX t;
+    ECP_ZZZ Q;
+    ECP_ZZZ W[8];
+    ECP_ZZZ C;
     sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
 
     if (ECP_ZZZ_isinf(P)) return;
@@ -1082,8 +1123,6 @@
         ECP_ZZZ_add(&W[i],&Q);
     }
 
-//printf("W[1]= ");ECP_output(&W[1]); printf("\n");
-
     /* make exponent odd - add 2P if even, P if odd */
     BIG_XXX_copy(t,e);
     s=BIG_XXX_parity(t);
@@ -1097,17 +1136,17 @@
     ECP_ZZZ_cmove(&Q,P,ns);
     ECP_ZZZ_copy(&C,&Q);
 
-    nb=1+(BIG_XXX_nbits(t)+3)/4;
+    nb=1+(BIGBITS_XXX+3)/4;
 
     /* convert exponent to signed 4-bit window */
     for (i=0; i<nb; i++)
     {
-        w[i]=BIG_XXX_lastbits(t,5)-16;
+        w[i]=(signed char)(BIG_XXX_lastbits(t,5)-16);
         BIG_XXX_dec(t,w[i]);
         BIG_XXX_norm(t);
         BIG_XXX_fshr(t,4);
     }
-    w[nb]=BIG_XXX_lastbits(t,5);
+    w[nb]=(signed char)BIG_XXX_lastbits(t,5);
 
     ECP_ZZZ_copy(P,&W[(w[nb]-1)/2]);
     for (i=nb-1; i>=0; i--)
@@ -1129,12 +1168,22 @@
 /* constant time - as useful for GLV method in pairings */
 /* SU=456 */
 
-void ECP_ZZZ_mul2(ECP_ZZZ *P,ECP_ZZZ *Q,BIG_XXX e,BIG_XXX f)
+void ECP_ZZZ_mul2(ECP_ZZZ *P,const ECP_ZZZ *Q,const BIG_XXX e,const BIG_XXX f)
 {
-    BIG_XXX te,tf,mt;
-    ECP_ZZZ S,T,W[8],C;
+    BIG_XXX te;
+    BIG_XXX tf;
+    BIG_XXX mt;
+    ECP_ZZZ S;
+    ECP_ZZZ T;
+    ECP_ZZZ W[8];
+    ECP_ZZZ C;
     sign8 w[1+(NLEN_XXX*BASEBITS_XXX+1)/2];
-    int i,a,b,s,ns,nb;
+    int i;
+    int a;
+    int b;
+    int s;
+    int ns;
+    int nb;
 
     BIG_XXX_copy(te,e);
     BIG_XXX_copy(tf,f);
@@ -1187,7 +1236,7 @@
 
     BIG_XXX_add(mt,te,tf);
     BIG_XXX_norm(mt);
-    nb=1+(BIG_XXX_nbits(mt)+1)/2;
+    nb=1+(BIGBITS_XXX+1)/2;
 
     /* convert exponent to signed 2-bit window */
     for (i=0; i<nb; i++)
@@ -1200,9 +1249,9 @@
         BIG_XXX_dec(tf,b);
         BIG_XXX_norm(tf);
         BIG_XXX_fshr(tf,2);
-        w[i]=4*a+b;
+        w[i]=(signed char)(4*a+b);
     }
-    w[nb]=(4*BIG_XXX_lastbits(te,3)+BIG_XXX_lastbits(tf,3));
+    w[nb]=(signed char)(4*BIG_XXX_lastbits(te,3)+BIG_XXX_lastbits(tf,3));
 
     ECP_ZZZ_copy(P,&W[(w[nb]-1)/2]);
     for (i=nb-1; i>=0; i--)
@@ -1220,7 +1269,8 @@
 
 void ECP_ZZZ_generator(ECP_ZZZ *G)
 {
-    BIG_XXX x,y;
+    BIG_XXX x;
+    BIG_XXX y;
     BIG_XXX_rcopy(x,CURVE_Gx_ZZZ);
 #if CURVETYPE_ZZZ!=MONTGOMERY
     BIG_XXX_rcopy(y,CURVE_Gy_ZZZ);
@@ -1230,60 +1280,85 @@
 #endif
 }
 
-#ifdef HAS_MAIN
 
-int main()
+#if (PAIRING_FRIENDLY_ZZZ == BLS && CURVE_SECURITY_ZZZ == 128)
+
+/**
+ * @brief Implemenst the sgn0 function as defined at
+ * https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-the-sgn0-function (§ 4.1)
+ * 
+ * @param a Finite field element
+ * 
+ * @return either 0 or 1 indicating the "sign" of a
+ */
+static inline int sgn0_fp(FP_YYY a)
 {
-    int i;
-    ECP_ZZZ G,P;
-    csprng RNG;
-    BIG_XXX r,s,x,y,b,m,w,q;
-    BIG_XXX_rcopy(x,CURVE_Gx);
-#if CURVETYPE_ZZZ!=MONTGOMERY
-    BIG_XXX_rcopy(y,CURVE_Gy);
-#endif
-    BIG_XXX_rcopy(m,Modulus_YYY);
-
-    printf("x= ");
-    BIG_XXX_output(x);
-    printf("\n");
-#if CURVETYPE_ZZZ!=MONTGOMERY
-    printf("y= ");
-    BIG_XXX_output(y);
-    printf("\n");
-#endif
-    RNG_seed(&RNG,3,"abc");
-
-#if CURVETYPE_ZZZ!=MONTGOMERY
-    ECP_ZZZ_set(&G,x,y);
-#else
-    ECP_ZZZ_set(&G,x);
-#endif
-    if (ECP_ZZZ_isinf(&G)) printf("Failed to set - point not on curve\n");
-    else printf("set success\n");
-
-    ECP_ZZZ_output(&G);
-
-    BIG_XXX_rcopy(r,CURVE_Order); //BIG_dec(r,7);
-    printf("r= ");
-    BIG_XXX_output(r);
-    printf("\n");
-
-    ECP_ZZZ_copy(&P,&G);
-
-    ECP_ZZZ_mul(&P,r);
-
-    ECP_ZZZ_output(&P);
-//exit(0);
-    BIG_XXX_randomnum(w,&RNG);
-    BIG_XXX_mod(w,r);
-
-    ECP_ZZZ_copy(&P,&G);
-    ECP_ZZZ_mul(&P,w);
-
-    ECP_ZZZ_output(&P);
-
-    return 0;
+    BIG_XXX b;
+    FP_YYY_redc(b, &a);
+    return BIG_XXX_parity(b);
 }
 
+int ECP_ZZZ_sswu(FP_YYY *x, FP_YYY *y, FP_YYY u)
+{
+    if (x == NULL || y == NULL)
+        return -1;
+
+    FP_YYY a;
+    FP_YYY b;
+    FP_YYY z;
+    FP_YYY gx;
+    FP_YYY tv1;
+    FP_YYY tmp;
+
+    FP_YYY_nres(&a, SSWU_A1_ZZZ);
+    FP_YYY_nres(&b, SSWU_B1_ZZZ);
+    FP_YYY_nres(&z, SSWU_Z1_ZZZ);
+    FP_YYY_one(&gx);
+
+    // tv1 = 1 / (Z^2 * u^4 + Z * u^2)
+    FP_YYY_sqr(&tmp, &u);
+    FP_YYY_mul(&tmp, &tmp, &z);
+    FP_YYY_sqr(&tv1, &tmp);
+    FP_YYY_add(&tv1, &tv1, &tmp);
+    FP_YYY_inv(&tv1, &tv1);
+
+    // x = (-B / A) * (1 + tv1)
+    FP_YYY_add(x, &tv1, &gx);
+    FP_YYY_mul(x, x, &b);
+    FP_YYY_neg(x, x);
+    FP_YYY_inv(&gx, &a);
+    FP_YYY_mul(x, x, &gx);
+
+    // if tv1 == 0, set x = B / (Z * A)
+    if (FP_YYY_iszilch(&tv1)) {
+        FP_YYY_mul(x, &b, &gx);
+        FP_YYY_inv(&gx, &z);
+        FP_YYY_mul(x, x, &gx);
+    }
+
+    // gx = x^3 + A * x + B
+    FP_YYY_sqr(&gx, x);
+    FP_YYY_add(&gx, &gx, &a);
+    FP_YYY_mul(&gx, &gx, x);
+    FP_YYY_add(&gx, &gx, &b);
+    // y = sqrt(gx)
+    FP_YYY_sqrt(y, &gx);
+    // tv1 = y^2
+    FP_YYY_sqr(&tv1, y);
+
+    // If !(is_square(gx)), set x = Z * u^2 * x1 and y = sqrt(x2^3 + A * x2 + B)
+    if (!FP_YYY_equals(&gx, &tv1)) {
+        FP_YYY_mul(x, x, &tmp);
+        FP_YYY_sqr(&gx, x);
+        FP_YYY_add(&gx, &gx, &a);
+        FP_YYY_mul(&gx, &gx, x);
+        FP_YYY_add(&gx, &gx, &b);
+        FP_YYY_sqrt(y, &gx);
+    }
+
+    if (sgn0_fp(*y) != sgn0_fp(u))
+        FP_YYY_neg(y, y);
+
+    return SUCCESS;
+}
 #endif
diff --git a/src/ecp2.c.in b/src/ecp2.c.in
index 6061d98..586c1fb 100644
--- a/src/ecp2.c.in
+++ b/src/ecp2.c.in
@@ -22,14 +22,14 @@
 
 #include "ecp2_ZZZ.h"
 
-int ECP2_ZZZ_isinf(ECP2_ZZZ *P)
+int ECP2_ZZZ_isinf(const ECP2_ZZZ *P)
 {
     return (FP2_YYY_iszilch(&(P->x)) & FP2_YYY_iszilch(&(P->z)));
 }
 
 /* Set P=Q */
 /* SU= 16 */
-void ECP2_ZZZ_copy(ECP2_ZZZ *P,ECP2_ZZZ *Q)
+void ECP2_ZZZ_copy(ECP2_ZZZ *P,const ECP2_ZZZ *Q)
 {
     FP2_YYY_copy(&(P->x),&(Q->x));
     FP2_YYY_copy(&(P->y),&(Q->y));
@@ -46,7 +46,7 @@
 }
 
 /* Conditional move Q to P dependant on d */
-static void ECP2_ZZZ_cmove(ECP2_ZZZ *P,ECP2_ZZZ *Q,int d)
+static void ECP2_ZZZ_cmove(ECP2_ZZZ *P,const ECP2_ZZZ *Q,int d)
 {
     FP2_YYY_cmove(&(P->x),&(Q->x),d);
     FP2_YYY_cmove(&(P->y),&(Q->y),d);
@@ -58,11 +58,11 @@
 {
     sign32 x=b^c;
     x-=1;  // if x=0, x now -1
-    return (int)((x>>31)&1);
+    return (x>>31)&1;
 }
 
 /* Constant time select from pre-computed table */
-static void ECP2_ZZZ_select(ECP2_ZZZ *P,ECP2_ZZZ W[],sign32 b)
+static void ECP2_ZZZ_select(ECP2_ZZZ *P,const ECP2_ZZZ W[],sign32 b)
 {
     ECP2_ZZZ MP;
     sign32 m=b>>31;
@@ -81,14 +81,15 @@
 
     ECP2_ZZZ_copy(&MP,P);
     ECP2_ZZZ_neg(&MP);  // minus P
-    ECP2_ZZZ_cmove(P,&MP,(int)(m&1));
+    ECP2_ZZZ_cmove(P,&MP,m&1);
 }
 
 /* return 1 if P==Q, else 0 */
 /* SU= 312 */
 int ECP2_ZZZ_equals(ECP2_ZZZ *P,ECP2_ZZZ *Q)
 {
-    FP2_YYY a,b;
+    FP2_YYY a;
+    FP2_YYY b;
 
     FP2_YYY_mul(&a,&(P->x),&(Q->z));
     FP2_YYY_mul(&b,&(Q->x),&(P->z));
@@ -104,7 +105,8 @@
 /* SU= 232 */
 void ECP2_ZZZ_affine(ECP2_ZZZ *P)
 {
-    FP2_YYY one,iz;
+    FP2_YYY one;
+    FP2_YYY iz;
     if (ECP2_ZZZ_isinf(P)) return;
 
     FP2_YYY_one(&one);
@@ -126,7 +128,7 @@
 
 /* extract x, y from point P */
 /* SU= 16 */
-int ECP2_ZZZ_get(FP2_YYY *x,FP2_YYY *y,ECP2_ZZZ *P)
+int ECP2_ZZZ_get(FP2_YYY *x,FP2_YYY *y,const ECP2_ZZZ *P)
 {
     ECP2_ZZZ W;
     ECP2_ZZZ_copy(&W,P);
@@ -139,9 +141,10 @@
 
 /* SU= 152 */
 /* Output point P */
-void ECP2_ZZZ_output(ECP2_ZZZ *P)
+void ECP2_ZZZ_output(const ECP2_ZZZ *P)
 {
-    FP2_YYY x,y;
+    FP2_YYY x;
+    FP2_YYY y;
     if (ECP2_ZZZ_isinf(P))
     {
         printf("Infinity\n");
@@ -156,7 +159,7 @@
 }
 
 /* SU= 232 */
-void ECP2_ZZZ_outputxyz(ECP2_ZZZ *P)
+void ECP2_ZZZ_outputxyz(const ECP2_ZZZ *P)
 {
     ECP2_ZZZ Q;
     if (ECP2_ZZZ_isinf(P))
@@ -176,10 +179,11 @@
 
 /* SU= 168 */
 /* Convert Q to octet string */
-void ECP2_ZZZ_toOctet(octet *W,ECP2_ZZZ *Q)
+void ECP2_ZZZ_toOctet(octet *W,const ECP2_ZZZ *Q)
 {
     BIG_XXX b;
-    FP2_YYY qx,qy;
+    FP2_YYY qx;
+    FP2_YYY qy;
     ECP2_ZZZ_get(&qx,&qy,Q);
 
     FP_YYY_redc(b,&(qx.a));
@@ -197,10 +201,11 @@
 
 /* SU= 176 */
 /* restore Q from octet string */
-int ECP2_ZZZ_fromOctet(ECP2_ZZZ *Q,octet *W)
+int ECP2_ZZZ_fromOctet(ECP2_ZZZ *Q,const octet *W)
 {
     BIG_XXX b;
-    FP2_YYY qx,qy;
+    FP2_YYY qx;
+    FP2_YYY qy;
     BIG_XXX_fromBytes(b,&(W->val[0]));
     FP_YYY_nres(&(qx.a),b);
     BIG_XXX_fromBytes(b,&(W->val[MODBYTES_XXX]));
@@ -216,7 +221,7 @@
 
 /* SU= 128 */
 /* Calculate RHS of twisted curve equation x^3+B/i or x^3+Bi*/
-void ECP2_ZZZ_rhs(FP2_YYY *rhs,FP2_YYY *x)
+void ECP2_ZZZ_rhs(FP2_YYY *rhs,const FP2_YYY *x)
 {
     /* calculate RHS of elliptic curve equation */
     FP2_YYY t;
@@ -247,12 +252,11 @@
     FP2_YYY_reduce(rhs);
 }
 
-
-/* Set P=(x,y). Return 1 if (x,y) is on the curve, else return 0*/
 /* SU= 232 */
-int ECP2_ZZZ_set(ECP2_ZZZ *P,FP2_YYY *x,FP2_YYY *y)
+int ECP2_ZZZ_set(ECP2_ZZZ *P,const FP2_YYY *x,const FP2_YYY *y)
 {
-    FP2_YYY rhs,y2;
+    FP2_YYY rhs;
+    FP2_YYY y2;
 
     FP2_YYY_sqr(&y2,y);
     ECP2_ZZZ_rhs(&rhs,x);
@@ -269,10 +273,9 @@
     FP2_YYY_one(&(P->z));
     return 1;
 }
-
-/* Set P=(x,y). Return 1 if (x,.) is on the curve, else return 0 */
+/* `Set P=(x,y). Return 1 if (x,.) is on the curve, else return 0` */
 /* SU= 232 */
-int ECP2_ZZZ_setx(ECP2_ZZZ *P,FP2_YYY *x)
+int ECP2_ZZZ_setx(ECP2_ZZZ *P,const FP2_YYY *x)
 {
     FP2_YYY y;
     ECP2_ZZZ_rhs(&y,x);
@@ -303,146 +306,158 @@
 /* SU= 448 */
 int ECP2_ZZZ_dbl(ECP2_ZZZ *P)
 {
-    FP2_YYY t0,t1,t2,iy,x3,y3;
+    FP2_YYY t0;
+    FP2_YYY t1;
+    FP2_YYY t2;
+    FP2_YYY iy;
+    FP2_YYY x3;
+    FP2_YYY y3;
 
-    FP2_YYY_copy(&iy,&(P->y));		//FP2 iy=new FP2(y);
+    FP2_YYY_copy(&iy,&(P->y));		                //FP2 iy=new FP2(y)
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-    FP2_YYY_mul_ip(&iy);			//iy.mul_ip();
-    FP2_YYY_norm(&iy);				//iy.norm();
+    FP2_YYY_mul_ip(&iy);			                //iy.mul_ip()
+    FP2_YYY_norm(&iy);				                //iy.norm()
 #endif
-    FP2_YYY_sqr(&t0,&(P->y));			//t0.sqr();
+    FP2_YYY_sqr(&t0,&(P->y));			            //t0.sqr()
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-    FP2_YYY_mul_ip(&t0);			//t0.mul_ip();
+    FP2_YYY_mul_ip(&t0);			                //t0.mul_ip()
 #endif
-    FP2_YYY_mul(&t1,&iy,&(P->z));	//t1.mul(z);
-    FP2_YYY_sqr(&t2,&(P->z));				//t2.sqr();
+    FP2_YYY_mul(&t1,&iy,&(P->z));	                //t1.mul(z)
+    FP2_YYY_sqr(&t2,&(P->z));			        	//t2.sqr()
 
-    FP2_YYY_add(&(P->z),&t0,&t0);	//z.add(t0);
-    FP2_YYY_norm(&(P->z));				//z.norm();
-    FP2_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
-    FP2_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
-    FP2_YYY_norm(&(P->z));			//z.norm();
+    FP2_YYY_add(&(P->z),&t0,&t0);	                //z.add(t0)
+    FP2_YYY_norm(&(P->z));				            //z.norm()
+    FP2_YYY_add(&(P->z),&(P->z),&(P->z));	        //z.add(z)
+    FP2_YYY_add(&(P->z),&(P->z),&(P->z));	        //z.add(z)
+    FP2_YYY_norm(&(P->z));			                //z.norm()
 
-    FP2_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);	//t2.imul(3*ROM.CURVE_B_I);
+    FP2_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);	        //t2.imul(3*ROM.CURVE_B_I)
 #if SEXTIC_TWIST_ZZZ==M_TYPE
     FP2_YYY_mul_ip(&t2);
     FP2_YYY_norm(&t2);
 #endif
 
-    FP2_YYY_mul(&x3,&t2,&(P->z));	//x3.mul(z);
+    FP2_YYY_mul(&x3,&t2,&(P->z));	                //x3.mul(z)
 
-    FP2_YYY_add(&y3,&t0,&t2);		//y3.add(t2);
-    FP2_YYY_norm(&y3);				//y3.norm();
-    FP2_YYY_mul(&(P->z),&(P->z),&t1);	//z.mul(t1);
+    FP2_YYY_add(&y3,&t0,&t2);		                //y3.add(t2)
+    FP2_YYY_norm(&y3);				                //y3.norm()
+    FP2_YYY_mul(&(P->z),&(P->z),&t1);	            //z.mul(t1)
 
-    FP2_YYY_add(&t1,&t2,&t2);		//t1.add(t2);
-    FP2_YYY_add(&t2,&t2,&t1);		//t2.add(t1);
-    FP2_YYY_norm(&t2);				//t2.norm();
-    FP2_YYY_sub(&t0,&t0,&t2);		//t0.sub(t2);
-    FP2_YYY_norm(&t0);				//t0.norm();                           //y^2-9bz^2
-    FP2_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0);
-    FP2_YYY_add(&(P->y),&y3,&x3);		//y3.add(x3);                          //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
-    FP2_YYY_mul(&t1,&(P->x),&iy);		//t1.mul(iy);						//
-    FP2_YYY_norm(&t0);			//x.norm();
-    FP2_YYY_mul(&(P->x),&t0,&t1);	//x.mul(t1);
-    FP2_YYY_add(&(P->x),&(P->x),&(P->x));	//x.add(x);       //(y^2-9bz^2)xy2
+    FP2_YYY_add(&t1,&t2,&t2);	                	//t1.add(t2)
+    FP2_YYY_add(&t2,&t2,&t1);	                	//t2.add(t1)
+    FP2_YYY_norm(&t2);			                	//t2.norm()
+    FP2_YYY_sub(&t0,&t0,&t2);		                //t0.sub(t2)
+    FP2_YYY_norm(&t0);				                //t0.norm()         //y^2-9bz^2
+    FP2_YYY_mul(&y3,&y3,&t0);		                //y3.mul(t0)
+    FP2_YYY_add(&(P->y),&y3,&x3);		            //y3.add(x3)        //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
+    FP2_YYY_mul(&t1,&(P->x),&iy);		            //t1.mul(iy)
+    FP2_YYY_norm(&t0);			                    //x.norm()
+    FP2_YYY_mul(&(P->x),&t0,&t1);	                //x.mul(t1)
+    FP2_YYY_add(&(P->x),&(P->x),&(P->x));	        //x.add(x)          //(y^2-9bz^2)xy2
 
-    FP2_YYY_norm(&(P->x));			//x.norm();
-    FP2_YYY_norm(&(P->y));			//y.norm();
+    FP2_YYY_norm(&(P->x));			                //x.norm()
+    FP2_YYY_norm(&(P->y));			                //y.norm()
 
     return 1;
 }
 
 /* Set P+=Q */
 /* SU= 400 */
-int ECP2_ZZZ_add(ECP2_ZZZ *P,ECP2_ZZZ *Q)
+int ECP2_ZZZ_add(ECP2_ZZZ *P,const ECP2_ZZZ *Q)
 {
-    FP2_YYY t0,t1,t2,t3,t4,x3,y3,z3;
+    FP2_YYY t0;
+    FP2_YYY t1;
+    FP2_YYY t2;
+    FP2_YYY t3;
+    FP2_YYY t4;
+    FP2_YYY x3;
+    FP2_YYY y3;
+    FP2_YYY z3;
     int b3=3*CURVE_B_I_ZZZ;
 
-    FP2_YYY_mul(&t0,&(P->x),&(Q->x));	//t0.mul(Q.x);         // x.Q.x
-    FP2_YYY_mul(&t1,&(P->y),&(Q->y));	//t1.mul(Q.y);		 // y.Q.y
+    FP2_YYY_mul(&t0,&(P->x),&(Q->x));	            //t0.mul(Q.x)       // x.Q.x
+    FP2_YYY_mul(&t1,&(P->y),&(Q->y));	            //t1.mul(Q.y)		// y.Q.y
 
-    FP2_YYY_mul(&t2,&(P->z),&(Q->z));	//t2.mul(Q.z);
-    FP2_YYY_add(&t3,&(P->x),&(P->y));	//t3.add(y);
-    FP2_YYY_norm(&t3);				//t3.norm();          //t3=X1+Y1
+    FP2_YYY_mul(&t2,&(P->z),&(Q->z));	            //t2.mul(Q.z)
+    FP2_YYY_add(&t3,&(P->x),&(P->y));	            //t3.add(y)
+    FP2_YYY_norm(&t3);				                //t3.norm()         //t3=X1+Y1
 
-    FP2_YYY_add(&t4,&(Q->x),&(Q->y));	//t4.add(Q.y);
-    FP2_YYY_norm(&t4);				//t4.norm();			//t4=X2+Y2
-    FP2_YYY_mul(&t3,&t3,&t4);		//t3.mul(t4);						//t3=(X1+Y1)(X2+Y2)
-    FP2_YYY_add(&t4,&t0,&t1);		//t4.add(t1);		//t4=X1.X2+Y1.Y2
+    FP2_YYY_add(&t4,&(Q->x),&(Q->y));	            //t4.add(Q.y)
+    FP2_YYY_norm(&t4);				                //t4.norm()			//t4=X2+Y2
+    FP2_YYY_mul(&t3,&t3,&t4);		                //t3.mul(t4)	    //t3=(X1+Y1)(X2+Y2)
+    FP2_YYY_add(&t4,&t0,&t1);		                //t4.add(t1)		//t4=X1.X2+Y1.Y2
 
-    FP2_YYY_sub(&t3,&t3,&t4);		//t3.sub(t4);
-    FP2_YYY_norm(&t3);				//t3.norm();
+    FP2_YYY_sub(&t3,&t3,&t4);		                //t3.sub(t4)
+    FP2_YYY_norm(&t3);				                //t3.norm()
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-    FP2_YYY_mul_ip(&t3);			//t3.mul_ip();
-    FP2_YYY_norm(&t3);				//t3.norm();         //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
+    FP2_YYY_mul_ip(&t3);			                //t3.mul_ip()
+    FP2_YYY_norm(&t3);				                //t3.norm()         //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
 #endif
-    FP2_YYY_add(&t4,&(P->y),&(P->z));	//t4.add(z);
-    FP2_YYY_norm(&t4);				//t4.norm();			//t4=Y1+Z1
-    FP2_YYY_add(&x3,&(Q->y),&(Q->z));	//x3.add(Q.z);
-    FP2_YYY_norm(&x3);				//x3.norm();			//x3=Y2+Z2
+    FP2_YYY_add(&t4,&(P->y),&(P->z));	            //t4.add(z)
+    FP2_YYY_norm(&t4);				                //t4.norm()			//t4=Y1+Z1
+    FP2_YYY_add(&x3,&(Q->y),&(Q->z));	            //x3.add(Q.z)
+    FP2_YYY_norm(&x3);				                //x3.norm()			//x3=Y2+Z2
 
-    FP2_YYY_mul(&t4,&t4,&x3);		//t4.mul(x3);						//t4=(Y1+Z1)(Y2+Z2)
-    FP2_YYY_add(&x3,&t1,&t2);		//x3.add(t2);						//X3=Y1.Y2+Z1.Z2
+    FP2_YYY_mul(&t4,&t4,&x3);		                //t4.mul(x3)		//t4=(Y1+Z1)(Y2+Z2)
+    FP2_YYY_add(&x3,&t1,&t2);		                //x3.add(t2)		//X3=Y1.Y2+Z1.Z2
 
-    FP2_YYY_sub(&t4,&t4,&x3);		//t4.sub(x3);
-    FP2_YYY_norm(&t4);				//t4.norm();
+    FP2_YYY_sub(&t4,&t4,&x3);		                //t4.sub(x3)
+    FP2_YYY_norm(&t4);				                //t4.norm()
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-    FP2_YYY_mul_ip(&t4);			//t4.mul_ip();
-    FP2_YYY_norm(&t4);				//t4.norm();          //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
+    FP2_YYY_mul_ip(&t4);		                	//t4.mul_ip()
+    FP2_YYY_norm(&t4);			                	//t4.norm()         //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
 #endif
-    FP2_YYY_add(&x3,&(P->x),&(P->z));	//x3.add(z);
-    FP2_YYY_norm(&x3);				//x3.norm();	// x3=X1+Z1
-    FP2_YYY_add(&y3,&(Q->x),&(Q->z));	//y3.add(Q.z);
-    FP2_YYY_norm(&y3);				//y3.norm();				// y3=X2+Z2
-    FP2_YYY_mul(&x3,&x3,&y3);		//x3.mul(y3);							// x3=(X1+Z1)(X2+Z2)
-    FP2_YYY_add(&y3,&t0,&t2);		//y3.add(t2);							// y3=X1.X2+Z1+Z2
-    FP2_YYY_sub(&y3,&x3,&y3);		//y3.rsub(x3);
-    FP2_YYY_norm(&y3);				//y3.norm();				// y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
+    FP2_YYY_add(&x3,&(P->x),&(P->z));	            //x3.add(z)
+    FP2_YYY_norm(&x3);				                //x3.norm()	        // x3=X1+Z1
+    FP2_YYY_add(&y3,&(Q->x),&(Q->z));	            //y3.add(Q.z)
+    FP2_YYY_norm(&y3);				                //y3.norm()			// y3=X2+Z2
+    FP2_YYY_mul(&x3,&x3,&y3);		                //x3.mul(y3)		// x3=(X1+Z1)(X2+Z2)
+    FP2_YYY_add(&y3,&t0,&t2);		                //y3.add(t2)		// y3=X1.X2+Z1+Z2
+    FP2_YYY_sub(&y3,&x3,&y3);		                //y3.rsub(x3)
+    FP2_YYY_norm(&y3);			                	//y3.norm()			// y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-    FP2_YYY_mul_ip(&t0);			//t0.mul_ip();
-    FP2_YYY_norm(&t0);				//t0.norm(); // x.Q.x
-    FP2_YYY_mul_ip(&t1);			//t1.mul_ip();
-    FP2_YYY_norm(&t1);				//t1.norm(); // y.Q.y
+    FP2_YYY_mul_ip(&t0);		                   	//t0.mul_ip()
+    FP2_YYY_norm(&t0);		                		//t0.norm()         // x.Q.x
+    FP2_YYY_mul_ip(&t1);		                	//t1.mul_ip()
+    FP2_YYY_norm(&t1);			                	//t1.norm()         // y.Q.y
 #endif
-    FP2_YYY_add(&x3,&t0,&t0);		//x3.add(t0);
-    FP2_YYY_add(&t0,&t0,&x3);		//t0.add(x3);
-    FP2_YYY_norm(&t0);				//t0.norm();
-    FP2_YYY_imul(&t2,&t2,b3);		//t2.imul(b);
+    FP2_YYY_add(&x3,&t0,&t0);	                	//x3.add(t0)
+    FP2_YYY_add(&t0,&t0,&x3);	                	//t0.add(x3)
+    FP2_YYY_norm(&t0);			                	//t0.norm()
+    FP2_YYY_imul(&t2,&t2,b3);		                //t2.imul(b)
 #if SEXTIC_TWIST_ZZZ==M_TYPE
     FP2_YYY_mul_ip(&t2);
     FP2_YYY_norm(&t2);
 #endif
-    FP2_YYY_add(&z3,&t1,&t2);		//z3.add(t2);
-    FP2_YYY_norm(&z3);				//z3.norm();
-    FP2_YYY_sub(&t1,&t1,&t2);		//t1.sub(t2);
-    FP2_YYY_norm(&t1);				//t1.norm();
-    FP2_YYY_imul(&y3,&y3,b3);		//y3.imul(b);
+    FP2_YYY_add(&z3,&t1,&t2);		                //z3.add(t2)
+    FP2_YYY_norm(&z3);			                	//z3.norm()
+    FP2_YYY_sub(&t1,&t1,&t2);	                	//t1.sub(t2)
+    FP2_YYY_norm(&t1);			                	//t1.norm()
+    FP2_YYY_imul(&y3,&y3,b3);		                //y3.imul(b)
 #if SEXTIC_TWIST_ZZZ==M_TYPE
     FP2_YYY_mul_ip(&y3);
     FP2_YYY_norm(&y3);
 #endif
-    FP2_YYY_mul(&x3,&y3,&t4);		//x3.mul(t4);
-    FP2_YYY_mul(&t2,&t3,&t1);		//t2.mul(t1);
-    FP2_YYY_sub(&(P->x),&t2,&x3);		//x3.rsub(t2);
-    FP2_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0);
-    FP2_YYY_mul(&t1,&t1,&z3);		//t1.mul(z3);
-    FP2_YYY_add(&(P->y),&y3,&t1);		//y3.add(t1);
-    FP2_YYY_mul(&t0,&t0,&t3);		//t0.mul(t3);
-    FP2_YYY_mul(&z3,&z3,&t4);		//z3.mul(t4);
-    FP2_YYY_add(&(P->z),&z3,&t0);		//z3.add(t0);
+    FP2_YYY_mul(&x3,&y3,&t4);		                //x3.mul(t4)
+    FP2_YYY_mul(&t2,&t3,&t1);		                //t2.mul(t1)
+    FP2_YYY_sub(&(P->x),&t2,&x3);	            	//x3.rsub(t2)
+    FP2_YYY_mul(&y3,&y3,&t0);		                //y3.mul(t0)
+    FP2_YYY_mul(&t1,&t1,&z3);		                //t1.mul(z3)
+    FP2_YYY_add(&(P->y),&y3,&t1);	               	//y3.add(t1)
+    FP2_YYY_mul(&t0,&t0,&t3);		                //t0.mul(t3)
+    FP2_YYY_mul(&z3,&z3,&t4);		                //z3.mul(t4)
+    FP2_YYY_add(&(P->z),&z3,&t0);	            	//z3.add(t0)
 
-    FP2_YYY_norm(&(P->x));			//x.norm();
-    FP2_YYY_norm(&(P->y));			//y.norm();
-    FP2_YYY_norm(&(P->z));			//z.norm();
+    FP2_YYY_norm(&(P->x));			                //x.norm()
+    FP2_YYY_norm(&(P->y));			                //y.norm()
+    FP2_YYY_norm(&(P->z));			                //z.norm()
 
     return 0;
 }
 
 /* Set P-=Q */
 /* SU= 16 */
-void ECP2_ZZZ_sub(ECP2_ZZZ *P,ECP2_ZZZ *Q)
+void ECP2_ZZZ_sub(ECP2_ZZZ *P,const ECP2_ZZZ *Q)
 {
     ECP2_ZZZ NQ;
     ECP2_ZZZ_copy(&NQ,Q);
@@ -452,12 +467,18 @@
 
 /* P*=e */
 /* SU= 280 */
-void ECP2_ZZZ_mul(ECP2_ZZZ *P,BIG_XXX e)
+void ECP2_ZZZ_mul(ECP2_ZZZ *P,const BIG_XXX e)
 {
     /* fixed size windows */
-    int i,nb,s,ns;
-    BIG_XXX mt,t;
-    ECP2_ZZZ Q,W[8],C;
+    int i;
+    int nb;
+    int s;
+    int ns;
+    BIG_XXX mt;
+    BIG_XXX t;
+    ECP2_ZZZ Q;
+    ECP2_ZZZ W[8];
+    ECP2_ZZZ C;
     sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
 
     if (ECP2_ZZZ_isinf(P)) return;
@@ -487,17 +508,17 @@
     ECP2_ZZZ_cmove(&Q,P,ns);
     ECP2_ZZZ_copy(&C,&Q);
 
-    nb=1+(BIG_XXX_nbits(t)+3)/4;
+    nb=1+(BIGBITS_XXX+3)/4;
 
     /* convert exponent to signed 4-bit window */
     for (i=0; i<nb; i++)
     {
-        w[i]=BIG_XXX_lastbits(t,5)-16;
+        w[i]=(signed char)(BIG_XXX_lastbits(t,5)-16);
         BIG_XXX_dec(t,w[i]);
         BIG_XXX_norm(t);
         BIG_XXX_fshr(t,4);
     }
-    w[nb]=BIG_XXX_lastbits(t,5);
+    w[nb]=(signed char)BIG_XXX_lastbits(t,5);
 
     ECP2_ZZZ_copy(P,&W[(w[nb]-1)/2]);
     for (i=nb-1; i>=0; i--)
@@ -536,12 +557,18 @@
 // Faz-Hernandez & Longa & Sanchez  https://eprint.iacr.org/2013/158.pdf
 // Side channel attack secure
 
-void ECP2_ZZZ_mul4(ECP2_ZZZ *P,ECP2_ZZZ Q[4],BIG_XXX u[4])
+void ECP2_ZZZ_mul4(ECP2_ZZZ *P,const ECP2_ZZZ Q[4],const BIG_XXX u[4])
 {
-    int i,j,k,nb,pb,bt;
-    ECP2_ZZZ T[8],W;
-    BIG_XXX t[4],mt;
-    sign8 w[NLEN_XXX*BASEBITS_XXX+1];
+    int i;
+    int k;
+    int nb;
+    int pb;
+    int bt;
+    ECP2_ZZZ T[8];
+    ECP2_ZZZ W;
+    BIG_XXX t[4];
+    BIG_XXX mt;
+    sign8 w[NLEN_XXX*BASEBITS_XXX+1] = {0};
     sign8 s[NLEN_XXX*BASEBITS_XXX+1];
 
     for (i=0; i<4; i++)
@@ -577,22 +604,21 @@
     {
         BIG_XXX_or(mt,mt,t[i]);
     }
-    nb=1+BIG_XXX_nbits(mt);
+    nb=1+BIGBITS_XXX;
 
 // Sign pivot
     s[nb-1]=1;
     for (i=0; i<nb-1; i++)
     {
         BIG_XXX_fshr(t[0],1);
-        s[i]=2*BIG_XXX_parity(t[0])-1;
+        s[i]=(signed char)(2*BIG_XXX_parity(t[0])-1);
     }
 
 // Recoded exponent
     for (i=0; i<nb; i++)
     {
-        w[i]=0;
         k=1;
-        for (j=1; j<4; j++)
+        for (int j=1; j<4; j++)
         {
             bt=s[i]*BIG_XXX_parity(t[j]);
             BIG_XXX_fshr(t[j],1);
@@ -619,17 +645,28 @@
     ECP2_ZZZ_cmove(P,&W,pb);
 
     ECP2_ZZZ_affine(P);
+
+    // zeroization
+    for (i=0; i<4; i++)
+        BIG_XXX_zero(t[i]);
 }
 
 /* Map to hash value to point on G2 from random BIG */
-void ECP2_ZZZ_mapit(ECP2_ZZZ *Q,octet *W)
+void ECP2_ZZZ_mapit(ECP2_ZZZ *Q,const octet *W)
 {
-    BIG_XXX q,one,Fx,Fy,x,hv;
+    BIG_XXX q;
+    BIG_XXX one;
+    BIG_XXX Fx;
+    BIG_XXX Fy;
+    BIG_XXX x;
+    BIG_XXX hv;
     FP2_YYY X;
 #if (PAIRING_FRIENDLY_ZZZ == BN)
-    ECP2_ZZZ T,K;
+    ECP2_ZZZ T;
+    ECP2_ZZZ K;
 #elif (PAIRING_FRIENDLY_ZZZ == BLS)
-    ECP2_ZZZ xQ, x2Q;
+    ECP2_ZZZ xQ;
+    ECP2_ZZZ x2Q;
 #endif
     BIG_XXX_fromBytes(hv,W->val);
     BIG_XXX_rcopy(q,Modulus_ZZZ);
@@ -714,7 +751,8 @@
 
 void ECP2_ZZZ_generator(ECP2_ZZZ *G)
 {
-    FP2_YYY wx,wy;
+    FP2_YYY wx;
+    FP2_YYY wy;
 
     FP_YYY_rcopy(&(wx.a),CURVE_Pxa_ZZZ);
     FP_YYY_rcopy(&(wx.b),CURVE_Pxb_ZZZ);
@@ -723,3 +761,131 @@
 
     ECP2_ZZZ_set(G,&wx,&wy);
 }
+
+
+// The following functions are specific for hashing to curve on BLS12-381
+#if (PAIRING_FRIENDLY_ZZZ == BLS && CURVE_SECURITY_ZZZ == 128)
+
+static int sgn0_fp2(const FP2_YYY y)
+{
+    int sign_0;
+    int sign_1;
+    int zero_0;
+
+    BIG_XXX x_0;
+    BIG_XXX x_1;
+
+    FP_YYY_redc(x_0, &(y.a));
+    FP_YYY_redc(x_1, &(y.b));
+
+    sign_0 = BIG_XXX_parity(x_0);
+    sign_1 = BIG_XXX_parity(x_1);
+    zero_0 = 0 - BIG_XXX_iszilch(x_0);
+
+    return (sign_0 | (zero_0 & sign_1));
+}
+
+int ECP2_ZZZ_sswu(FP2_YYY *x, FP2_YYY *y, FP2_YYY u)
+{
+    if (x == NULL || y == NULL)
+        return -1;
+
+    FP2_YYY a;
+    FP2_YYY b;
+    FP2_YYY z;
+    FP2_YYY gx;
+    FP2_YYY tv1;
+    FP2_YYY tmp;
+
+    FP2_YYY_from_BIGs(&a, SSWU_A2re_ZZZ, SSWU_A2im_ZZZ);
+    FP2_YYY_from_BIGs(&b, SSWU_B2re_ZZZ, SSWU_B2im_ZZZ);
+    FP2_YYY_from_BIGs(&z, SSWU_Z2re_ZZZ, SSWU_Z2im_ZZZ);
+    FP2_YYY_one(&gx);
+
+    // tv1 = 1 / (Z^2 * u^4 + Z * u^2)
+    FP2_YYY_sqr(&tmp, &u);
+    FP2_YYY_mul(&tmp, &tmp, &z);
+    FP2_YYY_sqr(&tv1, &tmp);
+    FP2_YYY_add(&tv1, &tv1, &tmp);
+    FP2_YYY_inv(&tv1, &tv1);
+
+    // x = (-B / A) * (1 + tv1)
+    FP2_YYY_add(x, &tv1, &gx);
+    FP2_YYY_mul(x, x, &b);
+    FP2_YYY_neg(x, x);
+    FP2_YYY_inv(&gx, &a);
+    FP2_YYY_mul(x, x, &gx);
+
+    // if tv1 == 0, set x = B / (Z * A)
+    if (FP2_YYY_iszilch(&tv1)) {
+        FP2_YYY_mul(x, &b, &gx);
+        FP2_YYY_inv(&gx, &z);
+        FP2_YYY_mul(x, x, &gx);
+    }
+
+    // gx = x^3 + A * x + B
+    FP2_YYY_sqr(&gx, x);
+    FP2_YYY_add(&gx, &gx, &a);
+    FP2_YYY_mul(&gx, &gx, x);
+    FP2_YYY_add(&gx, &gx, &b);
+    // y = sqrt(gx)
+    FP2_YYY_sqrt(y, &gx);
+    // tv1 = y^2
+    FP2_YYY_sqr(&tv1, y);
+
+    // If !(is_square(gx)), set x = Z * u^2 * x1 and y = sqrt(x2^3 + A * x2 + B)
+    if (!FP2_YYY_equals(&gx, &tv1)) {
+        FP2_YYY_mul(x, x, &tmp);
+        FP2_YYY_sqr(&gx, x);
+        FP2_YYY_add(&gx, &gx, &a);
+        FP2_YYY_mul(&gx, &gx, x);
+        FP2_YYY_add(&gx, &gx, &b);
+        FP2_YYY_sqrt(y, &gx);
+    }
+
+    if (sgn0_fp2(*y) != sgn0_fp2(u))
+        FP2_YYY_neg(y, y);
+
+    return SUCCESS;
+}
+
+// Fast cofactor clearing as defined in https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-cofactor-clearing-for-bls12
+int ECP2_ZZZ_clearcofactor(ECP2_ZZZ *Q)
+{
+    if (Q == NULL)
+        return -1;
+
+    ECP2_ZZZ xQ;
+    ECP2_ZZZ x2Q;
+    FP2_YYY X;
+    FP2_YYY_from_BIGs(&X, Fra_BLS381, Frb_BLS381);
+
+#if SEXTIC_TWIST_ZZZ==M_TYPE
+    FP2_YYY_inv(&X,&X);
+    FP2_YYY_norm(&X);
+#endif
+
+    ECP2_ZZZ_copy(&xQ, Q);
+    ECP2_ZZZ_mul(&xQ, CURVE_Bnx_ZZZ);
+    ECP2_ZZZ_copy(&x2Q, &xQ);
+    ECP2_ZZZ_mul(&x2Q, CURVE_Bnx_ZZZ);
+
+#if SIGN_OF_X_ZZZ == NEGATIVEX
+    ECP2_ZZZ_neg(&xQ);
+#endif
+
+    ECP2_ZZZ_sub(&x2Q, &xQ);
+    ECP2_ZZZ_sub(&x2Q, Q);
+    ECP2_ZZZ_sub(&xQ, Q);
+    ECP2_ZZZ_frob(&xQ, &X);
+    ECP2_ZZZ_dbl(Q);
+    ECP2_ZZZ_frob(Q, &X);
+    ECP2_ZZZ_frob(Q, &X);
+    ECP2_ZZZ_add(Q, &xQ);
+    ECP2_ZZZ_add(Q, &x2Q);
+    ECP2_ZZZ_affine(Q);
+
+    return SUCCESS;
+}
+
+#endif
diff --git a/src/ecp4.c.in b/src/ecp4.c.in
index 3a35199..12186d9 100644
--- a/src/ecp4.c.in
+++ b/src/ecp4.c.in
@@ -509,7 +509,7 @@
     ECP4_ZZZ_cmove(&Q,P,ns);
     ECP4_ZZZ_copy(&C,&Q);
 
-    nb=1+(BIG_XXX_nbits(t)+3)/4;
+    nb=1+(BIGBITS_XXX+3)/4;
 
     /* convert exponent to signed 4-bit window */
     for (i=0; i<nb; i++)
@@ -655,7 +655,7 @@
     {
         BIG_XXX_or(mt,mt,t[i]);
     }
-    nb=1+BIG_XXX_nbits(mt);
+    nb=1+BIGBITS_XXX;
 
 // Sign pivot
     s1[nb-1]=1;
diff --git a/src/ecp8.c.in b/src/ecp8.c.in
index 2cca877..1b4e43d 100644
--- a/src/ecp8.c.in
+++ b/src/ecp8.c.in
@@ -575,7 +575,7 @@
     ECP8_ZZZ_cmove(&Q,P,ns);
     ECP8_ZZZ_copy(&C,&Q);
 
-    nb=1+(BIG_XXX_nbits(t)+3)/4;
+    nb=1+(BIGBITS_XXX+3)/4;
 
     /* convert exponent to signed 4-bit window */
     for (i=0; i<nb; i++)
@@ -755,7 +755,7 @@
     {
         BIG_XXX_or(mt,mt,t[i]);
     }
-    nb=1+BIG_XXX_nbits(mt);
+    nb=1+BIGBITS_XXX;
 
 // Sign pivot
     s1[nb-1]=1;
diff --git a/src/ff.c.in b/src/ff.c.in
index 854d839..f0ebad2 100644
--- a/src/ff.c.in
+++ b/src/ff.c.in
@@ -27,16 +27,14 @@
 /* x=y */
 void FF_WWW_copy(BIG_XXX x[],BIG_XXX y[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_copy(x[i],y[i]);
 }
 
 /* x=y<<n */
 static void FF_WWW_dsucopy(BIG_XXX x[],BIG_XXX y[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         BIG_XXX_copy(x[n+i],y[i]);
         BIG_XXX_zero(x[i]);
@@ -46,8 +44,7 @@
 /* x=y */
 static void FF_WWW_dscopy(BIG_XXX x[],BIG_XXX y[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         BIG_XXX_copy(x[i],y[i]);
         BIG_XXX_zero(x[n+i]);
@@ -57,26 +54,23 @@
 /* x=y>>n */
 static void FF_WWW_sducopy(BIG_XXX x[],BIG_XXX y[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_copy(x[i],y[n+i]);
 }
 
 /* set to zero */
 void FF_WWW_zero(BIG_XXX x[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_zero(x[i]);
 }
 
 /* test equals 0 */
 int FF_WWW_iszilch(BIG_XXX x[],int n)
 {
-    int i;
     int rc = 1;
 
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         rc &= BIG_XXX_iszilch(x[i]);
 
     return rc;
@@ -85,12 +79,11 @@
 /* test equals 1 */
 int FF_WWW_isunity(BIG_XXX x[], int n)
 {
-    int i;
     int rc;
 
     rc = BIG_XXX_isunity(x[0]);
 
-    for (i=1; i<n; i++)
+    for (int i=1; i<n; i++)
         rc &= BIG_XXX_iszilch(x[i]);
 
     return rc;
@@ -99,8 +92,7 @@
 /* shift right by BIGBITS-bit words */
 static void FF_WWW_shrw(BIG_XXX a[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         BIG_XXX_copy(a[i],a[i+n]);
         BIG_XXX_zero(a[i+n]);
@@ -110,8 +102,7 @@
 /* shift left by BIGBITS-bit words */
 static void FF_WWW_shlw(BIG_XXX a[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         BIG_XXX_copy(a[i+n],a[i]);
         BIG_XXX_zero(a[i]);
@@ -133,16 +124,14 @@
 /* x=1 */
 void FF_WWW_one(BIG_XXX x[],int n)
 {
-    int i;
     BIG_XXX_one(x[0]);
-    for (i=1; i<n; i++)
+    for (int i=1; i<n; i++)
         BIG_XXX_zero(x[i]);
 }
 
 /* x=m, where m is 32-bit int */
 void FF_WWW_init(BIG_XXX x[],sign32 m,int n)
 {
-    int i;
     BIG_XXX_zero(x[0]);
 #if CHUNK<64
     x[0][0]=(chunk)(m&BMASK_XXX);
@@ -150,19 +139,18 @@
 #else
     x[0][0]=(chunk)m;
 #endif
-    for (i=1; i<n; i++)
+    for (int i=1; i<n; i++)
         BIG_XXX_zero(x[i]);
 }
 
 /* compare x and y - must be normalised */
 int FF_WWW_comp(BIG_XXX x[],BIG_XXX y[],int n)
 {
-    int i;
     int c;
     int eq = 1;
     int gt = 0;
 
-    for (i=n-1; i>=0; i--)
+    for (int i=n-1; i>=0; i--)
     {
         c = BIG_XXX_comp(x[i],y[i]);
         gt += eq * (c * c + c);
@@ -175,40 +163,35 @@
 /* recursive add */
 static void FF_WWW_radd(BIG_XXX z[],int zp,BIG_XXX x[],int xp,BIG_XXX y[],int yp,int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_add(z[zp+i],x[xp+i],y[yp+i]);
 }
 
 /* recursive inc */
 static void FF_WWW_rinc(BIG_XXX z[],int zp,BIG_XXX y[],int yp,int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_add(z[zp+i],z[zp+i],y[yp+i]);
 }
 
 /* recursive dec */
 static void FF_WWW_rdec(BIG_XXX z[],int zp,BIG_XXX y[],int yp,int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_sub(z[zp+i],z[zp+i],y[yp+i]);
 }
 
 /* simple add */
 void FF_WWW_add(BIG_XXX z[],BIG_XXX x[],BIG_XXX y[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_add(z[i],x[i],y[i]);
 }
 
 /* simple sub */
 void FF_WWW_sub(BIG_XXX z[],BIG_XXX x[],BIG_XXX y[],int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_sub(z[i],x[i],y[i]);
 }
 
@@ -228,7 +211,7 @@
 /* normalise - but hold any overflow in top part unless n<0 */
 static void FF_WWW_rnorm(BIG_XXX z[],int zp,int n)
 {
-    int i,trunc=0;
+    int trunc=0;
     chunk carry;
     if (n<0)
     {
@@ -236,7 +219,7 @@
         n=-n;
         trunc=1;
     }
-    for (i=0; i<n-1; i++)
+    for (int i=0; i<n-1; i++)
     {
         carry=BIG_XXX_norm(z[zp+i]);
 
@@ -255,9 +238,9 @@
 /* shift left by one bit */
 void FF_WWW_shl(BIG_XXX x[],int n)
 {
-    int i;
-    int carry,delay_carry=0;
-    for (i=0; i<n-1; i++)
+    int carry;
+    int delay_carry=0;
+    for (int i=0; i<n-1; i++)
     {
         carry=BIG_XXX_fshl(x[i],1);
         x[i][0]|=delay_carry;
@@ -271,9 +254,8 @@
 /* shift right by one bit */
 void FF_WWW_shr(BIG_XXX x[],int n)
 {
-    int i;
     int carry;
-    for (i=n-1; i>0; i--)
+    for (int i=n-1; i>0; i--)
     {
         carry=BIG_XXX_fshr(x[i],1);
         x[i-1][NLEN_XXX-1]|=(chunk)carry<<P_TBITS_WWW;
@@ -283,9 +265,8 @@
 
 void FF_WWW_output(BIG_XXX x[],int n)
 {
-    int i;
     FF_WWW_norm(x,n);
-    for (i=n-1; i>=0; i--)
+    for (int i=n-1; i>=0; i--)
     {
         BIG_XXX_output(x[i]);
         printf(" ");
@@ -294,8 +275,7 @@
 
 void FF_WWW_rawoutput(BIG_XXX x[],int n)
 {
-    int i;
-    for (i=n-1; i>=0; i--)
+    for (int i=n-1; i>=0; i--)
     {
         BIG_XXX_rawoutput(x[i]);
         printf(" ");
@@ -305,18 +285,16 @@
 /* Convert FFs to/from octet strings */
 void FF_WWW_toOctet(octet *w,BIG_XXX x[],int n)
 {
-    int i;
     w->len=n*MODBYTES_XXX;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         BIG_XXX_toBytes(&(w->val[(n-i-1)*MODBYTES_XXX]),x[i]);
     }
 }
 
-void FF_WWW_fromOctet(BIG_XXX x[],octet *w,int n)
+void FF_WWW_fromOctet(BIG_XXX x[],const octet *w,int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         BIG_XXX_fromBytes(x[i],&(w->val[(n-i-1)*MODBYTES_XXX]));
     }
@@ -325,8 +303,7 @@
 /* in-place swapping using xor - side channel resistant */
 static void FF_WWW_cswap(BIG_XXX a[],BIG_XXX b[],int d,int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_cswap(a[i],b[i],d);
     return;
 }
@@ -334,8 +311,7 @@
 /* copy b to a - side channel resistant */
 static void FF_WWW_cmove(BIG_XXX a[],BIG_XXX b[],int d,int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
         BIG_XXX_cmove(a[i],b[i],d);
     return;
 }
@@ -562,12 +538,23 @@
 void FF_WWW_invmodp(BIG_XXX r[],BIG_XXX a[],BIG_XXX p[],int n)
 {
 #ifndef C99
-    BIG_XXX u[FFLEN_WWW],v[FFLEN_WWW],s[FFLEN_WWW],w[FFLEN_WWW];
+    BIG_XXX u[FFLEN_WWW];
+    BIG_XXX v[FFLEN_WWW];
+    BIG_XXX s[FFLEN_WWW];
+    BIG_XXX w[FFLEN_WWW];
 #else
-    BIG_XXX u[n],v[n],s[n],w[n];
+    BIG_XXX u[n];
+    BIG_XXX v[n];
+    BIG_XXX s[n];
+    BIG_XXX w[n];
 #endif
 
-    int k, p1, pu, pv, psw, pmv;
+    int k;
+    int p1;
+    int pu;
+    int pv;
+    int psw;
+    int pmv;
 
     FF_WWW_copy(u, p, n);
     FF_WWW_copy(v, a, n);
@@ -646,19 +633,20 @@
 /* nesidue mod m */
 static void FF_WWW_nres(BIG_XXX a[],BIG_XXX m[],int n)
 {
-#ifndef C99
-    BIG_XXX d[2*FFLEN_WWW];
-#else
-    BIG_XXX d[2*n];
-#endif
     if (n==1)
     {
-        BIG_XXX_dscopy(d[0],a[0]);
-        BIG_XXX_dshl(d[0],NLEN_XXX*BASEBITS_XXX);
-        BIG_XXX_dmod(a[0],d[0],m[0]);
+        DBIG_XXX d;
+        BIG_XXX_dscopy(d,a[0]);
+        BIG_XXX_dshl(d,NLEN_XXX*BASEBITS_XXX);
+        BIG_XXX_dmod(a[0],d,m[0]);
     }
     else
     {
+#ifndef C99
+        BIG_XXX d[2*FFLEN_WWW];
+#else
+        BIG_XXX d[2*n];
+#endif
         FF_WWW_dsucopy(d,a,n);
         FF_WWW_dmod(a,d,m,n);
     }
@@ -666,19 +654,20 @@
 
 static void FF_WWW_redc(BIG_XXX a[],BIG_XXX m[],BIG_XXX ND[],int n)
 {
-#ifndef C99
-    BIG_XXX d[2*FFLEN_WWW];
-#else
-    BIG_XXX d[2*n];
-#endif
     if (n==1)
     {
-        BIG_XXX_dzero(d[0]);
-        BIG_XXX_dscopy(d[0],a[0]);
-        BIG_XXX_monty(a[0],m[0],((chunk)1<<BASEBITS_XXX)-ND[0][0],d[0]);
+        DBIG_XXX d;
+        BIG_XXX_dzero(d);
+        BIG_XXX_dscopy(d,a[0]);
+        BIG_XXX_monty(a[0],m[0],((chunk)1<<BASEBITS_XXX)-ND[0][0],d);
     }
     else
     {
+#ifndef C99
+        BIG_XXX d[2*FFLEN_WWW];
+#else
+        BIG_XXX d[2*n];
+#endif
         FF_WWW_mod(a,m,n);
         FF_WWW_dscopy(d,a,n);
         FF_WWW_reduce(a,d,m,ND,n);
@@ -689,11 +678,14 @@
 /* U=1/a mod 2^m - Arazi & Qi */
 void FF_WWW_invmod2m(BIG_XXX U[],BIG_XXX a[],int n)
 {
-    int i;
 #ifndef C99
-    BIG_XXX t1[FFLEN_WWW],b[FFLEN_WWW],c[FFLEN_WWW];
+    BIG_XXX t1[FFLEN_WWW];
+    BIG_XXX b[FFLEN_WWW];
+    BIG_XXX c[FFLEN_WWW];
 #else
-    BIG_XXX t1[2*n],b[n],c[n];
+    BIG_XXX t1[2*n];
+    BIG_XXX b[n];
+    BIG_XXX c[n];
 #endif
 
     FF_WWW_zero(U,n);
@@ -703,7 +695,7 @@
 
     BIG_XXX_copy(U[0],a[0]);
     BIG_XXX_invmod2m(U[0]);
-    for (i=1; i<n; i<<=1)
+    for (int i=1; i<n; i<<=1)
     {
         FF_WWW_copy(b,a,i);
         FF_WWW_mul(t1,U,b,i);
@@ -729,8 +721,7 @@
 
 void FF_WWW_random(BIG_XXX x[],csprng *rng,int n)
 {
-    int i;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         BIG_XXX_random(x[i],rng);
     }
@@ -741,13 +732,12 @@
 /* generate random x mod p */
 void FF_WWW_randomnum(BIG_XXX x[],BIG_XXX p[],csprng *rng,int n)
 {
-    int i;
 #ifndef C99
     BIG_XXX d[2*FFLEN_WWW];
 #else
     BIG_XXX d[2*n];
 #endif
-    for (i=0; i<2*n; i++)
+    for (int i=0; i<2*n; i++)
     {
         BIG_XXX_random(d[i],rng);
     }
@@ -756,11 +746,6 @@
 
 static void FF_WWW_modmul(BIG_XXX z[],BIG_XXX x[],BIG_XXX y[],BIG_XXX p[],BIG_XXX ND[],int n)
 {
-#ifndef C99
-    BIG_XXX d[2*FFLEN_WWW];
-#else
-    BIG_XXX d[2*n];
-#endif
     chunk ex=P_EXCESS_WWW(x[n-1]);
     chunk ey=P_EXCESS_WWW(y[n-1]);
 #ifdef dchunk
@@ -777,11 +762,17 @@
 
     if (n==1)
     {
-        BIG_XXX_mul(d[0],x[0],y[0]);
-        BIG_XXX_monty(z[0],p[0],((chunk)1<<BASEBITS_XXX)-ND[0][0],d[0]);
+        DBIG_XXX d;
+        BIG_XXX_mul(d,x[0],y[0]);
+        BIG_XXX_monty(z[0],p[0],((chunk)1<<BASEBITS_XXX)-ND[0][0],d);
     }
     else
     {
+#ifndef C99
+        BIG_XXX d[2*FFLEN_WWW];
+#else
+        BIG_XXX d[2*n];
+#endif
         FF_WWW_mul(d,x,y,n);
         FF_WWW_reduce(z,d,p,ND,n);
     }
@@ -789,11 +780,6 @@
 
 static void FF_WWW_modsqr(BIG_XXX z[],BIG_XXX x[],BIG_XXX p[],BIG_XXX ND[],int n)
 {
-#ifndef C99
-    BIG_XXX d[2*FFLEN_WWW];
-#else
-    BIG_XXX d[2*n];
-#endif
     chunk ex=P_EXCESS_WWW(x[n-1]);
 #ifdef dchunk
     if ((dchunk)(ex+1)*(ex+1)>(dchunk)P_FEXCESS_WWW)
@@ -808,11 +794,17 @@
     }
     if (n==1)
     {
-        BIG_XXX_sqr(d[0],x[0]);
-        BIG_XXX_monty(z[0],p[0],((chunk)1<<BASEBITS_XXX)-ND[0][0],d[0]);
+        DBIG_XXX d;
+        BIG_XXX_sqr(d,x[0]);
+        BIG_XXX_monty(z[0],p[0],((chunk)1<<BASEBITS_XXX)-ND[0][0],d);
     }
     else
     {
+#ifndef C99
+        BIG_XXX d[2*FFLEN_WWW];
+#else
+        BIG_XXX d[2*n];
+#endif
         FF_WWW_sqr(d,x,n);
         FF_WWW_reduce(z,d,p,ND,n);
     }
@@ -820,12 +812,14 @@
 
 void FF_WWW_2w_precompute(BIG_XXX *X[], BIG_XXX *T[], int k, int w, BIG_XXX p[], BIG_XXX ND[], int plen)
 {
-    int i, j, z, b;
+    int j;
+    int z;
+    int b;
 
     FF_WWW_one(T[0], plen);
     FF_WWW_nres(T[0], p, plen);
 
-    for (i = 0; i < k; i++)
+    for (int i = 0; i < k; i++)
     {
         j = 1<<(i*w);
 
@@ -855,8 +849,8 @@
 
 void FF_WWW_ct_2w_pow(BIG_XXX r[], BIG_XXX *T[], BIG_XXX *E[], int k, int w, BIG_XXX p[], BIG_XXX ND[], int plen, int elen)
 {
-    int i, j;
-    sign32 index, e;
+    int j;
+    sign32 e;
 
 #ifndef C99
     BIG_XXX ws[FFLEN_WWW];
@@ -867,7 +861,7 @@
     FF_WWW_one(r, plen);
     FF_WWW_nres(r, p, plen);
 
-    for (i=8*MODBYTES_XXX*elen-w; i>=0; i-=w)
+    for (int i=8*MODBYTES_XXX*elen-w; i>=0; i-=w)
     {
         // Square
         for (j=0; j<w; j++)
@@ -884,7 +878,7 @@
             e |= BIG_XXX_bits(E[j][i/BIGBITS_XXX],i%BIGBITS_XXX,w);
         }
 
-        for (index = 0; index < 1<<(w*k); index++)
+        for (sign32 index = 0; index < 1<<(w*k); index++)
         {
             FF_WWW_cmove(ws, T[index], ct_equals(index,e), plen);
         }
@@ -897,12 +891,13 @@
 
 void FF_WWW_nt_2w_pow(BIG_XXX r[], BIG_XXX *T[], BIG_XXX *E[], int k, int w, BIG_XXX p[], BIG_XXX ND[], int plen, int elen)
 {
-    int i, j, e;
+    int j;
+    int e;
 
     FF_WWW_one(r, plen);
     FF_WWW_nres(r, p, plen);
 
-    for (i=8*MODBYTES_XXX*elen-w; i>=0; i-=w)
+    for (int i=8*MODBYTES_XXX*elen-w; i>=0; i-=w)
     {
         // Square
         for (j=0; j<w; j++)
@@ -931,7 +926,8 @@
 
 void FF_WWW_bi_precompute(BIG_XXX *X[], BIG_XXX *T[], int k, int w, BIG_XXX p[], BIG_XXX ND[], int plen)
 {
-    int i, j, window;
+    int j;
+    int window;
 
 #ifndef C99
     BIG_XXX gsqr[FFLEN_WWW];
@@ -942,7 +938,7 @@
     window = 1<<(w-1);
     j = 0;
 
-    for (i=0; i<k; i++)
+    for (int i=0; i<k; i++)
     {
         FF_WWW_copy(T[j], X[i], plen);
         FF_WWW_nres(T[j], p, plen);
@@ -958,7 +954,8 @@
 
 void FF_WWW_bi_pow(BIG_XXX r[], BIG_XXX *T[], BIG_XXX *E[], int k, int w, BIG_XXX p[], BIG_XXX ND[], int plen, int elen)
 {
-    int i, j, l, pos;
+    int i;
+    int pos;
 
 #ifndef C99
     int w_handle[4];
@@ -980,18 +977,24 @@
     {
         FF_WWW_modsqr(r,r,p,ND,plen);
 
-        for (j=0; j<k; j++)
+        for (int j=0; j<k; j++)
         {
             // Prepare table entry and position for multiplication if none
             // is selected
             if (w_handle[j] < 0 && (BIG_XXX_bit(E[j][i/BIGBITS_XXX], i%BIGBITS_XXX) == 1))
             {
+				// Ensure that the starting position in the following loop is non-negative
+				int tpos;
+				tpos = i - w + 1;
+				if ( tpos < 0 )
+					tpos = 0;
+
                 // Skip position until the exponent is odd
-                for(pos = i - w + 1; BIG_XXX_bit(E[j][pos/BIGBITS_XXX], pos%BIGBITS_XXX) == 0; pos++);
+                for(pos = tpos; BIG_XXX_bit(E[j][pos/BIGBITS_XXX], pos%BIGBITS_XXX) == 0; pos++);
 
                 // Save exponent for multiplication step
                 e[j] = 0;
-                for(l=i; l>pos; l--)
+                for(int l=i; l>pos; l--)
                 {
                     e[j] <<= 1;
                     e[j] |= BIG_XXX_bit(E[j][l/BIGBITS_XXX], l%BIGBITS_XXX);
@@ -1017,20 +1020,24 @@
 }
 
 /* r=x^e mod p using side-channel resistant Montgomery Ladder, for short e */
-void FF_WWW_ct_pow_big(BIG_XXX r[],BIG_XXX x[],BIG_XXX e,BIG_XXX p[],int n)
+void FF_WWW_ct_pow_big(BIG_XXX r[],BIG_XXX x[],const BIG_XXX e,BIG_XXX p[],int n)
 {
-    int i,b;
+    int b;
 #ifndef C99
-    BIG_XXX R0[FFLEN_WWW],R1[FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX R0[FFLEN_WWW];
+    BIG_XXX R1[FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX R0[n],R1[n],ND[n];
+    BIG_XXX R0[n];
+    BIG_XXX R1[n];
+    BIG_XXX ND[n];
 #endif
     FF_WWW_invmod2m(ND,p,n);
     FF_WWW_one(R0,n);
     FF_WWW_copy(R1,x,n);
     FF_WWW_nres(R0,p,n);
     FF_WWW_nres(R1,p,n);
-    for (i=8*MODBYTES_XXX-1; i>=0; i--)
+    for (int i=8*MODBYTES_XXX-1; i>=0; i--)
     {
         b=BIG_XXX_bit(e,i);
         FF_WWW_modmul(r,R0,R1,p,ND,n);
@@ -1047,9 +1054,11 @@
 void FF_WWW_ct_pow(BIG_XXX r[],BIG_XXX x[],BIG_XXX e[],BIG_XXX p[],int n, int en)
 {
 #ifndef C99
-    BIG_XXX T_mem[16][FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX T_mem[16][FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX T_mem[16][n],ND[n];
+    BIG_XXX T_mem[16][n];
+    BIG_XXX ND[n];
 #endif
 
     BIG_XXX *T[] =
@@ -1073,9 +1082,11 @@
 void FF_WWW_ct_pow_2(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[], BIG_XXX p[], int n, int en)
 {
 #ifndef C99
-    BIG_XXX T_mem[16][FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX T_mem[16][FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX T_mem[16][n],ND[n];
+    BIG_XXX T_mem[16][n];
+    BIG_XXX ND[n];
 #endif
 
     BIG_XXX *T[] =
@@ -1099,9 +1110,11 @@
 void FF_WWW_ct_pow_3(BIG_XXX r[],BIG_XXX x[], BIG_XXX e[], BIG_XXX y[], BIG_XXX f[], BIG_XXX z[], BIG_XXX g[], BIG_XXX p[], int n, int en)
 {
 #ifndef C99
-    BIG_XXX T_mem[8][FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX T_mem[8][FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX T_mem[8][n],ND[n];
+    BIG_XXX T_mem[8][n];
+    BIG_XXX ND[n];
 #endif
 
     BIG_XXX *T[] =
@@ -1124,9 +1137,11 @@
 {
     int f=1;
 #ifndef C99
-    BIG_XXX w[FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX w[FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX w[n],ND[n];
+    BIG_XXX w[n];
+    BIG_XXX ND[n];
 #endif
     FF_WWW_invmod2m(ND,p,n);
 
@@ -1157,9 +1172,11 @@
 void FF_WWW_nt_pow(BIG_XXX r[], BIG_XXX x[], BIG_XXX e[], BIG_XXX p[], int n, int en)
 {
 #ifndef C99
-    BIG_XXX T_mem[16][FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX T_mem[16][FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX T_mem[16][n],ND[n];
+    BIG_XXX T_mem[16][n];
+    BIG_XXX ND[n];
 #endif
 
     BIG_XXX *T[] =
@@ -1182,9 +1199,11 @@
 void FF_WWW_nt_pow_2(BIG_XXX *r,BIG_XXX *x,BIG_XXX *e, BIG_XXX *y, BIG_XXX *f, BIG_XXX *p,int n, int en)
 {
 #ifndef C99
-    BIG_XXX T_mem[16][FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX T_mem[16][FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX T_mem[16][n],ND[n];
+    BIG_XXX T_mem[16][n];
+    BIG_XXX ND[n];
 #endif
 
     BIG_XXX *T[] =
@@ -1207,9 +1226,11 @@
 void FF_WWW_nt_pow_3(BIG_XXX *r,BIG_XXX *x,BIG_XXX *e, BIG_XXX *y, BIG_XXX *f, BIG_XXX *z, BIG_XXX *g, BIG_XXX *p, int n, int en)
 {
 #ifndef C99
-    BIG_XXX T_mem[8][FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX T_mem[8][FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX T_mem[8][n],ND[n];
+    BIG_XXX T_mem[8][n];
+    BIG_XXX ND[n];
 #endif
 
     BIG_XXX *T[] =
@@ -1230,9 +1251,11 @@
 void FF_WWW_nt_pow_4(BIG_XXX *r,BIG_XXX *x,BIG_XXX *e, BIG_XXX *y, BIG_XXX *f, BIG_XXX *z, BIG_XXX *g, BIG_XXX *w, BIG_XXX *h, BIG_XXX *p, int n, int en)
 {
 #ifndef C99
-    BIG_XXX T_mem[16][FFLEN_WWW],ND[FFLEN_WWW];
+    BIG_XXX T_mem[16][FFLEN_WWW];
+    BIG_XXX ND[FFLEN_WWW];
 #else
-    BIG_XXX T_mem[16][n],ND[n];
+    BIG_XXX T_mem[16][n];
+    BIG_XXX ND[n];
 #endif
 
     BIG_XXX *T[] =
@@ -1258,7 +1281,10 @@
     sign32 r;
     if (y==0) return x;
     while ((r=x%y)!=0)
-        x=y,y=r;
+    {
+        x=y;
+        y=r;
+    }
     return y;
 }
 
@@ -1268,9 +1294,11 @@
     int r;
     sign32 g;
 #ifndef C99
-    BIG_XXX x[FFLEN_WWW],y[FFLEN_WWW];
+    BIG_XXX x[FFLEN_WWW];
+    BIG_XXX y[FFLEN_WWW];
 #else
-    BIG_XXX x[n],y[n];
+    BIG_XXX x[n];
+    BIG_XXX y[n];
 #endif
     FF_WWW_init(y,s,n);
     FF_WWW_copy(x,w,n);
@@ -1296,11 +1324,16 @@
 /* Miller-Rabin test for primality. Slow. */
 int FF_WWW_prime(BIG_XXX p[],csprng *rng,int n)
 {
-    int i,j,loop,s=0;
+    int loop;
+    int s=0;
 #ifndef C99
-    BIG_XXX d[FFLEN_WWW],x[FFLEN_WWW],nm1[FFLEN_WWW];
+    BIG_XXX d[FFLEN_WWW];
+    BIG_XXX x[FFLEN_WWW];
+    BIG_XXX nm1[FFLEN_WWW];
 #else
-    BIG_XXX d[n],x[n],nm1[n];
+    BIG_XXX d[n];
+    BIG_XXX x[n];
+    BIG_XXX nm1[n];
 #endif
     sign32 sf=4849845;/* 3*5*.. *19 */
 
@@ -1319,13 +1352,13 @@
     }
     if (s==0) return 0;
 
-    for (i=0; i<10; i++)
+    for (int i=0; i<10; i++)
     {
         FF_WWW_randomnum(x,p,rng,n);
         FF_WWW_nt_pow(x,x,d,p,n,n);
         if (FF_WWW_isunity(x,n) || FF_WWW_comp(x,nm1,n)==0) continue;
         loop=0;
-        for (j=1; j<s; j++)
+        for (int j=1; j<s; j++)
         {
             FF_WWW_nt_pow_int(x,x,2,p,n);
             if (FF_WWW_isunity(x,n)) return 0;
@@ -1346,9 +1379,13 @@
 void FF_WWW_crt(BIG_XXX *r, BIG_XXX *rp, BIG_XXX *rq, BIG_XXX *p, BIG_XXX *invp, BIG_XXX *pq, int n)
 {
 #ifndef C99
-    BIG_XXX c[FFLEN_WWW], a[FFLEN_WWW], b[2*FFLEN_WWW];
+    BIG_XXX c[FFLEN_WWW];
+    BIG_XXX a[FFLEN_WWW];
+    BIG_XXX b[2*FFLEN_WWW];
 #else
-    BIG_XXX c[2*n], a[2*n], b[4*n];
+    BIG_XXX c[2*n];
+    BIG_XXX a[2*n];
+    BIG_XXX b[4*n];
 #endif
 
     // c = p * (p^-1 mod q)
diff --git a/src/fp.c.in b/src/fp.c.in
index 7a98312..9dc8689 100644
--- a/src/fp.c.in
+++ b/src/fp.c.in
@@ -35,23 +35,25 @@
 /* r=d mod m */
 
 /* Converts from BIG integer to residue form mod Modulus */
-void FP_YYY_nres(FP_YYY *y,BIG_XXX x)
+void FP_YYY_nres(FP_YYY *y,const BIG_XXX x)
 {
     BIG_XXX_copy(y->g,x);
     y->XES=1;
 }
 
 /* Converts from residue form back to BIG integer form */
-void FP_YYY_redc(BIG_XXX x,FP_YYY *y)
+void FP_YYY_redc(BIG_XXX x,const FP_YYY *y)
 {
     BIG_XXX_copy(x,y->g);
 }
 
 /* reduce a DBIG to a BIG exploiting the special form of the modulus */
-void FP_YYY_mod(BIG_XXX r,DBIG_XXX d)
+void FP_YYY_mod(BIG_XXX r,const DBIG_XXX d)
 {
-    BIG_XXX t,b;
-    chunk v,tw;
+    BIG_XXX t;
+    BIG_XXX b;
+    chunk v;
+    chunk tw;
     BIG_XXX_split(t,b,d,MODBITS_YYY);
 
     /* Note that all of the excess gets pushed into t. So if squaring a value with a 4-bit excess, this results in
@@ -59,17 +61,17 @@
 
     if (MConst_YYY < NEXCESS_XXX)
     {
-        BIG_XXX_imul(t,t,MConst_YYY);
+        BIG_XXX_imul(t,t,(int)MConst_YYY);
         BIG_XXX_norm(t);
         BIG_XXX_add(r,t,b);
         BIG_XXX_norm(r);
         tw=r[NLEN_XXX-1];
         r[NLEN_XXX-1]&=TMASK_YYY;
-        r[0]+=MConst_YYY*((tw>>TBITS_YYY));
+        r[0]+=MConst_YYY*(tw>>TBITS_YYY);
     }
     else
     {
-        v=BIG_XXX_pmul(t,t,MConst_YYY);
+        v=BIG_XXX_pmul(t,t,(int)MConst_YYY);
         BIG_XXX_add(r,t,b);
         BIG_XXX_norm(r);
         tw=r[NLEN_XXX-1];
@@ -87,20 +89,20 @@
 /* This only applies to Curve C448, so specialised (for now) */
 #if MODTYPE_YYY == GENERALISED_MERSENNE
 
-void FP_YYY_nres(FP_YYY *y,BIG_XXX x)
+void FP_YYY_nres(FP_YYY *y,const BIG_XXX x)
 {
     BIG_XXX_copy(y->g,x);
     y->XES=1;
 }
 
 /* Converts from residue form back to BIG integer form */
-void FP_YYY_redc(BIG_XXX x,FP_YYY *y)
+void FP_YYY_redc(BIG_XXX x,const FP_YYY *y)
 {
     BIG_XXX_copy(x,y->g);
 }
 
 /* reduce a DBIG to a BIG exploiting the special form of the modulus */
-void FP_YYY_mod(BIG_XXX r,DBIG_XXX d)
+void FP_YYY_mod(BIG_XXX r, const DBIG_XXX d)
 {
     BIG_XXX t,b;
     chunk carry;
@@ -134,7 +136,7 @@
 #if MODTYPE_YYY == MONTGOMERY_FRIENDLY
 
 /* convert to Montgomery n-residue form */
-void FP_YYY_nres(FP_YYY *y,BIG_XXX x)
+void FP_YYY_nres(FP_YYY *y,const BIG_XXX x)
 {
     DBIG_XXX d;
     BIG_XXX r;
@@ -145,7 +147,7 @@
 }
 
 /* convert back to regular form */
-void FP_YYY_redc(BIG_XXX x,FP_YYY *y)
+void FP_YYY_redc(BIG_XXX x,const FP_YYY *y)
 {
     DBIG_XXX d;
     BIG_XXX_dzero(d);
@@ -154,7 +156,7 @@
 }
 
 /* fast modular reduction from DBIG to BIG exploiting special form of the modulus */
-void FP_YYY_mod(BIG_XXX a,DBIG_XXX d)
+void FP_YYY_mod(BIG_XXX a,const DBIG_XXX d)
 {
     int i;
 
@@ -170,7 +172,7 @@
 #if MODTYPE_YYY == NOT_SPECIAL
 
 /* convert to Montgomery n-residue form */
-void FP_YYY_nres(FP_YYY *y,BIG_XXX x)
+void FP_YYY_nres(FP_YYY *y,const BIG_XXX x)
 {
     DBIG_XXX d;
     BIG_XXX r;
@@ -181,7 +183,7 @@
 }
 
 /* convert back to regular form */
-void FP_YYY_redc(BIG_XXX x,FP_YYY *y)
+void FP_YYY_redc(BIG_XXX x,const FP_YYY *y)
 {
     DBIG_XXX d;
     BIG_XXX_dzero(d);
@@ -193,7 +195,7 @@
 /* reduce a DBIG to a BIG using Montgomery's no trial division method */
 /* d is expected to be dnormed before entry */
 /* SU= 112 */
-void FP_YYY_mod(BIG_XXX a,DBIG_XXX d)
+void FP_YYY_mod(BIG_XXX a,const DBIG_XXX d)
 {
     BIG_XXX mdls;
     BIG_XXX_rcopy(mdls,Modulus_YYY);
@@ -204,16 +206,17 @@
 
 /* test x==0 ? */
 /* SU= 48 */
-int FP_YYY_iszilch(FP_YYY *x)
+int FP_YYY_iszilch(const FP_YYY *x)
 {
-    BIG_XXX m,t;
+    BIG_XXX m;
+    BIG_XXX t;
     BIG_XXX_rcopy(m,Modulus_YYY);
     BIG_XXX_copy(t,x->g);
     BIG_XXX_mod(t,m);
     return BIG_XXX_iszilch(t);
 }
 
-void FP_YYY_copy(FP_YYY *y,FP_YYY *x)
+void FP_YYY_copy(FP_YYY *y,const FP_YYY *x)
 {
     BIG_XXX_copy(y->g,x->g);
     y->XES=x->XES;
@@ -229,7 +232,8 @@
 /* Swap a and b if d=1 */
 void FP_YYY_cswap(FP_YYY *a,FP_YYY *b,int d)
 {
-    sign32 t,c=d;
+    sign32 t;
+    sign32 c=d;
     BIG_XXX_cswap(a->g,b->g,d);
 
     c=~(c-1);
@@ -240,7 +244,7 @@
 }
 
 /* Move b to a if d=1 */
-void FP_YYY_cmove(FP_YYY *a,FP_YYY *b,int d)
+void FP_YYY_cmove(FP_YYY *a,const FP_YYY *b,int d)
 {
     sign32 c=-d;
 
@@ -254,9 +258,10 @@
     x->XES=1;
 }
 
-int FP_YYY_equals(FP_YYY *x,FP_YYY *y)
+int FP_YYY_equals(const FP_YYY *x,const FP_YYY *y)
 {
-    FP_YYY xg,yg;
+    FP_YYY xg;
+    FP_YYY yg;
     FP_YYY_copy(&xg,x);
     FP_YYY_copy(&yg,y);
     FP_YYY_reduce(&xg);
@@ -267,22 +272,31 @@
 
 /* output FP */
 /* SU= 48 */
-void FP_YYY_output(FP_YYY *r)
+void FP_YYY_output(const FP_YYY *r)
 {
     BIG_XXX c;
     FP_YYY_redc(c,r);
     BIG_XXX_output(c);
 }
 
-void FP_YYY_rawoutput(FP_YYY *r)
+void FP_YYY_rawoutput(const FP_YYY *r)
 {
     BIG_XXX_rawoutput(r->g);
 }
 
 #ifdef GET_STATS
-int tsqr=0,rsqr=0,tmul=0,rmul=0;
-int tadd=0,radd=0,tneg=0,rneg=0;
-int tdadd=0,rdadd=0,tdneg=0,rdneg=0;
+int tsqr=0;
+int rsqr=0;
+int tmul=0;
+int rmul=0;
+int tadd=0;
+int radd=0;
+int tneg=0;
+int rneg=0;
+int tdadd=0;
+int rdadd=0;
+int tdneg=0;
+int rdneg=0;
 #endif
 
 #ifdef FUSED_MODMUL
@@ -294,22 +308,24 @@
 /* r=a*b mod Modulus */
 /* product must be less that p.R - and we need to know this in advance! */
 /* SU= 88 */
-void FP_YYY_mul(FP_YYY *r,FP_YYY *a,FP_YYY *b)
+void FP_YYY_mul(FP_YYY *r,const FP_YYY *a,const FP_YYY *b)
 {
     DBIG_XXX d;
+    FP_YYY a_prime;
+    FP_YYY_copy(&a_prime, a);
 
     if ((sign64)a->XES*b->XES>(sign64)FEXCESS_YYY)
     {
 #ifdef DEBUG_REDUCE
         printf("Product too large - reducing it\n");
 #endif
-        FP_YYY_reduce(a);  /* it is sufficient to fully reduce just one of them < p */
+        FP_YYY_reduce(&a_prime);  /* it is sufficient to fully reduce just one of them < p */
     }
 
 #ifdef FUSED_MODMUL
-    FP_YYY_modmul(r->g,a->g,b->g);
+    FP_YYY_modmul(r->g,a_prime.g,b->g);
 #else
-    BIG_XXX_mul(d,a->g,b->g);
+    BIG_XXX_mul(d,a_prime.g,b->g);
     FP_YYY_mod(r->g,d);
 #endif
     r->XES=2;
@@ -318,7 +334,7 @@
 
 /* multiplication by an integer, r=a*c */
 /* SU= 136 */
-void FP_YYY_imul(FP_YYY *r,FP_YYY *a,int c)
+void FP_YYY_imul(FP_YYY *r,const FP_YYY *a,int c)
 {
     int s=0;
 
@@ -382,7 +398,7 @@
 
 /* SU= 16 */
 /* Set r=a+b */
-void FP_YYY_add(FP_YYY *r,FP_YYY *a,FP_YYY *b)
+void FP_YYY_add(FP_YYY *r,const FP_YYY *a,const FP_YYY *b)
 {
     BIG_XXX_add(r->g,a->g,b->g);
     r->XES=a->XES+b->XES;
@@ -397,7 +413,7 @@
 
 /* Set r=a-b mod m */
 /* SU= 56 */
-void FP_YYY_sub(FP_YYY *r,FP_YYY *a,FP_YYY *b)
+void FP_YYY_sub(FP_YYY *r,const FP_YYY *a,const FP_YYY *b)
 {
     FP_YYY n;
     FP_YYY_neg(&n,b);
@@ -425,10 +441,11 @@
 // find appoximation to quotient of a/m
 // Out by at most 2.
 // Note that MAXXES is bounded to be 2-bits less than half a word
-static int quo(BIG_XXX n,BIG_XXX m)
+static int quo(const BIG_XXX n,const BIG_XXX m)
 {
     int sh;
-    chunk num,den;
+    chunk num;
+    chunk den;
     int hb=CHUNK/2;
     if (TBITS_YYY<hb)
     {
@@ -448,8 +465,11 @@
 /* Fully reduce a mod Modulus */
 void FP_YYY_reduce(FP_YYY *a)
 {
-    BIG_XXX m,r;
-    int sr,sb,q;
+    BIG_XXX m;
+    BIG_XXX r;
+    int sr;
+    int sb;
+    int q;
     chunk carry;
 
     BIG_XXX_rcopy(m,Modulus_YYY);
@@ -477,7 +497,6 @@
         sb--;
     }
 
-    //BIG_XXX_mod(a->g,m);
     a->XES=1;
 }
 
@@ -488,7 +507,7 @@
 
 /* Set r=-a mod Modulus */
 /* SU= 64 */
-void FP_YYY_neg(FP_YYY *r,FP_YYY *a)
+void FP_YYY_neg(FP_YYY *r,const FP_YYY *a)
 {
     int sb;
     BIG_XXX m;
@@ -498,7 +517,7 @@
     sb=logb2(a->XES-1);
     BIG_XXX_fshl(m,sb);
     BIG_XXX_sub(r->g,m,a->g);
-    r->XES=((sign32)1<<sb)+1;
+    r->XES=(1<<sb)+1;
 
     if (r->XES>FEXCESS_YYY)
     {
@@ -512,7 +531,7 @@
 
 /* Set r=a/2. */
 /* SU= 56 */
-void FP_YYY_div2(FP_YYY *r,FP_YYY *a)
+void FP_YYY_div2(FP_YYY *r,const FP_YYY *a)
 {
     BIG_XXX m;
     BIG_XXX_rcopy(m,Modulus_YYY);
@@ -538,8 +557,19 @@
 
 static void FP_YYY_fpow(FP_YYY *r,FP_YYY *x)
 {
-    int i,j,k,bw,w,c,nw,lo,m,n;
-    FP_YYY xp[11],t,key;
+    int i;
+    int j;
+    int k;
+    int bw;
+    int w;
+    int c;
+    int nw;
+    int lo;
+    int m;
+    int n;
+    FP_YYY xp[11];
+    FP_YYY t;
+    FP_YYY key;
     const int ac[]= {1,2,3,6,12,15,30,60,120,240,255};
 // phase 1
     FP_YYY_copy(&xp[0],x);	// 1
@@ -561,17 +591,13 @@
     n=MODBITS_YYY/2;
 #endif
 
-    if (MOD8_YYY==5)
-    {
-        n-=3;
-        c=(MConst_YYY+5)/8;
-    }
-    else
-    {
-        n-=2;
-        c=(MConst_YYY+3)/4;
-    }
-
+#if MOD8_YYY==5
+    n-=3;
+    c=(int)((MConst_YYY+5)/8);
+#else
+    n-=2;
+    c=(MConst_YYY+3)/4;
+#endif
     bw=0;
     w=1;
     while (w<c)
@@ -647,24 +673,22 @@
 
 void FP_YYY_inv(FP_YYY *r,FP_YYY *x)
 {
-    FP_YYY y,t;
+    FP_YYY y;
+    FP_YYY t;
     FP_YYY_fpow(&y,x);
-    if (MOD8_YYY==5)
-    {
-        // r=x^3.y^8
-        FP_YYY_sqr(&t,x);
-        FP_YYY_mul(&t,&t,x);
-        FP_YYY_sqr(&y,&y);
-        FP_YYY_sqr(&y,&y);
-        FP_YYY_sqr(&y,&y);
-        FP_YYY_mul(r,&t,&y);
-    }
-    else
-    {
-        FP_YYY_sqr(&y,&y);
-        FP_YYY_sqr(&y,&y);
-        FP_YYY_mul(r,&y,x);
-    }
+#if MOD8_YYY==5
+    // r=x^3.y^8
+    FP_YYY_sqr(&t,x);
+    FP_YYY_mul(&t,&t,x);
+    FP_YYY_sqr(&y,&y);
+    FP_YYY_sqr(&y,&y);
+    FP_YYY_sqr(&y,&y);
+    FP_YYY_mul(r,&t,&y);
+#else
+    FP_YYY_sqr(&y,&y);
+    FP_YYY_sqr(&y,&y);
+    FP_YYY_mul(r,&y,x);
+#endif
 }
 
 #else
@@ -674,7 +698,8 @@
     sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
     FP_YYY tb[16];
     BIG_XXX t;
-    int i,nb;
+    int i;
+    int nb;
 
     FP_YYY_norm(a);
     BIG_XXX_norm(b);
@@ -683,7 +708,7 @@
     /* convert exponent to 4-bit window */
     for (i=0; i<nb; i++)
     {
-        w[i]=BIG_XXX_lastbits(t,4);
+        w[i]=(signed char)BIG_XXX_lastbits(t,4);
         BIG_XXX_dec(t,w[i]);
         BIG_XXX_norm(t);
         BIG_XXX_fshr(t,4);
@@ -746,34 +771,33 @@
 /* SU= 160 */
 void FP_YYY_sqrt(FP_YYY *r,FP_YYY *a)
 {
-    FP_YYY v,i;
     BIG_XXX b;
     BIG_XXX m;
     BIG_XXX_rcopy(m,Modulus_YYY);
     BIG_XXX_mod(a->g,m);
     BIG_XXX_copy(b,m);
-    if (MOD8_YYY==5)
-    {
-        FP_YYY_copy(&i,a); // i=x
-        BIG_XXX_fshl(i.g,1); // i=2x
+#if MOD8_YYY==5
+    FP_YYY v;
+    FP_YYY i;
+    FP_YYY_copy(&i,a); // i=x
+    BIG_XXX_fshl(i.g,1); // i=2x
 #if MODTYPE_YYY == PSEUDO_MERSENNE   || MODTYPE_YYY==GENERALISED_MERSENNE
-        FP_YYY_fpow(&v,&i);
+    FP_YYY_fpow(&v,&i);
 #else
-        BIG_XXX_dec(b,5);
-        BIG_XXX_norm(b);
-        BIG_XXX_fshr(b,3); // (p-5)/8
-        FP_YYY_pow(&v,&i,b); // v=(2x)^(p-5)/8
+    BIG_XXX_dec(b,5);
+    BIG_XXX_norm(b);
+    BIG_XXX_fshr(b,3); // (p-5)/8
+    FP_YYY_pow(&v,&i,b); // v=(2x)^(p-5)/8
 #endif
-        FP_YYY_mul(&i,&i,&v); // i=(2x)^(p+3)/8
-        FP_YYY_mul(&i,&i,&v); // i=(2x)^(p-1)/4
-        BIG_XXX_dec(i.g,1);  // i=(2x)^(p-1)/4 - 1
-        BIG_XXX_norm(i.g);
-        FP_YYY_mul(r,a,&v);
-        FP_YYY_mul(r,r,&i);
-        FP_YYY_reduce(r);
-    }
-    if (MOD8_YYY==3 || MOD8_YYY==7)
-    {
+    FP_YYY_mul(&i,&i,&v); // i=(2x)^(p+3)/8
+    FP_YYY_mul(&i,&i,&v); // i=(2x)^(p-1)/4
+    BIG_XXX_dec(i.g,1);  // i=(2x)^(p-1)/4 - 1
+    BIG_XXX_norm(i.g);
+    FP_YYY_mul(r,a,&v);
+    FP_YYY_mul(r,r,&i);
+    FP_YYY_reduce(r);
+#endif
+#if (MOD8_YYY==3 || MOD8_YYY==7)
 #if MODTYPE_YYY == PSEUDO_MERSENNE   || MODTYPE_YYY==GENERALISED_MERSENNE
         FP_YYY_fpow(r,a);
         FP_YYY_mul(r,r,a);
@@ -783,5 +807,5 @@
         BIG_XXX_fshr(b,2); /* (p+1)/4 */
         FP_YYY_pow(r,a,b);
 #endif
-    }
+#endif
 }
diff --git a/src/fp12.c.in b/src/fp12.c.in
index 4371cb8..c41e19b 100644
--- a/src/fp12.c.in
+++ b/src/fp12.c.in
@@ -29,12 +29,12 @@
 {
     sign32 x=b^c;
     x-=1;  // if x=0, x now -1
-    return (int)((x>>31)&1);
+    return (x>>31)&1;
 }
 
 
 /* Constant time select from pre-computed table */
-static void FP12_YYY_select(FP12_YYY *f,FP12_YYY g[],sign32 b)
+static void FP12_YYY_select(FP12_YYY *f,const FP12_YYY g[],sign32 b)
 {
     FP12_YYY invf;
     sign32 m=b>>31;
@@ -53,14 +53,14 @@
 
     FP12_YYY_copy(&invf,f);
     FP12_YYY_conj(&invf,&invf);  // 1/f
-    FP12_YYY_cmove(f,&invf,(int)(m&1));
+    FP12_YYY_cmove(f,&invf,m&1);
 }
 
 
 
 /* test x==0 ? */
 /* SU= 8 */
-int FP12_YYY_iszilch(FP12_YYY *x)
+int FP12_YYY_iszilch(const FP12_YYY *x)
 {
     if (FP4_YYY_iszilch(&(x->a)) && FP4_YYY_iszilch(&(x->b)) && FP4_YYY_iszilch(&(x->c))) return 1;
     return 0;
@@ -68,7 +68,7 @@
 
 /* test x==1 ? */
 /* SU= 8 */
-int FP12_YYY_isunity(FP12_YYY *x)
+int FP12_YYY_isunity(const FP12_YYY *x)
 {
     if (FP4_YYY_isunity(&(x->a)) && FP4_YYY_iszilch(&(x->b)) && FP4_YYY_iszilch(&(x->c))) return 1;
     return 0;
@@ -76,7 +76,7 @@
 
 /* FP12 copy w=x */
 /* SU= 16 */
-void FP12_YYY_copy(FP12_YYY *w,FP12_YYY *x)
+void FP12_YYY_copy(FP12_YYY *w,const FP12_YYY *x)
 {
     if (x==w) return;
     FP4_YYY_copy(&(w->a),&(x->a));
@@ -105,7 +105,7 @@
 
 /* return 1 if x==y, else 0 */
 /* SU= 16 */
-int FP12_YYY_equals(FP12_YYY *x,FP12_YYY *y)
+int FP12_YYY_equals(const FP12_YYY *x,const FP12_YYY *y)
 {
     if (FP4_YYY_equals(&(x->a),&(y->a)) && FP4_YYY_equals(&(x->b),&(y->b)) && FP4_YYY_equals(&(x->c),&(y->c)))
         return 1;
@@ -114,7 +114,7 @@
 
 /* Set w=conj(x) */
 /* SU= 8 */
-void FP12_YYY_conj(FP12_YYY *w,FP12_YYY *x)
+void FP12_YYY_conj(FP12_YYY *w,const FP12_YYY *x)
 {
     FP12_YYY_copy(w,x);
     FP4_YYY_conj(&(w->a),&(w->a));
@@ -124,7 +124,7 @@
 
 /* Create FP12 from FP4 */
 /* SU= 8 */
-void FP12_YYY_from_FP4(FP12_YYY *w,FP4_YYY *a)
+void FP12_YYY_from_FP4(FP12_YYY *w,const FP4_YYY *a)
 {
     FP4_YYY_copy(&(w->a),a);
     FP4_YYY_zero(&(w->b));
@@ -134,7 +134,7 @@
 
 /* Create FP12 from 3 FP4's */
 /* SU= 16 */
-void FP12_YYY_from_FP4s(FP12_YYY *w,FP4_YYY *a,FP4_YYY *b,FP4_YYY *c)
+void FP12_YYY_from_FP4s(FP12_YYY *w,const FP4_YYY *a,const FP4_YYY *b,const FP4_YYY *c)
 {
     FP4_YYY_copy(&(w->a),a);
     FP4_YYY_copy(&(w->b),b);
@@ -146,7 +146,10 @@
 /* SU= 600 */
 void FP12_YYY_usqr(FP12_YYY *w,FP12_YYY *x)
 {
-    FP4_YYY A,B,C,D;
+    FP4_YYY A;
+    FP4_YYY B;
+    FP4_YYY C;
+    FP4_YYY D;
 
     FP4_YYY_copy(&A,&(x->a));
 
@@ -190,7 +193,10 @@
 {
     /* Use Chung-Hasan SQR2 method from http://cacr.uwaterloo.ca/techreports/2006/cacr2006-24.pdf */
 
-    FP4_YYY A,B,C,D;
+    FP4_YYY A;
+    FP4_YYY B;
+    FP4_YYY C;
+    FP4_YYY D;
 
     if (x->type<=AMCL_FP_UNITY)
     {
@@ -242,9 +248,14 @@
 
 /* SU= 896 */
 /* FP12 full multiplication w=w*y */
-void FP12_YYY_mul(FP12_YYY *w,FP12_YYY *y)
+void FP12_YYY_mul(FP12_YYY *w,const FP12_YYY *y)
 {
-    FP4_YYY z0,z1,z2,z3,t0,t1;
+    FP4_YYY z0;
+    FP4_YYY z1;
+    FP4_YYY z2;
+    FP4_YYY z3;
+    FP4_YYY t0;
+    FP4_YYY t1;
 
     FP4_YYY_mul(&z0,&(w->a),&(y->a));
     FP4_YYY_mul(&z2,&(w->b),&(y->b));  //
@@ -299,9 +310,14 @@
 /* FP12 full multiplication w=w*y */
 /* Supports sparse multiplicands */
 /* Usually w is denser than y */
-void FP12_YYY_ssmul(FP12_YYY *w,FP12_YYY *y)
+void FP12_YYY_ssmul(FP12_YYY *w,const FP12_YYY *y)
 {
-    FP4_YYY z0,z1,z2,z3,t0,t1;
+    FP4_YYY z0;
+    FP4_YYY z1;
+    FP4_YYY z2;
+    FP4_YYY z3;
+    FP4_YYY t0;
+    FP4_YYY t1;
     if (w->type==AMCL_FP_UNITY)
     {
         FP12_YYY_copy(w,y);
@@ -477,12 +493,18 @@
 /* FP12 multiplication w=w*y */
 /* catering for special case that arises from special form of ATE pairing line function */
 /* w and y are both sparser line functions - cost = 6m */
-void FP12_YYY_smul(FP12_YYY *w,FP12_YYY *y)
+void FP12_YYY_smul(FP12_YYY *w,const FP12_YYY *y)
 {
-    FP2_YYY w1,w2,w3,ta,tb,tc,td,te,t;
+    FP2_YYY w1;
+    FP2_YYY w2;
+    FP2_YYY w3;
+    FP2_YYY ta;
+    FP2_YYY tb;
+    FP2_YYY tc;
+    FP2_YYY td;
+    FP2_YYY te;
+    FP2_YYY t;
 
-//	if (type==D_TYPE)
-//	{
 #if SEXTIC_TWIST_ZZZ == D_TYPE
     FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
     FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
@@ -524,7 +546,7 @@
     FP4_YYY_norm(&(w->a));
     FP4_YYY_norm(&(w->b));
 #endif
-//	} else {
+
 #if SEXTIC_TWIST_ZZZ == M_TYPE
     FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
     FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
@@ -581,7 +603,10 @@
 /* SU= 600 */
 void FP12_YYY_inv(FP12_YYY *w,FP12_YYY *x)
 {
-    FP4_YYY f0,f1,f2,f3;
+    FP4_YYY f0;
+    FP4_YYY f1;
+    FP4_YYY f2;
+    FP4_YYY f3;
 
     FP4_YYY_sqr(&f0,&(x->a));
     FP4_YYY_mul(&f1,&(x->b),&(x->c));
@@ -622,13 +647,13 @@
 
 void FP12_YYY_pinpow(FP12_YYY *r,int e,int bts)
 {
-    int i,b;
+    int b;
     FP12_YYY R[2];
 
     FP12_YYY_one(&R[0]);
     FP12_YYY_copy(&R[1],r);
 
-    for (i=bts-1; i>=0; i--)
+    for (int i=bts-1; i>=0; i--)
     {
         b=(e>>i)&1;
         FP12_YYY_mul(&R[1-b],&R[b]);
@@ -639,12 +664,18 @@
 
 /* Compressed powering of unitary elements y=x^(e mod r) */
 
-void FP12_YYY_compow(FP4_YYY *c,FP12_YYY *x,BIG_XXX e,BIG_XXX r)
+void FP12_YYY_compow(FP4_YYY *c,const FP12_YYY *x,const BIG_XXX e,const BIG_XXX r)
 {
-    FP12_YYY g1,g2;
-    FP4_YYY cp,cpm1,cpm2;
+    FP12_YYY g1;
+    FP12_YYY g2;
+    FP4_YYY cp;
+    FP4_YYY cpm1;
+    FP4_YYY cpm2;
     FP2_YYY f;
-    BIG_XXX q,a,b,m;
+    BIG_XXX q;
+    BIG_XXX a;
+    BIG_XXX b;
+    BIG_XXX m;
 
     BIG_XXX_rcopy(a,Fra_YYY);
     BIG_XXX_rcopy(b,Frb_YYY);
@@ -689,11 +720,14 @@
 /* set r=a^b */
 /* Note this is simple square and multiply, so not side-channel safe */
 
-void FP12_YYY_pow(FP12_YYY *r,FP12_YYY *a,BIG_XXX b)
+void FP12_YYY_pow(FP12_YYY *r,const FP12_YYY *a,const BIG_XXX b)
 {
-    FP12_YYY w,sf;
-    BIG_XXX b1,b3;
-    int i,nb,bt;
+    FP12_YYY w;
+    FP12_YYY sf;
+    BIG_XXX b1;
+    BIG_XXX b3;
+    int nb;
+    int bt;
     BIG_XXX_copy(b1,b);
     BIG_XXX_norm(b1);
     BIG_XXX_pmul(b3,b1,3);
@@ -705,7 +739,7 @@
 
 
     nb=BIG_XXX_nbits(b3);
-    for (i=nb-2; i>=1; i--)
+    for (int i=nb-2; i>=1; i--)
     {
         FP12_YYY_usqr(&w,&w);
         bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
@@ -728,18 +762,23 @@
 // Bos & Costello https://eprint.iacr.org/2013/458.pdf
 // Faz-Hernandez & Longa & Sanchez  https://eprint.iacr.org/2013/158.pdf
 
-void FP12_YYY_pow4(FP12_YYY *p,FP12_YYY *q,BIG_XXX u[4])
+void FP12_YYY_pow4(FP12_YYY *p,const FP12_YYY *q,const BIG_XXX u[4])
 {
-    int i,j,k,nb,pb,bt;
-    FP12_YYY g[8],r;
-    BIG_XXX t[4],mt;
-    sign8 w[NLEN_XXX*BASEBITS_XXX+1];
+    int i;
+    int k;
+    int nb;
+    int pb;
+    int bt;
+    FP12_YYY g[8];
+    FP12_YYY r;
+    BIG_XXX t[4];
+    BIG_XXX mt;
+    sign8 w[NLEN_XXX*BASEBITS_XXX+1] = {0};
     sign8 s[NLEN_XXX*BASEBITS_XXX+1];
 
     for (i=0; i<4; i++)
         BIG_XXX_copy(t[i],u[i]);
 
-
 // Precomputed table
     FP12_YYY_copy(&g[0],&q[0]); // q[0]
     FP12_YYY_copy(&g[1],&g[0]);
@@ -775,15 +814,14 @@
     for (i=0; i<nb-1; i++)
     {
         BIG_XXX_fshr(t[0],1);
-        s[i]=2*BIG_XXX_parity(t[0])-1;
+        s[i]=(signed char)(2*BIG_XXX_parity(t[0])-1);
     }
 
 // Recoded exponent
     for (i=0; i<nb; i++)
     {
-        w[i]=0;
         k=1;
-        for (j=1; j<4; j++)
+        for (int j=1; j<4; j++)
         {
             bt=s[i]*BIG_XXX_parity(t[j]);
             BIG_XXX_fshr(t[j],1);
@@ -809,13 +847,18 @@
     FP12_YYY_cmove(p,&r,pb);
 
     FP12_YYY_reduce(p);
+
+    // zeroization
+    for (i=0; i<4; i++)
+        BIG_XXX_zero(t[i]);
 }
 
 /* Set w=w^p using Frobenius */
 /* SU= 160 */
-void FP12_YYY_frob(FP12_YYY *w,FP2_YYY *f)
+void FP12_YYY_frob(FP12_YYY *w,const FP2_YYY *f)
 {
-    FP2_YYY f2,f3;
+    FP2_YYY f2;
+    FP2_YYY f3;
     FP2_YYY_sqr(&f2,f);     /* f2=f^2 */
     FP2_YYY_mul(&f3,&f2,f); /* f3=f^3 */
 
@@ -848,7 +891,7 @@
 
 /* trace function w=trace(x) */
 /* SU= 8 */
-void FP12_YYY_trace(FP4_YYY *w,FP12_YYY *x)
+void FP12_YYY_trace(FP4_YYY *w,const FP12_YYY *x)
 {
     FP4_YYY_imul(w,&(x->a),3);
     FP4_YYY_reduce(w);
@@ -869,7 +912,7 @@
 
 /* SU= 64 */
 /* Convert g to octet string w */
-void FP12_YYY_toOctet(octet *W,FP12_YYY *g)
+void FP12_YYY_toOctet(octet *W,const FP12_YYY *g)
 {
     BIG_XXX a;
     W->len=12*MODBYTES_XXX;
@@ -902,7 +945,7 @@
 
 /* SU= 24 */
 /* Restore g from octet string w */
-void FP12_YYY_fromOctet(FP12_YYY *g,octet *W)
+void FP12_YYY_fromOctet(FP12_YYY *g,const octet *W)
 {
     BIG_XXX b;
     BIG_XXX_fromBytes(b,&W->val[0]);
@@ -932,7 +975,7 @@
 }
 
 /* Move b to a if d=1 */
-void FP12_YYY_cmove(FP12_YYY *f,FP12_YYY *g,int d)
+void FP12_YYY_cmove(FP12_YYY *f,const FP12_YYY *g,int d)
 {
     FP4_YYY_cmove(&(f->a),&(g->a),d);
     FP4_YYY_cmove(&(f->b),&(g->b),d);
diff --git a/src/fp16.c.in b/src/fp16.c.in
index 0f37181..067bc9b 100644
--- a/src/fp16.c.in
+++ b/src/fp16.c.in
@@ -173,7 +173,7 @@
 }
 
 /* Set w=s*x, where s is int */
-void FP16_YYY_imul(FP16_YYY *w,FP16_YYY *x,int s)
+void FP16_YYY_imul(FP16_YYY *w,const FP16_YYY *x,int s)
 {
     FP8_YYY_imul(&(w->a),&(x->a),s);
     FP8_YYY_imul(&(w->b),&(x->b),s);
diff --git a/src/fp2.c.in b/src/fp2.c.in
index 5e7e8eb..46affc5 100644
--- a/src/fp2.c.in
+++ b/src/fp2.c.in
@@ -26,14 +26,14 @@
 
 /* test x==0 ? */
 /* SU= 8 */
-int FP2_YYY_iszilch(FP2_YYY *x)
+int FP2_YYY_iszilch(const FP2_YYY *x)
 {
     if (FP_YYY_iszilch(&(x->a)) && FP_YYY_iszilch(&(x->b))) return 1;
     return 0;
 }
 
 /* Move b to a if d=1 */
-void FP2_YYY_cmove(FP2_YYY *f,FP2_YYY *g,int d)
+void FP2_YYY_cmove(FP2_YYY *f,const FP2_YYY *g,int d)
 {
     FP_YYY_cmove(&(f->a),&(g->a),d);
     FP_YYY_cmove(&(f->b),&(g->b),d);
@@ -41,7 +41,7 @@
 
 /* test x==1 ? */
 /* SU= 48 */
-int FP2_YYY_isunity(FP2_YYY *x)
+int FP2_YYY_isunity(const FP2_YYY *x)
 {
     FP_YYY one;
     FP_YYY_one(&one);
@@ -59,7 +59,7 @@
 
 /* return 1 if x==y, else 0 */
 /* SU= 16 */
-int FP2_YYY_equals(FP2_YYY *x,FP2_YYY *y)
+int FP2_YYY_equals(const FP2_YYY *x,const FP2_YYY *y)
 {
     if (FP_YYY_equals(&(x->a),&(y->a)) && FP_YYY_equals(&(x->b),&(y->b)))
         return 1;
@@ -68,7 +68,7 @@
 
 /* Create FP2 from two FPs */
 /* SU= 16 */
-void FP2_YYY_from_FPs(FP2_YYY *w,FP_YYY *x,FP_YYY *y)
+void FP2_YYY_from_FPs(FP2_YYY *w,const FP_YYY *x,const FP_YYY *y)
 {
     FP_YYY_copy(&(w->a),x);
     FP_YYY_copy(&(w->b),y);
@@ -76,7 +76,7 @@
 
 /* Create FP2 from two BIGS */
 /* SU= 16 */
-void FP2_YYY_from_BIGs(FP2_YYY *w,BIG_XXX x,BIG_XXX y)
+void FP2_YYY_from_BIGs(FP2_YYY *w,const BIG_XXX x,const BIG_XXX y)
 {
     FP_YYY_nres(&(w->a),x);
     FP_YYY_nres(&(w->b),y);
@@ -84,7 +84,7 @@
 
 /* Create FP2 from FP */
 /* SU= 8 */
-void FP2_YYY_from_FP(FP2_YYY *w,FP_YYY *x)
+void FP2_YYY_from_FP(FP2_YYY *w,const FP_YYY *x)
 {
     FP_YYY_copy(&(w->a),x);
     FP_YYY_zero(&(w->b));
@@ -92,7 +92,7 @@
 
 /* Create FP2 from BIG */
 /* SU= 8 */
-void FP2_YYY_from_BIG(FP2_YYY *w,BIG_XXX x)
+void FP2_YYY_from_BIG(FP2_YYY *w,const BIG_XXX x)
 {
     FP_YYY_nres(&(w->a),x);
     FP_YYY_zero(&(w->b));
@@ -100,7 +100,7 @@
 
 /* FP2 copy w=x */
 /* SU= 16 */
-void FP2_YYY_copy(FP2_YYY *w,FP2_YYY *x)
+void FP2_YYY_copy(FP2_YYY *w,const FP2_YYY *x)
 {
     if (w==x) return;
     FP_YYY_copy(&(w->a),&(x->a));
@@ -126,10 +126,11 @@
 
 /* Set w=-x */
 /* SU= 88 */
-void FP2_YYY_neg(FP2_YYY *w,FP2_YYY *x)
+void FP2_YYY_neg(FP2_YYY *w,const FP2_YYY *x)
 {
     /* Just one neg! */
-    FP_YYY m,t;
+    FP_YYY m;
+    FP_YYY t;
     FP_YYY_add(&m,&(x->a),&(x->b));
     FP_YYY_neg(&m,&m);
     FP_YYY_add(&t,&m,&(x->b));
@@ -140,7 +141,7 @@
 
 /* Set w=conj(x) */
 /* SU= 16 */
-void FP2_YYY_conj(FP2_YYY *w,FP2_YYY *x)
+void FP2_YYY_conj(FP2_YYY *w,const FP2_YYY *x)
 {
     FP_YYY_copy(&(w->a),&(x->a));
     FP_YYY_neg(&(w->b),&(x->b));
@@ -149,7 +150,7 @@
 
 /* Set w=x+y */
 /* SU= 16 */
-void FP2_YYY_add(FP2_YYY *w,FP2_YYY *x,FP2_YYY *y)
+void FP2_YYY_add(FP2_YYY *w,const FP2_YYY *x,const FP2_YYY *y)
 {
     FP_YYY_add(&(w->a),&(x->a),&(y->a));
     FP_YYY_add(&(w->b),&(x->b),&(y->b));
@@ -157,7 +158,7 @@
 
 /* Set w=x-y */
 /* Input y MUST be normed */
-void FP2_YYY_sub(FP2_YYY *w,FP2_YYY *x,FP2_YYY *y)
+void FP2_YYY_sub(FP2_YYY *w,const FP2_YYY *x,const FP2_YYY *y)
 {
     FP2_YYY m;
     FP2_YYY_neg(&m,y);
@@ -166,7 +167,7 @@
 
 /* Set w=s*x, where s is FP */
 /* SU= 16 */
-void FP2_YYY_pmul(FP2_YYY *w,FP2_YYY *x,FP_YYY *s)
+void FP2_YYY_pmul(FP2_YYY *w,const FP2_YYY *x,const FP_YYY *s)
 {
     FP_YYY_mul(&(w->a),&(x->a),s);
     FP_YYY_mul(&(w->b),&(x->b),s);
@@ -174,7 +175,7 @@
 
 /* SU= 16 */
 /* Set w=s*x, where s is int */
-void FP2_YYY_imul(FP2_YYY *w,FP2_YYY *x,int s)
+void FP2_YYY_imul(FP2_YYY *w,const FP2_YYY *x,int s)
 {
     FP_YYY_imul(&(w->a),&(x->a),s);
     FP_YYY_imul(&(w->b),&(x->b),s);
@@ -182,9 +183,11 @@
 
 /* Set w=x^2 */
 /* SU= 128 */
-void FP2_YYY_sqr(FP2_YYY *w,FP2_YYY *x)
+void FP2_YYY_sqr(FP2_YYY *w,const FP2_YYY *x)
 {
-    FP_YYY w1,w3,mb;
+    FP_YYY w1;
+    FP_YYY w3;
+    FP_YYY mb;
 
     FP_YYY_add(&w1,&(x->a),&(x->b));
     FP_YYY_neg(&mb,&(x->b));
@@ -204,10 +207,16 @@
 /* Set w=x*y */
 /* Inputs MUST be normed  */
 /* Now uses Lazy reduction */
-void FP2_YYY_mul(FP2_YYY *w,FP2_YYY *x,FP2_YYY *y)
+void FP2_YYY_mul(FP2_YYY *w,FP2_YYY *x,const FP2_YYY *y)
 {
-    DBIG_XXX A,B,E,F,pR;
-    BIG_XXX C,D,p;
+    DBIG_XXX A;
+    DBIG_XXX B;
+    DBIG_XXX E;
+    DBIG_XXX F;
+    DBIG_XXX pR;
+    BIG_XXX C;
+    BIG_XXX D;
+    BIG_XXX p;
 
     BIG_XXX_rcopy(p,Modulus_YYY);
     BIG_XXX_dsucopy(pR,p);
@@ -251,7 +260,8 @@
 /* SU= 16 */
 void FP2_YYY_output(FP2_YYY *w)
 {
-    BIG_XXX bx,by;
+    BIG_XXX bx;
+    BIG_XXX by;
     FP2_YYY_reduce(w);
     FP_YYY_redc(bx,&(w->a));
     FP_YYY_redc(by,&(w->b));
@@ -265,7 +275,7 @@
 }
 
 /* SU= 8 */
-void FP2_YYY_rawoutput(FP2_YYY *w)
+void FP2_YYY_rawoutput(const FP2_YYY *w)
 {
     printf("[");
     BIG_XXX_rawoutput(w->a.g);
@@ -279,7 +289,8 @@
 /* SU= 128 */
 void FP2_YYY_inv(FP2_YYY *w,FP2_YYY *x)
 {
-    FP_YYY w1,w2;
+    FP_YYY w1;
+    FP_YYY w2;
 
     FP2_YYY_norm(x);
     FP_YYY_sqr(&w1,&(x->a));
@@ -297,7 +308,7 @@
 
 /* Set w=x/2 */
 /* SU= 16 */
-void FP2_YYY_div2(FP2_YYY *w,FP2_YYY *x)
+void FP2_YYY_div2(FP2_YYY *w,const FP2_YYY *x)
 {
     FP_YYY_div2(&(w->a),&(x->a));
     FP_YYY_div2(&(w->b),&(x->b));
@@ -354,11 +365,12 @@
 
 /* Set w=a^b mod m */
 /* SU= 208 */
-void FP2_YYY_pow(FP2_YYY *r,FP2_YYY* a,BIG_XXX b)
+void FP2_YYY_pow(FP2_YYY *r,const FP2_YYY* a,BIG_XXX b)
 {
     FP2_YYY w;
     FP_YYY one;
-    BIG_XXX z,zilch;
+    BIG_XXX z;
+    BIG_XXX zilch;
     int bt;
 
     BIG_XXX_norm(b);
@@ -381,9 +393,10 @@
 /* sqrt(a+ib) = sqrt(a+sqrt(a*a-n*b*b)/2)+ib/(2*sqrt(a+sqrt(a*a-n*b*b)/2)) */
 /* returns true if u is QR */
 
-int FP2_YYY_sqrt(FP2_YYY *w,FP2_YYY *u)
+int FP2_YYY_sqrt(FP2_YYY *w,const FP2_YYY *u)
 {
-    FP_YYY w1,w2;
+    FP_YYY w1;
+    FP_YYY w2;
     FP2_YYY_copy(w,u);
     if (FP2_YYY_iszilch(w)) return 1;
 
diff --git a/src/fp4.c.in b/src/fp4.c.in
index 3e3b64b..e14b81b 100644
--- a/src/fp4.c.in
+++ b/src/fp4.c.in
@@ -26,7 +26,7 @@
 
 /* test x==0 ? */
 /* SU= 8 */
-int FP4_YYY_iszilch(FP4_YYY *x)
+int FP4_YYY_iszilch(const FP4_YYY *x)
 {
     if (FP2_YYY_iszilch(&(x->a)) && FP2_YYY_iszilch(&(x->b))) return 1;
     return 0;
@@ -34,21 +34,21 @@
 
 /* test x==1 ? */
 /* SU= 8 */
-int FP4_YYY_isunity(FP4_YYY *x)
+int FP4_YYY_isunity(const FP4_YYY *x)
 {
     if (FP2_YYY_isunity(&(x->a)) && FP2_YYY_iszilch(&(x->b))) return 1;
     return 0;
 }
 
 /* test is w real? That is in a+ib test b is zero */
-int FP4_YYY_isreal(FP4_YYY *w)
+int FP4_YYY_isreal(const FP4_YYY *w)
 {
     return FP2_YYY_iszilch(&(w->b));
 }
 
 /* return 1 if x==y, else 0 */
 /* SU= 16 */
-int FP4_YYY_equals(FP4_YYY *x,FP4_YYY *y)
+int FP4_YYY_equals(const FP4_YYY *x,const FP4_YYY *y)
 {
     if (FP2_YYY_equals(&(x->a),&(y->a)) && FP2_YYY_equals(&(x->b),&(y->b)))
         return 1;
@@ -57,7 +57,7 @@
 
 /* set FP4 from two FP2s */
 /* SU= 16 */
-void FP4_YYY_from_FP2s(FP4_YYY *w,FP2_YYY * x,FP2_YYY* y)
+void FP4_YYY_from_FP2s(FP4_YYY *w,const FP2_YYY * x,const FP2_YYY* y)
 {
     FP2_YYY_copy(&(w->a), x);
     FP2_YYY_copy(&(w->b), y);
@@ -65,7 +65,7 @@
 
 /* set FP4 from FP2 */
 /* SU= 8 */
-void FP4_YYY_from_FP2(FP4_YYY *w,FP2_YYY *x)
+void FP4_YYY_from_FP2(FP4_YYY *w,const FP2_YYY *x)
 {
     FP2_YYY_copy(&(w->a), x);
     FP2_YYY_zero(&(w->b));
@@ -73,7 +73,7 @@
 
 /* set high part of FP4 from FP2 */
 /* SU= 8 */
-void FP4_YYY_from_FP2H(FP4_YYY *w,FP2_YYY *x)
+void FP4_YYY_from_FP2H(FP4_YYY *w,const FP2_YYY *x)
 {
     FP2_YYY_copy(&(w->b), x);
     FP2_YYY_zero(&(w->a));
@@ -81,7 +81,7 @@
 
 /* FP4 copy w=x */
 /* SU= 16 */
-void FP4_YYY_copy(FP4_YYY *w,FP4_YYY *x)
+void FP4_YYY_copy(FP4_YYY *w,const FP4_YYY *x)
 {
     if (w==x) return;
     FP2_YYY_copy(&(w->a), &(x->a));
@@ -109,7 +109,8 @@
 void FP4_YYY_neg(FP4_YYY *w,FP4_YYY *x)
 {
     /* Just one field neg */
-    FP2_YYY m,t;
+    FP2_YYY m;
+    FP2_YYY t;
     FP4_YYY_norm(x);
     FP2_YYY_add(&m,&(x->a),&(x->b));
     FP2_YYY_neg(&m,&m);
@@ -121,7 +122,7 @@
 
 /* Set w=conj(x) */
 /* SU= 16 */
-void FP4_YYY_conj(FP4_YYY *w,FP4_YYY *x)
+void FP4_YYY_conj(FP4_YYY *w,const FP4_YYY *x)
 {
     FP2_YYY_copy(&(w->a), &(x->a));
     FP2_YYY_neg(&(w->b), &(x->b));
@@ -130,7 +131,7 @@
 
 /* Set w=-conj(x) */
 /* SU= 16 */
-void FP4_YYY_nconj(FP4_YYY *w,FP4_YYY *x)
+void FP4_YYY_nconj(FP4_YYY *w,const FP4_YYY *x)
 {
     FP2_YYY_copy(&(w->b),&(x->b));
     FP2_YYY_neg(&(w->a), &(x->a));
@@ -139,7 +140,7 @@
 
 /* Set w=x+y */
 /* SU= 16 */
-void FP4_YYY_add(FP4_YYY *w,FP4_YYY *x,FP4_YYY *y)
+void FP4_YYY_add(FP4_YYY *w,const FP4_YYY *x,const FP4_YYY *y)
 {
     FP2_YYY_add(&(w->a), &(x->a), &(y->a));
     FP2_YYY_add(&(w->b), &(x->b), &(y->b));
@@ -147,7 +148,7 @@
 
 /* Set w=x-y */
 /* Input y MUST be normed */
-void FP4_YYY_sub(FP4_YYY *w,FP4_YYY *x,FP4_YYY *y)
+void FP4_YYY_sub(FP4_YYY *w,const FP4_YYY *x,FP4_YYY *y)
 {
     FP4_YYY my;
     FP4_YYY_neg(&my, y);
@@ -171,14 +172,14 @@
 
 /* Set w=s*x, where s is FP2 */
 /* SU= 16 */
-void FP4_YYY_pmul(FP4_YYY *w,FP4_YYY *x,FP2_YYY *s)
+void FP4_YYY_pmul(FP4_YYY *w,FP4_YYY *x,const FP2_YYY *s)
 {
     FP2_YYY_mul(&(w->a),&(x->a),s);
     FP2_YYY_mul(&(w->b),&(x->b),s);
 }
 
 /* Set w=s*x, where s is FP */
-void FP4_YYY_qmul(FP4_YYY *w,FP4_YYY *x,FP_YYY *s)
+void FP4_YYY_qmul(FP4_YYY *w,const FP4_YYY *x,const FP_YYY *s)
 {
     FP2_YYY_pmul(&(w->a),&(x->a),s);
     FP2_YYY_pmul(&(w->b),&(x->b),s);
@@ -186,7 +187,7 @@
 
 /* SU= 16 */
 /* Set w=s*x, where s is int */
-void FP4_YYY_imul(FP4_YYY *w,FP4_YYY *x,int s)
+void FP4_YYY_imul(FP4_YYY *w,const FP4_YYY *x,int s)
 {
     FP2_YYY_imul(&(w->a),&(x->a),s);
     FP2_YYY_imul(&(w->b),&(x->b),s);
@@ -196,7 +197,9 @@
 /* Input MUST be normed  */
 void FP4_YYY_sqr(FP4_YYY *w,FP4_YYY *x)
 {
-    FP2_YYY t1,t2,t3;
+    FP2_YYY t1;
+    FP2_YYY t2;
+    FP2_YYY t3;
 
     FP2_YYY_mul(&t3,&(x->a),&(x->b)); /* norms x */
     FP2_YYY_copy(&t2,&(x->b));
@@ -225,10 +228,13 @@
 
 /* Set w=x*y */
 /* Inputs MUST be normed  */
-void FP4_YYY_mul(FP4_YYY *w,FP4_YYY *x,FP4_YYY *y)
+void FP4_YYY_mul(FP4_YYY *w,FP4_YYY *x,const FP4_YYY *y)
 {
 
-    FP2_YYY t1,t2,t3,t4;
+    FP2_YYY t1;
+    FP2_YYY t2;
+    FP2_YYY t3;
+    FP2_YYY t4;
     FP2_YYY_mul(&t1,&(x->a),&(y->a));
     FP2_YYY_mul(&t2,&(x->b),&(y->b));
 
@@ -265,7 +271,7 @@
 }
 
 /* SU= 8 */
-void FP4_YYY_rawoutput(FP4_YYY *w)
+void FP4_YYY_rawoutput(const FP4_YYY *w)
 {
     printf("[");
     FP2_YYY_rawoutput(&(w->a));
@@ -276,9 +282,10 @@
 
 /* Set w=1/x */
 /* SU= 160 */
-void FP4_YYY_inv(FP4_YYY *w,FP4_YYY *x)
+void FP4_YYY_inv(FP4_YYY *w,const FP4_YYY *x)
 {
-    FP2_YYY t1,t2;
+    FP2_YYY t1;
+    FP2_YYY t2;
     FP2_YYY_sqr(&t1,&(x->a));
     FP2_YYY_sqr(&t2,&(x->b));
     FP2_YYY_mul_ip(&t2);
@@ -296,7 +303,8 @@
 void FP4_YYY_times_i(FP4_YYY *w)
 {
     FP_YYY z;
-    FP2_YYY s,t;
+    FP2_YYY s;
+    FP2_YYY t;
     FP2_YYY_copy(&t,&(w->b));
 
     FP2_YYY_copy(&s,&t);
@@ -323,10 +331,11 @@
 
 /* Set r=a^b mod m */
 /* SU= 240 */
-void FP4_YYY_pow(FP4_YYY *r,FP4_YYY* a,BIG_XXX b)
+void FP4_YYY_pow(FP4_YYY *r,const FP4_YYY* a,const BIG_XXX b)
 {
     FP4_YYY w;
-    BIG_XXX z,zilch;
+    BIG_XXX z;
+    BIG_XXX zilch;
     int bt;
 
     BIG_XXX_zero(zilch);
@@ -350,9 +359,10 @@
 
 /* SU= 304 */
 /* XTR xtr_a function */
-void FP4_YYY_xtr_A(FP4_YYY *r,FP4_YYY *w,FP4_YYY *x,FP4_YYY *y,FP4_YYY *z)
+void FP4_YYY_xtr_A(FP4_YYY *r,const FP4_YYY *w,const FP4_YYY *x,FP4_YYY *y,const FP4_YYY *z)
 {
-    FP4_YYY t1,t2;
+    FP4_YYY t1;
+    FP4_YYY t2;
     FP4_YYY_copy(r,x);
     FP4_YYY_sub(&t1,w,y);
     FP4_YYY_norm(&t1);
@@ -370,7 +380,7 @@
 
 /* SU= 152 */
 /* XTR xtr_d function */
-void FP4_YYY_xtr_D(FP4_YYY *r,FP4_YYY *x)
+void FP4_YYY_xtr_D(FP4_YYY *r,const FP4_YYY *x)
 {
     FP4_YYY w;
     FP4_YYY_copy(r,x);
@@ -384,12 +394,17 @@
 
 /* SU= 728 */
 /* r=x^n using XTR method on traces of FP12s */
-void FP4_YYY_xtr_pow(FP4_YYY *r,FP4_YYY *x,BIG_XXX n)
+void FP4_YYY_xtr_pow(FP4_YYY *r,const FP4_YYY *x,const BIG_XXX n)
 {
-    int i,par,nb;
+    int par;
+    int nb;
     BIG_XXX v;
     FP2_YYY w;
-    FP4_YYY t,a,b,c,sf;
+    FP4_YYY t;
+    FP4_YYY a;
+    FP4_YYY b;
+    FP4_YYY c;
+    FP4_YYY sf;
 
     BIG_XXX_zero(v);
     BIG_XXX_inc(v,3);
@@ -413,7 +428,7 @@
     }
 
     nb=BIG_XXX_nbits(v);
-    for (i=nb-1; i>=0; i--)
+    for (int i=nb-1; i>=0; i--)
     {
         if (!BIG_XXX_bit(v,i))
         {
@@ -441,11 +456,17 @@
 
 /* SU= 872 */
 /* r=ck^a.cl^n using XTR double exponentiation method on traces of FP12s. See Stam thesis. */
-void FP4_YYY_xtr_pow2(FP4_YYY *r,FP4_YYY *ck,FP4_YYY *cl,FP4_YYY *ckml,FP4_YYY *ckm2l,BIG_XXX a,BIG_XXX b)
+void FP4_YYY_xtr_pow2(FP4_YYY *r,const FP4_YYY *ck,const FP4_YYY *cl,const FP4_YYY *ckml,const FP4_YYY *ckm2l,const BIG_XXX a,const BIG_XXX b)
 {
-    int i,f2;
-    BIG_XXX d,e,w;
-    FP4_YYY t,cu,cv,cumv,cum2v;
+    int f2;
+    BIG_XXX d;
+    BIG_XXX e;
+    BIG_XXX w;
+    FP4_YYY t;
+    FP4_YYY cu;
+    FP4_YYY cv;
+    FP4_YYY cumv;
+    FP4_YYY cum2v;
 
 
     BIG_XXX_copy(e,a);
@@ -569,12 +590,12 @@
         }
     }
     FP4_YYY_xtr_A(r,&cu,&cv,&cumv,&cum2v);
-    for (i=0; i<f2; i++)	FP4_YYY_xtr_D(r,r);
+    for (int i=0; i<f2; i++)	FP4_YYY_xtr_D(r,r);
     FP4_YYY_xtr_pow(r,r,d);
 }
 
 /* Move b to a if d=1 */
-void FP4_YYY_cmove(FP4_YYY *f,FP4_YYY *g,int d)
+void FP4_YYY_cmove(FP4_YYY *f,const FP4_YYY *g,int d)
 {
     FP2_YYY_cmove(&(f->a),&(g->a),d);
     FP2_YYY_cmove(&(f->b),&(g->b),d);
@@ -583,7 +604,7 @@
 /* New stuff for ECp4 support */
 
 /* Set w=x/2 */
-void FP4_YYY_div2(FP4_YYY *w,FP4_YYY *x)
+void FP4_YYY_div2(FP4_YYY *w,const FP4_YYY *x)
 {
     FP2_YYY_div2(&(w->a),&(x->a));
     FP2_YYY_div2(&(w->b),&(x->b));
diff --git a/src/fp8.c.in b/src/fp8.c.in
index e4557df..2563a08 100644
--- a/src/fp8.c.in
+++ b/src/fp8.c.in
@@ -173,14 +173,14 @@
 }
 
 /* Set w=s*x, where s is FP2 */
-void FP8_YYY_tmul(FP8_YYY *w,FP8_YYY *x,FP_YYY *s)
+void FP8_YYY_tmul(FP8_YYY *w,const FP8_YYY *x,FP_YYY *s)
 {
     FP4_YYY_qmul(&(w->a),&(x->a),s);
     FP4_YYY_qmul(&(w->b),&(x->b),s);
 }
 
 /* Set w=s*x, where s is int */
-void FP8_YYY_imul(FP8_YYY *w,FP8_YYY *x,int s)
+void FP8_YYY_imul(FP8_YYY *w,const FP8_YYY *x,int s)
 {
     FP4_YYY_imul(&(w->a),&(x->a),s);
     FP4_YYY_imul(&(w->b),&(x->b),s);
diff --git a/src/gcm.c b/src/gcm.c
index 3bd9b8d..7d91c6b 100644
--- a/src/gcm.c
+++ b/src/gcm.c
@@ -20,12 +20,12 @@
 /*
  * Implementation of the AES-GCM Encryption/Authentication
  *
- * Some restrictions..
+ * Some restrictions:
  * 1. Only for use with AES
  * 2. Returned tag is always 128-bits. Truncate at your own risk.
  * 3. The order of function calls must follow some rules
  *
- * Typical sequence of calls..
+ * Typical sequence of calls:
  * 1. call GCM_init
  * 2. call GCM_add_header any number of times, as long as length of header is multiple of 16 bytes (block size)
  * 3. call GCM_add_header one last time with any length of header
@@ -37,7 +37,6 @@
  */
 /* SU=m, m is Stack Usage */
 
-#include <stdlib.h>
 #include <string.h>
 #include "arch.h"
 #include "amcl.h"
@@ -60,13 +59,16 @@
     b[0]=MR_TOBYTE(a>>24);
 }
 
-static void precompute(gcm *g,uchar *H)
+static void precompute(gcm *g,const uchar *H)
 {
     /* precompute small 2k bytes gf2m table of x^n.H */
-    int i,j;
-    unsign32 *last,*next,b;
+    int i;
+    int j;
+    const unsign32 *last;
+    unsign32 *next;
+    unsign32 b;
 
-    for (i=j=0; i<NB; i++,j+=4) g->table[0][i]=pack((uchar *)&H[j]);
+    for (i=j=0; i<NB; i++,j+=4) g->table[0][i]=pack(&H[j]);
 
     for (i=1; i<128; i++)
     {
@@ -86,7 +88,9 @@
 static void gf2mul(gcm *g)
 {
     /* gf2m mul - Z=H*X mod 2^128 */
-    int i,j,m,k;
+    int i;
+    int j;
+    int m;
     unsign32 P[4];
     unsign32 b;
 
@@ -97,7 +101,7 @@
     {
         b=(unsign32)(g->stateX[m]>>(--j))&1;
         b=~b+1;
-        for (k=0; k<NB; k++) P[k]^=(g->table[i][k]&b);
+        for (int k=0; k<NB; k++) P[k]^=(g->table[i][k]&b);
         if (j==0)
         {
             j=8;
@@ -105,14 +109,15 @@
             if (m==16) break;
         }
     }
-    for (i=j=0; i<NB; i++,j+=4) unpack(P[i],(uchar *)&g->stateX[j]);
+    for (i=j=0; i<NB; i++,j+=4) unpack(P[i],&g->stateX[j]);
 }
 
 /* SU= 32 */
 static void GCM_wrap(gcm *g)
 {
     /* Finish off GHASH */
-    int i,j;
+    int i;
+    int j;
     unsign32 F[4];
     uchar L[16];
 
@@ -121,23 +126,23 @@
     F[1]=g->lenA[1]<<3;
     F[2]=(g->lenC[0]<<3)|(g->lenC[1]&0xE0000000)>>29;
     F[3]=g->lenC[1]<<3;
-    for (i=j=0; i<NB; i++,j+=4) unpack(F[i],(uchar *)&L[j]);
+    for (i=j=0; i<NB; i++,j+=4) unpack(F[i],&L[j]);
 
     for (i=0; i<16; i++) g->stateX[i]^=L[i];
     gf2mul(g);
 }
 
-static int GCM_ghash(gcm *g,char *plain,int len)
+static int GCM_ghash(gcm *g,const char *plain,int len)
 {
-    int i,j=0;
+    int j=0;
     if (g->status==GCM_ACCEPTING_HEADER) g->status=GCM_ACCEPTING_CIPHER;
     if (g->status!=GCM_ACCEPTING_CIPHER) return 0;
 
     while (j<len)
     {
-        for (i=0; i<16 && j<len; i++)
+        for (int i=0; i<16 && j<len; i++,j++)
         {
-            g->stateX[i]^=plain[j++];
+            g->stateX[i]^=plain[j];
             g->lenC[1]++;
             if (g->lenC[1]==0) g->lenC[0]++;
         }
@@ -149,12 +154,11 @@
 
 /* SU= 48 */
 /* Initialize GCM mode */
-void GCM_init(gcm* g,int nk,char *key,int niv,char *iv)
+void GCM_init(gcm* g,int nk,char *key,int niv,const char *iv)
 {
     /* iv size niv is usually 12 bytes (96 bits). AES key size nk can be 16,24 or 32 bytes */
-    int i;
     uchar H[16];
-    for (i=0; i<16; i++)
+    for (int i=0; i<16; i++)
     {
         H[i]=0;
         g->stateX[i]=0;
@@ -167,16 +171,16 @@
     g->lenA[0]=g->lenC[0]=g->lenA[1]=g->lenC[1]=0;
     if (niv==12)
     {
-        for (i=0; i<12; i++) g->a.f[i]=iv[i];
+        for (int i=0; i<12; i++) g->a.f[i]=iv[i];
         unpack((unsign32)1,(uchar *)&(g->a.f[12]));  /* initialise IV */
-        for (i=0; i<16; i++) g->Y_0[i]=g->a.f[i];
+        for (int i=0; i<16; i++) g->Y_0[i]=g->a.f[i];
     }
     else
     {
         g->status=GCM_ACCEPTING_CIPHER;
         GCM_ghash(g,iv,niv); /* GHASH(H,0,IV) */
         GCM_wrap(g);
-        for (i=0; i<16; i++)
+        for (int i=0; i<16; i++)
         {
             g->a.f[i]=g->stateX[i];
             g->Y_0[i]=g->a.f[i];
@@ -189,17 +193,17 @@
 
 /* SU= 24 */
 /* Add Header data - included but not encrypted */
-int GCM_add_header(gcm* g,char *header,int len)
+int GCM_add_header(gcm* g,const char *header,int len)
 {
     /* Add some header. Won't be encrypted, but will be authenticated. len is length of header */
-    int i,j=0;
+    int j=0;
     if (g->status!=GCM_ACCEPTING_HEADER) return 0;
 
     while (j<len)
     {
-        for (i=0; i<16 && j<len; i++)
+        for (int i=0; i<16 && j<len; i++,j++)
         {
-            g->stateX[i]^=header[j++];
+            g->stateX[i]^=header[j];
             g->lenA[1]++;
             if (g->lenA[1]==0) g->lenA[0]++;
         }
@@ -211,10 +215,10 @@
 
 /* SU= 48 */
 /* Add Plaintext - included and encrypted */
-int GCM_add_plain(gcm *g,char *cipher,char *plain,int len)
+int GCM_add_plain(gcm *g,char *cipher,const char *plain,int len)
 {
     /* Add plaintext to extract ciphertext, len is length of plaintext.  */
-    int i,j=0;
+    int j=0;
     unsign32 counter;
     uchar B[16];
     if (g->status==GCM_ACCEPTING_HEADER) g->status=GCM_ACCEPTING_CIPHER;
@@ -225,13 +229,13 @@
         counter=pack((uchar *)&(g->a.f[12]));
         counter++;
         unpack(counter,(uchar *)&(g->a.f[12]));  /* increment counter */
-        for (i=0; i<16; i++) B[i]=g->a.f[i];
+        for (int i=0; i<16; i++) B[i]=g->a.f[i];
         AES_ecb_encrypt(&(g->a),B);        /* encrypt it  */
 
-        for (i=0; i<16 && j<len; i++)
+        for (int i=0; i<16 && j<len; i++,j++)
         {
-            cipher[j]=plain[j]^B[i];
-            g->stateX[i]^=cipher[j++];
+            cipher[j]=(char)(plain[j]^B[i]);
+            g->stateX[i]^=cipher[j];
             g->lenC[1]++;
             if (g->lenC[1]==0) g->lenC[0]++;
         }
@@ -243,10 +247,10 @@
 
 /* SU= 48 */
 /* Add Ciphertext - decrypts to plaintext */
-int GCM_add_cipher(gcm *g,char *plain,char *cipher,int len)
+int GCM_add_cipher(gcm *g,char *plain,const char *cipher,int len)
 {
     /* Add ciphertext to extract plaintext, len is length of ciphertext. */
-    int i,j=0;
+    int j=0;
     unsign32 counter;
     char oc;
     uchar B[16];
@@ -258,14 +262,13 @@
         counter=pack((uchar *)&(g->a.f[12]));
         counter++;
         unpack(counter,(uchar *)&(g->a.f[12]));  /* increment counter */
-        for (i=0; i<16; i++) B[i]=g->a.f[i];
+        for (int i=0; i<16; i++) B[i]=g->a.f[i];
         AES_ecb_encrypt(&(g->a),B);        /* encrypt it  */
-        for (i=0; i<16 && j<len; i++)
+        for (int i=0; i<16 && j<len; i++,j++)
         {
             oc=cipher[j];
-            plain[j]=cipher[j]^B[i];
+            plain[j]=(char)(cipher[j]^B[i]);
             g->stateX[i]^=oc;
-            j++;
             g->lenC[1]++;
             if (g->lenC[1]==0) g->lenC[0]++;
         }
@@ -298,114 +301,3 @@
     g->status=GCM_FINISHED;
     AES_end(&(g->a));
 }
-
-
-// Compile with
-// gcc -O2 gcm.c aes.c -o gcm.exe
-/* SU= 16
-*/
-
-/* static void hex2bytes(char *hex,char *bin) */
-/* { */
-/* 	int i; */
-/* 	char v; */
-/* 	int len=strlen(hex); */
-/* 	for (i = 0; i < len/2; i++) { */
-/*         char c = hex[2*i]; */
-/*         if (c >= '0' && c <= '9') { */
-/*             v = c - '0'; */
-/*         } else if (c >= 'A' && c <= 'F') { */
-/*             v = c - 'A' + 10; */
-/*         } else if (c >= 'a' && c <= 'f') { */
-/*             v = c - 'a' + 10; */
-/*         } else { */
-/*             v = 0; */
-/*         } */
-/*         v <<= 4; */
-/*         c = hex[2*i + 1]; */
-/*         if (c >= '0' && c <= '9') { */
-/*             v += c - '0'; */
-/*         } else if (c >= 'A' && c <= 'F') { */
-/*             v += c - 'A' + 10; */
-/*         } else if (c >= 'a' && c <= 'f') { */
-/*             v += c - 'a' + 10; */
-/*         } else { */
-/*             v = 0; */
-/*         } */
-/*         bin[i] = v; */
-/*     } */
-/* } */
-
-/*
-int main()
-{
-	int i;
-
-//	char* KT="feffe9928665731c6d6a8f9467308308";
-//	char* MT="d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39";
-//	char* HT="feedfacedeadbeeffeedfacedeadbeefabaddad2";
-//	char* NT="cafebabefacedbaddecaf888";
-// Tag should be 5bc94fbc3221a5db94fae95ae7121a47
-//	char* NT="9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b";
-// Tag should be 619cc5aefffe0bfa462af43c1699d050
-
-  char* KT="6dfb5dc68af6ae2f3242e9184f100918";
-  char* MT="47809d16c2c6ec685962c90e53fe1bba";
-  char* HT="dd0fa6e494031139d71ee45f00d56fa4";
-  char* NT="37d36f5c54d53479d4745dd1";
-
-
-	int len=strlen(MT)/2;
-	int lenH=strlen(HT)/2;
-	int lenK=strlen(KT)/2;
-	int lenIV=strlen(NT)/2;
-
-	char T[16];   // Tag
-	char K[16];   // AES Key
-	char H[64];   // Header - to be included in Authentication, but not encrypted
-	char N[100];   // IV - Initialisation vector
-	char M[100];  // Plaintext to be encrypted/authenticated
-	char C[100];  // Ciphertext
-	char P[100];  // Recovered Plaintext
-
-	gcm g;
-
-    hex2bytes(MT, M);
-    hex2bytes(HT, H);
-    hex2bytes(NT, N);
-	hex2bytes(KT, K);
-
-	printf("lenK= %d\n",lenK);
-
- 	printf("Plaintext=\n");
-	for (i=0;i<len;i++) printf("%02x",(unsigned char)M[i]);
-	printf("\n");
-
-	GCM_init(&g,16,K,lenIV,N);
-	GCM_add_header(&g,H,lenH);
-	GCM_add_plain(&g,C,M,len);
-	GCM_finish(&g,T);
-
-	printf("Ciphertext=\n");
-	for (i=0;i<len;i++) printf("%02x",(unsigned char)C[i]);
-	printf("\n");
-
-	printf("Tag=\n");
-	for (i=0;i<16;i++) printf("%02x",(unsigned char)T[i]);
-	printf("\n");
-
-	GCM_init(&g,16,K,lenIV,N);
-	GCM_add_header(&g,H,lenH);
-	GCM_add_cipher(&g,P,C,len);
-	GCM_finish(&g,T);
-
- 	printf("Plaintext=\n");
-	for (i=0;i<len;i++) printf("%02x",(unsigned char)P[i]);
-	printf("\n");
-
-	printf("Tag=\n");
-	for (i=0;i<16;i++) printf("%02x",(unsigned char)T[i]);
-	printf("\n");
-}
-
-*/
diff --git a/src/hash.c b/src/hash.c
index 44fe4b0..4df5b3f 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -20,8 +20,8 @@
 /*
  * Implementation of the Secure Hashing Algorithm (SHA-256/384/512 and SHA3)
  *
- * Generates a message digest. It should be impossible to come
- * come up with two messages that hash to the same value ("collision free").
+ * Generates a message digest. It should be impossible to come up
+ * with two messages that hash to the same value ("collision free").
  *
  * For use with byte-oriented messages only. Could/Should be speeded
  * up by unwinding loops in HASH_transform(), and assembly patches.
@@ -77,7 +77,16 @@
 static void HASH256_transform(hash256 *sh)
 {
     /* basic transformation step */
-    unsign32 a,b,c,d,e,f,g,h,t1,t2;
+    unsign32 a;
+    unsign32 b;
+    unsign32 c;
+    unsign32 d;
+    unsign32 e;
+    unsign32 f;
+    unsign32 g;
+    unsign32 h;
+    unsign32 t1;
+    unsign32 t2;
     int j;
     for (j=16; j<64; j++)
         sh->w[j]=theta1_256(sh->w[j-2])+sh->w[j-7]+theta0_256(sh->w[j-15])+sh->w[j-16];
@@ -120,8 +129,7 @@
 void HASH256_init(hash256 *sh)
 {
     /* re-initialise */
-    int i;
-    for (i=0; i<64; i++) sh->w[i]=0L;
+    for (int i=0; i<64; i++) sh->w[i]=0L;
     sh->length[0]=sh->length[1]=0L;
     sh->h[0]=H0_256;
     sh->h[1]=H1_256;
@@ -159,8 +167,8 @@
 void HASH256_hash(hash256 *sh,char *digest)
 {
     /* pad message and finish - supply digest */
-    int i;
-    unsign32 len0,len1;
+    unsign32 len0;
+    unsign32 len1;
     len0=sh->length[0];
     len1=sh->length[1];
     HASH256_process(sh,PAD);
@@ -168,7 +176,7 @@
     sh->w[14]=len1;
     sh->w[15]=len0;
     HASH256_transform(sh);
-    for (i=0; i<sh->hlen; i++)
+    for (int i=0; i<sh->hlen; i++)
     {
         /* convert to bytes */
         digest[i]=(char)((sh->h[i/4]>>(8*(3-i%4))) & 0xffL);
@@ -176,6 +184,15 @@
     HASH256_init(sh);
 }
 
+void HASH256_oneshot(char *digest, const char *in, int inlen)
+{
+    hash256 ctx;
+    HASH256_init(&ctx);
+    for(int i = 0; i < inlen; i++)
+        HASH256_process(&ctx, in[i]);
+    HASH256_hash(&ctx, digest);
+}
+
 
 #define H0_512 0x6a09e667f3bcc908
 #define H1_512 0xbb67ae8584caa73b
@@ -225,9 +242,17 @@
 static void HASH512_transform(hash512 *sh)
 {
     /* basic transformation step */
-    unsign64 a,b,c,d,e,f,g,h,t1,t2;
-    int j;
-    for (j=16; j<80; j++)
+    unsign64 a;
+    unsign64 b;
+    unsign64 c;
+    unsign64 d;
+    unsign64 e;
+    unsign64 f;
+    unsign64 g;
+    unsign64 h;
+    unsign64 t1;
+    unsign64 t2;
+    for (int j=16; j<80; j++)
         sh->w[j]=theta1_512(sh->w[j-2])+sh->w[j-7]+theta0_512(sh->w[j-15])+sh->w[j-16];
 
     a=sh->h[0];
@@ -239,7 +264,7 @@
     g=sh->h[6];
     h=sh->h[7];
 
-    for (j=0; j<80; j++)
+    for (int j=0; j<80; j++)
     {
         /* 80 times - mush it up */
         t1=h+Sig1_512(e)+Ch(e,f,g)+K_512[j]+sh->w[j];
@@ -266,8 +291,7 @@
 void HASH384_init(hash384 *sh)
 {
     /* re-initialise */
-    int i;
-    for (i=0; i<80; i++) sh->w[i]=0;
+    for (int i=0; i<80; i++) sh->w[i]=0;
     sh->length[0]=sh->length[1]=0;
     sh->h[0]=H8_512;
     sh->h[1]=H9_512;
@@ -297,9 +321,7 @@
 void HASH512_init(hash512 *sh)
 {
     /* re-initialise */
-    int i;
-
-    for (i=0; i<80; i++) sh->w[i]=0;
+    for (int i=0; i<80; i++) sh->w[i]=0;
     sh->length[0]=sh->length[1]=0;
     sh->h[0]=H0_512;
     sh->h[1]=H1_512;
@@ -335,8 +357,8 @@
 void HASH512_hash(hash512 *sh,char *hash)
 {
     /* pad message and finish - supply digest */
-    int i;
-    unsign64 len0,len1;
+    unsign64 len0;
+    unsign64 len1;
     len0=sh->length[0];
     len1=sh->length[1];
     HASH512_process(sh,PAD);
@@ -344,7 +366,7 @@
     sh->w[14]=len1;
     sh->w[15]=len0;
     HASH512_transform(sh);
-    for (i=0; i<sh->hlen; i++)
+    for (int i=0; i<sh->hlen; i++)
     {
         /* convert to bytes */
         hash[i]=(char)((sh->h[i/8]>>(8*(7-i%8))) & 0xffL);
@@ -375,10 +397,11 @@
 
 static void SHA3_transform(sha3 *sh)
 {
-    int i,j,k;
-    unsign64 C[5],D[5],B[5][5];
+    unsign64 C[5];
+    unsign64 D[5];
+    unsign64 B[5][5];
 
-    for (k=0; k<SHA3_ROUNDS; k++)
+    for (int k=0; k<SHA3_ROUNDS; k++)
     {
         C[0]=sh->S[0][0]^sh->S[0][1]^sh->S[0][2]^sh->S[0][3]^sh->S[0][4];
         C[1]=sh->S[1][0]^sh->S[1][1]^sh->S[1][2]^sh->S[1][3]^sh->S[1][4];
@@ -392,8 +415,8 @@
         D[3]=C[2]^rotl(C[4],1);
         D[4]=C[3]^rotl(C[0],1);
 
-        for (i=0; i<5; i++)
-            for (j=0; j<5; j++)
+        for (int i=0; i<5; i++)
+            for (int j=0; j<5; j++)
                 sh->S[i][j]^=D[i];  /* let the compiler unroll it! */
 
         B[0][0]=sh->S[0][0];
@@ -426,8 +449,8 @@
         B[3][2]=rotl(sh->S[4][3],8);
         B[4][0]=rotl(sh->S[4][4],14);
 
-        for (i=0; i<5; i++)
-            for (j=0; j<5; j++)
+        for (int i=0; i<5; i++)
+            for (int j=0; j<5; j++)
                 sh->S[i][j]=B[i][j]^(~B[(i+1)%5][j]&B[(i+2)%5][j]);
 
         sh->S[0][0]^=RC[k];
@@ -439,9 +462,8 @@
 
 void SHA3_init(sha3 *sh,int olen)
 {
-    int i,j;
-    for (i=0; i<5; i++)
-        for (j=0; j<5; j++)
+    for (int i=0; i<5; i++)
+        for (int j=0; j<5; j++)
             sh->S[i][j]=0;    /* 5x5x8 bytes = 200 bytes of state */
     sh->length=0;
     sh->len=olen;
@@ -454,7 +476,9 @@
 void SHA3_process(sha3 *sh,int byt)
 {
     int cnt=(int)(sh->length%sh->rate);
-    int i,j,b=cnt%8;
+    int i;
+    int j;
+    int b=cnt%8;
     cnt/=8;
     i=cnt%5;
     j=cnt/5;  /* process by columns! */
@@ -466,18 +490,19 @@
 /* squeeze the sponge */
 void SHA3_squeeze(sha3 *sh,char *buff,int len)
 {
-    int done,i,j,k,m=0;
+    int done;
+    int m=0;
     unsign64 el;
     /* extract by columns */
     done=0;
     for (;;)
     {
-        for (j=0; j<5; j++)
+        for (int j=0; j<5; j++)
         {
-            for (i=0; i<5; i++)
+            for (int i=0; i<5; i++)
             {
                 el=sh->S[i][j];
-                for (k=0; k<8; k++)
+                for (int k=0; k<8; k++)
                 {
                     buff[m++]=(el&0xff);
                     if (m>=len || m%sh->rate==0)
@@ -524,83 +549,3 @@
     }
     SHA3_squeeze(sh,buff,len);
 }
-
-
-/* test program: should produce digest
-
-160 bit
-
-84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1
-
-256 bit
-
-248d6a61 d20638b8 e5c02693 0c3e6039 a33ce459 64ff2167 f6ecedd4 19db06c1
-
-512 bit
-
-8e959b75dae313da 8cf4f72814fc143f 8f7779c6eb9f7fa1 7299aeadb6889018
-501d289e4900f7e4 331b99dec4b5433a c7d329eeb6dd2654 5e96e55b874be909
-
-384 bit
-
-09330c33f71147e8 3d192fc782cd1b47 53111b173b3b05d2 2fa08086e3b0f712
-fcc7c71a557e2db9 66c3e9fa91746039
-*/
-/*
-#include <stdio.h>
-
-char test160[]="abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
-char test256[]="abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
-char test512[]="abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu";
-
-int main()
-{
-    char digest[100];
-    int i;
-
-    hash256 sh256;
-	hash384 sh384;
-	hash512 sh512;
-	sha3 SHA3;
-
-    HASH256_init(&sh256);
-    for (i=0;test256[i]!=0;i++) HASH256_process(&sh256,test256[i]);
-    HASH256_hash(&sh256,digest);
-    for (i=0;i<32;i++) printf("%02x",(unsigned char)digest[i]);
-    printf("\n");
-
-    HASH384_init(&sh384);
-    for (i=0;test512[i]!=0;i++) HASH384_process(&sh384,test512[i]);
-    HASH384_hash(&sh384,digest);
-    for (i=0;i<48;i++) printf("%02x",(unsigned char)digest[i]);
-    printf("\n");
-
-    HASH512_init(&sh512);
-    for (i=0;test512[i]!=0;i++) HASH512_process(&sh512,test512[i]);
-    HASH512_hash(&sh512,digest);
-    for (i=0;i<64;i++) printf("%02x",(unsigned char)digest[i]);
-    printf("\n");
-
-	SHA3_init(&SHA3,SHA3_HASH256);
-    for (i=0;test512[i]!=0;i++) SHA3_process(&SHA3,test512[i]);
-    SHA3_hash(&SHA3,digest);
-    for (i=0;i<32;i++) printf("%02x",(unsigned char)digest[i]);
-    printf("\n");
-
-	SHA3_init(&SHA3,SHA3_HASH512);
-    for (i=0;test512[i]!=0;i++) SHA3_process(&SHA3,test512[i]);
-    SHA3_hash(&SHA3,digest);
-    for (i=0;i<64;i++) printf("%02x",(unsigned char)digest[i]);
-    printf("\n");
-
-	SHA3_init(&SHA3,SHAKE256);
-    for (i=0;test512[i]!=0;i++) SHA3_process(&SHA3,test512[i]);
-    SHA3_shake(&SHA3,digest,72);
-    for (i=0;i<72;i++) printf("%02x",(unsigned char)digest[i]);
-    printf("\n");
-
-
-    return 0;
-}
-
-*/
diff --git a/src/hash_to_field.c.in b/src/hash_to_field.c.in
new file mode 100644
index 0000000..22ebf97
--- /dev/null
+++ b/src/hash_to_field.c.in
@@ -0,0 +1,138 @@
+/*
+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.
+*/
+
+/* Hashing to a finite field */
+
+#include "hash_to_field_ZZZ.h"
+
+/**
+ * @brief expand_message_xmd function as defined in draft-irtf-cfrg-hash-to-curve-16
+ * based on SHA-256.
+ * 
+ * @param bytes Output pseudo-random bytes
+ * @param byteslen Pseudo-random bytes length
+ * @param msg Input message
+ * @param msglen Input message length (in bytes)
+ * @param DST Domain separator tag
+ * @param DSTlen Domain separator tag length (in bytes), must be smaller than 256
+ * 
+ * @return 0 if successful, error code otherwise
+ */ 
+static int SHA256_expand_message_xmd(char *bytes, unsigned int byteslen,
+    const char *msg, unsigned int msglen,
+    const char *DST, unsigned int DSTlen)
+{
+    hash256 sha256_ctx;
+    unsigned int i;
+    unsigned int j;
+    unsigned int ell = (byteslen + SHA256_HASH_SIZE-1) / SHA256_HASH_SIZE; // ceil(byteslen / SHA256_HASH_SIZE)
+    char b_0[SHA256_HASH_SIZE];
+    char b_1[SHA256_HASH_SIZE];
+
+    if (bytes == NULL || msg == NULL || DST == NULL)
+        return ERR_NULLPOINTER_HASH2FIELD;
+
+    // ABORT if byteslen > 65535 or len(DST) > 255 or ell > 255 
+    if (byteslen > 65535 || DSTlen > 255 || ell > 255)
+        return ERR_BADARGLEN_HASH2FIELD;
+
+    HASH256_init(&sha256_ctx);
+    // process Z_pad = I2OSP(0, s_in_bytes)
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        HASH256_process(&sha256_ctx, 0x00);
+    // process msg
+    for(i = 0; i < msglen; i++)
+        HASH256_process(&sha256_ctx, msg[i]);
+    // process l_i_b_str = I2OSP(len_in_bytes, 2)
+    HASH256_process(&sha256_ctx, (byteslen >> 8));
+    HASH256_process(&sha256_ctx, (byteslen & 0xff));
+    // process I2OSP(0, 1)
+    HASH256_process(&sha256_ctx, 0x00);
+    // process DST_prime = DST || I2OSP(len(DST), 1)
+    for(i = 0; i < DSTlen; i++)
+        HASH256_process(&sha256_ctx, DST[i]);
+    HASH256_process(&sha256_ctx, DSTlen);
+    // `b_0 = H(Z_pad || msg || l_i_b_str || I2OSP(0, 1) || DST_prime)`
+    HASH256_hash(&sha256_ctx, b_0);
+
+    // process b_0
+    for(i = 0; i < SHA256_HASH_SIZE; i++)
+        HASH256_process(&sha256_ctx, b_0[i]);
+    // process I2OSP(1, 1)
+    HASH256_process(&sha256_ctx, 0x01);
+    // process DST_prime = DST || I2OSP(len(DST), 1)
+    for(i = 0; i < DSTlen; i++)
+        HASH256_process(&sha256_ctx, DST[i]);
+    HASH256_process(&sha256_ctx, DSTlen);
+    // `b_1 = H(b_0 || I2OSP(1, 1) || DST_prime)`
+    HASH256_hash(&sha256_ctx, b_1);
+
+    // bytes = substr(b_1, 0, min(byteslen, SHA256_HASH_SIZE))
+    for(i = 0; i < SHA256_HASH_SIZE && byteslen > 0; i++, byteslen--)
+        bytes[i] = b_1[i];
+    bytes += i;
+
+    // i <= ell if and only if byteslen > 0
+    for(i = 2; i <= ell; i++) {
+        // process strxor(b_0, b_{i-1})
+        for(j = 0; j < SHA256_HASH_SIZE; j++)
+            HASH256_process(&sha256_ctx, (b_1[j] ^ b_0[j]));
+        // process I2OSP(i, 1)
+        HASH256_process(&sha256_ctx, i);
+        // process DST_prime = DST || I2OSP(len(DST), 1)
+        for(j = 0; j < DSTlen; j++)
+            HASH256_process(&sha256_ctx, DST[j]);
+        HASH256_process(&sha256_ctx, DSTlen);
+        // `b_i = H(strxor(b_0, b_{i-1}) || I2OSP(i, 1) || DST_prime)`
+        HASH256_hash(&sha256_ctx, b_1);
+        // bytes = bytes || substr(b_i, 0, min(byteslen, SHA256_HASH_SIZE))
+        for(j = 0; j < SHA256_HASH_SIZE && byteslen > 0; j++, byteslen--)
+            bytes[j] = b_1[j];
+        bytes += j;
+    }
+
+    return SUCCESS;
+}
+
+int hash_to_field_YYY(BIG_XXX elems[], unsigned int nelems, unsigned int m,
+    const char *msg, unsigned int msglen,
+    const char *DST, unsigned int DSTlen)
+{
+    if (elems == NULL || msg == NULL || DST == NULL)
+        return ERR_NULLPOINTER_HASH2FIELD;
+
+    DBIG_XXX dbig;
+    int ret = SUCCESS;
+    unsigned int L = (BIG_XXX_nbits(Modulus_YYY) + CURVE_SECURITY_ZZZ + 7) / 8; // ceil((ceil(log2(p)) + k) / 8)
+    unsigned int byteslen = L * nelems * m;
+    char bytes[byteslen];
+    const char *ptr_bytes = bytes;
+
+    ret |= SHA256_expand_message_xmd(bytes, byteslen, msg, msglen, DST, DSTlen);
+
+    while (byteslen) {
+        BIG_XXX_dfromBytesLen(dbig, ptr_bytes, L);
+        BIG_XXX_dmod(*elems, dbig, Modulus_YYY);
+        ptr_bytes += L;
+        byteslen  -= L;
+        elems += 1;
+    }
+
+    return ret;
+}
diff --git a/src/hkdf.c b/src/hkdf.c
new file mode 100644
index 0000000..4e47c97
--- /dev/null
+++ b/src/hkdf.c
@@ -0,0 +1,94 @@
+/*
+    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.
+*/
+
+/*
+ * @file hkdf.c
+ *
+ * @author Alexandre Adomnicai <alexandre.adomnicai@qredo.com>
+ *
+ * @brief Implementation of the HMAC-based Extract-and-Expand Key Derivation
+ * Function with SHA-256 according to RFC 5869.
+ */
+#include "arch.h"
+#include "amcl.h"
+
+#define SUCCESS                 0x00000000
+#define ERR_NULLPOINTER_HKDF    0x00000201
+#define ERR_BADARGLEN_HKDF      0x00000202
+
+int HKDF_SHA256_extract(char prk[SHA256_HASH_SIZE],
+    const char *salt, unsigned int saltlen,
+    const char *ikm,  unsigned int ikmlen)
+{
+    if (prk == NULL || ikm == NULL)
+        return ERR_NULLPOINTER_HKDF;
+    if (ikmlen == 0)
+        return ERR_BADARGLEN_HKDF;
+    if (salt == NULL && saltlen != 0)
+        return ERR_BADARGLEN_HKDF;
+    if (saltlen != 0 && saltlen < SHA256_HASH_SIZE)
+        return ERR_BADARGLEN_HKDF;
+
+    char zeros[SHA256_HASH_SIZE] = {0x00};
+
+    // If salt isn't provided, the key is set to 0
+    if (salt == NULL || saltlen == 0)
+        return HMAC_SHA256_oneshot(prk, SHA256_HASH_SIZE, zeros, SHA256_HASH_SIZE, ikm, ikmlen);
+    else
+        return HMAC_SHA256_oneshot(prk, SHA256_HASH_SIZE, salt, saltlen, ikm, ikmlen);
+}
+
+int HKDF_SHA256_expand(char *okm, unsigned int okmlen,
+    const char *prk, unsigned int prklen,
+    const char *info, unsigned int infolen)
+{
+    if (okm == NULL || prk == NULL)
+        return ERR_NULLPOINTER_HKDF;
+    if (prklen != SHA256_HASH_SIZE || okmlen > 255*SHA256_HASH_SIZE)
+        return ERR_BADARGLEN_HKDF;
+
+    unsigned int i;
+    int ret = SUCCESS;
+    char count = 0x01;
+    char tmp[SHA256_HASH_SIZE];
+
+    hmac_sha256 ctx;
+    ret |= HMAC_SHA256_init(&ctx, prk, SHA256_HASH_SIZE);
+    ret |= HMAC_SHA256_update(&(ctx.sha256_ctx), info, infolen);
+    ret |= HMAC_SHA256_update(&(ctx.sha256_ctx), &count, 1);
+    ret |= HMAC_SHA256_final(&ctx, tmp, SHA256_HASH_SIZE);
+
+    while (okmlen > SHA256_HASH_SIZE) {
+        count++;
+        for(i = 0; i < SHA256_HASH_SIZE; i++)
+            okm[i] = tmp[i];
+        okm     += SHA256_HASH_SIZE;
+        okmlen  -= SHA256_HASH_SIZE;
+        ret |= HMAC_SHA256_init(&ctx, prk, SHA256_HASH_SIZE);
+        ret |= HMAC_SHA256_update(&(ctx.sha256_ctx), tmp, SHA256_HASH_SIZE);
+        ret |= HMAC_SHA256_update(&(ctx.sha256_ctx), info, infolen);
+        ret |= HMAC_SHA256_update(&(ctx.sha256_ctx), &count, 1);
+        ret |= HMAC_SHA256_final(&ctx, tmp, SHA256_HASH_SIZE);
+    }
+
+    for(i = 0; i < okmlen; i++)
+        okm[i] = tmp[i];
+
+    return ret;
+}
diff --git a/src/hmac.c b/src/hmac.c
new file mode 100644
index 0000000..e5b9ae2
--- /dev/null
+++ b/src/hmac.c
@@ -0,0 +1,170 @@
+/*
+    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.
+*/
+
+/*
+ * @file hmac.c
+ *
+ * @author Alexandre Adomnicai <alexandre.adomnicai@qredo.com>
+ *
+ * @brief Implementation of the Keyed-Hash Message Authentication Code (HMAC)
+ * with SHA-256 according to FIPS 198-1 and RFC 2104.
+ */
+#include "arch.h"
+#include "amcl.h"
+
+int HMAC_SHA256_init(hmac_sha256 *ctx, const char* key, int keylen)
+{
+    if (ctx == NULL || key == NULL)
+        return ERR_NULLPOINTER_HMAC;
+    if (keylen < SHA256_HASH_SIZE)
+        return ERR_KEYSIZE_HMAC;
+
+    int i;
+    char ipad = 0x36;
+
+    // Initialize the underlying SHA256 instance
+    HASH256_init(&(ctx->sha256_ctx));
+    // Fill k0 with 0s for future padding
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        ctx->k0[i] = 0x00;
+
+    // If the key size is larger than the block size, then hash it
+    if (keylen > SHA256_BLOCK_SIZE) {
+        for(i = 0; i < keylen; i++)
+            HASH256_process(&(ctx->sha256_ctx), key[i]);
+        HASH256_hash(&(ctx->sha256_ctx), ctx->k0);
+    }
+    // Otherwise the key is simply padded with 0s into k0
+    else {
+        for(i = 0; i < keylen; i++)
+            ctx->k0[i] = key[i];
+    }
+
+    // Update the HMAC instance to process k0 ^ ipad
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        HASH256_process(&(ctx->sha256_ctx), (ctx->k0)[i] ^ ipad);
+
+    return SUCCESS;
+}
+
+int HMAC_SHA256_update(hash256 *ctx, const char* in, int inlen)
+{
+    if (ctx == NULL)
+        return ERR_NULLPOINTER_HMAC;
+    if (inlen > 0 && in == NULL)
+        return ERR_NULLPOINTER_HMAC;
+    if (inlen < 0)
+        return ERR_BADARGLEN_HMAC;
+
+    // Update the HMAC instance to process in
+    for(int i = 0; i < inlen; i++)
+        HASH256_process(ctx, in[i]);
+
+    return SUCCESS;
+}
+
+int HMAC_SHA256_final(hmac_sha256 *ctx, char* out, int outlen)
+{
+    if (ctx == NULL || out == NULL)
+        return ERR_NULLPOINTER_HMAC;
+    if (outlen <= 0 || outlen > SHA256_HASH_SIZE)
+        return ERR_BADARGLEN_HMAC;
+
+    int i;
+    char opad = 0x5c;
+    char digest[SHA256_HASH_SIZE];
+
+    // Compute H((k0 ^ ipad) || in)
+    HASH256_hash(&(ctx->sha256_ctx), digest);
+
+    // Compute `H((K0 ^ opad ) || H((K0 ^ ipad) || in))`
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        HASH256_process(&(ctx->sha256_ctx), (ctx->k0)[i] ^ opad);
+    for(i = 0; i < SHA256_HASH_SIZE; i++)
+        HASH256_process(&(ctx->sha256_ctx), digest[i]);
+    HASH256_hash(&(ctx->sha256_ctx), digest);
+
+    // Erase the secret key as it is not needed anymore
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        ctx->k0[i] = 0x00;
+
+    for(i = 0; i < outlen; i++)
+        out[i] = digest[i];
+
+    return SUCCESS;
+}
+
+int HMAC_SHA256_oneshot(char* out,  int outlen,
+    const char* key,  int keylen,
+    const char* in,  int inlen)
+{
+    if (out == NULL || key == NULL || in == NULL)
+        return ERR_NULLPOINTER_HMAC;
+    if (keylen < SHA256_HASH_SIZE)
+        return ERR_KEYSIZE_HMAC;
+    if (outlen <= 0 || outlen > SHA256_HASH_SIZE || inlen < 0)
+        return ERR_BADARGLEN_HMAC;
+
+    int i;
+    hash256 sha256;
+    char ipad = 0x36;
+    char opad = 0x5c;
+    char k0[SHA256_BLOCK_SIZE];
+    char digest[SHA256_HASH_SIZE];
+
+    HASH256_init(&sha256);
+    // Fill k0 with 0s for future padding
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        k0[i] = 0x00;
+
+    // If the key size is larger than the block size, then hash it
+    if (keylen > SHA256_BLOCK_SIZE) {
+        for(i = 0; i < keylen; i++)
+            HASH256_process(&sha256, key[i]);
+        HASH256_hash(&sha256, k0);
+    }
+    // Otherwise the key is simply padded with 0s into k0
+    else {
+        for(i = 0; i < keylen; i++)
+            k0[i] = key[i];
+    }
+
+    // Compute H((k0 ^ ipad) || in)
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        HASH256_process(&sha256, k0[i] ^ ipad);
+    for(i = 0; i < inlen; i++)
+        HASH256_process(&sha256, in[i]);
+    HASH256_hash(&sha256, digest);
+
+    // Compute `H((k0 ^ opad ) || H((k0 ^ ipad) || in))`
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        HASH256_process(&sha256, k0[i] ^ opad);
+    for(i = 0; i < SHA256_HASH_SIZE; i++)
+        HASH256_process(&sha256, digest[i]);
+    HASH256_hash(&sha256, digest);
+
+    // Erase the secret key as it is not needed anymore
+    for(i = 0; i < SHA256_BLOCK_SIZE; i++)
+        k0[i] = 0x00;
+
+    for(i = 0; i < outlen; i++)
+        out[i] = digest[i];
+
+    return SUCCESS;
+}
diff --git a/src/mpin.c.in b/src/mpin.c.in
index 6c6ccdd..6ca4735 100644
--- a/src/mpin.c.in
+++ b/src/mpin.c.in
@@ -30,10 +30,11 @@
 #define ROUNDUP(a,b) ((a)-1)/(b)+1
 
 /* Special mpin hashing */
-static void mpin_hash(int sha,FP4_YYY *f, ECP_ZZZ *P,octet *w)
+static void mpin_hash(int sha,const FP4_YYY *f,const ECP_ZZZ *P,octet *w)
 {
     int i;
-    BIG_XXX x,y;
+    BIG_XXX x;
+    BIG_XXX y;
     char h[64];
     hash256 sha256;
     hash512 sha512;
@@ -71,6 +72,8 @@
         for (i=0; i<6*MODBYTES_XXX; i++) HASH512_process(&sha512,t[i]);
         HASH512_hash(&sha512,h);
         break;
+    default:
+        break;
     }
 
     OCT_jbytes(w,h,AESKEY_ZZZ);
@@ -79,9 +82,10 @@
 
 /* these next two functions help to implement elligator squared - http://eprint.iacr.org/2014/043 */
 /* maps a random u to a point on the curve */
-static void map(ECP_ZZZ *P,BIG_XXX u,int cb)
+static void map(ECP_ZZZ *P,const BIG_XXX u,int cb)
 {
-    BIG_XXX x,q;
+    BIG_XXX x;
+    BIG_XXX q;
 
     BIG_XXX_rcopy(q,Modulus_YYY);
     BIG_XXX_copy(x,u);
@@ -97,7 +101,8 @@
 /* returns u derived from P. Random value in range 1 to return value should then be added to u */
 static int unmap(BIG_XXX u,int *cb,ECP_ZZZ *P)
 {
-    int s,r=0;
+    int s;
+    int r=0;
     BIG_XXX x;
 
     s=ECP_ZZZ_get(x,x,P);
@@ -121,10 +126,17 @@
 /* Note that u and v are indistinguisible from random strings */
 int MPIN_ZZZ_ENCODING(csprng *RNG,octet *E)
 {
-    int rn,m,su,sv,res=0;
+    int rn;
+    int m;
+    int su;
+    int sv;
+    int res=0;
 
-    BIG_XXX q,u,v;
-    ECP_ZZZ P,W;
+    BIG_XXX q;
+    BIG_XXX u;
+    BIG_XXX v;
+    ECP_ZZZ P;
+    ECP_ZZZ W;
 
     if (!ECP_ZZZ_fromOctet(&P,E)) res=MPIN_INVALID_POINT;
     if (res==0)
@@ -144,7 +156,7 @@
         if (m<0) m=-m;
         m%=rn;
         BIG_XXX_inc(v,m+1);
-        E->val[0]=su+2*sv;
+        E->val[0]=(char)(su+2*sv);
         BIG_XXX_toBytes(&(E->val[1]),u);
         BIG_XXX_toBytes(&(E->val[PFS_ZZZ+1]),v);
     }
@@ -153,9 +165,12 @@
 
 int MPIN_ZZZ_DECODING(octet *D)
 {
-    int su,sv;
-    BIG_XXX u,v;
-    ECP_ZZZ P,W;
+    int su;
+    int sv;
+    BIG_XXX u;
+    BIG_XXX v;
+    ECP_ZZZ P;
+    ECP_ZZZ W;
     int res=0;
 
     if ((D->val[0]&0x04)!=0) res=MPIN_INVALID_POINT;
@@ -177,9 +192,10 @@
 }
 
 /* R=R1+R2 in group G1 */
-int MPIN_ZZZ_RECOMBINE_G1(octet *R1,octet *R2,octet *R)
+int MPIN_ZZZ_RECOMBINE_G1(const octet *R1,const octet *R2,octet *R)
 {
-    ECP_ZZZ P,T;
+    ECP_ZZZ P;
+    ECP_ZZZ T;
     int res=0;
     if (res==0)
     {
@@ -195,9 +211,10 @@
 }
 
 /* W=W1+W2 in group G2 */
-int MPIN_ZZZ_RECOMBINE_G2(octet *W1,octet *W2,octet *W)
+int MPIN_ZZZ_RECOMBINE_G2(const octet *W1,const octet *W2,octet *W)
 {
-    ECP2_ZZZ Q,T;
+    ECP2_ZZZ Q;
+    ECP2_ZZZ T;
     int res=0;
     if (!ECP2_ZZZ_fromOctet(&Q,W1)) res=MPIN_INVALID_POINT;
     if (!ECP2_ZZZ_fromOctet(&T,W2)) res=MPIN_INVALID_POINT;
@@ -212,7 +229,8 @@
 /* create random secret S */
 int MPIN_ZZZ_RANDOM_GENERATE(csprng *RNG,octet* S)
 {
-    BIG_XXX r,s;
+    BIG_XXX r;
+    BIG_XXX s;
 
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
     BIG_XXX_randomnum(s,r,RNG);
@@ -225,16 +243,17 @@
 }
 
 /* Extract PIN from TOKEN for identity CID */
-int MPIN_ZZZ_EXTRACT_PIN(int sha,octet *CID,int pin,octet *TOKEN)
+int MPIN_ZZZ_EXTRACT_PIN(int sha,const octet *CID,int pin,octet *TOKEN)
 {
     pin%=MAXPIN;
     return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
 }
 
 /* Extract a factor < 32 bits for identity CID */
-int MPIN_ZZZ_EXTRACT_FACTOR(int sha,octet *CID,int factor,int facbits,octet *TOKEN)
+int MPIN_ZZZ_EXTRACT_FACTOR(int sha,const octet *CID,int factor,int facbits,octet *TOKEN)
 {
-    ECP_ZZZ P,R;
+    ECP_ZZZ P;
+    ECP_ZZZ R;
     int res=0;
     char h[MODBYTES_XXX];
     octet H= {0,sizeof(h),h};
@@ -254,9 +273,10 @@
 }
 
 /* Extract a factor < 32 bits for identity CID */
-int MPIN_ZZZ_RESTORE_FACTOR(int sha,octet *CID,int factor,int facbits,octet *TOKEN)
+int MPIN_ZZZ_RESTORE_FACTOR(int sha,const octet *CID,int factor,int facbits,octet *TOKEN)
 {
-    ECP_ZZZ P,R;
+    ECP_ZZZ P;
+    ECP_ZZZ R;
     int res=0;
     char h[MODBYTES_XXX];
     octet H= {0,sizeof(h),h};
@@ -276,9 +296,11 @@
 }
 
 /* Implement step 2 on client side of MPin protocol - SEC=-(x+y)*SEC */
-int MPIN_ZZZ_CLIENT_2(octet *X,octet *Y,octet *SEC)
+int MPIN_ZZZ_CLIENT_2(const octet *X,const octet *Y,octet *SEC)
 {
-    BIG_XXX px,py,r;
+    BIG_XXX px;
+    BIG_XXX py;
+    BIG_XXX r;
     ECP_ZZZ P;
     int res=0;
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
@@ -297,16 +319,17 @@
 }
 
 /*
- W=x*H(G);
+ We have W=x*H(G)
  if RNG == NULL then X is passed in
  if RNG != NULL the X is passed out
  if type=0 W=x*G where G is point on the curve, else W=x*M(G), where M(G) is mapping of octet G to point on the curve
 */
 
-int MPIN_ZZZ_GET_G1_MULTIPLE(csprng *RNG,int type,octet *X,octet *G,octet *W)
+int MPIN_ZZZ_GET_G1_MULTIPLE(csprng *RNG,int type,octet *X,const octet *G,octet *W)
 {
     ECP_ZZZ P;
-    BIG_XXX r,x;
+    BIG_XXX r;
+    BIG_XXX x;
     int res=0;
     if (RNG!=NULL)
     {
@@ -345,10 +368,11 @@
  if type==1 W=(x^-1)G
 */
 
-int MPIN_ZZZ_GET_G2_MULTIPLE(csprng *RNG,int type,octet *X,octet *G,octet *W)
+int MPIN_ZZZ_GET_G2_MULTIPLE(csprng *RNG,int type,octet *X,const octet *G,octet *W)
 {
     ECP2_ZZZ P;
-    BIG_XXX r,x;
+    BIG_XXX r;
+    BIG_XXX x;
     int res=0;
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
     if (RNG!=NULL)
@@ -380,16 +404,19 @@
 
 /* Client secret CST=s*H(CID) where CID is client ID and s is master secret */
 /* CID is hashed externally */
-int MPIN_ZZZ_GET_CLIENT_SECRET(octet *S,octet *CID,octet *CST)
+int MPIN_ZZZ_GET_CLIENT_SECRET(octet *S,const octet *CID,octet *CST)
 {
     return MPIN_ZZZ_GET_G1_MULTIPLE(NULL,1,S,CID,CST);
 }
 
 /* Implement step 1 on client side of MPin protocol */
-int MPIN_ZZZ_CLIENT_1(int sha,int date,octet *CLIENT_ID,csprng *RNG,octet *X,int pin,octet *TOKEN,octet *SEC,octet *xID,octet *xCID,octet *PERMIT)
+int MPIN_ZZZ_CLIENT_1(int sha,int date,const octet *CLIENT_ID,csprng *RNG,octet *X,int pin,const octet *TOKEN,octet *SEC,octet *xID,octet *xCID,const octet *PERMIT)
 {
-    BIG_XXX r,x;
-    ECP_ZZZ P,T,W;
+    BIG_XXX r;
+    BIG_XXX x;
+    ECP_ZZZ P;
+    ECP_ZZZ T;
+    ECP_ZZZ W;
     int res=0;
     char h[MODBYTES_XXX];
     octet H= {0,sizeof(h),h};
@@ -463,9 +490,10 @@
 }
 
 /* Extract Server Secret SST=S*Q where Q is fixed generator in G2 and S is master secret */
-int MPIN_ZZZ_GET_SERVER_SECRET(octet *S,octet *SST)
+int MPIN_ZZZ_GET_SERVER_SECRET(const octet *S,octet *SST)
 {
-    BIG_XXX r,s;
+    BIG_XXX r;
+    BIG_XXX s;
     ECP2_ZZZ Q;
     int res=0;
 
@@ -486,7 +514,7 @@
 
 
 /* Time Permit CTT=s*H(date|H(CID)) where s is master secret */
-int MPIN_ZZZ_GET_CLIENT_PERMIT(int sha,int date,octet *S,octet *CID,octet *CTT)
+int MPIN_ZZZ_GET_CLIENT_PERMIT(int sha,int date,const octet *S,const octet *CID,octet *CTT)
 {
     BIG_XXX s;
     ECP_ZZZ P;
@@ -508,11 +536,12 @@
 // if date and PE, use HID and HCID
 
 /* Outputs H(CID) and H(CID)+H(T|H(CID)) for time permits. If no time permits set HTID=NULL */
-void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
+void MPIN_ZZZ_SERVER_1(int sha,int date,const octet *CID,octet *HID,octet *HTID)
 {
     char h[MODBYTES_XXX];
     octet H= {0,sizeof(h),h};
-    ECP_ZZZ P,R;
+    ECP_ZZZ P;
+    ECP_ZZZ R;
 
 #ifdef USE_ANONYMOUS
     ECP_ZZZ_mapit(&P,CID);
@@ -537,27 +566,25 @@
 }
 
 /* Implement M-Pin on server side */
-int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet *xID,octet *xCID,octet *mSEC,octet *E,octet *F,octet *Pa)
+int MPIN_ZZZ_SERVER_2(int date,const octet *HID,const octet *HTID,const octet *Y,const octet *SST,const octet *xID,const octet *xCID,const octet *mSEC,octet *E,octet *F,const octet *Pa)
 {
     BIG_XXX y;
     FP12_YYY g;
-    ECP2_ZZZ Q,sQ;
-    ECP_ZZZ P,R;
+    ECP2_ZZZ Q;
+    ECP2_ZZZ sQ;
+    ECP_ZZZ P;
+    ECP_ZZZ R;
     int res=0;
 
     ECP2_ZZZ_generator(&Q);
 
     // key-escrow less scheme: use Pa instead of Q in pairing computation
     // Q left for backward compatiblity
-    if (Pa!=NULL)
-    {
-        if (!ECP2_ZZZ_fromOctet(&Q, Pa)) res=MPIN_INVALID_POINT;
-    }
+    if (Pa!=NULL && !ECP2_ZZZ_fromOctet(&Q, Pa))
+        res=MPIN_INVALID_POINT;
 
-    if (res==0)
-    {
-        if (!ECP2_ZZZ_fromOctet(&sQ,SST)) res=MPIN_INVALID_POINT;
-    }
+    if (res==0 && !ECP2_ZZZ_fromOctet(&sQ,SST))
+        res=MPIN_INVALID_POINT;
 
     if (res==0)
     {
@@ -603,16 +630,14 @@
 
                 /* Note error is in the PIN, not in the time permit! Hence the need to exclude Time Permit from this check */
 
-                if (date)
-                {
-                    if (!ECP_ZZZ_fromOctet(&P,HID)) res=MPIN_INVALID_POINT;
-                    if (!ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT; // U
 
-                    if (res==0)
-                    {
-                        PAIR_ZZZ_G1mul(&P,y);  // yA
-                        ECP_ZZZ_add(&P,&R); // yA+xA
-                    }
+                if (date && !ECP_ZZZ_fromOctet(&P,HID)) res=MPIN_INVALID_POINT;
+                if (date && !ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT; // U
+
+                if (date && res==0)
+                {
+                    PAIR_ZZZ_G1mul(&P,y);  // yA
+                    ECP_ZZZ_add(&P,&R); // yA+xA
                 }
                 if (res==0)
                 {
@@ -639,13 +664,21 @@
 #endif
 
 /* Pollards kangaroos used to return PIN error */
-int MPIN_ZZZ_KANGAROO(octet *E,octet *F)
+int MPIN_ZZZ_KANGAROO(const octet *E,const octet *F)
 {
-    int i,j,m,s,dn,dm,steps;
+    int i;
+    int j;
+    int m;
+    int s;
+    int dn;
+    int dm;
+    int steps;
     int distance[MR_TS];
-    FP12_YYY ge,gf,t,table[MR_TS];
+    FP12_YYY ge;
+    FP12_YYY gf;
+    FP12_YYY t;
+    FP12_YYY table[MR_TS];
     int res=0;
-    // BIG_XXX w;
 
     FP12_YYY_fromOctet(&ge,E);
     FP12_YYY_fromOctet(&gf,F);
@@ -705,9 +738,10 @@
 
 /* Functions to support M-Pin Full */
 
-int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
+int MPIN_ZZZ_PRECOMPUTE(const octet *TOKEN,const octet *CID,const octet *CP,octet *G1,octet *G2)
 {
-    ECP_ZZZ P,T;
+    ECP_ZZZ P;
+    ECP_ZZZ T;
     ECP2_ZZZ Q;
     FP12_YYY g;
     int res=0;
@@ -744,13 +778,17 @@
 
 /* calculate common key on client side */
 /* wCID = w.(A+AT) */
-int MPIN_ZZZ_CLIENT_KEY(int sha,octet *G1,octet *G2,int pin,octet *R,octet *X,octet *H,octet *wCID,octet *CK)
+int MPIN_ZZZ_CLIENT_KEY(int sha,const octet *G1,const octet *G2,int pin,const octet *R,const octet *X,const octet *H,const octet *wCID,octet *CK)
 {
-    FP12_YYY g1,g2;
+    FP12_YYY g1;
+    FP12_YYY g2;
     FP4_YYY c;
     ECP_ZZZ W;
     int res=0;
-    BIG_XXX r,z,x,h;
+    BIG_XXX r;
+    BIG_XXX z;
+    BIG_XXX x;
+    BIG_XXX h;
 
     FP12_YYY_fromOctet(&g1,G1);
     FP12_YYY_fromOctet(&g2,G2);
@@ -781,14 +819,17 @@
 /* calculate common key on server side */
 /* Z=r.A - no time permits involved */
 
-int MPIN_ZZZ_SERVER_KEY(int sha,octet *Z,octet *SST,octet *W,octet *H,octet *HID,octet *xID,octet *xCID,octet *SK)
+int MPIN_ZZZ_SERVER_KEY(int sha,const octet *Z,const octet *SST,const octet *W,const octet *H,const octet *HID,const octet *xID,const octet *xCID,octet *SK)
 {
     int res=0;
     FP12_YYY g;
     FP4_YYY c;
-    ECP_ZZZ R,U,A;
+    ECP_ZZZ R;
+    ECP_ZZZ U;
+    ECP_ZZZ A;
     ECP2_ZZZ sQ;
-    BIG_XXX w,h;
+    BIG_XXX w;
+    BIG_XXX h;
 
     if (!ECP2_ZZZ_fromOctet(&sQ,SST)) res=MPIN_INVALID_POINT;
     if (!ECP_ZZZ_fromOctet(&R,Z)) res=MPIN_INVALID_POINT;
@@ -826,9 +867,10 @@
 }
 
 /* Generate Y = H(TimeValue, xCID/xID) */
-void MPIN_ZZZ_GET_Y(int sha,int TimeValue,octet *xCID,octet *Y)
+void MPIN_ZZZ_GET_Y(int sha,int TimeValue,const octet *xCID,octet *Y)
 {
-    BIG_XXX q,y;
+    BIG_XXX q;
+    BIG_XXX y;
     char h[MODBYTES_XXX];
     octet H= {0,sizeof(h),h};
 
@@ -841,13 +883,13 @@
 }
 
 /* One pass MPIN Client */
-int MPIN_ZZZ_CLIENT(int sha,int date,octet *ID,csprng *RNG,octet *X,int pin,octet *TOKEN,octet *V,octet *U,octet *UT,octet *TP,octet *MESSAGE,int TimeValue,octet *Y)
+int MPIN_ZZZ_CLIENT(int sha,int date,const octet *ID,csprng *RNG,octet *X,int pin,const octet *TOKEN,octet *V,octet *U,octet *UT,const octet *TP,const octet *MESSAGE,int TimeValue,octet *Y)
 {
     int rtn=0;
     char m[M_SIZE_ZZZ];
     octet M= {0,sizeof(m),m};
 
-    octet *pID;
+    const octet *pID;
     if (date == 0)
         pID = U;
     else
@@ -873,13 +915,13 @@
 }
 
 /* One pass MPIN Server */
-int MPIN_ZZZ_SERVER(int sha,int date,octet *HID,octet *HTID,octet *Y,octet *sQ,octet *U,octet *UT,octet *V,octet *E,octet *F,octet *ID,octet *MESSAGE,int TimeValue, octet *Pa)
+int MPIN_ZZZ_SERVER(int sha,int date,octet *HID,octet *HTID,octet *Y,const octet *sQ,const octet *U,const octet *UT,const octet *V,octet *E,octet *F,const octet *ID,const octet *MESSAGE,int TimeValue,const octet *Pa)
 {
     int rtn=0;
     char m[M_SIZE_ZZZ];
     octet M= {0,sizeof(m),m};
 
-    octet *pU;
+    const octet *pU;
     if (date == 0)
         pU = U;
     else
@@ -904,7 +946,8 @@
 
 int MPIN_ZZZ_GET_DVS_KEYPAIR(csprng *R,octet *Z,octet *Pa)
 {
-    BIG_XXX z,r;
+    BIG_XXX z;
+    BIG_XXX r;
     ECP2_ZZZ Q;
     int res=0;
 
diff --git a/src/oct.c b/src/oct.c
index 4362a98..7382259 100644
--- a/src/oct.c
+++ b/src/oct.c
@@ -27,11 +27,10 @@
 
 /* SU= 16 */
 /* output octet */
-void OCT_output(octet *w)
+void OCT_output(const octet *w)
 {
-    int i;
     unsigned char ch;
-    for (i=0; i<w->len; i++)
+    for (int i=0; i<w->len; i++)
     {
         ch=w->val[i];
         printf("%02x",ch);
@@ -40,22 +39,21 @@
 }
 
 /* SU= 16 */
-void OCT_output_string(octet *w)
+void OCT_output_string(const octet *w)
 {
-    int i;
     unsigned char ch;
-    for (i=0; i<w->len; i++)
+    for (int i=0; i<w->len; i++)
     {
         ch=w->val[i];
         printf("%c",ch);
     }
-    /*  printf("\n"); */
 }
 
 /* Convert C string to octet format - truncates if no room  */
-void OCT_jstring(octet *y,char *s)
+void OCT_jstring(octet *y,const char *s)
 {
-    int i,j;
+    int i;
+    int j;
     i=y->len;
     j=0;
     while (s[j]!=0 && i<y->max)
@@ -70,13 +68,12 @@
 /* compare 2 octet strings.
  * If x==y return TRUE, else return FALSE */
 /* SU= 8 */
-int OCT_comp(octet *x,octet *y)
+int OCT_comp(const octet *x,const octet *y)
 {
-    int i;
     byte res = 0;
 
     if (x->len != y->len) return 0;
-    for (i=0; i<x->len; i++)
+    for (int i=0; i<x->len; i++)
     {
         res |= (x->val[i] ^ y->val[i]);
     }
@@ -92,12 +89,11 @@
 
 /* check are first n bytes the same (in constant time) */
 
-int OCT_ncomp(octet *x,octet *y,int n)
+int OCT_ncomp(const octet *x,const octet *y,int n)
 {
-    int i;
     byte res = 0;
     if (n>y->len || n>x->len) return 0;
-    for (i=0; i<n; i++)
+    for (int i=0; i<n; i++)
     {
         res |= (x->val[i] ^ y->val[i]);
     }
@@ -114,24 +110,23 @@
 /* Shift octet to the left by n bytes. Leftmost bytes disappear  */
 void OCT_shl(octet *x,int n)
 {
-    int i;
     if (n>=x->len)
     {
         x->len=0;
         return;
     }
     x->len-=n;
-    for (i=0; i<x->len; i++)
+    for (int i=0; i<x->len; i++)
         x->val[i]=x->val[i+n];
 }
 
 /* Append binary string to octet - truncates if no room */
 /* SU= 12 */
-void OCT_jbytes(octet *y,char *b,int len)
+void OCT_jbytes(octet *y,const char *b,int len)
 {
-    int i,j;
+    int i;
     i=y->len;
-    for (j=0; j<len && i<y->max; j++)
+    for (int j=0; j<len && i<y->max; j++)
     {
         y->val[i]=b[j];
         y->len++;
@@ -141,13 +136,13 @@
 
 /* Concatenates two octet strings */
 /* SU= 8 */
-void OCT_joctet(octet *y,octet *x)
+void OCT_joctet(octet *y,const octet *x)
 {
     /* y=y || x */
-    int i,j;
+    int j;
     if (x==NULL) return;
 
-    for (i=0; i<x->len; i++)
+    for (int i=0; i<x->len; i++)
     {
         j=y->len+i;
         if (j>=y->max)
@@ -164,11 +159,11 @@
 /* SU= 8 */
 void OCT_jbyte(octet *y,int ch,int rep)
 {
-    int i,j;
+    int i;
     i=y->len;
-    for (j=0; j<rep && i<y->max; j++)
+    for (int j=0; j<rep && i<y->max; j++)
     {
-        y->val[i]=ch;
+        y->val[i]=(char)ch;
         y->len++;
         i++;
     }
@@ -176,12 +171,11 @@
 
 /* XOR common bytes of x with y */
 /* SU= 8 */
-void OCT_xor(octet *y,octet *x)
+void OCT_xor(octet *y,const octet *x)
 {
     /* xor first x->len bytes of y */
 
-    int i;
-    for (i=0; i<x->len && i<y->len; i++)
+    for (int i=0; i<x->len && i<y->len; i++)
     {
         y->val[i]^=x->val[i];
     }
@@ -196,8 +190,7 @@
 /* Kill an octet string - Zeroise it for security */
 void OCT_clear(octet *w)
 {
-    int i;
-    for (i=0; i<w->max; i++) w->val[i]=0;
+    for (int i=0; i<w->max; i++) w->val[i]=0;
     w->len=0;
 }
 
@@ -205,7 +198,8 @@
 /* SU= 8 */
 void OCT_jint(octet *y,int x,int len)
 {
-    int i,n;
+    int i;
+    int n;
     n=y->len+len;
     if (n>y->max || len<=0) return;
     for (i=y->len; i<n; i++) y->val[i]=0;
@@ -215,7 +209,7 @@
     while (x>0 && i>0)
     {
         i--;
-        y->val[i]=x%256;
+        y->val[i]=(char)(x%256);
         x/=256;
     }
 }
@@ -224,7 +218,8 @@
 /* SU= 8 */
 int OCT_pad(octet *w,int n)
 {
-    int i,d;
+    int i;
+    int d;
     if (w->len>n || n>w->max) return 0;
     if (n==w->len) return 1;
     d=n-w->len;
@@ -239,10 +234,15 @@
 
 /* Convert an octet string to base64 string */
 /* SU= 56 */
-void OCT_tobase64(char *b,octet *w)
+void OCT_tobase64(char *b,const octet *w)
 {
-    int i,j,k,rem,last;
-    int c,ch[4];
+    int i;
+    int j;
+    int k;
+    int rem;
+    int last;
+    int c;
+    int ch[4];
     unsigned char ptr[3];
     rem=w->len%3;
     j=k=0;
@@ -270,7 +270,7 @@
             if (c>=52 && c<62) c-=4;
             if (c==62) c='+';
             if (c==63) c='/';
-            b[k++]=c;
+            b[k++]=(char)c;
         }
     }
     if (rem>0) for (i=rem; i<3; i++) b[k++]='=';
@@ -278,10 +278,16 @@
 }
 
 /* SU= 56 */
-void OCT_frombase64(octet *w,char *b)
+void OCT_frombase64(octet *w,const char *b)
 {
-    int i,j,k,pads,len=(int)strlen(b);
-    int c,ch[4],ptr[3];
+    int i;
+    int j;
+    int k;
+    int pads;
+    int len=(int)strlen(b);
+    int c;
+    int ch[4];
+    int ptr[3];
     OCT_clear(w);
 
     j=k=0;
@@ -310,7 +316,7 @@
         for (i=0; i<3-pads && k<w->max; i++)
         {
             /* don't put in leading zeros */
-            w->val[k++]=ptr[i];
+            w->val[k++]=(char)ptr[i];
         }
     }
     w->len=k;
@@ -318,29 +324,26 @@
 
 /* copy an octet string - truncates if no room */
 /* SU= 16 */
-void OCT_copy(octet *y,octet *x)
+void OCT_copy(octet *y,const octet *x)
 {
-    int i;
     OCT_clear(y);
     y->len=x->len;
     if (y->len>y->max) y->len=y->max;
 
-    for (i=0; i<y->len; i++)
+    for (int i=0; i<y->len; i++)
         y->val[i]=x->val[i];
 }
 
 /* XOR m with all of x */
 void OCT_xorbyte(octet *x,int m)
 {
-    int i;
-    for (i=0; i<x->len; i++) x->val[i]^=m;
+    for (int i=0; i<x->len; i++) x->val[i]^=m;
 }
 
 /* truncates x to n bytes and places the rest in y (if y is not NULL) */
 /* SU= 8 */
 void OCT_chop(octet *x,octet *y,int n)
 {
-    int i;
     if (n>=x->len)
     {
         if (y!=NULL) y->len=0;
@@ -351,25 +354,24 @@
 
     if (y!=NULL)
     {
-        for (i=0; i<y->len && i<y->max; i++) y->val[i]=x->val[i+n];
+        for (int i=0; i<y->len && i<y->max; i++) y->val[i]=x->val[i+n];
     }
 }
 
 /* set x to len random bytes */
 void OCT_rand(octet *x,csprng *RNG,int len)
 {
-    int i;
     if (len>x->max) len=x->max;
     x->len=len;
 
-    for (i=0; i<len; i++) x->val[i]=RAND_byte(RNG);
+    for (int i=0; i<len; i++) x->val[i]=(char)RAND_byte(RNG);
 }
 
 /* Convert an octet to a hex string */
-void OCT_toHex(octet *src,char *dst)
+void OCT_toHex(const octet *src,char *dst)
 {
-    const char * hexadecimals = "0123456789abcdef";
     int i;
+    const char * hexadecimals = "0123456789abcdef";
     unsigned char ch;
     for (i=0; i<src->len; i++)
     {
@@ -394,7 +396,7 @@
 }
 
 /* Convert from a hex string */
-void OCT_fromHex(octet *dst,char *src)
+void OCT_fromHex(octet *dst,const char *src)
 {
     int i=0;
     int j=0;
@@ -403,22 +405,20 @@
 
     while(j < len && i < dst->max)
     {
-        dst->val[i++] = char2int(src[j])*16 + char2int(src[j+1]);
+        dst->val[i++] = (char)(char2int(src[j])*16 + char2int(src[j+1]));
         j += 2;
     }
     dst->len=i;
 }
 
-
 /* Convert an octet to a string */
-void OCT_toStr(octet *src,char *dst)
+void OCT_toStr(const octet *src,char *dst)
 {
-    int i;
     unsigned char ch;
-    for (i=0; i<src->len; i++)
+    for (int i=0; i<src->len; i++)
     {
         ch=src->val[i];
-        sprintf(&dst[i],"%c", ch);
+        snprintf(&dst[i], sizeof(unsigned char)+1, "%c", ch);
     }
 }
 
diff --git a/src/paillier.c b/src/paillier.c
index 5612065..447cc0e 100644
--- a/src/paillier.c
+++ b/src/paillier.c
@@ -28,7 +28,7 @@
 #include "paillier.h"
 
 // generate a Paillier key pair
-void PAILLIER_KEY_PAIR(csprng *RNG, octet *P, octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV)
+void PAILLIER_KEY_PAIR(csprng *RNG, const octet *P, const octet* Q, PAILLIER_public_key *PUB, PAILLIER_private_key *PRIV)
 {
     char oct[FS_2048];
     octet OCT = {0, FS_2048, oct};
@@ -133,7 +133,7 @@
 }
 
 // Paillier encryption
-void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, octet* PT, octet* CT, octet* R)
+void PAILLIER_ENCRYPT(csprng *RNG, PAILLIER_public_key *PUB, const octet* PT, octet* CT, octet* R)
 {
     // plaintext
     BIG_512_60 pt[HFLEN_4096];
@@ -182,7 +182,7 @@
 }
 
 // Paillier decryption
-void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, octet* CT, octet* PT)
+void PAILLIER_DECRYPT(PAILLIER_private_key *PRIV, const octet* CT, octet* PT)
 {
     // Chiphertext
     BIG_1024_58 ct[2 * FFLEN_2048];
@@ -245,7 +245,7 @@
 }
 
 // Homomorphic addition of plaintexts
-void PAILLIER_ADD(PAILLIER_public_key *PUB, octet* CT1, octet* CT2, octet* CT)
+void PAILLIER_ADD(PAILLIER_public_key *PUB, const octet* CT1, const octet* CT2, octet* CT)
 {
     // ciphertext
     BIG_512_60 ct1[FFLEN_4096];
@@ -264,7 +264,7 @@
 }
 
 // Homomorphic multiplication of plaintext
-void PAILLIER_MULT(PAILLIER_public_key *PUB, octet* CT1, octet* PT, octet* CT)
+void PAILLIER_MULT(PAILLIER_public_key *PUB, const octet* CT1, const octet* PT, octet* CT)
 {
     // Ciphertext
     BIG_512_60 ct1[FFLEN_4096];
@@ -289,7 +289,7 @@
 }
 
 // Read a public key from its octet representation
-void PAILLIER_PK_fromOctet(PAILLIER_public_key *PUB, octet *PK)
+void PAILLIER_PK_fromOctet(PAILLIER_public_key *PUB, const octet *PK)
 {
     FF_4096_fromOctet(PUB->n, PK, HFLEN_4096);
 
diff --git a/src/pair.c.in b/src/pair.c.in
index d3b1b63..0fb46db 100644
--- a/src/pair.c.in
+++ b/src/pair.c.in
@@ -24,53 +24,61 @@
 #include "pair_ZZZ.h"
 
 /* Line function */
-static void PAIR_ZZZ_line(FP12_YYY *v,ECP2_ZZZ *A,ECP2_ZZZ *B,FP_YYY *Qx,FP_YYY *Qy)
+static void PAIR_ZZZ_line(FP12_YYY *v,ECP2_ZZZ *A,const ECP2_ZZZ *B,const FP_YYY *Qx,const FP_YYY *Qy)
 {
-    FP2_YYY X1,Y1,T1,T2;
-    FP2_YYY XX,YY,ZZ,YZ;
-    FP4_YYY a,b,c;
+    FP2_YYY X1;
+    FP2_YYY Y1;
+    FP2_YYY T1;
+    FP2_YYY T2;
+    FP2_YYY XX;
+    FP2_YYY YY;
+    FP2_YYY ZZ;
+    FP2_YYY YZ;
+    FP4_YYY a;
+    FP4_YYY b;
+    FP4_YYY c;
 
     if (A==B)
     {
         /* doubling */
-        FP2_YYY_copy(&XX,&(A->x));	//FP2 XX=new FP2(A.getx());  //X
-        FP2_YYY_copy(&YY,&(A->y));	//FP2 YY=new FP2(A.gety());  //Y
-        FP2_YYY_copy(&ZZ,&(A->z));	//FP2 ZZ=new FP2(A.getz());  //Z
+        FP2_YYY_copy(&XX,&(A->x));	                    //FP2 XX=new FP2(A.getx())  //X
+        FP2_YYY_copy(&YY,&(A->y));	                    //FP2 YY=new FP2(A.gety())  //Y
+        FP2_YYY_copy(&ZZ,&(A->z));	                    //FP2 ZZ=new FP2(A.getz())  //Z
 
 
-        FP2_YYY_copy(&YZ,&YY);		//FP2 YZ=new FP2(YY);        //Y
-        FP2_YYY_mul(&YZ,&YZ,&ZZ);		//YZ.mul(ZZ);                //YZ
-        FP2_YYY_sqr(&XX,&XX);		//XX.sqr();	               //X^2
-        FP2_YYY_sqr(&YY,&YY);		//YY.sqr();	               //Y^2
-        FP2_YYY_sqr(&ZZ,&ZZ);		//ZZ.sqr();			       //Z^2
+        FP2_YYY_copy(&YZ,&YY);		                    //FP2 YZ=new FP2(YY)    //Y
+        FP2_YYY_mul(&YZ,&YZ,&ZZ);		                //YZ.mul(ZZ)    //YZ
+        FP2_YYY_sqr(&XX,&XX);		                    //XX.sqr()  //X^2
+        FP2_YYY_sqr(&YY,&YY);		                    //YY.sqr()  //Y^2
+        FP2_YYY_sqr(&ZZ,&ZZ);		                    //ZZ.sqr()  //Z^2
 
-        FP2_YYY_imul(&YZ,&YZ,4);	//YZ.imul(4);
-        FP2_YYY_neg(&YZ,&YZ);		//YZ.neg();
-        FP2_YYY_norm(&YZ);			//YZ.norm();       //-4YZ
+        FP2_YYY_imul(&YZ,&YZ,4);	                    //YZ.imul(4)
+        FP2_YYY_neg(&YZ,&YZ);		                    //YZ.neg()
+        FP2_YYY_norm(&YZ);			                    //YZ.norm() //-4YZ
 
-        FP2_YYY_imul(&XX,&XX,6);					//6X^2
-        FP2_YYY_pmul(&XX,&XX,Qx);	               //6X^2.Xs
+        FP2_YYY_imul(&XX,&XX,6);					    //6X^2
+        FP2_YYY_pmul(&XX,&XX,Qx);	                    //6X^2.Xs
 
-        FP2_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ);	//3Bz^2
+        FP2_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ);	        //3Bz^2
 
-        FP2_YYY_pmul(&YZ,&YZ,Qy);	//-4YZ.Ys
+        FP2_YYY_pmul(&YZ,&YZ,Qy);	                    //-4YZ.Ys
 
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-        FP2_YYY_div_ip2(&ZZ);		//6(b/i)z^2
+        FP2_YYY_div_ip2(&ZZ);		                    //6(b/i)z^2
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
         FP2_YYY_mul_ip(&ZZ);
-        FP2_YYY_add(&ZZ,&ZZ,&ZZ);  // 6biz^2
+        FP2_YYY_add(&ZZ,&ZZ,&ZZ);                       //6biz^2
         FP2_YYY_mul_ip(&YZ);
         FP2_YYY_norm(&YZ);
 #endif
-        FP2_YYY_norm(&ZZ);			// 6bi.Z^2
+        FP2_YYY_norm(&ZZ);			                    //6bi.Z^2
 
-        FP2_YYY_add(&YY,&YY,&YY);	// 2y^2
-        FP2_YYY_sub(&ZZ,&ZZ,&YY);	//
-        FP2_YYY_norm(&ZZ);			// 6b.Z^2-2Y^2
+        FP2_YYY_add(&YY,&YY,&YY);	                    //2y^2
+        FP2_YYY_sub(&ZZ,&ZZ,&YY);
+        FP2_YYY_norm(&ZZ);			                    //6b.Z^2-2Y^2
 
-        FP4_YYY_from_FP2s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
+        FP4_YYY_from_FP2s(&a,&YZ,&ZZ);                  //-4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
 #if SEXTIC_TWIST_ZZZ==D_TYPE
         FP4_YYY_from_FP2(&b,&XX);
         FP4_YYY_zero(&c);
@@ -80,54 +88,54 @@
         FP4_YYY_from_FP2H(&c,&XX);
 #endif
 
-        ECP2_ZZZ_dbl(A);				//A.dbl();
+        ECP2_ZZZ_dbl(A);				                //A.dbl()
     }
     else
     {
         /* addition */
 
-        FP2_YYY_copy(&X1,&(A->x));		//FP2 X1=new FP2(A.getx());    // X1
-        FP2_YYY_copy(&Y1,&(A->y));		//FP2 Y1=new FP2(A.gety());    // Y1
-        FP2_YYY_copy(&T1,&(A->z));		//FP2 T1=new FP2(A.getz());    // Z1
+        FP2_YYY_copy(&X1,&(A->x));		                //FP2 X1=new FP2(A.getx())  // X1
+        FP2_YYY_copy(&Y1,&(A->y));		                //FP2 Y1=new FP2(A.gety())  // Y1
+        FP2_YYY_copy(&T1,&(A->z));		                //FP2 T1=new FP2(A.getz())  // Z1
 
-        FP2_YYY_copy(&T2,&T1);		//FP2 T2=new FP2(A.getz());    // Z1
+        FP2_YYY_copy(&T2,&T1);		                    //FP2 T2=new FP2(A.getz())  // Z1
 
-        FP2_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());    // T1=Z1.Y2
-        FP2_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());    // T2=Z1.X2
+        FP2_YYY_mul(&T1,&T1,&(B->y));	                //T1.mul(B.gety());    // T1=Z1.Y2
+        FP2_YYY_mul(&T2,&T2,&(B->x));	                //T2.mul(B.getx());    // T2=Z1.X2
 
-        FP2_YYY_sub(&X1,&X1,&T2);		//X1.sub(T2);
-        FP2_YYY_norm(&X1);				//X1.norm();  // X1=X1-Z1.X2
-        FP2_YYY_sub(&Y1,&Y1,&T1);		//Y1.sub(T1);
-        FP2_YYY_norm(&Y1);				//Y1.norm();  // Y1=Y1-Z1.Y2
+        FP2_YYY_sub(&X1,&X1,&T2);	                	//X1.sub(T2)
+        FP2_YYY_norm(&X1);				                //X1.norm() // X1=X1-Z1.X2
+        FP2_YYY_sub(&Y1,&Y1,&T1);		                //Y1.sub(T1)
+        FP2_YYY_norm(&Y1);				                //Y1.norm() // Y1=Y1-Z1.Y2
 
-        FP2_YYY_copy(&T1,&X1);			//T1.copy(X1);            // T1=X1-Z1.X2
+        FP2_YYY_copy(&T1,&X1);		                	//T1.copy(X1)   // T1=X1-Z1.X2
 
-        FP2_YYY_pmul(&X1,&X1,Qy);		//X1.pmul(Qy);            // X1=(X1-Z1.X2).Ys
+        FP2_YYY_pmul(&X1,&X1,Qy);	                	//X1.pmul(Qy)   // X1=(X1-Z1.X2).Ys
 #if SEXTIC_TWIST_ZZZ==M_TYPE
         FP2_YYY_mul_ip(&X1);
         FP2_YYY_norm(&X1);
 #endif
 
-        FP2_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());       // T1=(X1-Z1.X2).Y2
+        FP2_YYY_mul(&T1,&T1,&(B->y));	                //T1.mul(B.gety())  // T1=(X1-Z1.X2).Y2
 
-        FP2_YYY_copy(&T2,&Y1);			//T2.copy(Y1);            // T2=Y1-Z1.Y2
-        FP2_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());       // T2=(Y1-Z1.Y2).X2
-        FP2_YYY_sub(&T2,&T2,&T1);		//T2.sub(T1);
-        FP2_YYY_norm(&T2);				//T2.norm();          // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
-        FP2_YYY_pmul(&Y1,&Y1,Qx);		//Y1.pmul(Qx);
-        FP2_YYY_neg(&Y1,&Y1);			//Y1.neg();
-        FP2_YYY_norm(&Y1);				//Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
+        FP2_YYY_copy(&T2,&Y1);			                //T2.copy(Y1)   // T2=Y1-Z1.Y2
+        FP2_YYY_mul(&T2,&T2,&(B->x));	                //T2.mul(B.getx())  // T2=(Y1-Z1.Y2).X2
+        FP2_YYY_sub(&T2,&T2,&T1);		                //T2.sub(T1)
+        FP2_YYY_norm(&T2);				                //T2.norm() // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
+        FP2_YYY_pmul(&Y1,&Y1,Qx);		                //Y1.pmul(Qx)
+        FP2_YYY_neg(&Y1,&Y1);		                	//Y1.neg()
+        FP2_YYY_norm(&Y1);			                  	//Y1.norm() // Y1=-(Y1-Z1.Y2).Xs
 
-        FP4_YYY_from_FP2s(&a,&X1,&T2);	// (X1-Z1.X2).Ys  |  (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2  | - (Y1-Z1.Y2).Xs
+        FP4_YYY_from_FP2s(&a,&X1,&T2);	                //(X1-Z1.X2).Ys | (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 | - (Y1-Z1.Y2).Xs
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-        FP4_YYY_from_FP2(&b,&Y1);		//b=new FP4(Y1);
+        FP4_YYY_from_FP2(&b,&Y1);		                //b=new FP4(Y1)
         FP4_YYY_zero(&c);
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
         FP4_YYY_zero(&b);
-        FP4_YYY_from_FP2H(&c,&Y1);		//b=new FP4(Y1);
+        FP4_YYY_from_FP2H(&c,&Y1);		                //b=new FP4(Y1)
 #endif
-        ECP2_ZZZ_add(A,B);			//A.add(B);
+        ECP2_ZZZ_add(A,B);			                    //A.add(B)
     }
 
     FP12_YYY_from_FP4s(v,&a,&b,&c);
@@ -172,18 +180,16 @@
 /* prepare for multi-pairing */
 void PAIR_ZZZ_initmp(FP12_YYY r[])
 {
-    int i;
-    for (i=ATE_BITS_ZZZ-1; i>=0; i--)
+    for (int i=ATE_BITS_ZZZ-1; i>=0; i--)
         FP12_YYY_one(&r[i]);
     return;
 }
 
 /* basic Miller loop */
-void PAIR_ZZZ_miller(FP12_YYY *res,FP12_YYY r[])
+void PAIR_ZZZ_miller(FP12_YYY *res,const FP12_YYY r[])
 {
-    int i;
     FP12_YYY_one(res);
-    for (i=ATE_BITS_ZZZ-1; i>=1; i--)
+    for (int i=ATE_BITS_ZZZ-1; i>=1; i--)
     {
         FP12_YYY_sqr(res,res);
         FP12_YYY_ssmul(res,&r[i]);
@@ -197,14 +203,20 @@
 }
 
 /* Accumulate another set of line functions for n-pairing */
-void PAIR_ZZZ_another(FP12_YYY r[],ECP2_ZZZ* PV,ECP_ZZZ* QV)
+void PAIR_ZZZ_another(FP12_YYY r[],const ECP2_ZZZ* PV,const ECP_ZZZ* QV)
 {
-    int i,nb,bt;
-    BIG_XXX n,n3;
-    FP12_YYY lv,lv2;
-    ECP2_ZZZ A,NP,P;
+    int nb;
+    int bt;
+    BIG_XXX n;
+    BIG_XXX n3;
+    FP12_YYY lv;
+    FP12_YYY lv2;
+    ECP2_ZZZ A;
+    ECP2_ZZZ NP;
+    ECP2_ZZZ P;
     ECP_ZZZ Q;
-    FP_YYY Qx,Qy;
+    FP_YYY Qx;
+    FP_YYY Qy;
 #if PAIRING_FRIENDLY_ZZZ==BN
     ECP2_ZZZ K;
     FP2_YYY X;
@@ -232,11 +244,11 @@
     ECP2_ZZZ_copy(&NP,&P);
     ECP2_ZZZ_neg(&NP);
 
-    for (i=nb-2; i>=1; i--)
+    for (int i=nb-2; i>=1; i--)
     {
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i);          // bt=BIG_bit(n,i)
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
@@ -269,14 +281,20 @@
 }
 
 /* Optimal R-ate pairing r=e(P,Q) */
-void PAIR_ZZZ_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1)
+void PAIR_ZZZ_ate(FP12_YYY *r,const ECP2_ZZZ *P1,const ECP_ZZZ *Q1)
 {
-    BIG_XXX n,n3;
-    FP_YYY Qx,Qy;
-    int i,nb,bt;
-    ECP2_ZZZ A,NP,P;
+    BIG_XXX n;
+    BIG_XXX n3;
+    FP_YYY Qx;
+    FP_YYY Qy;
+    int nb;
+    int bt;
+    ECP2_ZZZ A;
+    ECP2_ZZZ NP;
+    ECP2_ZZZ P;
     ECP_ZZZ Q;
-    FP12_YYY lv,lv2;
+    FP12_YYY lv;
+    FP12_YYY lv2;
 #if PAIRING_FRIENDLY_ZZZ==BN
     ECP2_ZZZ KA;
     FP2_YYY X;
@@ -309,12 +327,12 @@
     FP12_YYY_one(r);
 
     /* Main Miller Loop */
-    for (i=nb-2; i>=1; i--)   //0
+    for (int i=nb-2; i>=1; i--)                         //0
     {
         FP12_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i);          // bt=BIG_bit(n,i)
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
@@ -353,14 +371,26 @@
 }
 
 /* Optimal R-ate double pairing e(P,Q).e(R,S) */
-void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_ZZZ *S1)
+void PAIR_ZZZ_double_ate(FP12_YYY *r,const ECP2_ZZZ *P1,const ECP_ZZZ *Q1,const ECP2_ZZZ *R1,const ECP_ZZZ *S1)
 {
-    BIG_XXX n,n3;
-    FP_YYY Qx,Qy,Sx,Sy;
-    int i,nb,bt;
-    ECP2_ZZZ A,B,NP,NR,P,R;
-    ECP_ZZZ Q,S;
-    FP12_YYY lv,lv2;
+    BIG_XXX n;
+    BIG_XXX n3;
+    FP_YYY Qx;
+    FP_YYY Qy;
+    FP_YYY Sx;
+    FP_YYY Sy;
+    int nb;
+    int bt;
+    ECP2_ZZZ A;
+    ECP2_ZZZ B;
+    ECP2_ZZZ NP;
+    ECP2_ZZZ NR;
+    ECP2_ZZZ P;
+    ECP2_ZZZ R;
+    ECP_ZZZ Q;
+    ECP_ZZZ S;
+    FP12_YYY lv;
+    FP12_YYY lv2;
 #if PAIRING_FRIENDLY_ZZZ==BN
     FP2_YYY X;
     ECP2_ZZZ K;
@@ -405,7 +435,7 @@
     FP12_YYY_one(r);
 
     /* Main Miller Loop */
-    for (i=nb-2; i>=1; i--)
+    for (int i=nb-2; i>=1; i--)
     {
         FP12_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
@@ -413,7 +443,7 @@
         FP12_YYY_smul(&lv,&lv2);
         FP12_YYY_ssmul(r,&lv);
 
-        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i);          // bt=BIG_bit(n,i)
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv,&A,&P,&Qx,&Qy);
@@ -470,8 +500,13 @@
 {
     FP2_YYY X;
     BIG_XXX x;
-    FP_YYY a,b;
-    FP12_YYY t0,y0,y1,y2,y3;
+    FP_YYY a;
+    FP_YYY b;
+    FP12_YYY t0;
+    FP12_YYY y0;
+    FP12_YYY y1;
+    FP12_YYY y2;
+    FP12_YYY y3;
 
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
     FP_YYY_rcopy(&a,Fra_YYY);
@@ -490,12 +525,6 @@
     FP12_YYY_frob(r,&X);
     FP12_YYY_mul(r,&t0);
 
-//    if (FP12_YYY_isunity(r))
-//    {
-//        FP12_YYY_zero(r);
-//        return;
-//    }
-
     /* Hard part of final exp - see Duquesne & Ghamman eprint 2015/192.pdf */
 #if PAIRING_FRIENDLY_ZZZ==BN
     FP12_YYY_pow(&t0,r,x); // t0=f^-u
@@ -659,15 +688,16 @@
 #endif // USE_GLV
 
 /* Galbraith & Scott Method */
-static void gs(BIG_XXX u[4],BIG_XXX e)
+static void gs(BIG_XXX u[4],const BIG_XXX e)
 {
-    int i;
 #if PAIRING_FRIENDLY_ZZZ==BN
     int j;
-    BIG_XXX v[4],t,q;
+    BIG_XXX v[4];
+    BIG_XXX t;
+    BIG_XXX q;
     DBIG_XXX d;
     BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
-    for (i=0; i<4; i++)
+    for (int i=0; i<4; i++)
     {
         BIG_XXX_rcopy(t,CURVE_WB_ZZZ[i]);
         BIG_XXX_mul(d,t,e);
@@ -676,7 +706,7 @@
     }
 
     BIG_XXX_copy(u[0],e);
-    for (i=0; i<4; i++)
+    for (int i=0; i<4; i++)
         for (j=0; j<4; j++)
         {
             BIG_XXX_rcopy(t,CURVE_BB_ZZZ[j][i]);
@@ -688,12 +718,14 @@
 
 #else
 
-    BIG_XXX x,w,q;
+    BIG_XXX x;
+    BIG_XXX w;
+    BIG_XXX q;
     BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
     BIG_XXX_copy(w,e);
 
-    for (i=0; i<3; i++)
+    for (int i=0; i<3; i++)
     {
         BIG_XXX_copy(u[i],w);
         BIG_XXX_mod(u[i],x);
@@ -715,7 +747,7 @@
 }
 
 /* Multiply P by e in group G1 */
-void PAIR_ZZZ_G1mul(ECP_ZZZ *P,BIG_XXX e)
+void PAIR_ZZZ_G1mul(ECP_ZZZ *P,const BIG_XXX e)
 {
 #ifdef USE_GLV_ZZZ   /* Note this method is patented */
     int np,nn;
@@ -761,7 +793,7 @@
 }
 
 /* Multiply P by e in group G2 */
-void PAIR_ZZZ_G2mul(ECP2_ZZZ *P,BIG_XXX e)
+void PAIR_ZZZ_G2mul(ECP2_ZZZ *P,const BIG_XXX e)
 {
 #ifdef USE_GS_G2_ZZZ   /* Well I didn't patent it :) */
     int i,np,nn;
@@ -810,14 +842,18 @@
 }
 
 /* f=f^e */
-void PAIR_ZZZ_GTpow(FP12_YYY *f,BIG_XXX e)
+void PAIR_ZZZ_GTpow(FP12_YYY *f,const BIG_XXX e)
 {
 #ifdef USE_GS_GT_ZZZ   /* Note that this option requires a lot of RAM! Maybe better to use compressed XTR method, see fp4.c */
-    int i,np,nn;
+    int i;
+    int np;
+    int nn;
     FP12_YYY g[4];
     FP2_YYY X;
-    BIG_XXX t,q;
-    FP_YYY fx,fy;
+    BIG_XXX t;
+    BIG_XXX q;
+    FP_YYY fx;
+    FP_YYY fy;
     BIG_XXX u[4];
 
     FP_YYY_rcopy(&fx,Fra_YYY);
diff --git a/src/pbc_support.c b/src/pbc_support.c
index 3639fb7..16b8bd8 100644
--- a/src/pbc_support.c
+++ b/src/pbc_support.c
@@ -19,17 +19,17 @@
 
 /* Symmetric crypto support functions Functions  */
 
-#include <stdio.h>
 #include <string.h>
-#include <stdlib.h>
 #include <time.h>
 
 #include "pbc_support.h"
 
 /* general purpose hash function w=hash(p|n|x|y) */
-void mhashit(int sha,int n,octet *x,octet *w)
+void mhashit(int sha,int n,const octet *x,octet *w)
 {
-    int i,c[4],hlen;
+    int i;
+    int c[4];
+    int hlen;
     hash256 sha256;
     hash512 sha512;
     char hh[64];
@@ -45,6 +45,8 @@
     case SHA512:
         HASH512_init(&sha512);
         break;
+    default:
+        break;
     }
 
     hlen=sha;
@@ -54,7 +56,7 @@
         c[0]=(n>>24)&0xff;
         c[1]=(n>>16)&0xff;
         c[2]=(n>>8)&0xff;
-        c[3]=(n)&0xff;
+        c[3]=n&0xff;
         for (i=0; i<4; i++)
         {
             switch(sha)
@@ -68,6 +70,8 @@
             case SHA512:
                 HASH512_process(&sha512,c[i]);
                 break;
+            default:
+                break;
             }
         }
     }
@@ -86,6 +90,8 @@
             case SHA512:
                 HASH512_process(&sha512,x->val[i]);
                 break;
+            default:
+                break;
             }
         }
 
@@ -101,6 +107,8 @@
     case SHA512:
         HASH512_hash(&sha512,hh);
         break;
+    default:
+        break;
     }
 
     OCT_empty(w);
@@ -111,9 +119,6 @@
     {
         OCT_jbyte(w,0,w->max-hlen);
         OCT_jbytes(w,hh,hlen);
-
-//        OCT_jbytes(w,hh,hlen);
-//        OCT_jbyte(w,0,w->max-hlen);
     }
 }
 
@@ -121,12 +126,12 @@
 {
     /* return time in slots since epoch */
     unsign32 ti=(unsign32)time(NULL);
-    return (uint32_t)(ti/(60*TIME_SLOT_MINUTES));
+    return ti/(60*TIME_SLOT_MINUTES);
 }
 
 /* Hash the M-Pin transcript - new */
 
-void HASH_ALL(int sha,octet *HID,octet *xID,octet *xCID,octet *SEC,octet *Y,octet *R,octet *W,octet *H)
+void HASH_ALL(int sha,const octet *HID,const octet *xID,const octet *xCID,const octet *SEC,const octet *Y,const octet *R,const octet *W,octet *H)
 {
     char t[1284];   // assumes max modulus of 1024-bits
     octet T= {0,sizeof(t),t};
@@ -142,7 +147,7 @@
     mhashit(sha,0,&T,H);
 }
 
-void HASH_ID(int sha,octet *ID,octet *HID)
+void HASH_ID(int sha,const octet *ID,octet *HID)
 {
     mhashit(sha,0,ID,HID);
 }
@@ -154,7 +159,7 @@
 
 /* AES-GCM Encryption of octets, K is key, H is header,
    P is plaintext, C is ciphertext, T is authentication tag */
-void AES_GCM_ENCRYPT(octet *K,octet *IV,octet *H,octet *P,octet *C,octet *T)
+void AES_GCM_ENCRYPT(octet *K,const octet *IV,const octet *H,const octet *P,octet *C,octet *T)
 {
     gcm g;
     GCM_init(&g,K->len,K->val,IV->len,IV->val);
@@ -167,7 +172,7 @@
 
 /* AES-GCM Decryption of octets, K is key, H is header,
    P is plaintext, C is ciphertext, T is authentication tag */
-void AES_GCM_DECRYPT(octet *K,octet *IV,octet *H,octet *C,octet *P,octet *T)
+void AES_GCM_DECRYPT(octet *K,const octet *IV,const octet *H,const octet *C,octet *P,octet *T)
 {
     gcm g;
     GCM_init(&g,K->len,K->val,IV->len,IV->val);
diff --git a/src/rand.c b/src/rand.c
index 4a2cd0a..568a28d 100644
--- a/src/rand.c
+++ b/src/rand.c
@@ -33,8 +33,10 @@
 static unsign32 sbrand(csprng *rng)
 {
     /* Marsaglia & Zaman random number generator */
-    int i,k;
-    unsign32 pdiff,t;
+    int i;
+    int k;
+    unsign32 pdiff;
+    unsign32 t;
     rng->rndptr++;
     if (rng->rndptr<NK) return rng->ira[rng->rndptr];
     rng->rndptr=0;
@@ -58,8 +60,10 @@
     /* initialise random number system */
     /* modified so that a subsequent call "stirs" in another seed value */
     /* in this way as many seed bits as desired may be used */
-    int i,in;
-    unsign32 t,m=1;
+    int i;
+    int in;
+    unsign32 t;
+    unsign32 m=1;
     rng->borrow=0L;
     rng->rndptr=0;
     rng->ira[0]^=seed;
@@ -79,10 +83,9 @@
 static void fill_pool(csprng *rng)
 {
     /* hash down output of RNG to re-fill the pool */
-    int i;
     hash256 sh;
     HASH256_init(&sh);
-    for (i=0; i<128; i++) HASH256_process(&sh,sbrand(rng));
+    for (int i=0; i<128; i++) HASH256_process(&sh,sbrand(rng));
     HASH256_hash(&sh,rng->pool);
     rng->pool_ptr=0;
 }
@@ -95,7 +98,7 @@
 
 /* SU= 360 */
 /* Initialize RNG with some real entropy from some external source */
-void RAND_seed(csprng *rng,int rawlen,char *raw)
+void RAND_seed(csprng *rng,int rawlen,const char *raw)
 {
     /* initialise from at least 128 byte string of raw  *
      * random (keyboard?) input, and 32-bit time-of-day */
@@ -120,7 +123,6 @@
             b[1]=digest[4*i+1];
             b[2]=digest[4*i+2];
             b[3]=digest[4*i+3];
-            //	printf("%08x\n",pack(b));
             sirand(rng,pack(b));
         }
     }
@@ -147,26 +149,3 @@
     if (rng->pool_ptr>=32) fill_pool(rng);
     return (r&0xff);
 }
-
-/* test main program */
-/*
-#include <stdio.h>
-#include <string.h>
-
-void main()
-{
-    int i;
-    char raw[256];
-    csprng rng;
-
-	RAND_clean(&rng);
-
-
-	for (i=0;i<256;i++) raw[i]=(char)i;
-    RAND_seed(&rng,256,raw);
-
-	for (i=0;i<1000;i++)
-		printf("%02x ",(unsigned char)RAND_byte(&rng));
-}
-
-*/
diff --git a/src/randapi.c b/src/randapi.c
index c0b9b29..2f1fccb 100644
--- a/src/randapi.c
+++ b/src/randapi.c
@@ -22,7 +22,7 @@
 /* Initialise a Cryptographically Strong Random Number Generator from
    an octet of raw random data */
 
-void CREATE_CSPRNG(csprng *RNG,octet *RAW)
+void CREATE_CSPRNG(csprng *RNG,const octet *RAW)
 {
     RAND_seed(RNG,RAW->len,RAW->val);
 }
diff --git a/src/rom_iso_BLS381.c b/src/rom_iso_BLS381.c
new file mode 100644
index 0000000..fdad380
--- /dev/null
+++ b/src/rom_iso_BLS381.c
@@ -0,0 +1,294 @@
+/*
+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.
+*/
+
+#include "arch.h"
+#include "fp_BLS381.h"
+
+/* Curve BLS381 - Pairing friendly BLS curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+
+// Curve parameters of G1 ISO-11: y^2 = x^3 + ax + b
+const BIG_384_29 SSWU_A1_BLS381 = {0xd584c1d, 0x07a14041, 0x183e5fd7, 0x06df1b41, 0x081ac989, 0xc0d77ec, 0x1aa363a2, 0x0a707dcc, 0x02b0ea98, 0x164b6a4c, 0x0f5a4e80, 0x0771d286, 0x0144698a, 0x0};
+const BIG_384_29 SSWU_B1_BLS381 = {0xe172be0, 0x0e62474c, 0x1b3aa974, 0x0642b462, 0x15ef55a2, 0x0a7e779, 0x01c282e7, 0x1e1e49e8, 0x1b2016c1, 0x03a9f771, 0x0062c4ba, 0x02d10060, 0x0e2908d1, 0x9};
+const BIG_384_29 SSWU_Z1_BLS381 = {0x000000b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0};
+const BIG_384_29 H_EFF_G1 = {0x10001, 0x10080000, 0x34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+
+const BIG_384_29 ISO11_XNUM_BLS381[12] = {
+  {0x134649b7, 0x1560b313, 0x198b5bab, 0x0185abe5, 0x0e2c8561, 0x1dab66da, 0x017fc989, 0x11145ae0, 0x056b303e, 0x0eccc0ac, 0x0e024407, 0x1d066681, 0x1a05f2b1, 0x8},
+  {0x13cb83bb, 0x01a7778d, 0x0630d5ba, 0x11e54de6, 0x1e86b483, 0x119e3868, 0x105fd597, 0x0b65ed50, 0x1c7c17e7, 0x110a3d40, 0x01622eac, 0x1287565e, 0x1294ed3e, 0xb},
+  {0x0c9edcb0, 0x00bcfced, 0x025ca7f8, 0x187c7a54, 0x0e25c958, 0x1280f634, 0x0f95a1e3, 0x0e652b30, 0x1bce0324, 0x0e8854d0, 0x07441231, 0x12ecf1d8, 0x154005db, 0x6},
+  {0x1d9b6861, 0x0d9c4320, 0x041c64f1, 0x0dc4b9c6, 0x13083533, 0x1944f8d9, 0x1c97c6cc, 0x0cad51b7, 0x12d7f5e4, 0x183f2aa0, 0x13818274, 0x1f98db6e, 0x178e7166, 0xb},
+  {0x0c8895d9, 0x08aa674d, 0x079df114, 0x1450de60, 0x1ac18985, 0x15b2cc17, 0x0cfc21bb, 0x0b424aff, 0x1499db99, 0x1f208c72, 0x1990ad2c, 0x0333e886, 0x099726a3, 0x7},
+  {0x0f652983, 0x089e0e33, 0x19cf4673, 0x0e1a5b95, 0x08f90a08, 0x15c84bf3, 0x066e7b4e, 0x0fbb2a4f, 0x15db3cb1, 0x1fbd3a55, 0x00744806, 0x1ae627fe, 0x030c3250, 0xb},
+  {0x0139ed84, 0x0ebf912d, 0x014bb2b7, 0x04a25182, 0x06b2a8da, 0x110c7ce4, 0x13864023, 0x04c9e1f1, 0x1fb11586, 0x1c573295, 0x1a8dc9b0, 0x1fc89a52, 0x16ed6553, 0x6},
+  {0x03f0c88e, 0x065ab0c7, 0x1d1d6be7, 0x0f91f191, 0x0753339b, 0x03177879, 0x16c69a0b, 0x1564eb69, 0x13356de5, 0x06888bf2, 0x1a1d0e21, 0x0357b7c5, 0x1b81e770, 0xb},
+  {0x0497e317, 0x0b8cc354, 0x0dd3a55b, 0x052be52d, 0x1d1de4fa, 0x0b649462, 0x15d28b16, 0x0d9cf3ea, 0x0dc43b75, 0x0b1df4c8, 0x1ee42ccd, 0x134f1f88, 0x00d3cf1f, 0x4},
+  {0x1e390c9e, 0x1920833d, 0x00c9de5f, 0x12165db8, 0x11b7fa31, 0x0a5d7a5d, 0x12659d8c, 0x1007418b, 0x02dd2ecb, 0x0ae89c79, 0x0b830dd4, 0x179f4f88, 0x09b1f8e1, 0xb},
+  {0x1605fb7b, 0x133ef9f8, 0x0a177b32, 0x16ee3f18, 0x14866f69, 0x19b001d8, 0x1e5b542b, 0x1bbccf0f, 0x0dfa7dcc, 0x0e92b2d8, 0x1cb63b02, 0x139c0fc4, 0x0321da07, 0x8},
+  {0x0ba2d229, 0x0e45d174, 0x134e47ea, 0x1637016c, 0x06b68c24, 0x1f8de126, 0x1ef08f02, 0x0fc45906, 0x1d31d79d, 0x1c0f6f71, 0x0f47a588, 0x1c4c1ce1, 0x0e08c248, 0x3}
+};
+
+const BIG_384_29 ISO11_XDEN_BLS381[11] = {
+  {0x00d21b1c, 0x09e7cfd2, 0x0d0f7e26, 0x11ad037c, 0x0ac62b55, 0x0430bfe4, 0x02ea7256, 0x09746b69, 0x0f01d5ef, 0x1a5e9fd3, 0x062cb98b, 0x19fe335c, 0x0ca8d548, 0x4},
+  {0x082b3bff, 0x0e413b76, 0x0c09ba79, 0x155108d9, 0x0bf5713d, 0x012c4624, 0x0030049b, 0x19419e10, 0x167041e8, 0x14c729b1, 0x122d1c44, 0x16ab3886, 0x0561a5de, 0x9},
+  {0x1cb83e19, 0x0611cdd2, 0x053fb73f, 0x07a12cf9, 0x0ceacd6a, 0x0700588d, 0x1347f299, 0x0deb4e31, 0x1f6f8941, 0x0dff94c8, 0x004df98a, 0x0f4644bd, 0x12962fe5, 0x5},
+  {0x0dc62cd8, 0x186f449c, 0x1b3d7104, 0x0daa487d, 0x16fd0497, 0x1455e146, 0x15455332, 0x07e2d62c, 0x145b0824, 0x1be2075a, 0x120eabfb, 0x0b15c5fd, 0x1425581a, 0x1},
+  {0x1532a21e, 0x1ce9cad9, 0x0d5e0754, 0x0537503e, 0x106da9bd, 0x027419d9, 0x0aee35ad, 0x0b34240c, 0x1dffdfc7, 0x1a1f3d03, 0x029bc757, 0x04522950, 0x1a8e1620, 0x9},
+  {0x1f6304a5, 0x016fcd14, 0x08a3c470, 0x01a49788, 0x0982f740, 0x1e77925c, 0x1534290e, 0x1d39d395, 0x09395735, 0x18283637, 0x154e43df, 0x09cccf72, 0x07355f8e, 0x7},
+  {0x0ee84a3a, 0x012ba24b, 0x03781b3b, 0x0766a71e, 0x0de9cea7, 0x03983157, 0x062538b8, 0x1335ea74, 0x01570f57, 0x1f02cb39, 0x03cf8318, 0x02d26c32, 0x172caacf, 0x3},
+  {0x1dcc5a5e, 0x0fbeccdd, 0x0478b4c4, 0x0b72913a, 0x02c580fa, 0x10e6fcc1, 0x02a0665b, 0x1843794d, 0x196e7f63, 0x03a6780c, 0x0c2cfd6c, 0x1ac95164, 0x0a7ac2a9, 0xa},
+  {0x19a1d641, 0x1bb761d3, 0x0e90dc11, 0x04cd2557, 0x18835038, 0x06d33f9c, 0x19add040, 0x03ae2c26, 0x0ce07f8d, 0x0d7e3d1e, 0x17a482cf, 0x1b4a9f04, 0x010ecf6a, 0x5},
+  {0x08ecdd0a, 0x0b1c268b, 0x1e19400b, 0x0e9c9696, 0x11c15931, 0x099cbc79, 0x00dddb7d, 0x1dd2defa, 0x00f682b4, 0x159d2b34, 0x11db5b8f, 0x13d255a8, 0x15fc13ab, 0x4},
+  {0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0}
+};
+
+const BIG_384_29 ISO11_YNUM_BLS381[16] = {
+  {0x1707bb33, 0x14c22b8c, 0x0ee8f0af, 0x18f5dd36, 0x143d3cd0, 0x17b64ab2, 0x0548ad4a, 0x11c9150d, 0x1a11ad13, 0x0a4c06e7, 0x096747c2, 0x17449dc0, 0x10d97c81, 0x4},
+  {0x0e41c696, 0x04bf3ad1, 0x0bea2ff8, 0x0ace232c, 0x1ad34d6c, 0x11a1f5b3, 0x00f43e41, 0x0d84a9e7, 0x031223e9, 0x1bb7da34, 0x15440db5, 0x09dcb023, 0x14996a10, 0x9},
+  {0x072de1f6, 0x06ff1206, 0x0c0148ee, 0x1aa42c51, 0x00da7d26, 0x1f25c8a0, 0x138b0d12, 0x1acb1463, 0x142552e2, 0x0351da4c, 0x1d28e132, 0x152cdccd, 0x0cc786ba, 0x0},
+  {0x10e5f4cb, 0x11aae3bd, 0x11877b29, 0x00b5753d, 0x11cf9de4, 0x11f60192, 0x04702792, 0x1721dd6f, 0x17d42aa7, 0x16c3a33a, 0x1e261d46, 0x11303842, 0x1f86376e, 0x0},
+  {0x12e8fedb, 0x0db6d767, 0x04102a10, 0x0ff1b813, 0x11adc2ee, 0x1fe9109a, 0x02e1e60c, 0x1f7c79ca, 0x04195536, 0x1510a94e, 0x172bd3f8, 0x1fc1fe26, 0x0cc03fde, 0x4},
+  {0x1633a5f0, 0x0d91d589, 0x16a01ca6, 0x1ec64d92, 0x1544e203, 0x0e1e9d6a, 0x1ef5d941, 0x1a95f5b6, 0x0074a7d0, 0x0dc78535, 0x08847847, 0x00c696d4, 0x0603fca4, 0xb},
+  {0x1fe9d6f2, 0x0b0fc42a, 0x03d057b2, 0x10f5848c, 0x14f3747a, 0x009e26b1, 0x132d48c5, 0x19457c30, 0x1ce75bb8, 0x013bcb59, 0x0cb25df4, 0x1f583779, 0x0ab0b9bc, 0x2},
+  {0x1870fb29, 0x0af26518, 0x17fa4d68, 0x0c8aa1fd, 0x0842642f, 0x06d36136, 0x007ff40e, 0x17fc77bb, 0x14170a05, 0x09653633, 0x17a649af, 0x067570df, 0x187c8d53, 0x4},
+  {0x1bdba587, 0x01b872bb, 0x0181e8d8, 0x0ca4038f, 0x0cabe69d, 0x17350f90, 0x09b07a2d, 0x02ccf3b8, 0x1b8f3abd, 0x10f26d0d, 0x1a232788, 0x1b2cd097, 0x1fc4018b, 0x4},
+  {0x0a731c30, 0x1d7d575e, 0x13ae9bca, 0x1ee0abba, 0x0d43b9b3, 0x0f3f68f2, 0x1bf81a61, 0x14f22b5e, 0x03c42a0c, 0x1d6d0a51, 0x088eaf79, 0x030d7b6a, 0x01bba7a1, 0x7},
+  {0x1011c132, 0x009b88d6, 0x0feebf3a, 0x1e74b99c, 0x1e61031b, 0x1f20b1c4, 0x04ff4460, 0x196d95e9, 0x13cd2fcb, 0x18ea1fdc, 0x037f42e3, 0x06f9a37c, 0x1713e479, 0xc},
+  {0x10074d8e, 0x103e4526, 0x113581b3, 0x139be836, 0x1643249d, 0x1f3fc88f, 0x0918b9af, 0x17155e18, 0x0c523559, 0x1ff6976e, 0x0e463050, 0x1e6dedbd, 0x0b46a908, 0xc},
+  {0x0b971ef8, 0x0a602780, 0x04847c83, 0x10a38323, 0x0633f06c, 0x087403da, 0x023b009c, 0x054684d6, 0x047aa7b1, 0x0027a9fa, 0x14554258, 0x00372733, 0x1182cac1, 0x5},
+  {0x1b980133, 0x16ce9fae, 0x08ca9910, 0x1f215a38, 0x0659cc6c, 0x11969e20, 0x16004f99, 0x0101a982, 0x1c757b3b, 0x13df18ae, 0x1cbf002b, 0x1a3d9536, 0x045a394a, 0x1},
+  {0x1475224b, 0x1358f38a, 0x1e6bede1, 0x020936ca, 0x07ce46ba, 0x07ae9cb5, 0x15a366ac, 0x103afd0c, 0x1c5e673d, 0x1a46251f, 0x00a8567d, 0x1c899e22, 0x1c129645, 0x2},
+  {0x09c8b604, 0x05a2b5f3, 0x10071dc1, 0x0a04fdfd, 0x101b2b66, 0x0a7d4ad7, 0x08e55eb7, 0x11f092cb, 0x15cb181d, 0x1a16f975, 0x13a942ce, 0x121e079c, 0x1e6be4e9, 0xa}
+};
+
+const BIG_384_29 ISO11_YDEN_BLS381[16] = {
+  {0x103663c1, 0x0a3c929d, 0x03081b40, 0x06d11dec, 0x12e7a07f, 0x1195adf3, 0x0f9bbb0c, 0x1caf1301, 0x09601a6d, 0x07d68757, 0x14860450, 0x15393164, 0x0112c4c3, 0xb},
+  {0x0e49a03d, 0x17b08161, 0x14a78d4c, 0x084c0ec6, 0x1e01f78a, 0x01ab7a29, 0x16729284, 0x1ee6389a, 0x1885c84f, 0x021e1a45, 0x06832f5b, 0x0702403c, 0x162d75c2, 0xc},
+  {0x1dbf67f2, 0x1129c5a9, 0x1e5be247, 0x0af9ac6d, 0x0d2eca67, 0x12ee93ce, 0x1cc430d6, 0x0aaa35cf, 0x1778c485, 0x0b74758a, 0x1beaab9f, 0x0c81b44e, 0x18df3306, 0x2},
+  {0x045f5416, 0x06936cc2, 0x00a5eb6a, 0x06c9e585, 0x0af41727, 0x1244f393, 0x0c3848f6, 0x1b7bb79a, 0x11d115c5, 0x1c4f6da6, 0x1c8348ef, 0x131ca72b, 0x0b7d2887, 0xb},
+  {0x11a5001d, 0x11c8a118, 0x14bb7b76, 0x162bb81f, 0x0c916a20, 0x0d07e4ef, 0x0ec150bb, 0x13e1ed37, 0x1cc6d19c, 0x17c1146e, 0x0c033244, 0x08be87c9, 0x1e0e0795, 0x5},
+  {0x0af9b7ac, 0x16323bfd, 0x0a733880, 0x071b73bf, 0x15a6449f, 0x0c3db787, 0x020717b3, 0x18caaa1b, 0x02b70152, 0x1563c18c, 0x07ec99ba, 0x030db65b, 0x0d9e5297, 0x4},
+  {0x126a775c, 0x08d09cc8, 0x02c7ee4f, 0x1538034b, 0x00051d5f, 0x12de2005, 0x03bd774d, 0x1f51a19f, 0x0b5eecfd, 0x05674c12, 0x10eea1cd, 0x1533b65f, 0x06007c08, 0xb},
+  {0x15812ed9, 0x07720ad0, 0x0077b918, 0x01eb6010, 0x17132b92, 0x07e9031a, 0x1f5ffacd, 0x0bdf43e9, 0x0ee5a437, 0x15dd37fb, 0x00ef377e, 0x1c7d4fd4, 0x0a3ef08b, 0xb},
+  {0x15535d4a, 0x1919ecea, 0x049220da, 0x1fc5ef77, 0x19b4852c, 0x1a8625f9, 0x0482af15, 0x1c98d5eb, 0x04f9fb0c, 0x1e8eba66, 0x0686f953, 0x06d8c246, 0x066c8ed3, 0xc},
+  {0x18913f55, 0x0377a45d, 0x0a6cd78d, 0x10bd47aa, 0x1d4fbc73, 0x0c973f53, 0x1eed4c21, 0x0c7c27b0, 0x103216f7, 0x1eca5424, 0x1aa08165, 0x0e14dc39, 0x07a55cda, 0xb},
+  {0x1a8f6aa8, 0x07c5a4e5, 0x00c18100, 0x0b853e9f, 0x0a5c871a, 0x0d9b731b, 0x18a43964, 0x07376c34, 0x1d9c6dd0, 0x00d69488, 0x123c0428, 0x1d480b7a, 0x0d2f259e, 0x2},
+  {0x02561092, 0x1425a94f, 0x1faefaa5, 0x12d130de, 0x1913516f, 0x0d446753, 0x0b4a303e, 0x115df9c8, 0x077f94ff, 0x12462862, 0x1d614b07, 0x103a067f, 0x0ccbb674, 0x5},
+  {0x173345cc, 0x14cd89c2, 0x0e42b047, 0x000ec7c7, 0x19b86930, 0x177cd006, 0x0899f573, 0x1b315be0, 0x16543346, 0x05a2f8a4, 0x10d84c51, 0x18ecffc7, 0x0d6b9514, 0x5},
+  {0x06ed06f7, 0x0fd6e099, 0x05332034, 0x0a2f7b0e, 0x0480e420, 0x06f93ca1, 0x1f072dd2, 0x129ce524, 0x12bf565b, 0x0a9e6bb7, 0x18a2f743, 0x165c9e76, 0x0660400e, 0x1},
+  {0x1d634b8f, 0x00aa39d0, 0x0d25e011, 0x05eae1e2, 0x0aa205ca, 0x1e6b1ab6, 0x014cc93b, 0x0cbc4e77, 0x0171c40f, 0x106bc0ce, 0x1ac90957, 0x0dbb807c, 0x00fa1d81, 0x7},
+  {0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0}
+};
+
+
+// Curve parameters of G2 ISO-3: y^2 = x^3 + ax + b
+const BIG_384_29 SSWU_A2re_BLS381 = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0};
+const BIG_384_29 SSWU_A2im_BLS381 = {0x000000f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0};
+const BIG_384_29 SSWU_B2re_BLS381 = {0x000003f4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0};
+const BIG_384_29 SSWU_B2im_BLS381 = {0x000003f4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0};
+const BIG_384_29 SSWU_Z2re_BLS381 = {0x1fffaaa9, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x9507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd};
+const BIG_384_29 SSWU_Z2re_BLS381 = {0x1fffaaaa, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x9507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd};
+
+const BIG_384_29 ISO3_XNUMre_BLS381[4] = {
+  {0x0aaa97d6, 0x11c55555, 0x1671c718, 0x0c71c687, 0x0e15d5c2, 0x0211e285, 0x10aa22d6, 0x073fa740, 0x0532c52d, 0x123ebf6c, 0x0ed6dea6, 0x1d1c667d, 0x1c759507, 0x2},
+  {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0},
+  {0x1fffc71e, 0x154fffff, 0x03555549, 0x05555397, 0x0a418147, 0x0635a790, 0x11fe6882, 0x15bef5c1, 0x0f984f87, 0x16bc3e44, 0x0c849bf3, 0x17553378, 0x1560bf17, 0x8},
+  {0x0aaa5ed1, 0x07155555, 0x19c71c62, 0x11c71a1e, 0x18575709, 0x08478a15, 0x02a88b58, 0x1cfe9d02, 0x14cb14b4, 0x08fafdb0, 0x1b5b7a9a, 0x147199f5, 0x11d6541f, 0xb}
+};
+const BIG_384_29 ISO3_XNUMim_BLS381[4] = {
+  {0x0aaa97d6, 0x11c55555, 0x1671c718, 0x0c71c687, 0x0e15d5c2, 0x0211e285, 0x10aa22d6, 0x073fa740, 0x0532c52d, 0x123ebf6c, 0x0ed6dea6, 0x1d1c667d, 0x1c759507, 0x2},
+  {0x1fffc71a, 0x154fffff, 0x03555549, 0x05555397, 0x0a418147, 0x0635a790, 0x11fe6882, 0x15bef5c1, 0x0f984f87, 0x16bc3e44, 0x0c849bf3, 0x17553378, 0x1560bf17, 0x8},
+  {0x1fffe38d, 0x1aa7ffff, 0x11aaaaa4, 0x12aaa9cb, 0x0520c0a3, 0x031ad3c8, 0x18ff3441, 0x1adf7ae0, 0x07cc27c3, 0x1b5e1f22, 0x06424df9, 0x1baa99bc, 0x0ab05f8b, 0x4},
+  {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0},
+};
+
+const BIG_384_29 ISO3_XDENre_BLS381[2] = {
+  {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0},
+  {0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0}
+};
+const BIG_384_29 ISO3_XDENim_BLS381[2] = {
+  {0x1fffaa63, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x09507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd},
+  {0x1fffaa9f, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x09507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd}
+};
+
+const BIG_384_29 ISO3_YNUMre_BLS381[4] = {
+  {0x11c6d706, 0x167e38e3, 0x124bda04, 0x184bd7f1, 0x1e500fc8, 0x1cec3e93, 0x126fd510, 0x1a940fec, 0x130f7da5, 0x183b688c, 0x16693062, 0x15682276, 0x130477c7, 0xa},
+  {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0},
+  {0x1fffc71c, 0x154fffff, 0x03555549, 0x05555397, 0x0a418147, 0x0635a790, 0x11fe6882, 0x15bef5c1, 0x0f984f87, 0x16bc3e44, 0x0c849bf3, 0x17553378, 0x1560bf17, 0x8},
+  {0x1c718b10, 0x0d9b8e38, 0x1712f678, 0x1212f4ad, 0x074524e7, 0x1be34d51, 0x0a1ac3a5, 0x06f43c4c, 0x10761b0f, 0x0f1c08d6, 0x1efdc10f, 0x16d9ef37, 0x04c9ad43, 0x9}
+};
+const BIG_384_29 ISO3_YNUMim_BLS381[4] = {
+  {0x11c6d706, 0x167e38e3, 0x124bda04, 0x184bd7f1, 0x1e500fc8, 0x1cec3e93, 0x126fd510, 0x1a940fec, 0x130f7da5, 0x183b688c, 0x16693062, 0x15682276, 0x130477c7, 0xa},
+  {0x0aaa97be, 0x11c55555, 0x1671c718, 0x0c71c687, 0x0e15d5c2, 0x0211e285, 0x10aa22d6, 0x073fa740, 0x0532c52d, 0x123ebf6c, 0x0ed6dea6, 0x1d1c667d, 0x1c759507, 0x2},
+  {0x1fffe38f, 0x1aa7ffff, 0x11aaaaa4, 0x12aaa9cb, 0x0520c0a3, 0x031ad3c8, 0x18ff3441, 0x1adf7ae0, 0x07cc27c3, 0x1b5e1f22, 0x06424df9, 0x1baa99bc, 0x0ab05f8b, 0x4},
+  {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0},
+};
+
+const BIG_384_29 ISO3_YDENre_BLS381[3] = {
+  {0x1fffa8fb, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x09507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd},
+  {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0},
+  {0x00000012, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0},
+};
+const BIG_384_29 ISO3_YDENim_BLS381[3] = {
+  {0x1fffa8fb, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x09507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd},
+  {0x1fffa9d3, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x09507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd},
+  {0x1fffaa99, 0x0ff7ffff, 0x14ffffee, 0x17fffd62, 0x0f6241ea, 0x09507b58, 0x0afd9cc3, 0x109e70a2, 0x1764774b, 0x121a5d66, 0x12c6e9ed, 0x12ffcd34, 0x00111ea3, 0xd}
+};
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 58
+
+// Curve parameters of G1 ISO-11: y^2 = x^3 + ax + b
+const BIG_384_58 SSWU_A1_BLS381 = {0x0f428082d584c1dL, 0xdbe368383e5fd7L, 0x181aefd881ac989L, 0x14e0fb99aa363a2L, 0x2c96d4982b0ea98L, 0xee3a50cf5a4e80L, 0x00144698aL};
+const BIG_384_58 SSWU_B1_BLS381 = {0x1cc48e98e172be0L, 0xc8568c5b3aa974L, 0x014fcef35ef55a2L, 0x3c3c93d01c282e7L, 0x0753eee3b2016c1L, 0x5a200c0062c4baL, 0x12e2908d1L};
+const BIG_384_58 SSWU_Z1_BLS381 = {0x00000000000000bL, 0x00000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x00000000000000L, 0x000000000L};
+
+const BIG_384_58 H_EFF_G1 = {0x201000000010001L, 0x34L, 0x0L, 0x0L, 0x0L, 0x0L, 0x0L};
+
+const BIG_384_58 ISO11_XNUM_BLS381[12] = {
+  {0x2ac1662734649b7L, 0x030b57cb98b5babL, 0x3b56cdb4e2c8561L, 0x2228b5c017fc989L, 0x1d99815856b303eL, 0x3a0ccd02e024407L, 0x11a05f2b1L},
+  {0x034eef1b3cb83bbL, 0x23ca9bcc630d5baL, 0x233c70d1e86b483L, 0x16cbdaa105fd597L, 0x22147a81c7c17e7L, 0x250eacbc1622eacL, 0x17294ed3eL},
+  {0x0179f9dac9edcb0L, 0x30f8f4a825ca7f8L, 0x2501ec68e25c958L, 0x1cca5660f95a1e3L, 0x1d10a9a1bce0324L, 0x25d9e3b07441231L, 0x0d54005dbL},
+  {0x1b388641d9b6861L, 0x1b89738c41c64f1L, 0x3289f1b33083533L, 0x195aa36fc97c6ccL, 0x307e55412d7f5e4L, 0x3f31b6dd3818274L, 0x1778e7166L},
+  {0x1154ce9ac8895d9L, 0x28a1bcc079df114L, 0x2b65982fac18985L, 0x168495fecfc21bbL, 0x3e4118e5499db99L, 0x0667d10d990ad2cL, 0x0e99726a3L},
+  {0x113c1c66f652983L, 0x1c34b72b9cf4673L, 0x2b9097e68f90a08L, 0x1f76549e66e7b4eL, 0x3f7a74ab5db3cb1L, 0x35cc4ffc0744806L, 0x1630c3250L},
+  {0x1d7f225a139ed84L, 0x0944a30414bb2b7L, 0x2218f9c86b2a8daL, 0x0993c3e33864023L, 0x38ae652bfb11586L, 0x3f9134a5a8dc9b0L, 0x0d6ed6553L},
+  {0x0cb5618e3f0c88eL, 0x1f23e323d1d6be7L, 0x062ef0f2753339bL, 0x2ac9d6d36c69a0bL, 0x0d1117e53356de5L, 0x06af6f8ba1d0e21L, 0x17b81e770L},
+  {0x171986a8497e317L, 0x0a57ca5add3a55bL, 0x16c928c5d1de4faL, 0x1b39e7d55d28b16L, 0x163be990dc43b75L, 0x269e3f11ee42ccdL, 0x080d3cf1fL},
+  {0x3241067be390c9eL, 0x242cbb700c9de5fL, 0x14baf4bb1b7fa31L, 0x200e83172659d8cL, 0x15d138f22dd2ecbL, 0x2f3e9f10b830dd4L, 0x169b1f8e1L},
+  {0x267df3f1605fb7bL, 0x2ddc7e30a177b32L, 0x336003b14866f69L, 0x37799e1fe5b542bL, 0x1d2565b0dfa7dccL, 0x27381f89cb63b02L, 0x10321da07L},
+  {0x1c8ba2e8ba2d229L, 0x2c6e02d934e47eaL, 0x3f1bc24c6b68c24L, 0x1f88b20def08f02L, 0x381edee3d31d79dL, 0x389839c2f47a588L, 0x06e08c248L}
+};
+
+const BIG_384_58 ISO11_XDEN_BLS381[10] = {
+  {0x13cf9fa40d21b1cL, 0x235a06f8d0f7e26L, 0x08617fc8ac62b55L, 0x12e8d6d22ea7256L, 0x34bd3fa6f01d5efL, 0x33fc66b862cb98bL, 0x08ca8d548L},
+  {0x1c8276ec82b3bffL, 0x2aa211b2c09ba79L, 0x02588c48bf5713dL, 0x32833c20030049bL, 0x298e536367041e8L, 0x2d56710d22d1c44L, 0x12561a5deL},
+  {0x0c239ba5cb83e19L, 0x0f4259f253fb73fL, 0x0e00b11aceacd6aL, 0x1bd69c63347f299L, 0x1bff2991f6f8941L, 0x1e8c897a04df98aL, 0x0b2962fe5L},
+  {0x30de8938dc62cd8L, 0x1b5490fbb3d7104L, 0x28abc28d6fd0497L, 0x0fc5ac595455332L, 0x37c40eb545b0824L, 0x162b8bfb20eabfbL, 0x03425581aL},
+  {0x39d395b3532a21eL, 0x0a6ea07cd5e0754L, 0x04e833b306da9bdL, 0x16684818aee35adL, 0x343e7a07dffdfc7L, 0x08a452a029bc757L, 0x13a8e1620L},
+  {0x02df9a29f6304a5L, 0x03492f108a3c470L, 0x3cef24b8982f740L, 0x3a73a72b534290eL, 0x30506c6e9395735L, 0x13999ee554e43dfL, 0x0e7355f8eL},
+  {0x02574496ee84a3aL, 0x0ecd4e3c3781b3bL, 0x073062aede9cea7L, 0x266bd4e862538b8L, 0x3e0596721570f57L, 0x05a4d8643cf8318L, 0x0772caacfL},
+  {0x1f7d99bbdcc5a5eL, 0x16e52274478b4c4L, 0x21cdf9822c580faL, 0x3086f29a2a0665bL, 0x074cf01996e7f63L, 0x3592a2c8c2cfd6cL, 0x14a7ac2a9L},
+  {0x376ec3a79a1d641L, 0x099a4aaee90dc11L, 0x0da67f398835038L, 0x075c584d9add040L, 0x1afc7a3cce07f8dL, 0x36953e097a482cfL, 0x0a10ecf6aL},
+  {0x16384d168ecdd0aL, 0x1d392d2de19400bL, 0x133978f31c15931L, 0x3ba5bdf40dddb7dL, 0x2b3a56680f682b4L, 0x27a4ab511db5b8fL, 0x095fc13abL}
+};
+
+const BIG_384_58 ISO11_YNUM_BLS381[16] = {
+  {0x29845719707bb33L, 0x31ebba6cee8f0afL, 0x2f6c956543d3cd0L, 0x23922a1a548ad4aL, 0x14980dcfa11ad13L, 0x2e893b8096747c2L, 0x090d97c81L},
+  {0x097e75a2e41c696L, 0x159c4658bea2ff8L, 0x2343eb67ad34d6cL, 0x1b0953ce0f43e41L, 0x376fb46831223e9L, 0x13b960475440db5L, 0x134996a10L},
+  {0x0dfe240c72de1f6L, 0x354858a2c0148eeL, 0x3e4b91400da7d26L, 0x359628c738b0d12L, 0x06a3b49942552e2L, 0x2a59b99bd28e132L, 0x00cc786baL},
+  {0x2355c77b0e5f4cbL, 0x016aea7b1877b29L, 0x23ec03251cf9de4L, 0x2e43bade4702792L, 0x2d8746757d42aa7L, 0x22607085e261d46L, 0x01f86376eL},
+  {0x1b6daecf2e8fedbL, 0x1fe370264102a10L, 0x3fd221351adc2eeL, 0x3ef8f3942e1e60cL, 0x2a21529c4195536L, 0x3f83fc4d72bd3f8L, 0x08cc03fdeL},
+  {0x1b23ab13633a5f0L, 0x3d8c9b256a01ca6L, 0x1c3d3ad5544e203L, 0x352beb6def5d941L, 0x1b8f0a6a074a7d0L, 0x018d2da88847847L, 0x16603fca4L},
+  {0x161f8855fe9d6f2L, 0x21eb09183d057b2L, 0x013c4d634f3747aL, 0x328af86132d48c5L, 0x027796b3ce75bb8L, 0x3eb06ef2cb25df4L, 0x04ab0b9bcL},
+  {0x15e4ca31870fb29L, 0x191543fb7fa4d68L, 0x0da6c26c842642fL, 0x2ff8ef7607ff40eL, 0x12ca6c674170a05L, 0x0ceae1bf7a649afL, 0x0987c8d53L},
+  {0x0370e577bdba587L, 0x1948071e181e8d8L, 0x2e6a1f20cabe69dL, 0x0599e7709b07a2dL, 0x21e4da1bb8f3abdL, 0x3659a12fa232788L, 0x09fc4018bL},
+  {0x3afaaebca731c30L, 0x3dc157753ae9bcaL, 0x1e7ed1e4d43b9b3L, 0x29e456bdbf81a61L, 0x3ada14a23c42a0cL, 0x061af6d488eaf79L, 0x0e1bba7a1L},
+  {0x013711ad011c132L, 0x3ce97338feebf3aL, 0x3e416389e61031bL, 0x32db2bd24ff4460L, 0x31d43fb93cd2fcbL, 0x0df346f837f42e3L, 0x19713e479L},
+  {0x207c8a4d0074d8eL, 0x2737d06d13581b3L, 0x3e7f911f643249dL, 0x2e2abc30918b9afL, 0x3fed2edcc523559L, 0x3cdbdb7ae463050L, 0x18b46a908L},
+  {0x14c04f00b971ef8L, 0x214706464847c83L, 0x10e807b4633f06cL, 0x0a8d09ac23b009cL, 0x004f53f447aa7b1L, 0x006e4e674554258L, 0x0b182cac1L},
+  {0x2d9d3f5db980133L, 0x3e42b4708ca9910L, 0x232d3c40659cc6cL, 0x020353056004f99L, 0x27be315dc757b3bL, 0x347b2a6dcbf002bL, 0x0245a394aL},
+  {0x26b1e715475224bL, 0x04126d95e6bede1L, 0x0f5d396a7ce46baL, 0x2075fa195a366acL, 0x348c4a3fc5e673dL, 0x39133c440a8567dL, 0x05c129645L},
+  {0x0b456be69c8b604L, 0x1409fbfb0071dc1L, 0x14fa95af01b2b66L, 0x23e125968e55eb7L, 0x342df2eb5cb181dL, 0x243c0f393a942ceL, 0x15e6be4e9L}
+};
+
+const BIG_384_58 ISO11_YDEN_BLS381[15] = {
+  {0x1479253b03663c1L, 0x0da23bd83081b40L, 0x232b5be72e7a07fL, 0x395e2602f9bbb0cL, 0x0fad0eae9601a6dL, 0x2a7262c94860450L, 0x16112c4c3L},
+  {0x2f6102c2e49a03dL, 0x10981d8d4a78d4cL, 0x0356f453e01f78aL, 0x3dcc71356729284L, 0x043c348b885c84fL, 0x0e0480786832f5bL, 0x1962d75c2L},
+  {0x22538b53dbf67f2L, 0x15f358dbe5be247L, 0x25dd279cd2eca67L, 0x15546b9fcc430d6L, 0x16e8eb15778c485L, 0x1903689dbeaab9fL, 0x058df3306L},
+  {0x0d26d98445f5416L, 0x0d93cb0a0a5eb6aL, 0x2489e726af41727L, 0x36f76f34c3848f6L, 0x389edb4d1d115c5L, 0x26394e57c8348efL, 0x16b7d2887L},
+  {0x239142311a5001dL, 0x2c57703f4bb7b76L, 0x1a0fc9dec916a20L, 0x27c3da6eec150bbL, 0x2f8228ddcc6d19cL, 0x117d0f92c033244L, 0x0be0e0795L},
+  {0x2c6477faaf9b7acL, 0x0e36e77ea733880L, 0x187b6f0f5a6449fL, 0x3195543620717b3L, 0x2ac783182b70152L, 0x061b6cb67ec99baL, 0x08d9e5297L},
+  {0x11a1399126a775cL, 0x2a7006962c7ee4fL, 0x25bc400a0051d5fL, 0x3ea3433e3bd774dL, 0x0ace9824b5eecfdL, 0x2a676cbf0eea1cdL, 0x166007c08L},
+  {0x0ee415a15812ed9L, 0x03d6c020077b918L, 0x0fd206357132b92L, 0x17be87d3f5ffacdL, 0x2bba6ff6ee5a437L, 0x38fa9fa80ef377eL, 0x16a3ef08bL},
+  {0x3233d9d55535d4aL, 0x3f8bdeee49220daL, 0x350c4bf39b4852cL, 0x3931abd6482af15L, 0x3d1d74cc4f9fb0cL, 0x0db1848c686f953L, 0x1866c8ed3L},
+  {0x06ef48bb8913f55L, 0x217a8f54a6cd78dL, 0x192e7ea7d4fbc73L, 0x18f84f61eed4c21L, 0x3d94a84903216f7L, 0x1c29b873aa08165L, 0x167a55cdaL},
+  {0x0f8b49cba8f6aa8L, 0x170a7d3e0c18100L, 0x1b36e636a5c871aL, 0x0e6ed8698a43964L, 0x01ad2911d9c6dd0L, 0x3a9016f523c0428L, 0x04d2f259eL},
+  {0x284b529e2561092L, 0x25a261bdfaefaa5L, 0x1a88cea7913516fL, 0x22bbf390b4a303eL, 0x248c50c477f94ffL, 0x20740cffd614b07L, 0x0accbb674L},
+  {0x299b138573345ccL, 0x001d8f8ee42b047L, 0x2ef9a00d9b86930L, 0x3662b7c0899f573L, 0x0b45f1496543346L, 0x31d9ff8f0d84c51L, 0x0ad6b9514L},
+  {0x1fadc1326ed06f7L, 0x145ef61c5332034L, 0x0df27942480e420L, 0x2539ca49f072dd2L, 0x153cd76f2bf565bL, 0x2cb93ced8a2f743L, 0x02660400eL},
+  {0x015473a1d634b8fL, 0x0bd5c3c4d25e011L, 0x3cd6356caa205caL, 0x19789cee14cc93bL, 0x20d7819c171c40fL, 0x1b7700f9ac90957L, 0x0e0fa1d81L}
+};
+
+
+// Curve parameters of G2 ISO-3: y^2 = x^3 + ax + b
+const BIG_384_58 SSWU_A2re_BLS381 = {0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L};
+const BIG_384_58 SSWU_A2im_BLS381 = {0x0000000000000f0L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L};
+const BIG_384_58 SSWU_B2re_BLS381 = {0x0000000000003f4L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L};
+const BIG_384_58 SSWU_B2im_BLS381 = {0x0000000000003f4L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L};
+const BIG_384_58 SSWU_Z2re_BLS381 = {0x1feffffffffaaa9L, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L};
+const BIG_384_58 SSWU_Z2im_BLS381 = {0x1feffffffffaaaaL, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L};
+
+const BIG_384_58 ISO3_XNUMre_BLS381[4] = {
+  {0x238aaaaaaaa97d6L, 0x18e38d0f671c718L, 0x0423c50ae15d5c2L, 0x0e7f4e810aa22d6L, 0x247d7ed8532c52dL, 0x3a38ccfaed6dea6L, 0x05c759507L},
+  {0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L},
+  {0x2a9ffffffffc71eL, 0x0aaaa72e3555549L, 0x0c6b4f20a418147L, 0x2b7deb831fe6882L, 0x2d787c88f984f87L, 0x2eaa66f0c849bf3L, 0x11560bf17L},
+  {0x0e2aaaaaaaa5ed1L, 0x238e343d9c71c62L, 0x108f142b8575709L, 0x39fd3a042a88b58L, 0x11f5fb614cb14b4L, 0x28e333ebb5b7a9aL, 0x171d6541fL}
+};
+const BIG_384_58 ISO3_XNUMim_BLS381[4] = {
+  {0x238aaaaaaaa97d6L, 0x18e38d0f671c718L, 0x0423c50ae15d5c2L, 0x0e7f4e810aa22d6L, 0x247d7ed8532c52dL, 0x3a38ccfaed6dea6L, 0x05c759507L},
+  {0x2a9ffffffffc71aL, 0x0aaaa72e3555549L, 0x0c6b4f20a418147L, 0x2b7deb831fe6882L, 0x2d787c88f984f87L, 0x2eaa66f0c849bf3L, 0x11560bf17L},
+  {0x354ffffffffe38dL, 0x255553971aaaaa4L, 0x0635a790520c0a3L, 0x35bef5c18ff3441L, 0x36bc3e447cc27c3L, 0x375533786424df9L, 0x08ab05f8bL},
+  {0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L}
+};
+
+const BIG_384_58 ISO3_XDENre_BLS381[2] = {
+  {0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L},
+  {0x00000000000000cL, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L}
+};
+const BIG_384_58 ISO3_XDENim_BLS381[2] = {
+  {0x1feffffffffaa63L, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L},
+  {0x1feffffffffaa9fL, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L}
+};
+
+const BIG_384_58 ISO3_YNUMre_BLS381[4] = {
+  {0x2cfc71c71c6d706L, 0x3097afe324bda04L, 0x39d87d27e500fc8L, 0x35281fd926fd510L, 0x3076d11930f7da5L, 0x2ad044ed6693062L, 0x1530477c7L},
+  {0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L},
+  {0x2a9ffffffffc71cL, 0x0aaaa72e3555549L, 0x0c6b4f20a418147L, 0x2b7deb831fe6882L, 0x2d787c88f984f87L, 0x2eaa66f0c849bf3L, 0x11560bf17L},
+  {0x1b371c71c718b10L, 0x2425e95b712f678L, 0x37c69aa274524e7L, 0x0de87898a1ac3a5L, 0x1e3811ad0761b0fL, 0x2db3de6fefdc10fL, 0x124c9ad43L}
+};
+const BIG_384_58 ISO3_YNUMim_BLS381[4] = {
+  {0x2cfc71c71c6d706L, 0x3097afe324bda04L, 0x39d87d27e500fc8L, 0x35281fd926fd510L, 0x3076d11930f7da5L, 0x2ad044ed6693062L, 0x1530477c7L},
+  {0x238aaaaaaaa97beL, 0x18e38d0f671c718L, 0x0423c50ae15d5c2L, 0x0e7f4e810aa22d6L, 0x247d7ed8532c52dL, 0x3a38ccfaed6dea6L, 0x05c759507L},
+  {0x354ffffffffe38fL, 0x255553971aaaaa4L, 0x0635a790520c0a3L, 0x35bef5c18ff3441L, 0x36bc3e447cc27c3L, 0x375533786424df9L, 0x08ab05f8bL},
+  {0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L},
+};
+
+const BIG_384_58 ISO3_YDENre_BLS381[3] = {
+  {0x1feffffffffa8fbL, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L},
+  {0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L},
+  {0x000000000000012L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000000000L, 0x000000000L}
+};
+const BIG_384_58 ISO3_YDENim_BLS381[3] = {
+  {0x1feffffffffa8fbL, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L},
+  {0x1feffffffffa9d3L, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L},
+  {0x1feffffffffaa99L, 0x2ffffac54ffffeeL, 0x12a0f6b0f6241eaL, 0x213ce144afd9cc3L, 0x2434bacd764774bL, 0x25ff9a692c6e9edL, 0x1a0111ea3L}
+};
+
+#endif
diff --git a/src/rsa.c.in b/src/rsa.c.in
index 4ca8ed4..87d6ea5 100644
--- a/src/rsa.c.in
+++ b/src/rsa.c.in
@@ -28,17 +28,17 @@
 #include "rsa_support.h"
 
 /* generate an RSA key pair */
-void RSA_WWW_KEY_PAIR(csprng *RNG,sign32 e,rsa_private_key_WWW *PRIV,rsa_public_key_WWW *PUB,octet *P, octet* Q)
+void RSA_WWW_KEY_PAIR(csprng *RNG,sign32 e,rsa_private_key_WWW *PRIV,rsa_public_key_WWW *PUB,const octet *P, const octet* Q)
 {
     /* IEEE1363 A16.11/A16.12 more or less */
-    BIG_XXX t[HFLEN_WWW],p1[HFLEN_WWW],q1[HFLEN_WWW];
+    BIG_XXX t[HFLEN_WWW];
+    BIG_XXX p1[HFLEN_WWW];
+    BIG_XXX q1[HFLEN_WWW];
 
     if (RNG!=NULL)
     {
-
-        for (;;)
+        do
         {
-
             FF_WWW_random(PRIV->p,RNG,HFLEN_WWW);
             while (FF_WWW_lastbits(PRIV->p,2)!=3) FF_WWW_inc(PRIV->p,1,HFLEN_WWW);
             while (!FF_WWW_prime(PRIV->p,RNG,HFLEN_WWW))
@@ -46,12 +46,10 @@
 
             FF_WWW_copy(p1,PRIV->p,HFLEN_WWW);
             FF_WWW_dec(p1,1,HFLEN_WWW);
-
-            if (FF_WWW_cfactor(p1,e,HFLEN_WWW)) continue;
-            break;
         }
+        while (FF_WWW_cfactor(p1,e,HFLEN_WWW));
 
-        for (;;)
+        do
         {
             FF_WWW_random(PRIV->q,RNG,HFLEN_WWW);
             while (FF_WWW_lastbits(PRIV->q,2)!=3) FF_WWW_inc(PRIV->q,1,HFLEN_WWW);
@@ -60,11 +58,8 @@
 
             FF_WWW_copy(q1,PRIV->q,HFLEN_WWW);
             FF_WWW_dec(q1,1,HFLEN_WWW);
-            if (FF_WWW_cfactor(q1,e,HFLEN_WWW)) continue;
-
-            break;
         }
-
+        while (FF_WWW_cfactor(q1,e,HFLEN_WWW));
     }
     else
     {
@@ -110,13 +105,13 @@
     FF_WWW_zero(PRIV->c,HFLEN_WWW);
 }
 
-void RSA_WWW_fromOctet(BIG_XXX x[],octet *w)
+void RSA_WWW_fromOctet(BIG_XXX x[],const octet *w)
 {
     FF_WWW_fromOctet(x,w,FFLEN_WWW);
 }
 
 /* RSA encryption with the public key */
-void RSA_WWW_ENCRYPT(rsa_public_key_WWW *PUB,octet *F,octet *G)
+void RSA_WWW_ENCRYPT(rsa_public_key_WWW *PUB,const octet *F,octet *G)
 {
     BIG_XXX f[FFLEN_WWW];
     FF_WWW_fromOctet(f,F,FFLEN_WWW);
@@ -127,9 +122,12 @@
 }
 
 /* RSA decryption with the private key */
-void RSA_WWW_DECRYPT(rsa_private_key_WWW *PRIV,octet *G,octet *F)
+void RSA_WWW_DECRYPT(rsa_private_key_WWW *PRIV,const octet *G,octet *F)
 {
-    BIG_XXX g[FFLEN_WWW],t[FFLEN_WWW],jp[HFLEN_WWW],jq[HFLEN_WWW];
+    BIG_XXX g[FFLEN_WWW];
+    BIG_XXX t[FFLEN_WWW];
+    BIG_XXX jp[HFLEN_WWW];
+    BIG_XXX jq[HFLEN_WWW];
 
     FF_WWW_fromOctet(g,G,FFLEN_WWW);
 
diff --git a/src/rsa_support.c b/src/rsa_support.c
index e2dae83..cac4e5f 100644
--- a/src/rsa_support.c
+++ b/src/rsa_support.c
@@ -22,9 +22,11 @@
 #define ROUNDUP(a,b) ((a)-1)/(b)+1
 
 /* general purpose hash function w=hash(p|n|x|y) */
-int hashit(int sha,octet *p,int n,octet *w)
+int hashit(int sha,const octet *p,int n,octet *w)
 {
-    int i,c[4],hlen;
+    int i;
+    int c[4];
+    int hlen;
     hash256 sha256;
     hash512 sha512;
     char hh[64];
@@ -40,6 +42,8 @@
     case SHA512:
         HASH512_init(&sha512);
         break;
+    default:
+        break;
     }
 
     hlen=sha;
@@ -57,6 +61,8 @@
             case SHA512:
                 HASH512_process(&sha512,p->val[i]);
                 break;
+            default:
+                break;
             }
         }
     if (n>=0)
@@ -64,7 +70,7 @@
         c[0]=(n>>24)&0xff;
         c[1]=(n>>16)&0xff;
         c[2]=(n>>8)&0xff;
-        c[3]=(n)&0xff;
+        c[3]=n&0xff;
         for (i=0; i<4; i++)
         {
             switch(sha)
@@ -78,6 +84,8 @@
             case SHA512:
                 HASH512_process(&sha512,c[i]);
                 break;
+            default:
+                break;
             }
         }
     }
@@ -93,6 +101,8 @@
     case SHA512:
         HASH512_hash(&sha512,hh);
         break;
+    default:
+        break;
     }
 
     OCT_empty(w);
@@ -104,17 +114,17 @@
 
 /* Mask Generation Function */
 
-static void MGF1(int sha,octet *z,int olen,octet *mask)
+static void MGF1(int sha,const octet *z,int olen,octet *mask)
 {
     char h[64];
     octet H= {0,sizeof(h),h};
     int hlen=sha;
-    int counter,cthreshold;
+    int cthreshold;
 
     OCT_empty(mask);
 
     cthreshold=ROUNDUP(olen,hlen);
-    for (counter=0; counter<cthreshold; counter++)
+    for (int counter=0; counter<cthreshold; counter++)
     {
         hashit(sha,z,counter,&H);
         if (mask->len+hlen>olen) OCT_jbytes(mask,H.val,olen%hlen);
@@ -124,13 +134,13 @@
 }
 
 /* SHAXXX identifier strings */
-const unsigned char SHA256ID[]= {0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,0x00,0x04,0x20};
-const unsigned char SHA384ID[]= {0x30,0x41,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x02,0x05,0x00,0x04,0x30};
-const unsigned char SHA512ID[]= {0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x03,0x05,0x00,0x04,0x40};
+unsigned char SHA256ID[]= {0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,0x00,0x04,0x20};
+unsigned char SHA384ID[]= {0x30,0x41,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x02,0x05,0x00,0x04,0x30};
+unsigned char SHA512ID[]= {0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x03,0x05,0x00,0x04,0x40};
 
 /* PKCS 1.5 padding of a message to be signed */
 
-int PKCS15(int sha,octet *m,octet *w)
+int PKCS15(int sha,const octet *m,octet *w)
 {
     int olen=w->max;
     int hlen=sha;
@@ -158,12 +168,15 @@
 
 /* OAEP Message Encoding for Encryption */
 
-int OAEP_ENCODE(int sha,octet *m,csprng *RNG,octet *p,octet *f)
+int OAEP_ENCODE(int sha,const octet *m,csprng *RNG,const octet *p,octet *f)
 {
-    int slen,olen=f->max-1;
+    int slen;
+    int olen=f->max-1;
     int mlen=m->len;
-    int hlen,seedlen;
-    char dbmask[MAX_RSA_BYTES],seed[64];
+    int hlen;
+    int seedlen;
+    char dbmask[MAX_RSA_BYTES];
+    char seed[64];
     octet DBMASK= {0,sizeof(dbmask),dbmask};
     octet SEED= {0,sizeof(seed),seed};
 
@@ -199,12 +212,19 @@
 
 /* OAEP Message Decoding for Decryption */
 
-int OAEP_DECODE(int sha,octet *p,octet *f)
+int OAEP_DECODE(int sha,const octet *p,octet *f)
 {
-    int comp,x,t;
-    int i,k,olen=f->max-1;
-    int hlen,seedlen;
-    char dbmask[MAX_RSA_BYTES],seed[64],chash[64];
+    int comp;
+    int x;
+    int t;
+    int i;
+    int k;
+    int olen=f->max-1;
+    int hlen;
+    int seedlen;
+    char dbmask[MAX_RSA_BYTES];
+    char seed[64];
+    char chash[64];
     octet DBMASK= {0,sizeof(dbmask),dbmask};
     octet SEED= {0,sizeof(seed),seed};
     octet CHASH= {0,sizeof(chash),chash};
diff --git a/src/utils.c b/src/utils.c
index fca4251..3ec1c27 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -30,7 +30,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <assert.h>
 #include "amcl.h"
 #include "utils.h"
 
@@ -39,7 +38,8 @@
 /** Decode hex value */
 void amcl_hex2bin(const char *src, char *dst, size_t src_len)
 {
-    char v,c;
+    char v;
+    char c;
     for (size_t i = 0; i < src_len/2; i++)
     {
         c = src[2*i];
@@ -82,7 +82,7 @@
 }
 
 /* Encode binary string */
-void amcl_bin2hex(char *src, char *dst, size_t src_len, size_t dst_len)
+void amcl_bin2hex(const char *src, char *dst, size_t src_len, size_t dst_len)
 {
     const char * hexadecimals = "0123456789abcdef";
     unsigned char ch;
@@ -97,7 +97,7 @@
 }
 
 /* Print encoded binary string in hex */
-void amcl_print_hex(char *src, size_t src_len)
+void amcl_print_hex(const char *src, size_t src_len)
 {
     for (size_t i = 0; i < src_len; i++)
     {
@@ -111,16 +111,15 @@
 {
     int OTP=0;
 
-    int i = 0;
     int val = 0;
-    unsigned char byte[6] = {0};
+    unsigned char bytes[6] = {0};
     int mult=1;
 
     // Generate random 6 digit random value
-    for (i=0; i<6; i++)
+    for (int i=0; i<6; i++)
     {
-        byte[i]=RAND_byte(RNG);
-        val = byte[i];
+        bytes[i]=(unsigned char)RAND_byte(RNG);
+        val = bytes[i];
         OTP = ((abs(val) % 10) * mult) + OTP;
         mult = mult * 10;
     }
@@ -131,9 +130,8 @@
 /* Generate a random Octet */
 void generateRandom(csprng *RNG,octet *randomValue)
 {
-    int i;
-    for (i=0; i<randomValue->len; i++)
+    for (int i=0; i<randomValue->len; i++)
     {
-        randomValue->val[i] = RAND_byte(RNG);
+        randomValue->val[i] = (char)RAND_byte(RNG);
     }
 }
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index fe304ce..494f0af 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -68,6 +68,16 @@
 amcl_test(test_hash_512 test_hash.c amcl_core "SUCCESS" "sha/512/SHA512ShortMsg.rsp" "sha512")
 
 ################################################
+# HMAC Tests
+################################################
+amcl_test(test_hmac_sha256 test_hmac.c amcl_core "SUCCESS" "hmac/HMAC_SHA256.rsp" "")
+
+################################################
+# HKDF Tests
+################################################
+amcl_test(test_hkdf_sha256 test_hkdf.c amcl_core "SUCCESS" "hkdf/HKDF_SHA256.rsp" "")
+
+################################################
 # AES-GCM Tests
 ################################################
 amcl_test(test_gcm_encrypt_128      test_gcm_encrypt.c amcl_core "SUCCESS" "gcm/gcmEncryptExtIV128.rsp" "")
@@ -213,6 +223,16 @@
       amcl_curve_test(${curve} test_bls_${TC} test_bls_ZZZ.c.in amcl_bls_${TC} "SUCCESS")
       amcl_curve_test(${curve} test_bls_sss_${TC} test_bls_sss_ZZZ.c.in amcl_bls_${TC} "SUCCESS")      
     endif()
+
+    ################################################
+    # BLS_IETF Tests
+    ################################################
+    if(BUILD_BLS_IETF)
+      amcl_curve_test(${curve} test_bls_ietf_${TC}        test_bls_ietf_ZZZ.c.in amcl_bls_ietf_${TC}        "SUCCESS" "bls/bls12-381/bls12_381.rsp")
+      amcl_curve_test(${curve} test_bls_ietf_h2c_G1_${TC} test_bls_ietf_h2c_G1_ZZZ.c.in amcl_bls_ietf_${TC} "SUCCESS" "bls/bls12-381/hash2curve_G1.rsp") 
+      amcl_curve_test(${curve} test_bls_ietf_h2c_G2_${TC} test_bls_ietf_h2c_G2_ZZZ.c.in amcl_bls_ietf_${TC} "SUCCESS" "bls/bls12-381/hash2curve_G2.rsp") 
+    endif()
+    
     
   endif()
 endforeach()
diff --git a/test/test_aes_decrypt.c b/test/test_aes_decrypt.c
index c8c2bce..d9453d8 100644
--- a/test/test_aes_decrypt.c
+++ b/test/test_aes_decrypt.c
@@ -51,7 +51,7 @@
     bool readLine;
     FILE * fp = NULL;
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
     int l1=0;
     int blockSize;
 
@@ -78,11 +78,6 @@
         mode = ECB;
         blockSize=16;
     }
-    else if (!strcmp(argv[2], "CBC"))
-    {
-        mode = CBC;
-        blockSize=16;
-    }
     else if (!strcmp(argv[2], "CTR"))
     {
         mode = CTR16;
@@ -109,7 +104,7 @@
 
     int lineNo=0;
     readLine = false;
-    while ( (fgets(line, LINE_LEN, fp) != NULL))
+    while (fgets(line, LINE_LEN, fp) != NULL)
     {
         if (!strncmp(line, DECRYPTStr,strlen(DECRYPTStr)))
         {
@@ -131,7 +126,7 @@
             linePtr = line + strlen(KEYStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             KEYLen = l1/2;
             KEY = (char*) malloc (KEYLen);
             if (KEY==NULL)
@@ -150,7 +145,7 @@
             linePtr = line + strlen(IVStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             IVLen = l1/2;
             IV = (char*) malloc (IVLen);
             if (IV==NULL)
@@ -171,7 +166,7 @@
             linePtr = line + strlen(CIPHERTEXTStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             CIPHERTEXTLen = l1/2;
             CIPHERTEXT = (char*) malloc (CIPHERTEXTLen);
             if (CIPHERTEXT==NULL)
@@ -190,7 +185,7 @@
             linePtr = line + strlen(PLAINTEXTStr);
 
             // Allocate memory
-            l1 = strlen(linePtr);
+            l1 = (int)strlen(linePtr);
             PLAINTEXT1 = (char*) malloc(CIPHERTEXTLen+1);
             if (PLAINTEXT1==NULL)
                 exit(EXIT_FAILURE);
@@ -211,9 +206,8 @@
 #endif
 
             // Decrypt
-            int i=0;
             AES_init(&a,mode,KEYLen,KEY,IV);
-            for (i=0; i<(CIPHERTEXTLen/blockSize); i++)
+            for (int i=0; i<(CIPHERTEXTLen/blockSize); i++)
             {
                 AES_decrypt(&a,&CIPHERTEXT[i*blockSize]);
             }
diff --git a/test/test_aes_encrypt.c b/test/test_aes_encrypt.c
index 7d9e836..717eeaa 100644
--- a/test/test_aes_encrypt.c
+++ b/test/test_aes_encrypt.c
@@ -50,7 +50,7 @@
     bool readLine;
     FILE * fp = NULL;
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
     int l1=0;
     int blockSize;
 
@@ -77,11 +77,6 @@
         mode = ECB;
         blockSize=16;
     }
-    else if (!strcmp(argv[2], "CBC"))
-    {
-        mode = CBC;
-        blockSize=16;
-    }
     else if (!strcmp(argv[2], "CTR"))
     {
         mode = CTR16;
@@ -108,7 +103,7 @@
 
     int lineNo=0;
     readLine = true;
-    while ( (fgets(line, LINE_LEN, fp) != NULL))
+    while ( fgets(line, LINE_LEN, fp) != NULL)
     {
         if (!strncmp(line, DECRYPTStr,strlen(DECRYPTStr)))
         {
@@ -130,7 +125,7 @@
             linePtr = line + strlen(KEYStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             KEYLen = l1/2;
             KEY = (char*) malloc (KEYLen);
             if (KEY==NULL)
@@ -149,13 +144,13 @@
             linePtr = line + strlen(IVStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             IVLen = l1/2;
             IV = (char*) malloc (IVLen);
             if (IV==NULL)
             {
-                exit(EXIT_FAILURE);
                 fclose(fp);
+                exit(EXIT_FAILURE);
             }
             // IV binary value
             amcl_hex2bin(linePtr, IV, l1);
@@ -170,7 +165,7 @@
             linePtr = line + strlen(PLAINTEXTStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             PLAINTEXTLen = l1/2;
             PLAINTEXT = (char*) malloc(PLAINTEXTLen);
             if (PLAINTEXT==NULL)
@@ -192,7 +187,7 @@
             linePtr = line + strlen(CIPHERTEXTStr);
 
             // Allocate memory
-            l1 = strlen(linePtr);
+            l1 = (int)strlen(linePtr);
             CIPHERTEXT1 = (char*) malloc(PLAINTEXTLen+1);
             if (CIPHERTEXT1==NULL)
             {
@@ -216,9 +211,8 @@
 #endif
 
             // Encrypt
-            int i=0;
             AES_init(&a,mode,KEYLen,KEY,IV);
-            for (i=0; i<(PLAINTEXTLen/blockSize); i++)
+            for (int i=0; i<(PLAINTEXTLen/blockSize); i++)
             {
                 AES_encrypt(&a,&PLAINTEXT[i*blockSize]);
             }
diff --git a/test/test_big_arithmetics_XXX.c.in b/test/test_big_arithmetics_XXX.c.in
index a8908d4..24c2055 100644
--- a/test/test_big_arithmetics_XXX.c.in
+++ b/test/test_big_arithmetics_XXX.c.in
@@ -34,24 +34,24 @@
 #define LINE_LEN 10000
 #define MAX_STRING 300
 
-void read_BIG_XXX(BIG_XXX A, char* string)
+void read_BIG_XXX(BIG_XXX A, const char* string)
 {
     int len;
     char support[LINE_LEN];
     BIG_XXX_zero(A);
-    len = strlen(string)+1;
+    len = (int) strlen(string)+1;
     amcl_hex2bin(string,support,len);
-    len = (len-1)/2;;
+    len = (len-1)/2;
     BIG_XXX_fromBytesLen(A,support,len);
     BIG_XXX_norm(A);
 }
 
-void read_DBIG_XXX(DBIG_XXX A, char* string)
+void read_DBIG_XXX(DBIG_XXX A, const char* string)
 {
     int len;
     char support[LINE_LEN];
     BIG_XXX_dzero(A);
-    len = strlen(string)+1;
+    len = (int)strlen(string)+1;
     amcl_hex2bin(string,support,len);
     len = (len-1)/2;
     BIG_XXX_dfromBytesLen(A,support,len);
@@ -66,14 +66,18 @@
         exit(EXIT_FAILURE);
     }
 
-    int i=0, len=0, bitlen=0;
+    int i=0;
+    unsigned long len=0;
+    int bitlen=0;
 
     FILE *fp;
 
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
 
-    BIG_XXX supp,mod,div;
+    BIG_XXX supp;
+    BIG_XXX mod;
+    BIG_XXX div;
     DBIG_XXX dsupp;
 
     BIG_XXX BIG1;
diff --git a/test/test_big_consistency_XXX.c.in b/test/test_big_consistency_XXX.c.in
index c342447..336f868 100644
--- a/test/test_big_consistency_XXX.c.in
+++ b/test/test_big_consistency_XXX.c.in
@@ -34,12 +34,18 @@
 int main()
 {
 
-    int i,j;
-    char raw[256], bytes[MODBYTES_XXX];
+    int i;
+    char raw[256];
+    char bytes[MODBYTES_XXX];
     csprng rng;
 
-    BIG_XXX F,G,H,I,Z;
-    DBIG_XXX DF,DG;
+    BIG_XXX F;
+    BIG_XXX G;
+    BIG_XXX H;
+    BIG_XXX I;
+    BIG_XXX Z;
+    DBIG_XXX DF;
+    DBIG_XXX DG;
 
     /* Fake random source */
     RAND_clean(&rng);
@@ -112,7 +118,7 @@
 
     /* Testing small multiplication and addition */
     BIG_XXX_random(F,&rng);
-    for (j = 1; j <= NEXCESS_XXX; ++j)
+    for (int j = 1; j <= NEXCESS_XXX; ++j)
     {
         BIG_XXX_imul(H,F,j);
         BIG_XXX_copy(G,F);
diff --git a/test/test_bls_ZZZ.c.in b/test/test_bls_ZZZ.c.in
index c433631..d33d44e 100644
--- a/test/test_bls_ZZZ.c.in
+++ b/test/test_bls_ZZZ.c.in
@@ -267,7 +267,7 @@
     printf("%d bit build\n",CHUNK);
 #endif
 
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/test/test_bls_ietf_ZZZ.c.in b/test/test_bls_ietf_ZZZ.c.in
new file mode 100644
index 0000000..53fa63f
--- /dev/null
+++ b/test/test_bls_ietf_ZZZ.c.in
@@ -0,0 +1,554 @@
+/*
+    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.
+*/
+
+
+#include "arch.h"
+#include "amcl.h"
+#include "utils.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "config_curve_ZZZ.h"
+
+#if CURVE_SECURITY_ZZZ == 128
+#include "bls_ietf_ZZZ.h"
+#else
+#error "IETF-compliant BLS currently only supports 128-bit security level (i.e. BLS12-381)"
+#endif
+
+#define LINE_LEN 500
+//#define DEBUG
+
+#define NTESTS       256
+#define MAX_AGG_SIGS 32  // defines the max # sigs to test the aggregated signatures features
+
+int main(int argc, char** argv)
+{
+    if (argc != 2) {
+        printf("ERROR Not enough input arguments\n");
+        exit(EXIT_FAILURE);
+    }
+
+    // Elliptic curve points for public keys/signatures
+    ECP_ZZZ G1;
+    ECP_ZZZ G1_prime;
+    ECP2_ZZZ G2;
+    ECP2_ZZZ G2_prime;
+
+    // Arrays to store the successive sigs/PKs to test aggregated signatures
+    ECP_ZZZ  PK_G1[NTESTS];
+    ECP2_ZZZ PK_G2[NTESTS];
+    octet sig_G1[NTESTS];
+    octet sig_G2[NTESTS];
+    char  sig_G1_char[NTESTS*48];
+    char  sig_G2_char[NTESTS*96];
+    octet messages[NTESTS];
+    unsigned int n = 0;
+
+
+    // Variables to store proofs of possession (pop)
+    char pop_g1[BFS_ZZZ]   = {0x00};
+    char pop_g2[2*BFS_ZZZ] = {0x00};
+    octet pop_g1_oct = {  BFS_ZZZ,   BFS_ZZZ, pop_g1};
+    octet pop_g2_oct = {2*BFS_ZZZ, 2*BFS_ZZZ, pop_g2};
+
+    // Point at infinity for specific compression/uncompression tests
+    char point_at_inf_g1[BFS_ZZZ]   = {0x00};
+    char point_at_inf_g2[2*BFS_ZZZ] = {0x00};
+    octet inf_g1_oct = {  BFS_ZZZ,   BFS_ZZZ, point_at_inf_g1};
+    octet inf_g2_oct = {2*BFS_ZZZ, 2*BFS_ZZZ, point_at_inf_g2};
+
+    // Variables for file parsing
+    FILE *fp = NULL;
+    char line[LINE_LEN];
+    const char *linePtr = NULL;
+    unsigned int l1 = 0;
+    bool readLine = false;
+    int lineNo = 0;
+
+    const char *ikm_str        = "IKM = ";
+    const char *salt_str       = "Salt = ";
+    const char *info_str       = "Info = ";
+    const char *sk_str         = "SK = ";
+    const char *pk_g1_ser_str  = "PK in G1 (serialized) = ";
+    const char *pk_g1_com_str  = "PK in G1 (compressed) = ";
+    const char *pk_g2_ser_str  = "PK in G2 (serialized) = ";
+    const char *pk_g2_com_str  = "PK in G2 (compressed) = ";
+    const char *sig_g1_com_str = "Signature in G1 (compressed) = ";
+    const char *sig_g2_com_str = "Signature in G2 (compressed) = ";
+
+    // fixed domain separator and message for test vectors
+    char *dst = "QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_NU_";
+    char *msg = "test vector";
+    octet msg_oct = {11, 11, msg};
+    octet dst_oct = {50, 50, dst};
+
+    char *ikm        = NULL;
+    char *salt       = NULL;
+    char *sk         = NULL;
+    char *info       = NULL;
+    char *pk_g1_ser  = NULL;
+    char *pk_g1_com  = NULL;
+    char *pk_g2_ser  = NULL;
+    char *pk_g2_com  = NULL;
+    char *sig_g1_com = NULL;
+    char *sig_g2_com = NULL;
+
+    int ikm_len        = 0;
+    int salt_len       = 0;
+    int sk_len         = 0;
+    int info_len       = 0;
+    int pk_g1_ser_len  = 0;
+    int pk_g1_com_len  = 0;
+    int pk_g2_ser_len  = 0;
+    int pk_g2_com_len  = 0;
+    int sig_g1_com_len = 0;
+    int sig_g2_com_len = 0;
+
+    int ret = 0;
+    int cmp = 0;
+
+    // Open file
+    fp = fopen(argv[1], "r");
+    if (fp == NULL) {
+        printf("ERROR opening test vector file\n");
+        exit(EXIT_FAILURE);
+    }
+
+    while (fgets(line, LINE_LEN, fp) != NULL) {
+        readLine = true;
+        // Read the input keying material
+        if (!strncmp(line, ikm_str, strlen(ikm_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(ikm_str);
+            // Allocate memory
+            l1      = (unsigned int)strlen(linePtr) - 1;
+            ikm_len  = l1 / 2;
+            ikm     = (char*) malloc(ikm_len);
+            if (ikm == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, ikm, l1);
+        }
+
+        // Read the salt value
+        if (!strncmp(line, salt_str, strlen(salt_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(salt_str);
+            // Allocate memory
+            l1      = (unsigned int)strlen(linePtr) - 1;
+            salt_len  = l1 / 2;
+            salt     = (char*) malloc(salt_len);
+            if (salt == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, salt, l1);
+        }
+
+        // Read the key info value
+        if (!strncmp(line, info_str, strlen(info_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(info_str);
+            // Allocate memory
+            l1       = (unsigned int)strlen(linePtr) - 1;
+            info_len = l1 / 2;
+            info     = (char*) malloc(info_len);
+            if (info == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, info, l1);
+        }
+
+        // Read the secret key
+        if (!strncmp(line, sk_str, strlen(sk_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            char *out_sk = NULL;
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(sk_str);
+            // Allocate memory
+            l1     = (unsigned int)strlen(linePtr) - 1;
+            sk_len = l1 / 2;
+            sk     = (char*) malloc(sk_len);
+            out_sk = (char*) malloc(sk_len);
+            if (out_sk == NULL || sk == NULL)
+                exit(EXIT_FAILURE);
+            octet sk_oct = {sk_len, sk_len, sk};
+            octet out_sk_oct = {sk_len, sk_len, out_sk};
+            amcl_hex2bin(linePtr, sk, l1);
+            // Regenerate secret key
+            ret = BLS_IETF_ZZZ_keygen(out_sk, ikm, ikm_len, salt, salt_len, info, info_len);
+            cmp = OCT_comp(&sk_oct, &out_sk_oct);
+            free(out_sk);
+            if (!cmp || ret) {
+                printf("TEST BLS_IETF_ZZZ_keygen FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Generate the proof of possession for minimal-sig-size setting
+            ret = BLS_IETF_ZZZ_pop_prove_G1(&pop_g1_oct, sk);
+            if (ret) {
+                printf("TEST BLS_IETF_ZZZ_pop_prove_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Generate the proof of possession for minimal-pub-size setting
+            ret = BLS_IETF_ZZZ_pop_prove_G2(&pop_g2_oct, sk);
+            if (ret) {
+                printf("TEST BLS_IETF_ZZZ_pop_prove_G2 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+        }
+
+        // Read the public key serialized (minimal-pubkey-setting)
+        if (!strncmp(line, pk_g1_ser_str, strlen(pk_g1_ser_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            char *out_pk_g1_ser = NULL;
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(pk_g1_ser_str);
+            // Allocate memory
+            l1            = (unsigned int)strlen(linePtr) - 1;
+            pk_g1_ser_len = l1 / 2;
+            pk_g1_ser     = (char*) malloc(pk_g1_ser_len);
+            out_pk_g1_ser = (char*) malloc(pk_g1_ser_len);
+            if (pk_g1_ser == NULL || out_pk_g1_ser == NULL)
+                exit(EXIT_FAILURE);
+            octet pk_g1_ser_oct = {pk_g1_ser_len, pk_g1_ser_len, pk_g1_ser};
+            octet out_pk_g1_ser_oct = {pk_g1_ser_len, pk_g1_ser_len, out_pk_g1_ser};
+            // PK serialized (minimal-pubkey-setting) binary value
+            amcl_hex2bin(linePtr, pk_g1_ser, l1);
+            // Regenerate public key in G1
+            ret = BLS_IETF_ZZZ_sk_to_pk_G1(&G1, sk);
+            // Serialize the public key
+            ret |= BLS_IETF_ZZZ_serialize_G1(&out_pk_g1_ser_oct, &G1);
+            cmp = OCT_comp(&pk_g1_ser_oct, &out_pk_g1_ser_oct);
+            if (!cmp || ret) {
+                printf("TEST BLS_IETF_ZZZ_serialize_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Deserialize the public key
+            ret |= BLS_IETF_ZZZ_deserialize_G1(&G1_prime, &out_pk_g1_ser_oct);
+            free(out_pk_g1_ser);
+            if (!ECP_ZZZ_equals(&G1, &G1_prime) || ret) {
+                printf("TEST BLS_IETF_ZZZ_deserialize_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+        }
+
+        // Read the public key compressed (minimal-pubkey-setting)
+        if (!strncmp(line, pk_g1_com_str, strlen(pk_g1_com_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            char *out_pk_g1_com = NULL;
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(pk_g1_com_str);
+            // Allocate memory
+            l1            = (unsigned int)strlen(linePtr) - 1;
+            pk_g1_com_len = l1 / 2;
+            pk_g1_com     = (char*) malloc(pk_g1_com_len);
+            out_pk_g1_com = (char*) malloc(pk_g1_com_len);
+            if (pk_g1_com == NULL || out_pk_g1_com == NULL)
+                exit(EXIT_FAILURE);
+            octet pk_g1_com_oct = {pk_g1_com_len, pk_g1_com_len, pk_g1_com};
+            octet out_pk_g1_com_oct = {pk_g1_com_len, pk_g1_com_len, out_pk_g1_com};
+            // PK compressed (minimal-pubkey-setting) binary value
+            amcl_hex2bin(linePtr, pk_g1_com, l1);
+            // Compress the public key
+            ret = BLS_IETF_ZZZ_compress_G1(&out_pk_g1_com_oct, &G1);
+            cmp = OCT_comp(&pk_g1_com_oct, &out_pk_g1_com_oct);
+            if (!cmp || ret) {
+                printf("TEST BLS_IETF_ZZZ_compress_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Uncompress the public key
+            ret |= BLS_IETF_ZZZ_uncompress_G1(&G1_prime, &out_pk_g1_com_oct);
+            free(out_pk_g1_com);
+            if (!ECP_ZZZ_equals(&G1, &G1_prime) || ret) {
+                printf("TEST BLS_IETF_ZZZ_uncompress_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Verify the proof of possession for minimal-pubkey-size setting
+            ret = BLS_IETF_ZZZ_pop_verify_G2(&pop_g2_oct, &G1);
+            if (ret) {
+                printf("TEST BLS_IETF_ZZZ_pop_verify_G2 FAILED WITH ERROR %08x LINE %d\n",ret,lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Copy the compressed public key for signature aggregation
+            ECP_ZZZ_copy(PK_G1 + n, &G1_prime);
+        }
+
+        // Read the signature compressed (minimal-pubkey-setting)
+        if (!strncmp(line, sig_g2_com_str, strlen(sig_g2_com_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            char *out_sig_g2_com = NULL;
+            char *agg_sig_g2_com = NULL;
+            // Find hex value in string
+            linePtr = line + strlen(sig_g2_com_str);
+            // Allocate memory
+            l1             = (unsigned int)strlen(linePtr) - 1;
+            sig_g2_com_len = l1 / 2;
+            sig_g2_com     = (char*) malloc(sig_g2_com_len);
+            out_sig_g2_com = (char*) malloc(sig_g2_com_len);
+            agg_sig_g2_com = (char*) malloc(sig_g2_com_len);
+            if (sig_g2_com == NULL || out_sig_g2_com == NULL)
+                exit(EXIT_FAILURE);
+            octet sig_g2_com_oct = {sig_g2_com_len, sig_g2_com_len, sig_g2_com};
+            octet out_sig_g2_com_oct = {sig_g2_com_len, sig_g2_com_len, out_sig_g2_com};
+            octet agg_sig_g2_com_oct = {sig_g2_com_len, sig_g2_com_len, agg_sig_g2_com};
+            // PK compressed (minimal-pubkey-setting) binary value
+            amcl_hex2bin(linePtr, sig_g2_com, l1);
+
+            // Generate the signature
+            ret = BLS_IETF_ZZZ_core_sign_G2(&out_sig_g2_com_oct, sk, &msg_oct, &dst_oct);
+            cmp = OCT_comp(&sig_g2_com_oct, &out_sig_g2_com_oct);
+            if (!cmp || ret) {
+                printf("TEST BLS_IETF_ZZZ_core_sign_G2 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+
+            // verify the signature
+            ret = BLS_IETF_ZZZ_core_verify_G2(&out_sig_g2_com_oct, &G1, &msg_oct, &dst_oct);
+            if (ret) {
+                printf("TEST BLS_IETF_ZZZ_core_verify_G2 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+
+            if (n < MAX_AGG_SIGS) {
+                // Copy the test message to messages[n]
+                messages[n].max = 11;
+                messages[n].len = 11;
+                messages[n].val = msg;
+                // Copy the compressed public key for signature aggregation
+                sig_G2[n].max = 96;
+                sig_G2[n].len = 96;
+                sig_G2[n].val = sig_G2_char + 96*n;
+                OCT_copy(sig_G2 + n, &sig_g2_com_oct);
+                BLS_IETF_ZZZ_aggregate_G2(&agg_sig_g2_com_oct, sig_G2, n+1);
+                ret =  BLS_IETF_ZZZ_core_aggregate_verify_G2(&agg_sig_g2_com_oct, PK_G1, messages, n+1, &dst_oct);
+                ret |= BLS_IETF_ZZZ_fast_aggregate_verify_G2(&agg_sig_g2_com_oct, PK_G1, messages, n+1, &dst_oct);
+                // Test both verification at once to avoid sonarqube code smell...
+                if (ret) {
+                    printf("TEST BLS_IETF_ZZZ_core/fast_aggregate_verify_G2 FAILED LINE %d\n",lineNo);
+                    exit(EXIT_FAILURE);
+                }
+            }
+
+            free(out_sig_g2_com);
+            free(agg_sig_g2_com);
+        }
+
+        // Read the public key serialized (minimal-signature-setting)
+        if (!strncmp(line, pk_g2_ser_str, strlen(pk_g2_ser_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            char *out_pk_g2_ser = NULL;
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(pk_g2_ser_str);
+            // Allocate memory
+            l1            = (unsigned int)strlen(linePtr) - 1;
+            pk_g2_ser_len = l1 / 2;
+            pk_g2_ser     = (char*) malloc(pk_g2_ser_len);
+            out_pk_g2_ser = (char*) malloc(pk_g2_ser_len);
+            if (pk_g2_ser == NULL || out_pk_g2_ser == NULL)
+                exit(EXIT_FAILURE);
+            octet pk_g2_ser_oct = {pk_g2_ser_len, pk_g2_ser_len, pk_g2_ser};
+            octet out_pk_g2_ser_oct = {pk_g2_ser_len, pk_g2_ser_len, out_pk_g2_ser};
+            // PK serialized (minimal-pubkey-setting) binary value
+            amcl_hex2bin(linePtr, pk_g2_ser, l1);
+            // Regenerate public key in G1
+            ret = BLS_IETF_ZZZ_sk_to_pk_G2(&G2, sk);
+            // Serialize the public key
+            ret |= BLS_IETF_ZZZ_serialize_G2(&out_pk_g2_ser_oct, &G2);
+            cmp = OCT_comp(&pk_g2_ser_oct, &out_pk_g2_ser_oct);
+            if (!cmp || ret) {
+                printf("TEST BLS_IETF_ZZZ_SERIALIZE_P2 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Deserialize the public key
+            ret |= BLS_IETF_ZZZ_deserialize_G2(&G2_prime, &out_pk_g2_ser_oct);
+            free(out_pk_g2_ser);
+            if (!ECP2_ZZZ_equals(&G2, &G2_prime) || ret) {
+                printf("TEST BLS_IETF_ZZZ_DESERIALIZE_P2 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+        }
+
+        // Read the public key compressed (minimal-signature-setting)
+        if (!strncmp(line, pk_g2_com_str, strlen(pk_g2_com_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            char *out_pk_g2_com = NULL;
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(pk_g2_com_str);
+            // Allocate memory
+            l1            = (unsigned int)strlen(linePtr) - 1;
+            pk_g2_com_len = l1 / 2;
+            pk_g2_com     = (char*) malloc(pk_g2_com_len);
+            out_pk_g2_com = (char*) malloc(pk_g2_com_len);
+            if (pk_g2_com == NULL || out_pk_g2_com == NULL)
+                exit(EXIT_FAILURE);
+            octet pk_g2_com_oct = {pk_g2_com_len, pk_g2_com_len, pk_g2_com};
+            octet out_pk_g2_com_oct = {pk_g2_com_len, pk_g2_com_len, out_pk_g2_com};
+            // PK compressed (minimal-pubkey-setting) binary value
+            amcl_hex2bin(linePtr, pk_g2_com, l1);
+            // Compress the public key
+            ret = BLS_IETF_ZZZ_compress_G2(&out_pk_g2_com_oct, &G2);
+            cmp = OCT_comp(&pk_g2_com_oct, &out_pk_g2_com_oct);
+            if (!cmp || ret) {
+                printf("TEST BLS_IETF_ZZZ_COMPRESS_P2 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Uncompress the public key
+            ret |= BLS_IETF_ZZZ_uncompress_G2(&G2_prime, &out_pk_g2_com_oct);
+            free(out_pk_g2_com);
+            if (!ECP2_ZZZ_equals(&G2, &G2_prime) || ret) {
+                printf("TEST BLS_IETF_ZZZ_UNCOMPRESS_P2 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Verify the proof of possession for minimal-sig-size setting
+            ret = BLS_IETF_ZZZ_pop_verify_G1(&pop_g1_oct, &G2);
+            if (ret) {
+                printf("TEST BLS_IETF_ZZZ_pop_verify_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Copy the compressed public key for signature aggregation
+            ECP2_ZZZ_copy(PK_G2 + n, &G2_prime);
+        }
+
+        // Read the signature compressed (minimal-signature-setting)
+        if (!strncmp(line, sig_g1_com_str, strlen(sig_g1_com_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            char *out_sig_g1_com = NULL;
+            char *agg_sig_g1_com = NULL;
+            // Find hex value in string
+            linePtr = line + (unsigned int)strlen(sig_g1_com_str);
+            // Allocate memory
+            l1             = (unsigned int)strlen(linePtr) - 1;
+            sig_g1_com_len = l1 / 2;
+            sig_g1_com     = (char*) malloc(sig_g1_com_len);
+            out_sig_g1_com = (char*) malloc(sig_g1_com_len);
+            agg_sig_g1_com = (char*) malloc(sig_g1_com_len);
+            if (sig_g1_com == NULL || out_sig_g1_com == NULL)
+                exit(EXIT_FAILURE);
+            octet sig_g1_com_oct = {sig_g1_com_len, sig_g1_com_len, sig_g1_com};
+            octet out_sig_g1_com_oct = {sig_g1_com_len, sig_g1_com_len, out_sig_g1_com};
+            octet agg_sig_g1_com_oct = {sig_g1_com_len, sig_g1_com_len, agg_sig_g1_com};
+            // PK compressed (minimal-pubkey-setting) binary value
+            amcl_hex2bin(linePtr, sig_g1_com, l1);
+
+            // Generate the signature
+            ret = BLS_IETF_ZZZ_core_sign_G1(&out_sig_g1_com_oct, sk, &msg_oct, &dst_oct);
+            cmp = OCT_comp(&sig_g1_com_oct, &out_sig_g1_com_oct);
+            if (!cmp || ret) {
+                printf("TEST BLS_IETF_ZZZ_core_sign_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            
+            // Verify the signature
+            ret = BLS_IETF_ZZZ_core_verify_G1(&out_sig_g1_com_oct, &G2, &msg_oct, &dst_oct);
+            if (ret) {
+                printf("TEST BLS_IETF_ZZZ_core_verify_G1 FAILED LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+
+            if (n < MAX_AGG_SIGS) {
+                // Copy the compressed public key for signature aggregation
+                sig_G1[n].max = sig_g1_com_len;
+                sig_G1[n].len = sig_g1_com_len;
+                sig_G1[n].val = sig_G1_char + sig_g1_com_len*n;
+
+                OCT_copy(sig_G1 + n, &sig_g1_com_oct);
+                BLS_IETF_ZZZ_aggregate_G1(&agg_sig_g1_com_oct, sig_G1, n+1);
+                ret =  BLS_IETF_ZZZ_core_aggregate_verify_G1(&agg_sig_g1_com_oct, PK_G2, messages, n+1, &dst_oct);
+                ret |= BLS_IETF_ZZZ_fast_aggregate_verify_G1(&agg_sig_g1_com_oct, PK_G2, messages, n+1, &dst_oct);
+                // Test both verification at once to avoid sonarqube code smell...
+                if (ret) {
+                    printf("TEST BLS_IETF_ZZZ_core_aggregate_verify_G2 FAILED LINE %d\n",lineNo);
+                    exit(EXIT_FAILURE);
+                }
+            }
+
+            free(out_sig_g1_com);
+            free(agg_sig_g1_com);
+
+            free(ikm);
+            free(salt);
+            free(sk);
+            free(info);
+            free(pk_g1_ser);
+            free(pk_g1_com);
+            free(pk_g2_ser);
+            free(pk_g2_com);
+            free(sig_g1_com);
+            free(sig_g2_com);
+            ikm        = NULL;
+            salt       = NULL;
+            info       = NULL;
+            sk         = NULL;
+            pk_g1_ser  = NULL;
+            pk_g1_com  = NULL;
+            pk_g2_ser  = NULL;
+            pk_g2_com  = NULL;
+            sig_g1_com = NULL;
+            sig_g2_com = NULL;
+            n++;
+        }
+
+        lineNo++;
+    }
+    fclose(fp);
+    if (!readLine) {
+        printf("ERROR No test vectors\n");
+        exit(EXIT_FAILURE);
+    }
+
+    // Additional test for compression/uncompression of point at infinity in G1
+    ECP_ZZZ_inf(&G1);
+    ret = BLS_IETF_ZZZ_compress_G1(&inf_g1_oct, &G1);
+    ret |= BLS_IETF_ZZZ_uncompress_G1(&G1, &inf_g1_oct);
+    if (ret || !ECP_ZZZ_isinf(&G1))  {
+        printf("TEST BLS_IETF_ZZZ_COMPRESS_P1 FAILED FOR POINT AT INFINITY\n");
+        exit(EXIT_FAILURE);
+    }
+    // Additional test for compression/uncompression of point at infinity in G2
+    ECP2_ZZZ_inf(&G2);
+    ret = BLS_IETF_ZZZ_compress_G2(&inf_g2_oct, &G2);
+    ret |= BLS_IETF_ZZZ_uncompress_G2(&G2, &inf_g2_oct);
+    if (ret || !ECP2_ZZZ_isinf(&G2))  {
+        printf("TEST BLS_IETF_ZZZ_COMPRESS_P2 FAILED FOR POINT AT INFINITY\n");
+        exit(EXIT_FAILURE);
+    }
+
+    printf("SUCCESS TEST BLS12-381 PASSED\n");
+    exit(EXIT_SUCCESS);
+}
diff --git a/test/test_bls_ietf_h2c_G1_ZZZ.c.in b/test/test_bls_ietf_h2c_G1_ZZZ.c.in
new file mode 100644
index 0000000..d035479
--- /dev/null
+++ b/test/test_bls_ietf_h2c_G1_ZZZ.c.in
@@ -0,0 +1,184 @@
+/*
+    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.
+*/
+
+#include "arch.h"
+#include "amcl.h"
+#include "utils.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "bls_ietf_ZZZ.h"
+
+#define LINE_LEN 1000
+//#define DEBUG
+
+int main(int argc, char** argv)
+{
+    if (argc != 2) {
+        printf("ERROR Not enough input arguments\n");
+        exit(EXIT_FAILURE);
+    }
+
+    BIG_XXX x;
+    BIG_XXX y;
+
+    ECP_ZZZ P1;
+    ECP_ZZZ P1_prime;
+
+    // Variables for file parsing
+    FILE *fp = NULL;
+    char line[LINE_LEN];
+    const char *linePtr = NULL;
+    unsigned int l1 = 0;
+    bool readLine = false;
+    int lineNo = 0;
+
+    const char *dst_str = "dst     = ";
+    const char *msg_str = "msg     = ";
+    const char *Px_str  = "P.x     = ";
+    const char *Py_str  = "P.y     = ";
+
+    char dst[50];
+    char *msg   = NULL;
+    char *Px    = NULL;
+    char *Py    = NULL;
+    
+    int dst_len   = 0;
+    int msg_len   = 0;
+    int Px_len    = 0;
+    int Py_len    = 0;
+
+    int ret = 0;
+
+    // Open file
+    fp = fopen(argv[1], "r");
+    if (fp == NULL) {
+        printf("ERROR opening test vector file\n");
+        exit(EXIT_FAILURE);
+    }
+
+    while (fgets(line, LINE_LEN, fp) != NULL) {
+        readLine = true;
+        // Read the Domain Separator Tag (DST) value
+        if (!strncmp(line, dst_str, strlen(dst_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(dst_str);
+            // Allocate memory
+            l1       = (unsigned int)strlen(linePtr) - 1;
+            dst_len  = l1;
+            for(int i = 0; i < dst_len; i++)
+                dst[i] = linePtr[i];
+        }
+
+        // Read the message
+        if (!strncmp(line, msg_str, strlen(msg_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(msg_str);
+            // Allocate memory
+            l1       = (unsigned int)strlen(linePtr) - 1;
+            msg_len  = l1;
+            msg      = (char*) malloc(msg_len);
+            if (msg == NULL)
+                exit(EXIT_FAILURE);
+            for(int i = 0; i < msg_len; i++)
+                msg[i] = linePtr[i];
+        }
+
+        // Read the expected output point x-coordinate
+        if (!strncmp(line, Px_str, strlen(Px_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(Px_str);
+            // Allocate memory
+            l1    = (unsigned int)strlen(linePtr) - 1;
+            Px_len = l1 / 2;
+            Px     = (char*) malloc(Px_len);
+            if (Px == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, Px, l1);
+            BIG_XXX_fromBytes(x, Px);
+        }
+
+        // Read the expected output point y-coordinate
+        if (!strncmp(line, Py_str, strlen(Py_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(Py_str);
+            // Allocate memory
+            l1    = (unsigned int)strlen(linePtr) - 1;
+            Py_len = l1 / 2;
+            Py     = (char*) malloc(Py_len);
+            if (Py == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, Py, l1);
+            BIG_XXX_fromBytes(y, Py);
+            
+            ECP_ZZZ_set(&P1, x, y);
+
+            octet msg_oct = {msg_len, msg_len, msg};
+            octet dst_oct = {dst_len, dst_len, dst};
+            if (strncmp(dst, "QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_RO_", sizeof(dst)) == 0) {
+                ret = BLS_IETF_ZZZ_hash2curve_G1(&P1_prime, &msg_oct, &dst_oct);
+                if (ECP_ZZZ_equals(&P1, &P1_prime) == 0 || ret) { 
+                    printf("TEST BLS_IETF_ZZZ_hash2curve_G1 FAILED LINE %d\n",lineNo);
+                    exit(EXIT_FAILURE);
+                }
+            }
+            else if (strncmp(dst, "QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_NU_", sizeof(dst)) == 0) {
+                ret = BLS_IETF_ZZZ_encode2curve_G1(&P1_prime, &msg_oct, &dst_oct);
+                if (ECP_ZZZ_equals(&P1, &P1_prime) == 0 || ret) { 
+                    printf("TEST BLS_IETF_ZZZ_encode2curve_G1 FAILED LINE %d\n",lineNo);
+                    exit(EXIT_FAILURE);
+                }
+            }
+            else {
+                printf("WRONG DST - FAILED AT LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+
+            free(msg);
+            free(Px);
+            free(Py);
+            msg = NULL;
+            Px  = NULL;
+            Py  = NULL;
+        }
+
+        lineNo++;
+    }
+    fclose(fp);
+    if (!readLine) {
+        printf("ERROR No test vectors\n");
+        exit(EXIT_FAILURE);
+    }
+
+    printf("SUCCESS TEST BLS12-381_HASH2CURVE_G1 PASSED\n");
+    exit(EXIT_SUCCESS);
+}
diff --git a/test/test_bls_ietf_h2c_G2_ZZZ.c.in b/test/test_bls_ietf_h2c_G2_ZZZ.c.in
new file mode 100644
index 0000000..22e1567
--- /dev/null
+++ b/test/test_bls_ietf_h2c_G2_ZZZ.c.in
@@ -0,0 +1,234 @@
+/*
+    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.
+*/
+
+#include "arch.h"
+#include "amcl.h"
+#include "utils.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "bls_ietf_ZZZ.h"
+
+#define LINE_LEN 1000
+//#define DEBUG
+
+
+int main(int argc, char** argv)
+{
+    if (argc != 2) {
+        printf("ERROR Not enough input arguments\n");
+        exit(EXIT_FAILURE);
+    }
+
+    BIG_XXX x_re;
+    BIG_XXX x_im;
+    BIG_XXX y_re;
+    BIG_XXX y_im;
+
+    FP2_YYY x2;
+    FP2_YYY y2;
+
+    ECP2_ZZZ P2;
+    ECP2_ZZZ P2_prime;
+
+    // Variables for file parsing
+    FILE *fp = NULL;
+    char line[LINE_LEN];
+    const char *linePtr = NULL;
+    unsigned int l1 = 0;
+    bool readLine = false;
+    int lineNo = 0;
+
+    const char *dst_str    = "dst     = ";
+    const char *msg_str    = "msg     = ";
+    const char *Px_re_str  = "P.x_re  = ";
+    const char *Px_im_str  = "P.x_im  = ";
+    const char *Py_re_str  = "P.y_re  = ";
+    const char *Py_im_str  = "P.y_im  = ";
+
+    char dst[50];
+    char *msg   = NULL;
+    char *Px_re = NULL;
+    char *Px_im = NULL;
+    char *Py_re = NULL;
+    char *Py_im = NULL;
+
+    int dst_len   = 0;
+    int msg_len   = 0;
+    int Px_re_len = 0;
+    int Px_im_len = 0;
+    int Py_re_len = 0;
+    int Py_im_len = 0;
+
+    int ret = 0;
+
+    // Open file
+    fp = fopen(argv[1], "r");
+    if (fp == NULL) {
+        printf("ERROR opening test vector file\n");
+        exit(EXIT_FAILURE);
+    }
+
+    while (fgets(line, LINE_LEN, fp) != NULL) {
+        readLine = true;
+        // Read the Domain Separator Tag (DST) value
+        if (!strncmp(line, dst_str, strlen(dst_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(dst_str);
+            // Allocate memory
+            l1       = (unsigned int)strlen(linePtr) - 1;
+            dst_len  = l1;
+            for(int i = 0; i < dst_len; i++)
+                dst[i] = linePtr[i];
+        }
+
+        // Read the message
+        if (!strncmp(line, msg_str, strlen(msg_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(msg_str);
+            // Allocate memory
+            l1       = (unsigned int)strlen(linePtr) - 1;
+            msg_len  = l1;
+            msg      = (char*) malloc(msg_len);
+            if (msg == NULL)
+                exit(EXIT_FAILURE);
+            for(int i = 0; i < msg_len; i++)
+                msg[i] = linePtr[i];
+        }
+
+        // Read the expected output point (real part of P_x)
+        if (!strncmp(line, Px_re_str, strlen(Px_re_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(Px_re_str);
+            // Allocate memory
+            l1        = (unsigned int)strlen(linePtr) - 1;
+            Px_re_len = l1 / 2;
+            Px_re     = (char*) malloc(Px_re_len);
+            if (Px_re == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, Px_re, l1);
+            BIG_XXX_fromBytes(x_re, Px_re);
+        }
+
+        // Read the expected output point (imaginary part of P_x)
+        if (!strncmp(line, Px_im_str, strlen(Px_im_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(Px_im_str);
+            // Allocate memory
+            l1    = (unsigned int)strlen(linePtr) - 1;
+            Px_im_len = l1 / 2;
+            Px_im     = (char*) malloc(Px_im_len);
+            if (Px_im == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, Px_im, l1);
+            BIG_XXX_fromBytes(x_im, Px_im);
+        }
+
+        // Read the expected output point (real part of P_y)
+        if (!strncmp(line, Py_re_str, strlen(Py_re_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(Py_re_str);
+            // Allocate memory
+            l1    = (unsigned int)strlen(linePtr) - 1;
+            Py_re_len = l1 / 2;
+            Py_re     = (char*) malloc(Py_re_len);
+            if (Py_re == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, Py_re, l1);
+            BIG_XXX_fromBytes(y_re, Py_re);
+        }
+
+        // Read the expected output point (imaginary part of P_y)
+        if (!strncmp(line, Py_im_str, strlen(Py_im_str))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(Py_im_str);
+            // Allocate memory
+            l1    = (unsigned int)strlen(linePtr) - 1;
+            Py_im_len = l1 / 2;
+            Py_im     = (char*) malloc(Py_im_len);
+            if (Py_im == NULL)
+                exit(EXIT_FAILURE);
+            amcl_hex2bin(linePtr, Py_im, l1);
+            octet msg_oct = {msg_len, msg_len, msg};
+            octet dst_oct = {dst_len, dst_len, dst};
+            BIG_XXX_fromBytes(y_im, Py_im);
+            FP2_YYY_from_BIGs(&x2, x_re, x_im);
+            FP2_YYY_from_BIGs(&y2, y_re, y_im);
+            ECP2_ZZZ_set(&P2, &x2, &y2);
+
+            if (strncmp(dst, "QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_RO_", sizeof(dst)) == 0) {
+                ret = BLS_IETF_ZZZ_hash2curve_G2(&P2_prime, &msg_oct, &dst_oct);
+                if (ECP2_ZZZ_equals(&P2, &P2_prime) == 0 || ret) { 
+                    printf("TEST BLS_IETF_ZZZ_hash2curve_G2 FAILED LINE %d\n",lineNo);
+                    exit(EXIT_FAILURE);
+                }
+            }
+            else if (strncmp(dst, "QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_NU_", sizeof(dst)) == 0) {
+                ret = BLS_IETF_ZZZ_encode2curve_G2(&P2_prime, &msg_oct, &dst_oct);
+                if (ECP2_ZZZ_equals(&P2, &P2_prime) == 0 || ret) { 
+                    printf("TEST BLS_IETF_ZZZ_encode2curve_G2 FAILED LINE %d\n",lineNo);
+                    exit(EXIT_FAILURE);
+                }
+            }
+            else {
+                printf("WRONG DST - FAILED AT LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+
+            free(msg);
+            free(Px_re);
+            free(Px_im);
+            free(Py_re);
+            free(Py_im);
+            msg   = NULL;
+            Px_re = NULL;
+            Px_im = NULL;
+            Py_re = NULL;
+            Py_im = NULL;
+        }
+        lineNo++;
+    }
+    fclose(fp);
+    if (!readLine) {
+        printf("ERROR No test vectors\n");
+        exit(EXIT_FAILURE);
+    }
+
+    printf("SUCCESS TEST BLS12-381_HASH2CURVE_G2 PASSED\n");
+    exit(EXIT_SUCCESS);
+}
diff --git a/test/test_bls_sss_ZZZ.c.in b/test/test_bls_sss_ZZZ.c.in
index 57c8456..5b56343 100644
--- a/test/test_bls_sss_ZZZ.c.in
+++ b/test/test_bls_sss_ZZZ.c.in
@@ -213,7 +213,7 @@
     printf("%d bit build\n",CHUNK);
 #endif
 
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/test/test_ecc_ZZZ.c.in b/test/test_ecc_ZZZ.c.in
index 00af7a3..de4dbcc 100644
--- a/test/test_ecc_ZZZ.c.in
+++ b/test/test_ecc_ZZZ.c.in
@@ -36,16 +36,34 @@
 
 int main()
 {
-    int i,j=0,res;
+    int i;
+    int res;
     unsigned long ran;
     char pp[]="M0ng00se";
     /* These octets are automatically protected against buffer overflow attacks */
     /* Note salt must be big enough to include an appended word */
     /* Note ECIES ciphertext C must be big enough to include at least 1 appended block */
     /* Recall EFS_ZZZ is field size in bytes. So EFS_ZZZ=32 for 256-bit curve */
-    char s0[EGS_ZZZ],s1[EGS_ZZZ],w0[2*EFS_ZZZ+1],w1[2*EFS_ZZZ+1],z0[EFS_ZZZ],z1[EFS_ZZZ],raw[100],key[AESKEY_ZZZ],salt[32],pw[20];
+    char s0[EGS_ZZZ];
+    char s1[EGS_ZZZ];
+    char w0[2*EFS_ZZZ+1];
+    char w1[2*EFS_ZZZ+1];
+    char z0[EFS_ZZZ];
+    char z1[EFS_ZZZ];
+    char raw[100];
+    char key[AESKEY_ZZZ];
+    char salt[32];
+    char pw[20];
 #if CURVETYPE_ZZZ != MONTGOMERY
-    char ds[EGS_ZZZ],p1[32],p2[32],v[2*EFS_ZZZ+1],m[32],plm[32],c[64],t[32],cs[EGS_ZZZ];
+    char ds[EGS_ZZZ];
+    char p1[32];
+    char p2[32];
+    char v[2*EFS_ZZZ+1];
+    char m[32];
+    char plm[32];
+    char c[64];
+    char t[32];
+    char cs[EGS_ZZZ];
 #endif
 
     octet S0= {0,sizeof(s0),s0};
@@ -75,19 +93,19 @@
     time((time_t *)&ran);
 
     RAW.len=100;
-    RAW.val[0]=ran;
-    RAW.val[1]=ran>>8;
-    RAW.val[2]=ran>>16;
-    RAW.val[3]=ran>>24;
-    for (i=0; i<100; i++) RAW.val[i]=i;
+    RAW.val[0]=(char)ran;
+    RAW.val[1]=(char)(ran>>8);
+    RAW.val[2]=(char)(ran>>16);
+    RAW.val[3]=(char)(ran>>24);
+    for (i=0; i<100; i++) RAW.val[i]=(char)i;
 
     CREATE_CSPRNG(&RNG,&RAW);
 
 // Set salt
-    for (j=0; j<100; j++)
+    for (int j=0; j<100; j++)
     {
         SALT.len=8;
-        for (i=0; i<8; i++) SALT.val[i]=i+1;
+        for (i=0; i<8; i++) SALT.val[i]=(char)(i+1);
 
 // Copy Passhrase
 #ifdef DEBUG
diff --git a/test/test_ecdsa_verify_ZZZ.c.in b/test/test_ecdsa_verify_ZZZ.c.in
index d766a65..5ad10cd 100644
--- a/test/test_ecdsa_verify_ZZZ.c.in
+++ b/test/test_ecdsa_verify_ZZZ.c.in
@@ -215,7 +215,7 @@
             linePtr = line + strlen(ResultStr);
             char r1[1];
             char r2[1] = {"P"};
-            strncpy(r1,linePtr,1);
+            memcpy(r1,linePtr,1);
             if (r1[0] == r2[0])
             {
                 pass = true;
diff --git a/test/test_ecp2_arithmetics_ZZZ.c.in b/test/test_ecp2_arithmetics_ZZZ.c.in
index 717c2cd..d29c697 100644
--- a/test/test_ecp2_arithmetics_ZZZ.c.in
+++ b/test/test_ecp2_arithmetics_ZZZ.c.in
@@ -34,24 +34,30 @@
 #define LINE_LEN 1000
 #define MAX_STRING 1000
 
-void read_BIG_XXX(BIG_XXX A, char* string)
+void read_BIG_XXX(BIG_XXX A, const char* string)
 {
-    int len;
+    unsigned long len;
     char bin[LINE_LEN];
     BIG_XXX_zero(A);
     len = strlen(string)+1;
     amcl_hex2bin(string,bin,len);
-    len = (len-1)/2;;
-    BIG_XXX_fromBytesLen(A,bin,len);
+    len = (len-1)/2;
+    BIG_XXX_fromBytesLen(A,bin,(int)len);
     BIG_XXX_norm(A);
 }
 
 
-int read_ECP2_ZZZ(ECP2_ZZZ *ecp2, char* stringx1)
+int read_ECP2_ZZZ(ECP2_ZZZ *ecp2, const char* stringx1)
 {
-    char *stringx2, *stringy1, *stringy2;
-    BIG_XXX x1,x2,y1,y2;
-    FP2_YYY x,y;
+    char *stringx2;
+    char *stringy1;
+    char *stringy2;
+    BIG_XXX x1;
+    BIG_XXX x2;
+    BIG_XXX y1;
+    BIG_XXX y2;
+    FP2_YYY x;
+    FP2_YYY y;
 
     stringx2 = strchr(stringx1,':');
     stringx2[0] = '\0';
@@ -82,13 +88,17 @@
         exit(EXIT_FAILURE);
     }
 
-    int i=0, len=0;
+    int i=0;
+    unsigned long len=0;
 
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
 
-    ECP2_ZZZ ECP2aux1, ECP2aux2, inf;
-    FP2_YYY FP2aux1,FP2aux2;
+    ECP2_ZZZ ECP2aux1;
+    ECP2_ZZZ ECP2aux2;
+    ECP2_ZZZ inf;
+    FP2_YYY FP2aux1;
+    FP2_YYY FP2aux2;
 
     char oct[LINE_LEN];
     octet OCTaux= {0,sizeof(oct),oct};
diff --git a/test/test_ecp_arithmetics_ZZZ.c.in b/test/test_ecp_arithmetics_ZZZ.c.in
index bbdbe11..776ab42 100644
--- a/test/test_ecp_arithmetics_ZZZ.c.in
+++ b/test/test_ecp_arithmetics_ZZZ.c.in
@@ -35,19 +35,19 @@
 #define MAX_STRING 400
 #define PIN 1234
 
-void read_BIG_XXX(BIG_XXX A, char* string)
+void read_BIG_XXX(BIG_XXX A, const char* string)
 {
     int len;
     char support[LINE_LEN];
     BIG_XXX_zero(A);
-    len = strlen(string)+1;
+    len = (int)strlen(string)+1;
     amcl_hex2bin(string,support,len);
-    len = (len-1)/2;;
+    len = (len-1)/2;
     BIG_XXX_fromBytesLen(A,support,len);
     BIG_XXX_norm(A);
 }
 
-int read_ECP_ZZZ(ECP_ZZZ *ecp, char* string)
+int read_ECP_ZZZ(ECP_ZZZ *ecp, const char* string)
 {
     BIG_XXX x;
 #if CURVETYPE_ZZZ!=MONTGOMERY
@@ -73,19 +73,22 @@
         exit(EXIT_FAILURE);
     }
 
-    int i=0, len=0;
+    int i=0;
+    int len=0;
 
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
 
-    ECP_ZZZ inf, ECPaux1;
+    ECP_ZZZ inf;
+    ECP_ZZZ ECPaux1;
     BIG_XXX BIGaux1;
 
     char oct[LINE_LEN];
     octet OCTaux = {0,sizeof(oct),oct};
 #if CURVETYPE_ZZZ!=MONTGOMERY
     BIG_XXX BIGaux2;
-    FP_YYY FPaux1,FPaux2;
+    FP_YYY FPaux1;
+    FP_YYY FPaux2;
     ECP_ZZZ ECPaux2;
 #endif
     ECP_ZZZ ecp1;
@@ -148,7 +151,7 @@
         i++;
         if (!strncmp(line,  ECP1line, strlen(ECP1line))) // get first test vector
         {
-            len = strlen(ECP1line);
+            len = (int)strlen(ECP1line);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecp1,linePtr) || ECP_ZZZ_isinf(&ecp1))
             {
@@ -182,7 +185,7 @@
 #if CURVETYPE_ZZZ!=MONTGOMERY
         if (!strncmp(line,  ECP2line, strlen(ECP2line))) // get second test vector
         {
-            len = strlen(ECP2line);
+            len = (int)strlen(ECP2line);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecp2,linePtr) || ECP_ZZZ_isinf(&ecp2))
             {
@@ -192,7 +195,7 @@
         }
         if (!strncmp(line,  ECPsumline, strlen(ECPsumline)))
         {
-            len = strlen(ECPsumline);
+            len = (int)strlen(ECPsumline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpsum,linePtr) || ECP_ZZZ_isinf(&ecpsum))
             {
@@ -224,7 +227,7 @@
         }
         if (!strncmp(line,  ECPsubline, strlen(ECPsubline)))
         {
-            len = strlen(ECPsubline);
+            len = (int)strlen(ECPsubline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpsub,linePtr) || ECP_ZZZ_isinf(&ecpsub))
             {
@@ -242,7 +245,7 @@
         }
         if (!strncmp(line,  ECPnegline, strlen(ECPnegline)))
         {
-            len = strlen(ECPnegline);
+            len = (int)strlen(ECPnegline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpneg,linePtr) || ECP_ZZZ_isinf(&ecpneg))
             {
@@ -261,7 +264,7 @@
 #endif
         if (!strncmp(line,  ECPdblline, strlen(ECPdblline)))
         {
-            len = strlen(ECPdblline);
+            len = (int)strlen(ECPdblline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpdbl,linePtr) || ECP_ZZZ_isinf(&ecpdbl))
             {
@@ -316,13 +319,13 @@
 #endif
         if (!strncmp(line,  BIGscalar1line, strlen(BIGscalar1line)))
         {
-            len = strlen(BIGscalar1line);
+            len = (int)strlen(BIGscalar1line);
             linePtr = line + len;
             read_BIG_XXX(BIGscalar1,linePtr);
         }
         if (!strncmp(line,  ECPmulline, strlen(ECPmulline)))
         {
-            len = strlen(ECPmulline);
+            len = (int)strlen(ECPmulline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpmul,linePtr))
             {
@@ -346,7 +349,7 @@
 #if CURVETYPE_ZZZ!=MONTGOMERY
         if (!strncmp(line,  ECPpinmulline, strlen(ECPpinmulline)))
         {
-            len = strlen(ECPpinmulline);
+            len = (int)strlen(ECPpinmulline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecppinmul,linePtr))
             {
@@ -364,13 +367,13 @@
         }
         if (!strncmp(line,  BIGscalar2line, strlen(BIGscalar2line)))
         {
-            len = strlen(BIGscalar2line);
+            len = (int)strlen(BIGscalar2line);
             linePtr = line + len;
             read_BIG_XXX(BIGscalar2,linePtr);
         }
         if (!strncmp(line,  ECPmul2line, strlen(ECPmul2line)))
         {
-            len = strlen(ECPmul2line);
+            len = (int)strlen(ECPmul2line);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpmul2,linePtr))
             {
@@ -390,7 +393,7 @@
 #endif
         if (!strncmp(line,  ECPwrongline, strlen(ECPwrongline)))
         {
-            len = strlen(ECPwrongline);
+            len = (int)strlen(ECPwrongline);
             linePtr = line + len;
             if(read_ECP_ZZZ(&ecpwrong,linePtr) || !ECP_ZZZ_isinf(&ecpwrong) || !ECP_ZZZ_equals(&ecpwrong,&inf))
             {
@@ -401,7 +404,7 @@
         }
         if (!strncmp(line,  ECPinfline, strlen(ECPinfline)))
         {
-            len = strlen(ECPinfline);
+            len = (int)strlen(ECPinfline);
             linePtr = line + len;
             if(read_ECP_ZZZ(&ecpinf,linePtr) || !ECP_ZZZ_isinf(&ecpinf) || !ECP_ZZZ_equals(&ecpinf,&inf))
             {
@@ -413,7 +416,7 @@
 #if CURVETYPE_ZZZ!=MONTGOMERY
         if (!strncmp(line,  ECPevenline, strlen(ECPevenline)))
         {
-            len = strlen(ECPevenline);
+            len = (int)strlen(ECPevenline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpeven,linePtr))
             {
@@ -431,7 +434,7 @@
         }
         if (!strncmp(line,  ECPoddline, strlen(ECPoddline)))
         {
-            len = strlen(ECPoddline);
+            len = (int)strlen(ECPoddline);
             linePtr = line + len;
             if(!read_ECP_ZZZ(&ecpodd,linePtr))
             {
diff --git a/test/test_ff_consistency_WWW.c.in b/test/test_ff_consistency_WWW.c.in
index c407d60..d37fe19 100644
--- a/test/test_ff_consistency_WWW.c.in
+++ b/test/test_ff_consistency_WWW.c.in
@@ -54,8 +54,18 @@
     char oct[FS_WWW];
     octet OCT = {0,FS_WWW,oct};
 
-    BIG_XXX A[HFLEN_WWW], B[HFLEN_WWW], C[HFLEN_WWW], D[HFLEN_WWW];
-    BIG_XXX E[FFLEN_WWW], F[FFLEN_WWW], G[FFLEN_WWW], H[FFLEN_WWW], L[FFLEN_WWW], P[FFLEN_WWW], Q[FFLEN_WWW], N[FFLEN_WWW];
+    BIG_XXX A[HFLEN_WWW];
+    BIG_XXX B[HFLEN_WWW];
+    BIG_XXX C[HFLEN_WWW];
+    BIG_XXX D[HFLEN_WWW];
+    BIG_XXX E[FFLEN_WWW];
+    BIG_XXX F[FFLEN_WWW];
+    BIG_XXX G[FFLEN_WWW];
+    BIG_XXX H[FFLEN_WWW];
+    BIG_XXX L[FFLEN_WWW];
+    BIG_XXX P[FFLEN_WWW];
+    BIG_XXX Q[FFLEN_WWW];
+    BIG_XXX N[FFLEN_WWW];
 
     /* Fake random source */
     RAND_clean(&RNG);
diff --git a/test/test_gcm_decrypt.c b/test/test_gcm_decrypt.c
index 8b5e4d3..df8de47 100644
--- a/test/test_gcm_decrypt.c
+++ b/test/test_gcm_decrypt.c
@@ -49,7 +49,7 @@
 
     FILE * fp = NULL;
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
     int l1=0;
 
     char * Key = NULL;
@@ -106,7 +106,7 @@
             linePtr = line + strlen(KeyStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             KeyLen = l1/2;
             Key = (char*) malloc (KeyLen);
             if (Key==NULL)
@@ -125,7 +125,7 @@
             linePtr = line + strlen(IVStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             IVLen = l1/2;
             IV = (char*) malloc (IVLen);
             if (IV==NULL)
@@ -144,7 +144,7 @@
             linePtr = line + strlen(CTStr);
 
             // Allocate memory
-            l1 = strlen(linePtr);
+            l1 = (int)strlen(linePtr);
             CTLen = l1/2;
             CT = (char*) malloc (CTLen);
             if (CT==NULL)
@@ -167,7 +167,7 @@
             linePtr = line + strlen(AADStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             AADLen = l1/2;
             AAD = (char*) malloc (AADLen);
             if (AAD==NULL)
@@ -186,7 +186,7 @@
             linePtr = line + strlen(TagStr);
 
             // Allocate memory
-            l1 = strlen(linePtr);
+            l1 = (int)strlen(linePtr);
             TagLen = l1/2;
             Tag1 = (char*) malloc (TagLen);
             if (Tag1==NULL)
@@ -212,9 +212,10 @@
                 linePtr = line + strlen(PTStr);
 
                 // Allocate memory
-                l1 = strlen(linePtr)-1;
-                PT1 = (char*) malloc (CTLen);
-                if (PT1==NULL)
+                l1 = (int)strlen(linePtr)-1;
+                if (CTLen >0)
+                    PT1 = (char*) malloc (CTLen);
+                if (PT1==NULL && CTLen>0)
                     exit(EXIT_FAILURE);
 
                 // Golden PT value
diff --git a/test/test_gcm_encrypt.c b/test/test_gcm_encrypt.c
index af0c454..991d664 100644
--- a/test/test_gcm_encrypt.c
+++ b/test/test_gcm_encrypt.c
@@ -49,7 +49,7 @@
 
     FILE * fp = NULL;
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
     int l1=0;
 
     char * Key = NULL;
@@ -105,7 +105,7 @@
             linePtr = line + strlen(KeyStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             KeyLen = l1/2;
             Key = (char*) malloc (KeyLen);
             if (Key==NULL)
@@ -124,7 +124,7 @@
             linePtr = line + strlen(IVStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             IVLen = l1/2;
             IV = (char*) malloc (IVLen);
             if (IV==NULL)
@@ -143,7 +143,7 @@
             linePtr = line + strlen(PTStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             PTLen = l1/2;
             PT = (char*) malloc (PTLen);
             if (PT==NULL)
@@ -162,7 +162,7 @@
             linePtr = line + strlen(AADStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            l1 = (int)strlen(linePtr)-1;
             AADLen = l1/2;
             AAD = (char*) malloc (AADLen);
             if (AAD==NULL)
@@ -181,7 +181,7 @@
             linePtr = line + strlen(CTStr);
 
             // Allocate memory
-            l1 = strlen(linePtr);
+            l1 = (int)strlen(linePtr);
             CTLen = l1/2;
             CT1 = (char*) malloc (CTLen);
             if (CT1==NULL)
@@ -207,7 +207,7 @@
             linePtr = line + strlen(TagStr);
 
             // Allocate memory
-            l1 = strlen(linePtr);
+            l1 = (int)strlen(linePtr);
             TagLen = l1/2;
             Tag1 = (char*) malloc (TagLen);
             if (Tag1==NULL)
diff --git a/test/test_hash.c b/test/test_hash.c
index 1e71bc5..2aae4da 100644
--- a/test/test_hash.c
+++ b/test/test_hash.c
@@ -50,7 +50,7 @@
     int i=0;
     FILE * fp = NULL;
     char line[LINE_LEN];
-    char * linePtr = NULL;
+    const char * linePtr = NULL;
     int l1=0;
     char * Msg = NULL;
     int MsgLen = 0;
@@ -90,7 +90,7 @@
     bool readLine = false;
 
     int lineNo=0;
-    while ( (fgets(line, LINE_LEN, fp) != NULL))
+    while (fgets(line, LINE_LEN, fp) != NULL)
     {
         readLine = true;
         if (!strncmp(line, MsgStr, strlen(MsgStr)))
@@ -102,7 +102,10 @@
             linePtr = line + strlen(MsgStr);
 
             // Allocate memory
-            l1 = strlen(linePtr)-1;
+            free(Msg);
+            Msg = NULL;
+
+            l1 = (int)strlen(linePtr)-1;
             MsgLen = l1/2;
             Msg = (char*) malloc(MsgLen);
             if (Msg==NULL)
@@ -121,9 +124,14 @@
             linePtr = line + strlen(MDStr);
 
             // Allocate memory
-            l1 = strlen(linePtr);
+            l1 = (int)strlen(linePtr);
 
             // Allocate memory for digest
+            free(MD1);
+            MD1 = NULL;
+            free(MD);
+            MD = NULL;
+
             MDLen = l1/2;
             MD = (char*) malloc(MDLen);
             if (MD==NULL)
@@ -164,15 +172,15 @@
                 printf("TEST HASH FAILED COMPARE MD LINE %d\n",lineNo);
                 exit(EXIT_FAILURE);
             }
-            free(Msg);
-            Msg = NULL;
-            free(MD1);
-            MD1 = NULL;
-            free(MD);
-            MD = NULL;
         }
         lineNo++;
     }
+    free(Msg);
+    Msg = NULL;
+    free(MD1);
+    MD1 = NULL;
+    free(MD);
+    MD = NULL;
     fclose(fp);
     if (!readLine)
     {
diff --git a/test/test_hkdf.c b/test/test_hkdf.c
new file mode 100644
index 0000000..69d5b34
--- /dev/null
+++ b/test/test_hkdf.c
@@ -0,0 +1,217 @@
+/*
+    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.
+*/
+/**
+ * @file    test_hmac.c
+ * 
+ * @author  Alexandre Adomnicai <alexandre.adomnicai@qredo.com>
+ * 
+ * @brief   Tests for HMAC-SHA256 algorithm.
+ *
+ */
+
+#include "arch.h"
+#include "amcl.h"
+#include "utils.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define LINE_LEN 500
+//#define DEBUG
+
+int main(int argc, char** argv)
+{
+    if (argc != 2)
+    {
+        printf("usage: ./test_hkdf [path to test vector file]\n");
+        exit(EXIT_FAILURE);
+    }
+
+    // Variables for file parsing
+    FILE *fp = NULL;
+    char line[LINE_LEN];
+    const char *linePtr = NULL;
+    int l1 = 0;
+    bool readLine = false;
+    int lineNo = 0;
+    const char *IKMStr  = "IKM = ";
+    const char *SaltStr = "salt = ";
+    const char *InfoStr = "info = ";
+    const char *PRKStr  = "PRK = ";
+    const char *OKMStr  = "OKM = ";
+    char *IKM   = NULL;
+    char *Salt  = NULL;
+    char *Info  = NULL;
+    char *PRK   = NULL;
+    char *OKM   = NULL;
+    char *OutPRK = NULL;
+    char *OutOKM = NULL;
+    int IKMLen  = 0;
+    int SaltLen = 0;
+    int InfoLen = 0;
+    int PRKLen  = 0;
+    int OKMLen  = 0;
+    int ret     = 0;
+    int cmp     = 0;
+
+    // Open file
+    fp = fopen(argv[1], "r");
+    if (fp == NULL) {
+        printf("ERROR opening test vector file\n");
+        exit(EXIT_FAILURE);
+    }
+
+    while (fgets(line, LINE_LEN, fp) != NULL) {
+        readLine = true;
+        // Read the authentication key
+        if (!strncmp(line, IKMStr, strlen(IKMStr))) {
+            // Find hex value in string
+            linePtr = line + strlen(IKMStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 1;
+            IKMLen  = l1 / 2;
+            IKM     = (char*) malloc(IKMLen);
+            if (IKM == NULL)
+                exit(EXIT_FAILURE);
+            // Key binary value
+            amcl_hex2bin(linePtr, IKM, l1);
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+            printf("IKMLen = %d\n", IKMLen);
+#endif
+        }
+
+        // Read the message to authenticate
+        if (!strncmp(line, SaltStr, strlen(SaltStr))) {
+            // Find hex value in string
+            linePtr = line + strlen(SaltStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 1;
+            SaltLen = l1 / 2;
+            Salt    = (char*) malloc(SaltLen);
+            if (Salt == NULL)
+                exit(EXIT_FAILURE);
+            // Msg binary value
+            amcl_hex2bin(linePtr, Salt, l1);
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+            printf("SaltLen = %d\n", SaltLen);
+#endif
+        }
+
+        // Read the message to authenticate
+        if (!strncmp(line, InfoStr, strlen(InfoStr))) {
+            // Find hex value in string
+            linePtr = line + strlen(InfoStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 1;
+            InfoLen = l1 / 2;
+            Info    = (char*) malloc(InfoLen);
+            if (Info == NULL)
+                exit(EXIT_FAILURE);
+            // Msg binary value
+            amcl_hex2bin(linePtr, Info, l1);
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+            printf("InfoLen = %d\n", InfoLen);
+#endif
+        }
+
+        // Read the message to authenticate
+        if (!strncmp(line, PRKStr, strlen(PRKStr))) {
+            // Find hex value in string
+            linePtr = line + strlen(PRKStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 1;
+            PRKLen  = l1 / 2;
+            PRK     = (char*) malloc(PRKLen);
+            OutPRK  = (char*) malloc(PRKLen);
+            if (PRK == NULL || OutPRK == NULL)
+                exit(EXIT_FAILURE);
+            // Msg binary value
+            amcl_hex2bin(linePtr, PRK, l1);
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+            printf("PRKLen = %d\n", PRKLen);
+#endif
+        }
+
+        // Read the message authentication code
+        if (!strncmp(line, OKMStr, strlen(OKMStr))) {
+            // Find hex value in string
+            linePtr = line + strlen(OKMStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 1;
+            OKMLen  = l1 / 2;
+            OKM     = (char*) malloc(OKMLen);
+            OutOKM  = (char*) malloc(OKMLen);
+            if (OKM == NULL || OutOKM == NULL)
+                exit(EXIT_FAILURE);
+            octet PRKOct = {PRKLen, PRKLen, PRK};
+            octet OKMOct = {OKMLen, OKMLen, OKM};
+            // Mac binary value
+            amcl_hex2bin(linePtr, OKM, l1);
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+            printf("OKMLen = %d\n", OKMLen);
+#endif
+
+            // Recompute the HKDF-extract output
+            ret = HKDF_SHA256_extract(OutPRK, Salt, SaltLen, IKM, IKMLen);
+            // Check that it matches the expected value
+            octet OutPRKOct = {PRKLen, PRKLen, OutPRK};
+            cmp = OCT_comp(&PRKOct, &OutPRKOct);
+            if (!cmp || ret) {
+                printf("TEST HKDF_SHA256_extract FAILED COMPARE MAC LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            // Recompute the HKDF-expand output
+            ret = HKDF_SHA256_expand(OutOKM, OKMLen, OutPRK, PRKLen, Info, InfoLen);
+            // Check that it matches the expected value
+            octet OutOKMOct = {OKMLen, OKMLen, OutOKM};
+            cmp = OCT_comp(&OKMOct, &OutOKMOct);
+            if (!cmp || ret) {
+                printf("TEST HKDF_SHA256_expand FAILED COMPARE MAC LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            free(IKM);
+            free(Salt);
+            free(Info);
+            free(PRK);
+            free(OKM);
+            free(OutPRK);
+            free(OutOKM);
+            IKM = NULL;
+            Salt = NULL;
+            Info = NULL;
+            PRK = NULL;
+            OKM = NULL;
+            OutPRK = NULL;
+            OutOKM = NULL;
+        }
+        lineNo++;
+    }
+    fclose(fp);
+    if (!readLine) {
+        printf("ERROR No test vectors\n");
+        exit(EXIT_FAILURE);
+    }
+    printf("SUCCESS TEST HKDF-SHA256 PASSED\n");
+    exit(EXIT_SUCCESS);
+}
diff --git a/test/test_hmac.c b/test/test_hmac.c
new file mode 100644
index 0000000..e81c8bb
--- /dev/null
+++ b/test/test_hmac.c
@@ -0,0 +1,168 @@
+/*
+    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.
+*/
+/**
+ * @file    test_hmac.c
+ * 
+ * @author  Alexandre Adomnicai <alexandre.adomnicai@qredo.com>
+ * 
+ * @brief   Tests for HMAC-SHA256 algorithm.
+ *
+ */
+
+#include "arch.h"
+#include "amcl.h"
+#include "utils.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define LINE_LEN 500
+//#define DEBUG
+
+int main(int argc, char** argv)
+{
+    if (argc != 2)
+    {
+        printf("usage: ./test_hmac [path to test vector file]\n");
+        exit(EXIT_FAILURE);
+    }
+
+    // For tests related to the incremental API
+    hmac_sha256 ctx;
+
+    // Variables for file parsing
+    FILE *fp = NULL;
+    char line[LINE_LEN];
+    const char *linePtr = NULL;
+    int l1 = 0;
+    bool readLine = false;
+    int lineNo = 0;
+    const char *KeyStr = "Key = ";
+    const char *MsgStr = "Msg = ";
+    const char *MacStr = "Mac = ";
+    char *Key = NULL;
+    char *Msg = NULL;
+    char *Mac = NULL;
+    char *Out = NULL;
+    int KeyLen = 0;
+    int MsgLen = 0;
+    int MacLen = 0;
+    int ret = 0;
+    int cmp = 0;
+
+    // Open file
+    fp = fopen(argv[1], "r");
+    if (fp == NULL) {
+        printf("ERROR opening test vector file\n");
+        exit(EXIT_FAILURE);
+    }
+
+    while (fgets(line, LINE_LEN, fp) != NULL) {
+        readLine = true;
+        // Read the authentication key
+        if (!strncmp(line, KeyStr, strlen(KeyStr))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(KeyStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 2;
+            KeyLen  = l1 / 2;
+            Key     = (char*) malloc(KeyLen);
+            if (Key == NULL)
+                exit(EXIT_FAILURE);
+            // Key binary value
+            amcl_hex2bin(linePtr, Key, l1);
+            ret |= HMAC_SHA256_init(&ctx, Key, KeyLen);
+        }
+
+        // Read the message to authenticate
+        if (!strncmp(line, MsgStr, strlen(MsgStr))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(MsgStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 2;
+            MsgLen  = l1 / 2;
+            Msg     = (char*) malloc(MsgLen);
+            if (Msg == NULL)
+                exit(EXIT_FAILURE);
+            // Msg binary value
+            amcl_hex2bin(linePtr, Msg, l1);
+            ret |= HMAC_SHA256_update(&(ctx.sha256_ctx), Msg, MsgLen);
+        }
+
+        // Read the message authentication code
+        if (!strncmp(line, MacStr, strlen(MacStr))) {
+#ifdef DEBUG
+            printf("line %d %s\n", lineNo,line);
+#endif
+            // Find hex value in string
+            linePtr = line + strlen(MacStr);
+            // Allocate memory
+            l1      = (int)strlen(linePtr) - 2;
+            MacLen  = l1 / 2;
+            Mac     = (char*) malloc(MacLen);
+            Out     = (char*) malloc(MacLen);
+            if (Mac == NULL || Out == NULL)
+                exit(EXIT_FAILURE);
+            octet MacOct = {MacLen, MacLen, Mac};
+            // Mac binary value
+            amcl_hex2bin(linePtr, Mac, l1);
+
+            // Recompute the HMAC value (incremental API)
+            ret |= HMAC_SHA256_final(&ctx, Out, MacLen);
+            octet OutOct_incr = {MacLen, MacLen, Out};
+            cmp = OCT_comp(&MacOct, &OutOct_incr);
+            if (!cmp || ret) {
+                printf("TEST HMAC_INCR FAILED COMPARE MAC LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+
+            // Recompute the HMAC value (one-shot API)
+            ret = HMAC_SHA256_oneshot(Out, MacLen, Key, KeyLen, Msg, MsgLen);
+            // Check that it matches the expected value
+            octet OutOct_oneshot = {MacLen, MacLen, Out};
+            cmp = OCT_comp(&MacOct, &OutOct_oneshot);
+            if (!cmp || ret) {
+                printf("TEST HMAC_ONESHOT FAILED COMPARE MAC LINE %d\n",lineNo);
+                exit(EXIT_FAILURE);
+            }
+            free(Key);
+            free(Msg);
+            free(Mac);
+            free(Out);
+            Key = NULL;
+            Msg = NULL;
+            Mac = NULL;
+            Out = NULL;
+        }
+        lineNo++;
+    }
+    fclose(fp);
+    if (!readLine) {
+        printf("ERROR No test vectors\n");
+        exit(EXIT_FAILURE);
+    }
+    printf("SUCCESS TEST HMAC-SHA256 PASSED\n");
+    exit(EXIT_SUCCESS);
+}
diff --git a/test/test_mpin_ZZZ.c.in b/test/test_mpin_ZZZ.c.in
index 3a077f7..0c1f1ad 100644
--- a/test/test_mpin_ZZZ.c.in
+++ b/test/test_mpin_ZZZ.c.in
@@ -51,18 +51,23 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y1[PGS_ZZZ],y2[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y1[PGS_ZZZ];
+    char y2[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y1= {0,sizeof(y1),y1};
     octet Y2= {0,sizeof(y2),y2};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -71,19 +76,25 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -95,11 +106,13 @@
     char ut[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
@@ -120,7 +133,7 @@
 
     /* non random seed value! */
     SEED.len=32;
-    for (i=0; i<32; i++) SEED.val[i]=i+1;
+    for (int i=0; i<32; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_mpin_bad_pin_ZZZ.c.in b/test/test_mpin_bad_pin_ZZZ.c.in
index 92ad46e..8467fb3 100644
--- a/test/test_mpin_bad_pin_ZZZ.c.in
+++ b/test/test_mpin_bad_pin_ZZZ.c.in
@@ -51,17 +51,22 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn,err;
+    int PIN1;
+    int PIN2;
+    int rtn;
+    int err;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {sizeof(x), sizeof(x),x};
     octet Y= {sizeof(y),sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {sizeof(ms1),sizeof(ms1),ms1};
     octet MS2= {sizeof(ms2),sizeof(ms2),ms2};
 
@@ -70,19 +75,25 @@
     octet HCID= {sizeof(hcid),sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -91,15 +102,18 @@
     char token[2*PFS_ZZZ+1];
     octet TOKEN= {0,sizeof(token),token};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
     octet U= {0,sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
@@ -118,7 +132,7 @@
 
     /* non random seed value */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (int i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_mpin_bad_token_ZZZ.c.in b/test/test_mpin_bad_token_ZZZ.c.in
index bae1416..5bbce5f 100644
--- a/test/test_mpin_bad_token_ZZZ.c.in
+++ b/test/test_mpin_bad_token_ZZZ.c.in
@@ -51,17 +51,22 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn,err;
+    int PIN1;
+    int PIN2;
+    int rtn;
+    int err;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y= {0,sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -70,19 +75,25 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -91,15 +102,18 @@
     char token[2*PFS_ZZZ+1];
     octet TOKEN= {0,sizeof(token),token};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
     octet U= {0,sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
@@ -118,7 +132,7 @@
 
     /* non random seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (int i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_mpin_dvs_ZZZ.c.in b/test/test_mpin_dvs_ZZZ.c.in
index c1d00b3..f22666b 100644
--- a/test/test_mpin_dvs_ZZZ.c.in
+++ b/test/test_mpin_dvs_ZZZ.c.in
@@ -51,7 +51,9 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256+G2LEN];
     octet ID = {0,sizeof(id),id};
@@ -64,13 +66,16 @@
     char hm[PFS_ZZZ];
     octet HM= {0,sizeof(hm), hm};
 
-    char x[PGS_ZZZ],y1[PGS_ZZZ],y2[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y1[PGS_ZZZ];
+    char y2[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y1= {0,sizeof(y1),y1};
     octet Y2= {0,sizeof(y2),y2};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -79,18 +84,23 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Client Public Key and z */
-    char z[PGS_ZZZ], pa[G2LEN];
+    char z[PGS_ZZZ];
+    char pa[G2LEN];
     octet Z= {0,sizeof(z),z};
     octet Pa= {0,sizeof(pa),pa};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
@@ -121,7 +131,7 @@
 
     /* non random seed value */
     SEED.len=32;
-    for (i=0; i<32; i++) SEED.val[i]=i+1;
+    for (int i=0; i<32; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
@@ -244,7 +254,7 @@
     /* Client: Sign message */
     TimeValue = GET_TIME();
     printf("TimeValue %d \n", TimeValue);
-    char* message = "sign this message";
+    const char* message = "sign this message";
     OCT_jstring(&M,message);
     HASH_ID(HASH_TYPE_ZZZ,&M,&HM);
     printf("HM: 0x");
diff --git a/test/test_mpin_dvs_wrong_pk_ZZZ.c.in b/test/test_mpin_dvs_wrong_pk_ZZZ.c.in
index 83193ce..73f2eff 100644
--- a/test/test_mpin_dvs_wrong_pk_ZZZ.c.in
+++ b/test/test_mpin_dvs_wrong_pk_ZZZ.c.in
@@ -51,7 +51,9 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256+G2LEN];
     octet ID = {0,sizeof(id),id};
@@ -64,13 +66,16 @@
     char hm[PFS_ZZZ];
     octet HM= {0,sizeof(hm), hm};
 
-    char x[PGS_ZZZ],y1[PGS_ZZZ],y2[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y1[PGS_ZZZ];
+    char y2[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y1= {0,sizeof(y1),y1};
     octet Y2= {0,sizeof(y2),y2};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -79,20 +84,27 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Client Public Key and z */
-    char z1[PGS_ZZZ], z2[PGS_ZZZ], pa1[G2LEN], pa2[G2LEN];
+    char z1[PGS_ZZZ];
+    char z2[PGS_ZZZ];
+    char pa1[G2LEN];
+    char pa2[G2LEN];
     octet Z1= {0,sizeof(z1),z1};
     octet Z2= {0,sizeof(z2),z2};
     octet Pa1= {0,sizeof(pa1),pa1};
     octet Pa2= {0,sizeof(pa2),pa2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
@@ -123,7 +135,7 @@
 
     /* non random seed value! */
     SEED.len=32;
-    for (i=0; i<32; i++) SEED.val[i]=i+1;
+    for (int i=0; i<32; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
@@ -257,7 +269,7 @@
     /* Client: Sign message */
     TimeValue = GET_TIME();
     printf("TimeValue %d \n", TimeValue);
-    char* message = "sign this message";
+    const char* message = "sign this message";
     OCT_jstring(&M,message);
     HASH_ID(HASH_TYPE_ZZZ,&M,&HM);
     printf("HM: 0x");
diff --git a/test/test_mpin_expired_tp_ZZZ.c.in b/test/test_mpin_expired_tp_ZZZ.c.in
index d7aaa0d..600b3e1 100644
--- a/test/test_mpin_expired_tp_ZZZ.c.in
+++ b/test/test_mpin_expired_tp_ZZZ.c.in
@@ -51,17 +51,22 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn,err;
+    int PIN1;
+    int PIN2;
+    int rtn;
+    int err;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {0,sizeof(x),x};
     octet Y= {0,sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -70,19 +75,25 @@
     octet HCID= {sizeof(hcid),sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -91,15 +102,18 @@
     char token[2*PFS_ZZZ+1];
     octet TOKEN= {0,sizeof(token),token};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
     octet U= {0,sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
@@ -118,7 +132,7 @@
 
     /* unrandom seed value! */
     SEED.len = 100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (int i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_mpin_good_ZZZ.c.in b/test/test_mpin_good_ZZZ.c.in
index aa828d5..6e8e6fe 100644
--- a/test/test_mpin_good_ZZZ.c.in
+++ b/test/test_mpin_good_ZZZ.c.in
@@ -51,17 +51,22 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn,err;
+    int PIN1;
+    int PIN2;
+    int rtn;
+    int err;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y= {0,sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -70,19 +75,25 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -91,15 +102,18 @@
     char token[2*PFS_ZZZ+1];
     octet TOKEN= {0,sizeof(token),token};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
     octet U= {0,sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
@@ -118,7 +132,7 @@
 
     /* unrandom seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (int i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_mpin_random_ZZZ.c.in b/test/test_mpin_random_ZZZ.c.in
index ff6b2d5..6a5ee6f 100644
--- a/test/test_mpin_random_ZZZ.c.in
+++ b/test/test_mpin_random_ZZZ.c.in
@@ -69,14 +69,19 @@
 
 int main()
 {
-    int PIN1,PIN2,rtn,err,iter;
+    int PIN1;
+    int PIN2;
+    int rtn;
+    int err;
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y= {0,sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -85,19 +90,25 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -106,21 +117,24 @@
     char token[2*PFS_ZZZ+1];
     octet TOKEN= {0,sizeof(token),token};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
     octet U= {0,sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
     int date = 0;
 
-    int byte_count = 32;
+    size_t byte_count = 32;
     char seed[32] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
     csprng RNG;
@@ -128,8 +142,14 @@
 #ifdef __linux__
     FILE *fp;
     fp = fopen("/dev/urandom", "r");
-    if (fread(&seed, 1, byte_count, fp)) {};
-    fclose(fp);
+    if (fp != NULL){
+        if(fread(&seed, 1, byte_count, fp)!=byte_count) {
+            printf("MPIN_ZZZ_RANDOM_GENERATE(&RNG,&MS1) Error unable to read %ld bytes\n", byte_count);
+            fclose(fp);
+            return 1;
+        }
+        fclose(fp);
+    }
 #else
     /* non random seed value! */
     int i;
@@ -147,7 +167,7 @@
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
 
-    for(iter=1; iter<nRandomTests+1; iter++)
+    for(int iter=1; iter<nRandomTests+1; iter++)
     {
         /* Generate Client master secret for MILAGRO and Customer */
         rtn = MPIN_ZZZ_RANDOM_GENERATE(&RNG,&MS1);
@@ -198,7 +218,6 @@
         /* Assign the End-User an ID */
         char id[256];
         octet ID = {0,sizeof(id),id};
-        //rand_str(id,255,&RNG);
         OCT_jstring(&ID,"alice@milagro.com");
         printf("CLIENT_ID = ");
         OCT_output(&ID);
@@ -207,7 +226,7 @@
         HASH_ID(HASH_TYPE_ZZZ,&ID,&HCID);
         OCT_output(&HCID);
 
-        srand ( time (NULL) );
+        srand ( (unsigned int)time (NULL) );
         PIN1 = rand()%MAX_RANGE; // Get random between 0 and MAX_RANGE
         PIN2 = PIN1;
         printf("PIN1 %d PIN2 %d\n", PIN1, PIN2);
diff --git a/test/test_mpin_sign_ZZZ.c.in b/test/test_mpin_sign_ZZZ.c.in
index 7e97ea7..cd8e0df 100644
--- a/test/test_mpin_sign_ZZZ.c.in
+++ b/test/test_mpin_sign_ZZZ.c.in
@@ -51,7 +51,9 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
@@ -60,13 +62,16 @@
     char m[256];
     octet M= {0,sizeof(m),m};
 
-    char x[PGS_ZZZ],y1[PGS_ZZZ],y2[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y1[PGS_ZZZ];
+    char y2[PGS_ZZZ];
     octet X= {0,sizeof(x),x};
     octet Y1= {0,sizeof(y1),y1};
     octet Y2= {0,sizeof(y2),y2};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -75,19 +80,25 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -99,11 +110,13 @@
     char ut[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
@@ -124,7 +137,7 @@
 
     /* unrandom seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (int i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
@@ -255,7 +268,7 @@
     printf("***** Fixed good signature *****\n");
 
     /* Client  */
-    char* message = "sign this message";
+    const char* message = "sign this message";
     OCT_jstring(&M,message);
     rtn = MPIN_ZZZ_CLIENT(HASH_TYPE_ZZZ,date,&ID,&RNG,&X,PIN2,&TOKEN,&SEC,NULL,&UT,&TP,&M,TimeValue,&Y1);
     if (rtn != 0)
@@ -395,7 +408,7 @@
 
     /* Good signature */
     printf("***** Good signature *****\n");
-    ;
+
     /* Client  */
     message = "sign this message";
     OCT_jstring(&M,message);
diff --git a/test/test_mpin_tp_ZZZ.c.in b/test/test_mpin_tp_ZZZ.c.in
index fa73c12..bc0c9d8 100644
--- a/test/test_mpin_tp_ZZZ.c.in
+++ b/test/test_mpin_tp_ZZZ.c.in
@@ -54,17 +54,22 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn,err,iter;
+    int PIN1;
+    int PIN2;
+    int rtn;
+    int err;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y= {0,sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -73,19 +78,25 @@
     octet HCID= {0,sizeof(hcid), hcid};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -94,15 +105,18 @@
     char token[2*PFS_ZZZ+1];
     octet TOKEN= {0,sizeof(token),token};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
     octet U= {0,sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
@@ -121,7 +135,7 @@
 
     /* unrandom seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (int i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
@@ -216,7 +230,7 @@
 
     /* Generate Time Permit shares */
     date = today();
-    for(iter=1; iter<nTimePermitTests+1; iter++)
+    for(int iter=1; iter<nTimePermitTests+1; iter++)
     {
         printf("Date %d \n", date);
         rtn = MPIN_ZZZ_GET_CLIENT_PERMIT(HASH_TYPE_ZZZ,date,&MS1,&HCID,&TP1);
@@ -284,15 +298,10 @@
         {
             err=MPIN_ZZZ_KANGAROO(&E,&F);
             if (err==0)
-            {
                 printf("Iteration %d FAILURE Invalid Token Error Code %d\n", iter, rtn);
-                break;
-            }
             else
-            {
                 printf("Iteration %d FAILURE PIN Error %d, Error Code %d\n", iter, err, rtn);
-                break;
-            }
+            break;
         }
         else
         {
diff --git a/test/test_mpin_vectors_ZZZ.c.in b/test/test_mpin_vectors_ZZZ.c.in
index 9e5149f..e1887a8 100644
--- a/test/test_mpin_vectors_ZZZ.c.in
+++ b/test/test_mpin_vectors_ZZZ.c.in
@@ -45,9 +45,9 @@
 
 void read_OCTET(octet* OCT, char* string)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char buff[len];
-    strncpy(buff,string,len);
+    memcpy(buff,string,len);
     char *end = strchr(buff,',');
     if (end == NULL)
     {
@@ -79,7 +79,7 @@
     int date = 0;
 
     const char* TESTline = "TEST = ";
-    int testNo;
+    int testNo = -1;
     const char* CURVEline = "CURVE = ";
 
     // Master Secret
@@ -183,7 +183,11 @@
     octet HpId= {0,sizeof(hpid),hpid};
 
     // Unused parameters
-    octet *pUT=NULL,*pHTID=NULL,*pPERMIT=NULL,*pE=NULL,*pF=NULL;
+    octet *pUT=NULL;
+    octet *pHTID=NULL;
+    const octet *pPERMIT=NULL;
+    octet *pE=NULL;
+    octet *pF=NULL;
     csprng* RNG=NULL;
 
     fp = fopen(argv[1], "r");
@@ -198,7 +202,7 @@
         // Read TEST Number
         if (!strncmp(line,TESTline, strlen(TESTline)))
         {
-            len = strlen(TESTline);
+            len = (int)strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
 #ifdef DEBUG
@@ -208,16 +212,16 @@
         // Read Curve
         if (!strncmp(line,CURVEline, strlen(CURVEline)))
         {
-            len = strlen(CURVEline);
-            linePtr = line + len;
 #ifdef DEBUG
+            len = (int)strlen(CURVEline);
+            linePtr = line + len;
             printf("CURVE = %s",linePtr);
 #endif
         }
         // Read MS1
         if (!strncmp(line,MS1line, strlen(MS1line)))
         {
-            len = strlen(MS1line);
+            len = (int)strlen(MS1line);
             linePtr = line + len;
             read_OCTET(&MS1Golden,linePtr);
 #ifdef DEBUG
@@ -228,7 +232,7 @@
         // Read MS2
         if (!strncmp(line,MS2line, strlen(MS2line)))
         {
-            len = strlen(MS2line);
+            len = (int)strlen(MS2line);
             linePtr = line + len;
             read_OCTET(&MS2Golden,linePtr);
 #ifdef DEBUG
@@ -239,7 +243,7 @@
         // Read SS1
         if (!strncmp(line,SS1line, strlen(SS1line)))
         {
-            len = strlen(SS1line);
+            len = (int)strlen(SS1line);
             linePtr = line + len;
             read_OCTET(&SS1Golden,linePtr);
 #ifdef DEBUG
@@ -250,7 +254,7 @@
         // Read SS2
         if (!strncmp(line,SS2line, strlen(SS2line)))
         {
-            len = strlen(SS2line);
+            len = (int)strlen(SS2line);
             linePtr = line + len;
             read_OCTET(&SS2Golden,linePtr);
 #ifdef DEBUG
@@ -261,7 +265,7 @@
         // Read SS
         if (!strncmp(line,SSline, strlen(SSline)))
         {
-            len = strlen(SSline);
+            len = (int)strlen(SSline);
             linePtr = line + len;
             read_OCTET(&SSGolden,linePtr);
 #ifdef DEBUG
@@ -272,7 +276,7 @@
         // Read MPINId
         if (!strncmp(line,MPINIdline, strlen(MPINIdline)))
         {
-            len = strlen(MPINIdline);
+            len = (int)strlen(MPINIdline);
             linePtr = line + len;
             read_OCTET(&MPINIdGolden,linePtr);
 #ifdef DEBUG
@@ -283,7 +287,7 @@
         // Read PIN1
         if (!strncmp(line,PIN1line, strlen(PIN1line)))
         {
-            len = strlen(PIN1line);
+            len = (int)strlen(PIN1line);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&PIN1);
 #ifdef DEBUG
@@ -293,7 +297,7 @@
         // Read PIN2
         if (!strncmp(line,PIN2line, strlen(PIN2line)))
         {
-            len = strlen(PIN2line);
+            len = (int)strlen(PIN2line);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&PIN2);
 #ifdef DEBUG
@@ -303,7 +307,7 @@
         // Read CS1
         if (!strncmp(line,CS1line, strlen(CS1line)))
         {
-            len = strlen(CS1line);
+            len = (int)strlen(CS1line);
             linePtr = line + len;
             read_OCTET(&CS1Golden,linePtr);
 #ifdef DEBUG
@@ -314,7 +318,7 @@
         // Read CS2
         if (!strncmp(line,CS2line, strlen(CS2line)))
         {
-            len = strlen(CS2line);
+            len = (int)strlen(CS2line);
             linePtr = line + len;
             read_OCTET(&CS2Golden,linePtr);
 #ifdef DEBUG
@@ -325,7 +329,7 @@
         // Read CS
         if (!strncmp(line,CSline, strlen(CSline)))
         {
-            len = strlen(CSline);
+            len = (int)strlen(CSline);
             linePtr = line + len;
             read_OCTET(&CSGolden,linePtr);
 #ifdef DEBUG
@@ -336,7 +340,7 @@
         // Read TOKEN
         if (!strncmp(line,TOKENline, strlen(TOKENline)))
         {
-            len = strlen(TOKENline);
+            len = (int)strlen(TOKENline);
             linePtr = line + len;
             read_OCTET(&TOKENGolden,linePtr);
 #ifdef DEBUG
@@ -347,7 +351,7 @@
         // Read X
         if (!strncmp(line,Xline, strlen(Xline)))
         {
-            len = strlen(Xline);
+            len = (int)strlen(Xline);
             linePtr = line + len;
             read_OCTET(&XGolden,linePtr);
 #ifdef DEBUG
@@ -358,7 +362,7 @@
         // Read U
         if (!strncmp(line,Uline, strlen(Uline)))
         {
-            len = strlen(Uline);
+            len = (int)strlen(Uline);
             linePtr = line + len;
             read_OCTET(&UGolden,linePtr);
 #ifdef DEBUG
@@ -369,7 +373,7 @@
         // Read Y
         if (!strncmp(line,Yline, strlen(Yline)))
         {
-            len = strlen(Yline);
+            len = (int)strlen(Yline);
             linePtr = line + len;
             read_OCTET(&YGolden,linePtr);
 #ifdef DEBUG
@@ -380,7 +384,7 @@
         // Read V
         if (!strncmp(line,Vline, strlen(Vline)))
         {
-            len = strlen(Vline);
+            len = (int)strlen(Vline);
             linePtr = line + len;
             read_OCTET(&VGolden,linePtr);
 #ifdef DEBUG
@@ -391,7 +395,7 @@
         // Read AuthResult
         if (!strncmp(line,AuthResultline, strlen(AuthResultline)))
         {
-            len = strlen(AuthResultline);
+            len = (int)strlen(AuthResultline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&AuthResultGolden);
             applyVector=1;
diff --git a/test/test_mpinfull_ZZZ.c.in b/test/test_mpinfull_ZZZ.c.in
index 8ce3e6e..7861491 100644
--- a/test/test_mpinfull_ZZZ.c.in
+++ b/test/test_mpinfull_ZZZ.c.in
@@ -58,17 +58,22 @@
         exit(EXIT_FAILURE);
     }
 
-    int i,PIN1,PIN2,rtn;
+    int i;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {0,sizeof(x),x};
     octet Y= {0,sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -81,13 +86,17 @@
     octet HM= {0,sizeof(hm), hm};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
@@ -97,7 +106,8 @@
     octet TOKEN= {0,sizeof(token),token};
 
     /* Precomputed values stored on device */
-    char g1[GTLEN],g2[GTLEN];
+    char g1[GTLEN];
+    char g2[GTLEN];
     octet G1= {0,sizeof(g1),g1};
     octet G2= {0,sizeof(g2),g2};
 
@@ -107,13 +117,18 @@
     char hid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
-    char r[PGS_ZZZ],z[2*PFS_ZZZ+1],w[PGS_ZZZ],t[2*PFS_ZZZ+1];
+    char r[PGS_ZZZ];
+    char z[2*PFS_ZZZ+1];
+    char w[PGS_ZZZ];
+    char t[2*PFS_ZZZ+1];
 
-    char ck[AESKEY_ZZZ],sk[AESKEY_ZZZ];
+    char ck[AESKEY_ZZZ];
+    char sk[AESKEY_ZZZ];
     octet R= {0,sizeof(r),r};
     octet Z= {0,sizeof(z),z};
     octet W= {0,sizeof(w),w};
@@ -122,9 +137,19 @@
     octet CK= {0,sizeof(ck),ck};
 
     /* AES-GCM */
-    char raw[256], header[16], ciphertext[32], res[32], plaintext[32], tag[16], iv[16];
-    octet HEADER= {0,0,header}, Ciphertext= {0,sizeof(ciphertext),ciphertext};
-    octet Plaintext= {0,sizeof(plaintext),plaintext}, Res= {0,sizeof(res),res}, Tag= {0,sizeof(tag),tag}, IV= {0,sizeof(iv),iv};
+    char raw[256];
+    char header[16];
+    char ciphertext[32];
+    char res[32];
+    char plaintext[32];
+    char tag[16];
+    char iv[16];
+    octet HEADER= {0,0,header};
+    octet Ciphertext= {0,sizeof(ciphertext),ciphertext};
+    octet Plaintext= {0,sizeof(plaintext),plaintext};
+    octet Res= {0,sizeof(res),res};
+    octet Tag= {0,sizeof(tag),tag};
+    octet IV= {0,sizeof(iv),iv};
     csprng rng;
 
     int hash;
@@ -161,7 +186,7 @@
 
     /* unrandom seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
@@ -310,10 +335,6 @@
     printf("Client Key = ");
     OCT_output(&CK);
 
-    /* Server will use the hashed ID if anonymous connection required.
-    HASH_ID(hash,&ID,&HSID);
-    HASH_ALL(&HSID,&U,NULL,&SEC,&Y,&Z,&T,&HM);
-    */
     MPIN_ZZZ_SERVER_KEY(hash,&Z,&ServerSecret,&W,&HM,&HID,&U,NULL,&SK);
     printf("Server Key = ");
     OCT_output(&SK);
diff --git a/test/test_mpinfull_onepass_ZZZ.c.in b/test/test_mpinfull_onepass_ZZZ.c.in
index ed66f15..5763925 100644
--- a/test/test_mpinfull_onepass_ZZZ.c.in
+++ b/test/test_mpinfull_onepass_ZZZ.c.in
@@ -51,18 +51,23 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y1[PGS_ZZZ],y2[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y1[PGS_ZZZ];
+    char y2[PGS_ZZZ];
     octet X= {0, sizeof(x),x};
     octet Y1= {0,sizeof(y1),y1};
     octet Y2= {0,sizeof(y2),y2};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -75,19 +80,25 @@
     octet HM= {0,sizeof(hm), hm};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -97,23 +108,30 @@
     octet TOKEN= {0,sizeof(token),token};
 
     /* Precomputed values stored on device */
-    char g1[GTLEN],g2[GTLEN];
+    char g1[GTLEN];
+    char g2[GTLEN];
     octet G1= {0,sizeof(g1),g1};
     octet G2= {0,sizeof(g2),g2};
 
     char ut[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
-    char r[PGS_ZZZ],z[2*PFS_ZZZ+1],w[PGS_ZZZ],t[2*PFS_ZZZ+1];
-    char ck[AESKEY_ZZZ],sk[AESKEY_ZZZ];
+    char r[PGS_ZZZ];
+    char z[2*PFS_ZZZ+1];
+    char w[PGS_ZZZ];
+    char t[2*PFS_ZZZ+1];
+    char ck[AESKEY_ZZZ];
+    char sk[AESKEY_ZZZ];
     octet R= {0,sizeof(r),r};
     octet Z= {0,sizeof(z),z};
     octet W= {0,sizeof(w),w};
@@ -138,7 +156,7 @@
 
     /* unrandom seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (int i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_mpinfull_random_ZZZ.c.in b/test/test_mpinfull_random_ZZZ.c.in
index 3d13849..08d5571 100644
--- a/test/test_mpinfull_random_ZZZ.c.in
+++ b/test/test_mpinfull_random_ZZZ.c.in
@@ -70,17 +70,22 @@
 
 int main()
 {
-    int PIN1,PIN2,rtn,err,iter;
+    int PIN1;
+    int PIN2;
+    int rtn;
+    int err;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {sizeof(x), sizeof(x),x};
     octet Y= {sizeof(y),sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {sizeof(ms1),sizeof(ms1),ms1};
     octet MS2= {sizeof(ms2),sizeof(ms2),ms2};
 
@@ -93,19 +98,25 @@
     octet HM= {sizeof(hm),sizeof(hm), hm};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {sizeof(sec),sizeof(sec),sec};
     octet CS1= {sizeof(cs1),sizeof(cs1), cs1};
     octet CS2= {sizeof(cs2),sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {sizeof(serverSecret),sizeof(serverSecret),serverSecret};
     octet SS1= {sizeof(ss1),sizeof(ss1),ss1};
     octet SS2= {sizeof(ss2),sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {sizeof(tp),sizeof(tp),tp};
     octet TP1= {sizeof(tp1),sizeof(tp1),tp1};
     octet TP2= {sizeof(tp2),sizeof(tp2),tp2};
@@ -115,24 +126,32 @@
     octet TOKEN= {sizeof(token),sizeof(token),token};
 
     /* Precomputed values stored on device */
-    char g1[GTLEN],g2[GTLEN];
+    char g1[GTLEN];
+    char g2[GTLEN];
     octet G1= {0,sizeof(g1),g1};
     octet G2= {0,sizeof(g2),g2};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {sizeof(ut),sizeof(ut),ut};
     octet U= {sizeof(u),sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {sizeof(e),sizeof(e),e};
     octet F= {sizeof(f),sizeof(f),f};
 
-    char r[PGS_ZZZ],z[2*PFS_ZZZ+1],w[PGS_ZZZ],t[2*PFS_ZZZ+1];
-    char ck[AESKEY_ZZZ],sk[AESKEY_ZZZ];
+    char r[PGS_ZZZ];
+    char z[2*PFS_ZZZ+1];
+    char w[PGS_ZZZ];
+    char t[2*PFS_ZZZ+1];
+    char ck[AESKEY_ZZZ];
+    char sk[AESKEY_ZZZ];
     octet R= {0,sizeof(r),r};
     octet Z= {0,sizeof(z),z};
     octet W= {0,sizeof(w),w};
@@ -142,15 +161,22 @@
 
     int date = 0;
 
-    int byte_count = 32;
+    size_t byte_count = 32;
     char seed[32] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
     csprng RNG;
 #ifdef __linux__
     FILE *fp;
     fp = fopen("/dev/urandom", "r");
-    if (fread(&seed, 1, byte_count, fp)) {};
-    fclose(fp);
+    if (fp != NULL)
+    {
+        if(fread(&seed, 1, byte_count, fp)!=byte_count) {
+            printf("MPIN_ZZZ_RANDOM_GENERATE(&RNG,&MS1) Error unable to read %ld bytes\n", byte_count);
+            fclose(fp);
+            return 1;
+        }
+        fclose(fp);
+    }
 #else
     /* non random seed value! */
     int i;
@@ -168,7 +194,7 @@
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
 
-    for(iter=1; iter<nRandomTests+1; iter++)
+    for(int iter=1; iter<nRandomTests+1; iter++)
     {
         /* Generate Client master secret for MILAGRO and Customer */
         rtn = MPIN_ZZZ_RANDOM_GENERATE(&RNG,&MS1);
@@ -220,7 +246,7 @@
         rand_str(id,255,&RNG);
         printf("CLIENT: ID %s\n", id);
 
-        srand(time(NULL));
+        srand((unsigned int) time(NULL));
         PIN1 = rand()%MAX_RANGE; // Get random between 0 and MAX_RANGE
         PIN2 = PIN1;
         printf("PIN1 %d PIN2 %d\n", PIN1, PIN2);
@@ -367,10 +393,6 @@
         printf("Client Key = ");
         OCT_output(&CK);
 
-        /* Server will use the hashed ID if anonymous connection required.
-        HASH_ID(HASH_TYPE_ZZZ,&ID,&HSID);
-        HASH_ALL(HASH_TYPE_ZZZ,&HSID,NULL,&UT,&SEC,&Y,&Z,&T,&HM);
-        */
         MPIN_ZZZ_SERVER_KEY(HASH_TYPE_ZZZ,&Z,&ServerSecret,&W,&HM,&HID,NULL,&UT,&SK);
         printf("Server Key = ");
         OCT_output(&SK);
diff --git a/test/test_mpinfull_tp_ZZZ.c.in b/test/test_mpinfull_tp_ZZZ.c.in
index b4d686d..0d7a85c 100644
--- a/test/test_mpinfull_tp_ZZZ.c.in
+++ b/test/test_mpinfull_tp_ZZZ.c.in
@@ -53,17 +53,22 @@
 
 int main()
 {
-    int i,PIN1,PIN2,rtn;
+    int i;
+    int PIN1;
+    int PIN2;
+    int rtn;
 
     char id[256];
     octet ID = {0,sizeof(id),id};
 
-    char x[PGS_ZZZ],y[PGS_ZZZ];
+    char x[PGS_ZZZ];
+    char y[PGS_ZZZ];
     octet X= {0,sizeof(x),x};
     octet Y= {0,sizeof(y),y};
 
     /* Master secret shares */
-    char ms1[PGS_ZZZ], ms2[PGS_ZZZ];
+    char ms1[PGS_ZZZ];
+    char ms2[PGS_ZZZ];
     octet MS1= {0,sizeof(ms1),ms1};
     octet MS2= {0,sizeof(ms2),ms2};
 
@@ -76,19 +81,25 @@
     octet HM= {0,sizeof(hm), hm};
 
     /* Client secret and shares */
-    char cs1[2*PFS_ZZZ+1], cs2[2*PFS_ZZZ+1], sec[2*PFS_ZZZ+1];
+    char cs1[2*PFS_ZZZ+1];
+    char cs2[2*PFS_ZZZ+1];
+    char sec[2*PFS_ZZZ+1];
     octet SEC= {0,sizeof(sec),sec};
     octet CS1= {0,sizeof(cs1), cs1};
     octet CS2= {0,sizeof(cs2), cs2};
 
     /* Server secret and shares */
-    char ss1[G2LEN], ss2[G2LEN], serverSecret[G2LEN];
+    char ss1[G2LEN];
+    char ss2[G2LEN];
+    char serverSecret[G2LEN];
     octet ServerSecret= {0,sizeof(serverSecret),serverSecret};
     octet SS1= {0,sizeof(ss1),ss1};
     octet SS2= {0,sizeof(ss2),ss2};
 
     /* Time Permit and shares */
-    char tp1[2*PFS_ZZZ+1], tp2[2*PFS_ZZZ+1], tp[2*PFS_ZZZ+1];
+    char tp1[2*PFS_ZZZ+1];
+    char tp2[2*PFS_ZZZ+1];
+    char tp[2*PFS_ZZZ+1];
     octet TP= {0,sizeof(tp),tp};
     octet TP1= {0,sizeof(tp1),tp1};
     octet TP2= {0,sizeof(tp2),tp2};
@@ -98,25 +109,33 @@
     octet TOKEN= {0,sizeof(token),token};
 
     /* Precomputed values stored on device */
-    char g1[GTLEN],g2[GTLEN];
+    char g1[GTLEN];
+    char g2[GTLEN];
     octet G1= {0,sizeof(g1),g1};
     octet G2= {0,sizeof(g2),g2};
 
-    char ut[2*PFS_ZZZ+1],u[2*PFS_ZZZ+1];
+    char ut[2*PFS_ZZZ+1];
+    char u[2*PFS_ZZZ+1];
     octet UT= {0,sizeof(ut),ut};
     octet U= {0,sizeof(u),u};
 
-    char hid[2*PFS_ZZZ+1],htid[2*PFS_ZZZ+1];
+    char hid[2*PFS_ZZZ+1];
+    char htid[2*PFS_ZZZ+1];
     octet HID= {0,sizeof(hid),hid};
     octet HTID= {0,sizeof(htid),htid};
 
-    char e[GTLEN], f[GTLEN];
+    char e[GTLEN];
+    char f[GTLEN];
     octet E= {0,sizeof(e),e};
     octet F= {0,sizeof(f),f};
 
-    char r[PGS_ZZZ],z[2*PFS_ZZZ+1],w[PGS_ZZZ],t[2*PFS_ZZZ+1];
+    char r[PGS_ZZZ];
+    char z[2*PFS_ZZZ+1];
+    char w[PGS_ZZZ];
+    char t[2*PFS_ZZZ+1];
 
-    char ck[AESKEY_ZZZ],sk[AESKEY_ZZZ];
+    char ck[AESKEY_ZZZ];
+    char sk[AESKEY_ZZZ];
     octet R= {0,sizeof(r),r};
     octet Z= {0,sizeof(z),z};
     octet W= {0,sizeof(w),w};
@@ -125,9 +144,19 @@
     octet CK= {0,sizeof(ck),ck};
 
     /* AES-GCM */
-    char raw[256], header[16], ciphertext[32], res[32], plaintext[32], tag[16], iv[16];
-    octet HEADER= {0,0,header}, Ciphertext= {0,sizeof(ciphertext),ciphertext};
-    octet Plaintext= {0,sizeof(plaintext),plaintext}, Res= {0,sizeof(res),res}, Tag= {0,sizeof(tag),tag}, IV= {0,sizeof(iv),iv};
+    char raw[256];
+    char header[16];
+    char ciphertext[32];
+    char res[32];
+    char plaintext[32];
+    char tag[16];
+    char iv[16];
+    octet HEADER= {0,0,header};
+    octet Ciphertext= {0,sizeof(ciphertext),ciphertext};
+    octet Plaintext= {0,sizeof(plaintext),plaintext};
+    octet Res= {0,sizeof(res),res};
+    octet Tag= {0,sizeof(tag),tag};
+    octet IV= {0,sizeof(iv),iv};
     csprng rng;
 
     int hash = SHA256;
@@ -152,7 +181,7 @@
 
     /* unrandom seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
@@ -338,8 +367,8 @@
     OCT_output(&CK);
 
     /* Server will use the hashed ID if anonymous connection required.
-    HASH_ID(hash,&ID,&HSID);
-    HASH_ALL(&HSID,NULL,&UT,&SEC,&Y,&Z,&T,&HM);
+    'HASH_ID(hash,&ID,&HSID);'
+    'HASH_ALL(&HSID,NULL,&UT,&SEC,&Y,&Z,&T,&HM);'
     */
     MPIN_ZZZ_SERVER_KEY(hash,&Z,&ServerSecret,&W,&HM,&HID,NULL,&UT,&SK);
     printf("Server Key = ");
diff --git a/test/test_octet_consistency.c b/test/test_octet_consistency.c
index 7c02742..3c4f415 100644
--- a/test/test_octet_consistency.c
+++ b/test/test_octet_consistency.c
@@ -34,10 +34,18 @@
 
 int main()
 {
-    int i,j,len=100;
-    int len64 = ((len/3) + 2)*4+1, lenHex = 28*len;
-    char raw[256], bytes[len+1], bytes64[len64+1], bytesHex[lenHex+1], v[len], w[len];
-    octet V= {0,sizeof(v),v}, W= {0,sizeof(w),w};
+    int i;
+    int len=100;
+    int len64 = ((len/3) + 2)*4+1;
+    int lenHex = 28*len;
+    char raw[256];
+    char bytes[len+1];
+    char bytes64[len64+1];
+    char bytesHex[lenHex+1];
+    char v[len];
+    char w[len];
+    octet V= {0,(int)sizeof(v),v};
+    octet W= {0,(int)sizeof(w),w};
     csprng rng;
     char originByteHex[lenHex+1];
     /* Fake random source */
@@ -89,7 +97,7 @@
         W.max = len;
         V.max = len;
         /* test conversion to and from base64 */
-        for (j = 0; j < 10; ++j)
+        for (int j = 0; j < 10; ++j)
         {
             OCT_rand(&W,&rng,len);
             OCT_copy(&V,&W);
diff --git a/test/test_output_functions_ZZZ.c.in b/test/test_output_functions_ZZZ.c.in
index fae38b0..1254799 100644
--- a/test/test_output_functions_ZZZ.c.in
+++ b/test/test_output_functions_ZZZ.c.in
@@ -70,12 +70,12 @@
  */
 char* skip_cb(char* str, int n)
 {
-    int i;
     char* next=str;
 
-    for(i=0; i<n; i++)
+    for(int i=0; i<n; i++)
     {
-        next = strchr(++next,']');
+        next++;
+        next = strchr(next,']');
         if (next == NULL)
         {
             printf("ERROR unexpected test vector\n");
@@ -84,15 +84,15 @@
     }
     *(++next) = '\0';
 
-    return next++;
+    return next;
 }
 
-void read_BIG_XXX(BIG_XXX A, char* string)
+void read_BIG_XXX(BIG_XXX A, const char* string)
 {
     int len;
     char support[LINE_LEN];
     BIG_XXX_zero(A);
-    len = strlen(string)+1;
+    len = (int)strlen(string)+1;
     amcl_hex2bin(string,support,len);
     len = (len-1)/2;
     BIG_XXX_fromBytesLen(A,support,len);
@@ -106,7 +106,7 @@
     BIG_XXX_dzero(A);
 
     // replace eventual line feed
-    len=strlen(string);
+    len=(int)strlen(string);
     if(string[len-1] == '\x0a')
     {
         string[len-1]='\0';
@@ -118,25 +118,28 @@
         support[0]='\0';
     strcat(support,string);
 
-    len = strlen(support);
+    len = (int)strlen(support);
     amcl_hex2bin(support,support,len);
     BIG_XXX_dfromBytesLen(A,support,len/2);
     BIG_XXX_dnorm(A);
 }
 
-void read_FP2_YYY(FP2_YYY *fp2, char* stringx)
+void read_FP2_YYY(FP2_YYY *fp2, const char* stringx)
 {
     char *stringy;
-    BIG_XXX x,y;
+    BIG_XXX x;
+    BIG_XXX y;
 
-    stringy = strchr(++stringx,',');
+    stringx++;
+    stringy = strchr(stringx,',');
     if (stringy == NULL)
     {
         printf("ERROR unexpected test vector\n");
         exit(EXIT_FAILURE);
     }
-    *(stringy)=0;
-    skip_cb(stringy++,1);
+    *stringy=0;
+    skip_cb(stringy,1);
+    stringy++;
 
     read_BIG_XXX(x,stringx);
     read_BIG_XXX(y,stringy);
@@ -147,10 +150,13 @@
 void read_FP4_YYY(FP4_YYY *fp4, char* stringx)
 {
     char *stringy;
-    FP2_YYY x,y;
+    FP2_YYY x;
+    FP2_YYY y;
 
-    stringy = skip_cb(stringx++,1);
-    skip_cb(stringy++,1);
+    stringy = skip_cb(stringx,1);
+    stringx++;
+    skip_cb(stringy,1);
+    stringy++;
 
     read_FP2_YYY(&x,stringx);
     read_FP2_YYY(&y,stringy);
@@ -158,7 +164,7 @@
     FP4_YYY_from_FP2s(fp4,&x,&y);
 }
 
-int read_ECP_ZZZ(ECP_ZZZ *ecp, char* string)
+int read_ECP_ZZZ(ECP_ZZZ *ecp, const char* string)
 {
     BIG_XXX x;
     char *end;
@@ -188,12 +194,18 @@
 #if CURVE_SECURITY_ZZZ == 128
 void read_FP12_YYY(FP12_YYY *fp12, char *stringx)
 {
-    char *stringy, *stringz;
-    FP4_YYY x,y,z;
+    char *stringy;
+    char *stringz;
+    FP4_YYY x;
+    FP4_YYY y;
+    FP4_YYY z;
 
-    stringy = skip_cb(stringx++,3);
-    stringz = skip_cb(stringy++,3);
-    skip_cb(stringz++,3);
+    stringy = skip_cb(stringx,3);
+    stringx++;
+    stringz = skip_cb(stringy,3);
+    stringy++;
+    skip_cb(stringz,3);
+    stringz++;
 
     read_FP4_YYY(&x,stringx);
     read_FP4_YYY(&y,stringy);
@@ -204,10 +216,13 @@
 int read_ECP2_ZZZ(ECP2_ZZZ *ecp2, char* stringx)
 {
     char *stringy;
-    FP2_YYY x,y;
+    FP2_YYY x;
+    FP2_YYY y;
 
-    stringy = skip_cb(stringx++,1);
-    skip_cb(stringy++,1);
+    stringy = skip_cb(stringx,1);
+    stringx++;
+    skip_cb(stringy,1);
+    stringy++;
 
     read_FP2_YYY(&x,stringx);
     read_FP2_YYY(&y,stringy);
@@ -302,7 +317,7 @@
 #endif
 #endif
 
-void read_OCT(octet *oct, char* string, int len)
+void read_OCT(octet *oct, const char* string, int len)
 {
     char buff[len];
     strncpy(buff,string,len-1);
@@ -318,14 +333,22 @@
         exit(EXIT_FAILURE);
     }
 
-    int fd, len, ch1 = 0, ch2 = 0, i=0, done;
+    int fd;
+    int len;
+    int ch1 = 0;
+    int ch2 = 0;
+    int i=0;
+    int done;
     fpos_t pos;
-    FILE *testVectFile, *writtenFile;
+    FILE *testVectFile;
+    FILE *writtenFile;
 
     char line[LINE_LEN];
     char * linePtr = NULL;
 
-    BIG_XXX big, bigaux1, bigaux2;
+    BIG_XXX big;
+    BIG_XXX bigaux1;
+    BIG_XXX bigaux2;
     const char* BIGline = "BIG = ";
     const char* BIGrawline = "BIGraw = ";
     DBIG_XXX dbig;
@@ -385,7 +408,6 @@
     char octbuf[LINE_LEN];
     octet oct = {0,sizeof(octbuf),octbuf};
     const char* OCTline = "OCT = ";
-    //const char* OCTstringline = "OCTstring = ";
     char bin[32];
     const char* HEXline = "HEX = ";
 
@@ -411,7 +433,7 @@
         done=0;
         if (!strncmp(line,  BIGline, strlen(BIGline)))
         {
-            len = strlen(BIGline);
+            len = (int)strlen(BIGline);
             linePtr = line + len;
             read_BIG_XXX(big, linePtr);
             printf("%s",BIGline);
@@ -424,7 +446,7 @@
         }
         if (!strncmp(line,  DBIGline, strlen(DBIGline)))
         {
-            len = strlen(DBIGline);
+            len = (int)strlen(DBIGline);
             linePtr = line + len;
             read_DBIG_XXX(dbig, linePtr);
             printf("%s",DBIGline);
@@ -434,7 +456,7 @@
         }
         if (!strncmp(line,  FPline, strlen(FPline)))
         {
-            len = strlen(FPline);
+            len = (int)strlen(FPline);
             linePtr = line + len;
             read_BIG_XXX(big,linePtr);
             FP_YYY_nres(&fp,big);
@@ -448,7 +470,7 @@
         }
         if (!strncmp(line,  FP2line, strlen(FP2line)))
         {
-            len = strlen(FP2line);
+            len = (int)strlen(FP2line);
             linePtr = line + len;
             read_FP2_YYY(&fp2,linePtr);
             printf("%s",FP2line);
@@ -461,7 +483,7 @@
         }
         if (!strncmp(line,  FP4line, strlen(FP4line)))
         {
-            len = strlen(FP4line);
+            len = (int)strlen(FP4line);
             linePtr = line + len;
             read_FP4_YYY(&fp4,linePtr);
             printf("%s",FP4line);
@@ -474,7 +496,7 @@
         }
         if (!strncmp(line,  ECPline, strlen(ECPline)))
         {
-            len = strlen(ECPline);
+            len = (int)strlen(ECPline);
             linePtr = line + len;
             read_ECP_ZZZ(&ecp,linePtr);
             printf("%s",ECPline);
@@ -498,7 +520,7 @@
 #if CURVE_SECURITY_ZZZ == 128
         if (!strncmp(line,  FP12line, strlen(FP12line)))
         {
-            len = strlen(FP12line);
+            len = (int)strlen(FP12line);
             linePtr = line + len;
             read_FP12_YYY(&fp12,linePtr);
             printf("%s",FP12line);
@@ -508,7 +530,7 @@
         }
         if (!strncmp(line,  ECP2line, strlen(ECP2line)))
         {
-            len = strlen(ECP2line);
+            len = (int)strlen(ECP2line);
             linePtr = line + len;
             read_ECP2_ZZZ(&ecp2,linePtr);
             printf("%s",ECP2line);
@@ -526,7 +548,7 @@
 #else
         if (!strncmp(line,  FP8line, strlen(FP8line)))
         {
-            len = strlen(FP8line);
+            len = (int)strlen(FP8line);
             linePtr = line + len;
             read_FP8_YYY(&fp8,linePtr);
             printf("%s",FP8line);
@@ -602,16 +624,16 @@
 #endif
         if (!strncmp(line,  OCTline, strlen(OCTline)))
         {
-            len = strlen(OCTline);
+            len = (int)strlen(OCTline);
             linePtr = line + len;
-            read_OCT(&oct,linePtr,strlen(linePtr));
+            read_OCT(&oct,linePtr,(int)strlen(linePtr));
             printf("%s",OCTline);
             OCT_output(&oct);
             done = 1;
         }
         if (!strncmp(line,  HEXline, strlen(HEXline)))
         {
-            len = strlen(HEXline);
+            len = (int)strlen(HEXline);
             linePtr = line + len;
             amcl_hex2bin(linePtr, bin, 64);
             printf("%s", HEXline);
diff --git a/test/test_paillier_add.c b/test/test_paillier_add.c
index 4d486c5..999d7b1 100644
--- a/test/test_paillier_add.c
+++ b/test/test_paillier_add.c
@@ -28,7 +28,7 @@
 
 void read_OCTET(octet* OCT, char* string)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char buff[len];
     memcpy(buff,string,len);
     char *end = strchr(buff,',');
@@ -43,7 +43,7 @@
 
 void read_FF_4096(BIG_512_60 *x, char* string, int n)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char oct[len/2];
     octet OCT = {0, len/2, oct};
 
@@ -59,7 +59,7 @@
         exit(EXIT_FAILURE);
     }
 
-    int len = 0;
+    int len;
     FILE *fp=NULL;
 
     char line[LINE_LEN]= {0};
@@ -68,7 +68,7 @@
     char ct[FS_4096]= {0};
     octet CT = {0,sizeof(ct),ct};
 
-    int testNo;
+    int testNo =0;
     const char* TESTline = "TEST = ";
 
     PAILLIER_public_key PUB;
@@ -98,7 +98,7 @@
         // Read TEST Number
         if (!strncmp(line,TESTline, strlen(TESTline)))
         {
-            len = strlen(TESTline);
+            len = (int)strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
         }
@@ -106,7 +106,7 @@
         // Read N
         if (!strncmp(line,Nline, strlen(Nline)))
         {
-            len = strlen(Nline);
+            len = (int)strlen(Nline);
             linePtr = line + len;
             read_FF_4096(PUB.n, linePtr, HFLEN_4096);
 
@@ -117,7 +117,7 @@
         // Read CIPHERTEXT1
         if (!strncmp(line,CT1line, strlen(CT1line)))
         {
-            len = strlen(CT1line);
+            len = (int)strlen(CT1line);
             linePtr = line + len;
             read_OCTET(&CT1GOLDEN,linePtr);
         }
@@ -125,7 +125,7 @@
         // Read CIPHERTEXT2
         if (!strncmp(line,CT2line, strlen(CT2line)))
         {
-            len = strlen(CT2line);
+            len = (int)strlen(CT2line);
             linePtr = line + len;
             read_OCTET(&CT2GOLDEN,linePtr);
         }
@@ -133,7 +133,7 @@
         // Read CIPHERTEXT and process test vector
         if (!strncmp(line,CTline, strlen(CTline)))
         {
-            len = strlen(CTline);
+            len = (int)strlen(CTline);
             linePtr = line + len;
             read_OCTET(&CTGOLDEN,linePtr);
 
diff --git a/test/test_paillier_consistency.c b/test/test_paillier_consistency.c
index 8ca3aba..5d3db52 100644
--- a/test/test_paillier_consistency.c
+++ b/test/test_paillier_consistency.c
@@ -56,7 +56,8 @@
 
     // Key material
     PAILLIER_private_key PRIV;
-    PAILLIER_public_key PUB, PUBIN;
+    PAILLIER_public_key PUB;
+    PAILLIER_public_key PUBIN;
 
     char pub[HFS_4096];
     octet PUBOCT = {0,HFS_4096,pub};
@@ -198,7 +199,7 @@
 
 int main()
 {
-    char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
+    const char* seedHex = "78d0fb6705ce77dee47d03eb5b9c5d30";
     char seed[16] = {0};
     octet SEED = {sizeof(seed),sizeof(seed),seed};
 
diff --git a/test/test_paillier_decrypt.c b/test/test_paillier_decrypt.c
index c44247c..1bd4e33 100644
--- a/test/test_paillier_decrypt.c
+++ b/test/test_paillier_decrypt.c
@@ -28,7 +28,7 @@
 
 void read_OCTET(octet* OCT, char* string)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char buff[len];
     memcpy(buff,string,len);
     char *end = strchr(buff,',');
@@ -43,7 +43,7 @@
 
 void read_FF_2048(BIG_1024_58 *x, char* string, int n)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char oct[len/2];
     octet OCT = {0, len/2, oct};
 
@@ -99,7 +99,7 @@
         // Read TEST Number
         if (!strncmp(line, TESTline, strlen(TESTline)))
         {
-            len = strlen(TESTline);
+            len = (int)strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
         }
@@ -107,7 +107,7 @@
         // Read P
         if (!strncmp(line, Pline, strlen(Pline)))
         {
-            len = strlen(Pline);
+            len = (int)strlen(Pline);
             linePtr = line + len;
             read_FF_2048(PRIV.p, linePtr, HFLEN_2048);
 
@@ -122,7 +122,7 @@
         // Read Q
         if (!strncmp(line, Qline, strlen(Qline)))
         {
-            len = strlen(Qline);
+            len = (int)strlen(Qline);
             linePtr = line + len;
             read_FF_2048(PRIV.q, linePtr, HFLEN_2048);
 
@@ -139,7 +139,7 @@
         // Read LP
         if (!strncmp(line, LPline, strlen(LPline)))
         {
-            len = strlen(LPline);
+            len = (int)strlen(LPline);
             linePtr = line + len;
             read_FF_2048(PRIV.lp, linePtr, HFLEN_2048);
         }
@@ -147,7 +147,7 @@
         // Read LQ
         if (!strncmp(line, LQline, strlen(LQline)))
         {
-            len = strlen(LQline);
+            len = (int)strlen(LQline);
             linePtr = line + len;
             read_FF_2048(PRIV.lq, linePtr, HFLEN_2048);
         }
@@ -155,7 +155,7 @@
         // Read MP
         if (!strncmp(line, MPline, strlen(MPline)))
         {
-            len = strlen(MPline);
+            len = (int)strlen(MPline);
             linePtr = line + len;
             read_FF_2048(PRIV.mp, linePtr, HFLEN_2048);
         }
@@ -163,7 +163,7 @@
         // Read MQ
         if (!strncmp(line, MQline, strlen(MQline)))
         {
-            len = strlen(MQline);
+            len = (int)strlen(MQline);
             linePtr = line + len;
             read_FF_2048(PRIV.mq, linePtr, HFLEN_2048);
         }
@@ -171,7 +171,7 @@
         // Read CIPHERTEXT
         if (!strncmp(line, CTline, strlen(CTline)))
         {
-            len = strlen(CTline);
+            len = (int)strlen(CTline);
             linePtr = line + len;
             read_OCTET(&CTGOLDEN,linePtr);
         }
@@ -179,7 +179,7 @@
         // Read PLAINTEXT and process test vector
         if (!strncmp(line, PTline, strlen(PTline)))
         {
-            len = strlen(PTline);
+            len = (int)strlen(PTline);
             linePtr = line + len;
             read_OCTET(&PTGOLDEN,linePtr);
 
diff --git a/test/test_paillier_encrypt.c b/test/test_paillier_encrypt.c
index 37f0756..8096de1 100644
--- a/test/test_paillier_encrypt.c
+++ b/test/test_paillier_encrypt.c
@@ -28,7 +28,7 @@
 
 void read_OCTET(octet* OCT, char* string)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char buff[len];
     memcpy(buff,string,len);
     char *end = strchr(buff,',');
@@ -43,7 +43,7 @@
 
 void read_FF_4096(BIG_512_60 *x, char* string, int n)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char oct[len/2];
     octet OCT = {0, len/2, oct};
 
@@ -98,7 +98,7 @@
         // Read TEST Number
         if (!strncmp(line,TESTline, strlen(TESTline)))
         {
-            len = strlen(TESTline);
+            len = (int)strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
         }
@@ -106,7 +106,7 @@
         // Read N
         if (!strncmp(line,Nline, strlen(Nline)))
         {
-            len = strlen(Nline);
+            len = (int)strlen(Nline);
             linePtr = line + len;
             FF_4096_zero(PUB.n, FFLEN_4096);
             read_FF_4096(PUB.n, linePtr, HFLEN_4096);
@@ -118,7 +118,7 @@
         // Read R
         if (!strncmp(line,Rline, strlen(Rline)))
         {
-            len = strlen(Rline);
+            len = (int)strlen(Rline);
             linePtr = line + len;
             read_OCTET(&RGOLDEN,linePtr);
         }
@@ -126,7 +126,7 @@
         // Read PLAINTEXT
         if (!strncmp(line,PTline, strlen(PTline)))
         {
-            len = strlen(PTline);
+            len = (int)strlen(PTline);
             linePtr = line + len;
             read_OCTET(&PTGOLDEN,linePtr);
         }
@@ -134,7 +134,7 @@
         // Read CIPHERTEXT and process test vector
         if (!strncmp(line,CTline, strlen(CTline)))
         {
-            len = strlen(CTline);
+            len = (int)strlen(CTline);
             linePtr = line + len;
             read_OCTET(&CTGOLDEN,linePtr);
 
diff --git a/test/test_paillier_keygen.c b/test/test_paillier_keygen.c
index f6018b1..2faf6b4 100644
--- a/test/test_paillier_keygen.c
+++ b/test/test_paillier_keygen.c
@@ -29,7 +29,7 @@
 
 void read_OCTET(octet* OCT, char* string)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char buff[len];
     memcpy(buff,string,len);
     char *end = strchr(buff,',');
@@ -44,7 +44,7 @@
 
 void read_FF_2048(BIG_1024_58 *x, char* string, int n)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char oct[len/2];
     octet OCT = {0, len/2, oct};
 
@@ -54,7 +54,7 @@
 
 void read_FF_4096(BIG_512_60 *x, char* string, int n)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char oct[len/2];
     octet OCT = {0, len/2, oct};
 
@@ -145,7 +145,7 @@
         // Read TEST Number
         if (!strncmp(line,TESTline, strlen(TESTline)))
         {
-            len = strlen(TESTline);
+            len = (int)strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
         }
@@ -153,7 +153,7 @@
         // Read SEED
         if (!strncmp(line,SEEDline, strlen(SEEDline)))
         {
-            len = strlen(SEEDline);
+            len = (int)strlen(SEEDline);
             linePtr = line + len;
             read_OCTET(&SEEDGOLDEN,linePtr);
             testSeed = 1;
@@ -162,7 +162,7 @@
         // Read N
         if (!strncmp(line, Nline, strlen(Nline)))
         {
-            len = strlen(Nline);
+            len = (int)strlen(Nline);
             linePtr = line + len;
 
             read_FF_4096(PUBGOLDEN.n, linePtr, HFLEN_4096);
@@ -174,7 +174,7 @@
         // Read P
         if (!strncmp(line, Pline, strlen(Pline)))
         {
-            len = strlen(Pline);
+            len = (int)strlen(Pline);
             linePtr = line + len;
             read_OCTET(&PGOLDEN, linePtr);
             read_FF_2048(PRIVGOLDEN.p, linePtr, HFLEN_2048);
@@ -187,7 +187,7 @@
         // Read Q
         if (!strncmp(line, Qline, strlen(Qline)))
         {
-            len = strlen(Qline);
+            len = (int)strlen(Qline);
             linePtr = line + len;
             read_OCTET(&QGOLDEN, linePtr);
             read_FF_2048(PRIVGOLDEN.q, linePtr, HFLEN_2048);
@@ -200,7 +200,7 @@
         // Read LP
         if (!strncmp(line, LPline, strlen(LPline)))
         {
-            len = strlen(LPline);
+            len = (int)strlen(LPline);
             linePtr = line + len;
             read_FF_2048(PRIVGOLDEN.lp, linePtr, HFLEN_2048);
         }
@@ -208,7 +208,7 @@
         // Read LQ
         if (!strncmp(line, LQline, strlen(LQline)))
         {
-            len = strlen(LQline);
+            len = (int)strlen(LQline);
             linePtr = line + len;
             read_FF_2048(PRIVGOLDEN.lq, linePtr, HFLEN_2048);
         }
@@ -216,7 +216,7 @@
         // Read MP
         if (!strncmp(line, MPline, strlen(MPline)))
         {
-            len = strlen(MPline);
+            len = (int)strlen(MPline);
             linePtr = line + len;
             read_FF_2048(PRIVGOLDEN.mp, linePtr, HFLEN_2048);
         }
@@ -224,7 +224,7 @@
         // Read MQ and process test vector
         if (!strncmp(line, MQline, strlen(MQline)))
         {
-            len = strlen(MQline);
+            len = (int)strlen(MQline);
             linePtr = line + len;
             read_FF_2048(PRIVGOLDEN.mq, linePtr, HFLEN_2048);
 
diff --git a/test/test_paillier_mult.c b/test/test_paillier_mult.c
index f2cf70e..c21b1f2 100644
--- a/test/test_paillier_mult.c
+++ b/test/test_paillier_mult.c
@@ -28,7 +28,7 @@
 
 void read_OCTET(octet* OCT, char* string)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char buff[len];
     memcpy(buff,string,len);
     char *end = strchr(buff,',');
@@ -43,7 +43,7 @@
 
 void read_FF_4096(BIG_512_60 *x, char* string, int n)
 {
-    int len = strlen(string);
+    int len = (int)strlen(string);
     char oct[len/2];
     octet OCT = {0, len/2, oct};
 
@@ -98,7 +98,7 @@
         // Read TEST Number
         if (!strncmp(line,TESTline, strlen(TESTline)))
         {
-            len = strlen(TESTline);
+            len = (int)strlen(TESTline);
             linePtr = line + len;
             sscanf(linePtr,"%d\n",&testNo);
         }
@@ -106,7 +106,7 @@
         // Read N
         if (!strncmp(line,Nline, strlen(Nline)))
         {
-            len = strlen(Nline);
+            len = (int)strlen(Nline);
             linePtr = line + len;
             read_FF_4096(PUB.n, linePtr, HFLEN_4096);
 
@@ -117,7 +117,7 @@
         // Read CIPHERTEXT1
         if (!strncmp(line,CT1line, strlen(CT1line)))
         {
-            len = strlen(CT1line);
+            len = (int)strlen(CT1line);
             linePtr = line + len;
             read_OCTET(&CT1GOLDEN,linePtr);
         }
@@ -125,7 +125,7 @@
         // Read PLAINTEXT2
         if (!strncmp(line,PT2line, strlen(PT2line)))
         {
-            len = strlen(PT2line);
+            len = (int)strlen(PT2line);
             linePtr = line + len;
             read_OCTET(&PT2GOLDEN,linePtr);
         }
@@ -133,7 +133,7 @@
         // Read CIPHERTEXT and process test vector
         if (!strncmp(line,CTline, strlen(CTline)))
         {
-            len = strlen(CTline);
+            len = (int)strlen(CTline);
             linePtr = line + len;
             read_OCTET(&CTGOLDEN,linePtr);
 
diff --git a/test/test_pair_ZZZ.c.in b/test/test_pair_ZZZ.c.in
index eeacd7a..8e89f03 100644
--- a/test/test_pair_ZZZ.c.in
+++ b/test/test_pair_ZZZ.c.in
@@ -81,18 +81,39 @@
 int main()
 {
     int i;
-    BIG_XXX s,r,x,y;
-    ECP_ZZZ G,P1,P2,P3;
+    BIG_XXX s;
+    BIG_XXX r;
+    BIG_XXX x;
+    BIG_XXX y;
+    ECP_ZZZ G;
+    ECP_ZZZ P1;
+    ECP_ZZZ P2;
+    ECP_ZZZ P3;
 
 #if CURVE_SECURITY_ZZZ == 128
-    ECP2_ZZZ W,Q1,Q2,Q3;
-    FP12_YYY g11,gs1,gs2;
+    ECP2_ZZZ W;
+    ECP2_ZZZ Q1;
+    ECP2_ZZZ Q2;
+    ECP2_ZZZ Q3;
+    FP12_YYY g11;
+    FP12_YYY gs1;
+    FP12_YYY gs2;
 #elif CURVE_SECURITY_ZZZ == 192
-    ECP4_ZZZ W,Q1,Q2,Q3;
-    FP24_YYY g11,gs1,gs2;
+    ECP4_ZZZ W;
+    ECP4_ZZZ Q1;
+    ECP4_ZZZ Q2;
+    ECP4_ZZZ Q3;
+    FP24_YYY g11;
+    FP24_YYY gs1;
+    FP24_YYY gs2;
 #elif CURVE_SECURITY_ZZZ == 256
-    ECP8_ZZZ W,Q1,Q2,Q3;
-    FP48_YYY g11,gs1,gs2;
+    ECP8_ZZZ W;
+    ECP8_ZZZ Q1;
+    ECP8_ZZZ Q2;
+    ECP8_ZZZQ3;
+    FP48_YYY g11;
+    FP48_YYY gs1;
+    FP48_YYY gs2;
 #endif
 
     char seed[100] = {0};
@@ -101,7 +122,7 @@
 
     /* non random seed value! */
     SEED.len=100;
-    for (i=0; i<100; i++) SEED.val[i]=i+1;
+    for (i=0; i<100; i++) SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_rsa_WWW.c.in b/test/test_rsa_WWW.c.in
index 17f3834..fc8150d 100644
--- a/test/test_rsa_WWW.c.in
+++ b/test/test_rsa_WWW.c.in
@@ -33,9 +33,13 @@
 
 int main()
 {
-    int i;
     unsigned long ran;
-    char m[RFS_WWW],ml[RFS_WWW],c[RFS_WWW],e[RFS_WWW],s[RFS_WWW],raw[100];
+    char m[RFS_WWW];
+    char ml[RFS_WWW];
+    char c[RFS_WWW];
+    char e[RFS_WWW];
+    char s[RFS_WWW];
+    char raw[100];
     rsa_public_key_WWW pub;
     rsa_private_key_WWW priv;
     csprng RNG;
@@ -49,11 +53,11 @@
     time((time_t *)&ran);
 
     RAW.len=100;				/* fake random seed source */
-    RAW.val[0]=ran;
-    RAW.val[1]=ran>>8;
-    RAW.val[2]=ran>>16;
-    RAW.val[3]=ran>>24;
-    for (i=0; i<100; i++) RAW.val[i]=i;
+    RAW.val[0]=(char)ran;
+    RAW.val[1]=(char)(ran>>8);
+    RAW.val[2]=(char)(ran>>16);
+    RAW.val[3]=(char)(ran>>24);
+    for (int i=0; i<100; i++) RAW.val[i]=(char)i;
 
     CREATE_CSPRNG(&RNG,&RAW);   /* initialise strong RNG */
 
diff --git a/test/test_rsa_sign_WWW_ZZZ.c.in b/test/test_rsa_sign_WWW_ZZZ.c.in
index e8a43d4..cb1a0c5 100644
--- a/test/test_rsa_sign_WWW_ZZZ.c.in
+++ b/test/test_rsa_sign_WWW_ZZZ.c.in
@@ -154,7 +154,7 @@
             linePtr = line + strlen(CERTStr);
             l1 = strlen(linePtr);
             char* ca_b64 = (char*) calloc (l1,sizeof(char));
-            strncpy(ca_b64,linePtr,l1-1);
+            memcpy(ca_b64,linePtr,l1-1);
             OCT_frombase64(&IO,ca_b64);
 
 #ifdef DEBUG
diff --git a/test/test_utils.c b/test/test_utils.c
index 1a35153..38fed7b 100644
--- a/test/test_utils.c
+++ b/test/test_utils.c
@@ -50,7 +50,8 @@
 
 int main()
 {
-    int i,otp;
+    int i;
+    int otp;
     char x[32];
     octet X= {sizeof(x),sizeof(x),x};
 
@@ -64,7 +65,7 @@
     /* non random seed value! */
     SEED.len=32;
     for (i=0; i<32; i++)
-        SEED.val[i]=i+1;
+        SEED.val[i]=(char)(i+1);
 
     /* initialise random number generator */
     CREATE_CSPRNG(&RNG,&SEED);
diff --git a/test/test_x509_WWW_ZZZ.c.in b/test/test_x509_WWW_ZZZ.c.in
index 7ed1788..7887ed3 100644
--- a/test/test_x509_WWW_ZZZ.c.in
+++ b/test/test_x509_WWW_ZZZ.c.in
@@ -116,6 +116,23 @@
     return 1;
 }
 
+void print_out(char *des,octet *c,int index,int len)
+{
+    int i;
+    printf("%s [",des);
+    for (i=0; i<len; i++)
+        printf("%c",c->val[index+i]);
+    printf("]\n");
+}
+
+void print_date(char *des,octet *c,int index)
+{
+    int i=index;
+    printf("%s [",des);
+    if (i==0) printf("]\n");
+    else printf("20%c%c-%c%c-%c%c %c%c:%c%c:%c%c]\n",c->val[i],c->val[i+1],c->val[i+2],c->val[i+3],c->val[i+4],c->val[i+5],c->val[i+6],c->val[i+7],c->val[i+8],c->val[i+9],c->val[i+10],c->val[i+11]);
+}
+
 int main(int argc, char** argv)
 {
     if (argc != 2)
@@ -555,7 +572,7 @@
             linePtr = line + strlen(CAStr);
             l1 = strlen(linePtr);
             char* ca_b64 = (char*) calloc (l1,sizeof(char));
-            strncpy(ca_b64,linePtr,l1-1);
+            memcpy(ca_b64,linePtr,l1-1);
             OCT_frombase64(&IO,ca_b64);
 
 #ifdef DEBUG
@@ -692,7 +709,7 @@
             linePtr = line + strlen(CERTStr);
             l1 = strlen(linePtr);
             char* cert_b64 = (char*) calloc (l1,sizeof(char));
-            strncpy(cert_b64,linePtr,l1-1);
+            memcpy(cert_b64,linePtr,l1-1);
             OCT_frombase64(&IO,cert_b64);
 
 #ifdef DEBUG
diff --git a/testVectors/bls/bls12-381/bls12_381.rsp b/testVectors/bls/bls12-381/bls12_381.rsp
new file mode 100644
index 0000000..a747138
--- /dev/null
+++ b/testVectors/bls/bls12-381/bls12_381.rsp
@@ -0,0 +1,3075 @@
+# Test vectors generated using https://github.com/supranational/blst
+
+COUNT = 0
+IKM = 0000000000000000000000000000000000000000000000000000000000000000
+Salt = df3f619804a92fdb4057192dc43dd748ea778adc52bc498ce80524c014b81119
+Info = 
+SK = 4c94b82b81ee2a96955718d379d94314c97b037bc15d1564ed5ceed129c99824
+PK in G1 (serialized) = 052a990261fd6b64bccd3bc9a0a2d3436c13026a9ce3895c58699627aac8d65e3b3e7ec3ffc1a89cd9756b3c0db28d140b5705bfa079564984b236da350e4fe216e7108b63f5aae7f3a8d4d39177ea5eb4ce5d06f3900965ba568d03630c021d
+PK in G1 (compressed) = 852a990261fd6b64bccd3bc9a0a2d3436c13026a9ce3895c58699627aac8d65e3b3e7ec3ffc1a89cd9756b3c0db28d14
+Signature in G2 (compressed) = 83e6b130cf0254cef676e775fa890ac0d07fbe7f9f2d119a4bf88991f40309d0723a74d00540a918ef9e9bd29b24025c14ebb70d5ad1ee263d3addbe5b8032a93880cabf2b69e91693e8962c094c7b7c57d5a03e980a6a5a52ae9e5e3fd943d2
+PK in G2 (serialized) = 1505a2a1c8fa2ae6dea4f0f28ba321e52c1e7edb5cd9a68d4169d3de7a9cc8d3aab549bac06dd488ef28b330479304480f33d2a9572949feb901c03d2c7d4cf7e0b45b867269aaa111d8b2934b70405e9b3c6a26062699af378a65d15827af810ae97dfd8db33afff48e78de4b99de208d53f8500240e70b3df5328b1bb15760eee92b3b5d398c7e9a6ed4cec41a69510960eec4a5f43492f106946fd73e7b44c6241d0757ec1eb839f2dbfc9002d68e43801e6a71359e8d75e35f86d053d907
+PK in G2 (compressed) = 9505a2a1c8fa2ae6dea4f0f28ba321e52c1e7edb5cd9a68d4169d3de7a9cc8d3aab549bac06dd488ef28b330479304480f33d2a9572949feb901c03d2c7d4cf7e0b45b867269aaa111d8b2934b70405e9b3c6a26062699af378a65d15827af81
+Signature in G1 (compressed) = a75b67280d0d20f39939b44231f03a725e61a5e676afa388ac2208717a3dae5cb05aa8242e193775a96b5890220739a9
+
+COUNT = 1
+IKM = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Salt = 054edec1d0211f624fed0cbca9d4f9400b0e491c43742af2c5b0abebf0c990d8
+Info = 05
+SK = 0a8145be5f3584895767ced3571d67b1faa1d754199fa15a26f7d9f9f482f2f6
+PK in G1 (serialized) = 10efbdfe7e0ed8af5daa33c49acdac316563f94061bda40743e0002acb649091654f86e9917e7d9e1b7bcb8f43617f35036392dc953c0b98dbb700678f6dda746e0a8d954fb78fc425c92090b6ab03355302e91c4689f43b341d8c064a115116
+PK in G1 (compressed) = 90efbdfe7e0ed8af5daa33c49acdac316563f94061bda40743e0002acb649091654f86e9917e7d9e1b7bcb8f43617f35
+Signature in G2 (compressed) = 8b6e959f4354a6fa6c0fd5619b1e9101838499c070c88b5a95c0c5d5d35e60f01af7a48dafde2720536f52bb065e6a520b9aa2b68669001ae5ef781f2d0251aea138ab1637e411e738a3fdaae28325607709d1c31c38005314a30110a9fdffd4
+PK in G2 (serialized) = 03a706eea934814ca79064a7810143c4f75ed77d4ad3cac891383a2386442cf7ee3a53e6777724774bc8ee2ccc4bf54f052e0722d707061a087e0659b444e3a635bdcba4e398e3f5c603b4b12505a7be460c18a41ecabf5dc3df2bfb5b1079ec0cec59461712eb99dfa5f4b36354493fda8ad548e252a547306920b8e6a9444f53c05c4fbcbeec6956431557f150ecc30bf57fac7e0d42a4db1a61e93f9419f651e895ead303da4549f362566e9485bf80311a7dc175805a370e6de5cffbf74b
+PK in G2 (compressed) = 83a706eea934814ca79064a7810143c4f75ed77d4ad3cac891383a2386442cf7ee3a53e6777724774bc8ee2ccc4bf54f052e0722d707061a087e0659b444e3a635bdcba4e398e3f5c603b4b12505a7be460c18a41ecabf5dc3df2bfb5b1079ec
+Signature in G1 (compressed) = 96b016851eb20b2f996d731ba372822c77542f9138ef9534d957ca4a0a83d4fe82f82166773a14ae75387242e5510c23
+
+COUNT = 2
+IKM = 00020406080a0c0e10121416181a1c1e20222426282a2c2e30323436383a3c3e
+Salt = 1b22b54dd12e72ce249e27a83140a1c1e704fd2dfe1cfb26df43649070a55d44
+Info = 
+SK = 5777c8e112148e35d0827a41cf1e963ce1f1bd945266c392dfbe713bff4d0807
+PK in G1 (serialized) = 064b9e6f0c9970364cec76fe878f5a0541118fba4ebbcc2c8630ea6952a8de7d903e1411d2dcc070920959eecbb0dd2e08fa2f6f131eb8e20deef46fb206d621a91f2d8299db9fccc3ffc7b8be39804fb3b44a087fa8f040088173b438a5fc33
+PK in G1 (compressed) = 864b9e6f0c9970364cec76fe878f5a0541118fba4ebbcc2c8630ea6952a8de7d903e1411d2dcc070920959eecbb0dd2e
+Signature in G2 (compressed) = 839a8f459600524a82ec71a969988db6f5051dc1a7a5bc82048849b0c22a763e2cdca474306ca94598de890f009ffc0017dd574a0231d878b63666f559b6139a33b3be42378732bd7a575f3d6ee7e79be93ca4ad62787d83639958d7a801e1c6
+PK in G2 (serialized) = 11be5d36173d3af0ca0b2733cd69152ecd38b5be84297b6010f9816510d9365a0ec894c8e30118d75c3dafe17ab7978c01753b2a1001eac722304132813c9505fdf730bec9f4cd9833cf29860d1eb04264d8f5b8bfc395f3bfd4c7cf69a43873047c0baa2011476fbd96214e84bec470b4769461dbe4abfeb72f68eb6407de74e77b8456bacfa12eab20288741f229800cdd09533f05497613722afce39060176be09b9e0774f71474962ff13f268262ed5cc8888d14c98af851a0d2212b2835
+PK in G2 (compressed) = 91be5d36173d3af0ca0b2733cd69152ecd38b5be84297b6010f9816510d9365a0ec894c8e30118d75c3dafe17ab7978c01753b2a1001eac722304132813c9505fdf730bec9f4cd9833cf29860d1eb04264d8f5b8bfc395f3bfd4c7cf69a43873
+Signature in G1 (compressed) = ad1910c7beb371cec12e9b8ec8d8b6fdab23ef0ff08bc0f3a675be6f249ed10d564fb21fa86db4a6a81a2712e585e0ff
+
+COUNT = 3
+IKM = 000306090c0f1215181b1e2124272a2d303336393c3f4245484b4e5154575a5d
+Salt = 920632369a960399e1c97c02b29a29f7944c8efacf7d218769c086b8dd8d4014
+Info = 920632
+SK = 22919b6de7652ccacfb0079c92ab80c6c41f344b69b97897d07cea16e0ca1124
+PK in G1 (serialized) = 0aa43434320d7ac26229a53df1615746304d1d1678cb1335651632cb518137b420d4b824dc1d66b086c3b41901a3e6481458d62531df40ec4009a138c93d799a97e92f0a78ea79c0f2e80b98c2acba2be69117b9c365d9dbd6d4c62ce749e5e6
+PK in G1 (compressed) = aaa43434320d7ac26229a53df1615746304d1d1678cb1335651632cb518137b420d4b824dc1d66b086c3b41901a3e648
+Signature in G2 (compressed) = ac453b2bafa07f744fb0e983118024d7f4c7d49965114bf993b64fc7470274d4fd3fdf965536b5dcc8fc365e37d8bd5215902e2d83926e0156e661f4e196c42f54abfc4be183b253f8b9490bd80d0987d245158bd831a23c39515427f8597bc5
+PK in G2 (serialized) = 17ba09233515c3870fc47d1d456eb9a9a3fcb9be9763f6bbd34f0a6fbcc3283a5c4c31bdd875fffe7c0ed0e84921654b152ca5e55d7e4f4481e9c0207ea7111c61a2b08c8b3e88706ee38c5c47a77e3dd9a184e945efc732c2618df5aff631fa184e6774ff1c81e788fa38983474c9170f852d15af18f5d9d39e6224970bb9eff6427ce5fff01d03f49633a45ba80262144d908adc1e8ee2e36c96aa83a495f9203f8a4438651916d3a478152ff127b4299bd86e271065487a3992855bcc7783
+PK in G2 (compressed) = b7ba09233515c3870fc47d1d456eb9a9a3fcb9be9763f6bbd34f0a6fbcc3283a5c4c31bdd875fffe7c0ed0e84921654b152ca5e55d7e4f4481e9c0207ea7111c61a2b08c8b3e88706ee38c5c47a77e3dd9a184e945efc732c2618df5aff631fa
+Signature in G1 (compressed) = b4e901fd2ad7d6ce07f6c7e181c668dbe8c11b4b94d04ab38b6325bfd54ca47831fba5604424e8ff6c46ab6316687047
+
+COUNT = 4
+IKM = 0004080c1014181c2024282c3034383c4044484c5054585c6064686c7074787c
+Salt = c1cbdc079f3cb409336c19dc0676ef8a99e3bb4882c705a74d7f03cbb45c27d0
+Info = 
+SK = 6df2a631ef3c8118806f456399c89ff69c5b021f90b91325ce2daa60f3d7c142
+PK in G1 (serialized) = 0af2c4d143e28acc4eea56dae694bb6a8b217e41c9e951bbd8693d2d84ef379ae746e831333f4b1e93976ab58d6da5a3179c7a4d75f2031c371fc404db0149f82eec972cba3949491f7cc15c4202b4a0dcdc521f85d14ac00360a388b9f2c97c
+PK in G1 (compressed) = aaf2c4d143e28acc4eea56dae694bb6a8b217e41c9e951bbd8693d2d84ef379ae746e831333f4b1e93976ab58d6da5a3
+Signature in G2 (compressed) = b3234fd0a6a388677288fa9abd0255887ed2a2752ea5401fc11197d3672207ef5e95fa9f763c0f40877e8991fbdd1e8118721e9ddfa5c97a43bd860d5250600c2558af841cf39bdcaef68c5279820ef320be542197a9ee9db7d3c0e1b7d29b4d
+PK in G2 (serialized) = 15b6cc027c95c679a78851ca1fe6d2cd3b8a4888bd3544d0d92d2262faeea81bac806716813c056550d6334ab8b26d0803c73828f73cbe4181031e5e17c56cae637149ba10412b87867f691df536db1673eb1f372940f128e8756ac57d1772b91232cf3112e556eeff4a228a75cd20633d41c63a37d5f6bfc2ccd96a10c34ff22e79b685c987155bfb4c4cb6d55564b90e7ff8060e2e229cd71716366dd28d9357dd6580cad9826b304d698dae717f3cb515e2e24295e8cba008c7a4a69300b3
+PK in G2 (compressed) = b5b6cc027c95c679a78851ca1fe6d2cd3b8a4888bd3544d0d92d2262faeea81bac806716813c056550d6334ab8b26d0803c73828f73cbe4181031e5e17c56cae637149ba10412b87867f691df536db1673eb1f372940f128e8756ac57d1772b9
+Signature in G1 (compressed) = a3a90f88be9748907fb15885daca2721c97b3ca1d167c7b7f361734f0c92e779c3e692853213f4a292d5ad1aab7e2c6c
+
+COUNT = 5
+IKM = 00050a0f14191e23282d32373c41464b50555a5f64696e73787d82878c91969b
+Salt = 023b53001b708b38f3baec729aecbe6e6dab1887eedf57ca9b8e1dfcc17684a6
+Info = 023b53001b
+SK = 0c318ef9bd2c75caececba85837f90ffb2cb703629e2568da7ccc7e497ec0e89
+PK in G1 (serialized) = 032ee34a1a3614156bbf077dc3fbe24967c6025da13f9b5ced175a9b0444f92d57838a8fdc83fc2155c25697bb915a760191caa2bf6961e64fdb574a4c39416dc62f6ad94c2258bb046d22412345c269f35aceeaf0a6c1215728c0d43a493659
+PK in G1 (compressed) = 832ee34a1a3614156bbf077dc3fbe24967c6025da13f9b5ced175a9b0444f92d57838a8fdc83fc2155c25697bb915a76
+Signature in G2 (compressed) = a46721c5c1cb9abbfcf5a49dad0f5c8b5d834018a7ef589a94933c711fd5514fd55d00e45cbd942068e456815cd7462b144f52f56071e0c1a3745b1aaa7105f43beb7d171adc05f2b43c0a8ddfbd00cd18d729e5add31512ee382c327e057208
+PK in G2 (serialized) = 0248cdae22899a0960e47eac4fded6be8b2c6310baef2b43573a07de38016f7d6e2572fa7055249b2d8e8c73cb6290c918748c9d3ee243a86aee4305f1e825c14ed653bbae9beb2bcda1e3f8893a70371a234d94b8a064ba6efbf637bdbd78700efd41f679ec347925fbe2b1d4b83d5f3a100883ea303fd161f573f7bf9068102855001d2f65dcb48210157e85b04d4d06f9b838c41935c87ae016e235f3c876f25b9f994b018642e63941e273f193f9abbea651b626c4e4c6540b4708735c4d
+PK in G2 (compressed) = a248cdae22899a0960e47eac4fded6be8b2c6310baef2b43573a07de38016f7d6e2572fa7055249b2d8e8c73cb6290c918748c9d3ee243a86aee4305f1e825c14ed653bbae9beb2bcda1e3f8893a70371a234d94b8a064ba6efbf637bdbd7870
+Signature in G1 (compressed) = b9781a0bed387650c59405c9c213053c67880578eb0a39af541029536029f66d1a7916d263e6d40efd5878dba957c41a
+
+COUNT = 6
+IKM = 00060c12181e242a30363c42484e545a60666c72787e848a90969ca2a8aeb4ba
+Salt = 47e6a09be1636d499c9d4f1364297f9a19ceeb6868507be7b6dc723c2cecedca
+Info = 
+SK = 3580923b71cc5f0a123c89b8ecd2256a3485ef88787bc8ab5f3e323188da18a5
+PK in G1 (serialized) = 0fb7ab7cc0656da9f6a664d57d279932959ad72deeb4f1920a081a7c75f42bf238f0f4b7cdb47448631d2bf8e48fe29716fc3475d5867a5892346b565238ac015ba7dcfc45b741f23b4c00d1e9de2ac6133057ca8e0a69afb28c1f6ca8307b3a
+PK in G1 (compressed) = afb7ab7cc0656da9f6a664d57d279932959ad72deeb4f1920a081a7c75f42bf238f0f4b7cdb47448631d2bf8e48fe297
+Signature in G2 (compressed) = 87a8fc83db3c52a646519a00ee5e2d633da838822601fffe3a4f627c1185bd4b1daa6884ecfd54f531c31282236548eb142b805e1dc85337e018cc3519a174bb8a712ea8b2f74ee2d1935bd9baffab47dc59ba28bb425cd5a5bde6cf1626d5db
+PK in G2 (serialized) = 0ce9131186a9b192db69635c64758faae12d0578fb35de21feb8339c88f4c9e711bf725d1e3b28fac7c378c80272348c003675e8ca01d8e475bea9e4789048b62e70930e9b27fb008842952b5e75bba8ebcda9c0a218997f87d8f23e10689f6d098e2b01cb61edfe827b65fd4872c093d1768b3fd68a1d8e936566a2b441c984fcf28cd2c3e00fc5bd60008d15e8809107c2b3b3361b5ace1a5f7933e824cbc26c1588dd4b774c19f57bde51dee6959532c292c74f5814e273ee09be592ba368
+PK in G2 (compressed) = 8ce9131186a9b192db69635c64758faae12d0578fb35de21feb8339c88f4c9e711bf725d1e3b28fac7c378c80272348c003675e8ca01d8e475bea9e4789048b62e70930e9b27fb008842952b5e75bba8ebcda9c0a218997f87d8f23e10689f6d
+Signature in G1 (compressed) = a648ea4971f23c0032155f1dd21406e815a8a741d7711f1415cd165e50b86b3e17ebd48e0e88d0763c36df4e5e1670c7
+
+COUNT = 7
+IKM = 00070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9
+Salt = 6e14590861815ebebb76e8ca460621bd0f60ea4f1550edbf32e664d30d7a04fd
+Info = 6e14590861815e
+SK = 5585dfd62ce2273ee15527d6b03f27c4ea51452a23a4baa360069fd64334a4f5
+PK in G1 (serialized) = 15d6d2850e1a5a883fb0187d1c6afb3fa334ac23e0fafab639cf517b873a33ae7a8a636577d45b8d3e89e938d7e1511701e7706fb632400b1ac65d4f83da07e995cf560c5f4a8b4c183bb975331a49d46cbb32e164cbed73bc09a944c687fa12
+PK in G1 (compressed) = 95d6d2850e1a5a883fb0187d1c6afb3fa334ac23e0fafab639cf517b873a33ae7a8a636577d45b8d3e89e938d7e15117
+Signature in G2 (compressed) = a8525e960c520f14852fbbaa2cc6944c4eb45f1671b6eafd22a6867ee386731c8b518b36692dc0c08b134b7c80e83cf3084b3b9eeca6925117ce3047722478b5020a813905c8247fdacf68f7e405946f94e0f0f728374cfa11d6357f49de9856
+PK in G2 (serialized) = 031dd16ee4ec4ce02bcdb6e6989a34a96bc061d873e276cf5bd1b98d8afd269609d5e6507ceccb773d2e859846163fee102fa4e5d5cdedf2a3541775f854e808aa94ec34cff17627fc5bac47401ae0e83604dd24fb77051f64d6105fd63707870d672dcc440f3cbf27453763d3be620666d28e5ea43e53a4af0292b8d00c44fb89829e97c172580141ab8a7276d721640aca44ff68d63f24709deb2c293ca14edd495dd6802eb35e6c77ea1a27cbf6bf305a64ecc33bb642481dd3b99e61818b
+PK in G2 (compressed) = a31dd16ee4ec4ce02bcdb6e6989a34a96bc061d873e276cf5bd1b98d8afd269609d5e6507ceccb773d2e859846163fee102fa4e5d5cdedf2a3541775f854e808aa94ec34cff17627fc5bac47401ae0e83604dd24fb77051f64d6105fd6370787
+Signature in G1 (compressed) = a4638a789fc61268e1612041dbc9dd80e2661596145f1100287c40559a8fbe783a81fd78ce446a62194814adf9b4e7a5
+
+COUNT = 8
+IKM = 0008101820283038404850586068707880889098a0a8b0b8c0c8d0d8e0e8f0f8
+Salt = bdb11c99d6418180156eea47b9eb755f8736055603c19e57f9dfb4cdffcf8c3a
+Info = 
+SK = 68cd55aa921d958086477ddc61f458e946d6fd2c893550a3d94bc1ee5daf4f31
+PK in G1 (serialized) = 15fa5bdcda8685c2c677fe409c425a854f5f14c5ccafa06c0348def5f1060e14cd1ed1c54328ad1d9a57bb02934f70c00efea1bb48b846b803d65eba0fd4dc002ac069c8668c55543747bae4c389971e12a44cf9c34dacfaa87263571f6bfea1
+PK in G1 (compressed) = b5fa5bdcda8685c2c677fe409c425a854f5f14c5ccafa06c0348def5f1060e14cd1ed1c54328ad1d9a57bb02934f70c0
+Signature in G2 (compressed) = 91aee96ba8c6e17ca8ea6ddbe66d08e7bc0da35013b4373861554ef534974f341cdbe3a69b9455e5fed9d341142ea21c1373e9fa5927e32c80236f425ba4157d4aa16178b2737a56fd44cf48addb5a3c818578f327a2a855a6a18945d8855504
+PK in G2 (serialized) = 02c8788aeb644af31114366fe1d345d570f6efdacd0fad3b2ecf5a4422ccbf592dcd423484972c3468bdea61efaace4b123ab63350a2eb60f49af9ff076a7eb5ba2bb7358054776dd00cba1e806e604e0c54093ac0bd83379b55b78497b3fb8d14b053bc637e02baa0dbf50d2c8513510caa7713980c71bd71d5fefd6cbbfda203f31df548ef967bfd155aac3b817ccd05ca8dfb253d5a805dc220f758557ba86b8cd54954cd302f94637f087d35de391cde9befd8cceec987afca146735a037
+PK in G2 (compressed) = a2c8788aeb644af31114366fe1d345d570f6efdacd0fad3b2ecf5a4422ccbf592dcd423484972c3468bdea61efaace4b123ab63350a2eb60f49af9ff076a7eb5ba2bb7358054776dd00cba1e806e604e0c54093ac0bd83379b55b78497b3fb8d
+Signature in G1 (compressed) = 83c319ddf0a7ef0e27388e2877c6ce20c779c0cc08a739e7ef7d1d8adb364d92ba6a71a70b4907f8099682a5c8f645bc
+
+COUNT = 9
+IKM = 0009121b242d363f48515a636c757e879099a2abb4bdc6cfd8e1eaf3fc050e17
+Salt = 5126fadd96b296a9e3555a4462c7c7c22f91062c3524523d4b3eebb6cd85483c
+Info = 5126fadd96b296a9e3
+SK = 69c3a7f3e38d6f11763e4b611abb041c827a14ede16ccde9189d8a8241f74a2d
+PK in G1 (serialized) = 05206b50614a897bf77ffcc760756b25a72bdbe677a22544f6a1448a65d72e79b1497f80d663935bc205232afa610bb807f3b9017f6baea13acc775983023a2d3ea8b426e20cebe90dcf8598b35564e8a45ce8e31b7e10238233c176ff1c96f4
+PK in G1 (compressed) = 85206b50614a897bf77ffcc760756b25a72bdbe677a22544f6a1448a65d72e79b1497f80d663935bc205232afa610bb8
+Signature in G2 (compressed) = 82c796a162aab5651ff4e2941cf3074541c4b22e4a3cde8ada014d0510836b72fc1522082e0b4bd57f22d2917e18f385095b705a8598a8762bd4d7b644ec0cfb86d45ce1bf396b2e85cf5b2308ce96844231712d5fb619b6809c59c351157383
+PK in G2 (serialized) = 132124a054e575289a3557ceb110e850187a0f39ddcea859c5c6932645b1165d29eea5699a642412c021ca4679a68a7b0c165f98bee55b45579ba9101933c6208ccb9c8019fb7d5ae8dd6c9f11404ddda5c9747964fa0eda970b4710cdc0dd450fd7984621d48cc0459242417236c948a751a9524e3f59c2526a91f371fbbcf8bdc687ff783338755589082d453b49ce114df917b643e3912c2c6e9435edaec91dcf3835a215b3f144ed48158205242474625df34138eccd6b8e7c3b7b6cf0f6
+PK in G2 (compressed) = b32124a054e575289a3557ceb110e850187a0f39ddcea859c5c6932645b1165d29eea5699a642412c021ca4679a68a7b0c165f98bee55b45579ba9101933c6208ccb9c8019fb7d5ae8dd6c9f11404ddda5c9747964fa0eda970b4710cdc0dd45
+Signature in G1 (compressed) = 901b234179e3d1b7303535eb063b966fb80a1d2f054824bd1ec963223ee878837ea236ce0ff28242aa2c7933f45bb093
+
+COUNT = 10
+IKM = 000a141e28323c46505a646e78828c96a0aab4bec8d2dce6f0fa040e18222c36
+Salt = a82d99b94da6161da99d054baa1b42d5d8dc6e88c158336119ef197bb9b89cea
+Info = 
+SK = 03c249c128b09b0e1bd51917d689cc9e166f0587a6748c3bde0f638fdfae7180
+PK in G1 (serialized) = 0bce569ff89f743bd7a981924906283ec1049b2a9bb3f4dc4aba036430d55d25a76ecb7ed36f07529ee307470f4194151333b58b88dc5af892dfdc5294146431427560409a35888af7534bc5fb7eb9db8a37b052cc7ec48fd3c954563cb84fb3
+PK in G1 (compressed) = abce569ff89f743bd7a981924906283ec1049b2a9bb3f4dc4aba036430d55d25a76ecb7ed36f07529ee307470f419415
+Signature in G2 (compressed) = 84e8652c3a0d693da5121498fadf3f53ef19f8c5fded588d9f291f4d3790303149ffcfd3c057e53c553aad849dea942408bf3c3c0122633042242e321485e8fd9d1f42dfa737aa1d9bc85053b1605d834380199d247957a24f796d652e835569
+PK in G2 (serialized) = 0149edebe1d27888e3c9df70d9972fa9d21da4d8779ace12259437dce5f21729c3f17aaad3d90bc6de145dacdd6ab7f6106209e5ad492d4cd70200412f520f3cfda1e93a793f9a2b0883de675719c422324776aecad77182f7fd0a50da5bf0b008181c1bc7da9ac222ac9e03f42a4d6c4aa91a9797a48e15ec7c201eacead67d8cd802d838c096e0f3470f638b47137503d8171864cb06ec34f5a56435b2750a28762f931fd4025a8806c0a487d54a3bcb227315b45ff72c7df5e55a55e6c8c4
+PK in G2 (compressed) = 8149edebe1d27888e3c9df70d9972fa9d21da4d8779ace12259437dce5f21729c3f17aaad3d90bc6de145dacdd6ab7f6106209e5ad492d4cd70200412f520f3cfda1e93a793f9a2b0883de675719c422324776aecad77182f7fd0a50da5bf0b0
+Signature in G1 (compressed) = 927fdd89da7860e69c9b7b782cc519114f5d69997f8fe1112920dfca84500718aaa1c70783ae5fc066b417d126505ed4
+
+COUNT = 11
+IKM = 000b16212c37424d58636e79848f9aa5b0bbc6d1dce7f2fd08131e29343f4a55
+Salt = 5ac73da2fbc9135d637eada4598f0374d3ab399eca9f7cd443f8c83cfe147b9d
+Info = 5ac73da2fbc9135d637ead
+SK = 43a62a82424276c543a8349b78b076cc840206f2a87aa5b85e85d8a98f44935d
+PK in G1 (serialized) = 1432de5f73981f699f90f14c2667880c17bb62b319beb12dbf088e0c3a462b44a5f11f76ae04d6f40def3650a732dea20538e84989f253a6715032ac27503de54bf646a6c7350a590bdb02f2f972431356962e98a48393ad2fc3502ff1892f3f
+PK in G1 (compressed) = 9432de5f73981f699f90f14c2667880c17bb62b319beb12dbf088e0c3a462b44a5f11f76ae04d6f40def3650a732dea2
+Signature in G2 (compressed) = 85222ccc48953053c7d950daa6b83495d36a405f48982769813059318cb69ead9d5794e8f29b5abf98123bf3a7dfc3d10abce90b5a5b79db5671d0f8bca06b08519fe7f5cc87ebcde81003162e78bed9c9909c0769f6120a7027f45ff87b9d27
+PK in G2 (serialized) = 04ec0c1cd82da63b102868465ecf437755644369856fffa638229e4ea8e7f45011c448e8d15045807d6fa7763a60accc129afb2c2a43a1b00fb82d00dbbfc9ec1593dfd4fde16174501db21dcb7e2ab34092feb10e56a226453bcd58a99074ef0c31e911e0a4f1b686840c669cbe4f13db39ad66d275e33676da33a9d48c3d5a776a807f6fff14a13efb64e1d65ea40f0bb5d0042c25a41b94e3f62352edb4bb3f7d3b8fd274e5ed9994b285bae7a507a56f92eb97a11c64f341229ce83250f3
+PK in G2 (compressed) = 84ec0c1cd82da63b102868465ecf437755644369856fffa638229e4ea8e7f45011c448e8d15045807d6fa7763a60accc129afb2c2a43a1b00fb82d00dbbfc9ec1593dfd4fde16174501db21dcb7e2ab34092feb10e56a226453bcd58a99074ef
+Signature in G1 (compressed) = b45a2959d29128d6fce287b432b32719375b5461124d7d39c40c23d50efc0ca0b82985c3fc0177db0319c2f8344a4f54
+
+COUNT = 12
+IKM = 000c1824303c4854606c7884909ca8b4c0ccd8e4f0fc0814202c3844505c6874
+Salt = 38f39633f4d1d3bbe1f54f5389f3609c9cf8803b10598c2364b52d1f9be99618
+Info = 
+SK = 00c543be74c0ae7e3a197bdd8d2317c7fc1e2ddbfae2a823a4de49ea7e76862c
+PK in G1 (serialized) = 03af6069e86ad56b627a3286dae4c697c9f3cb4a26e80e84b4112b8671536a9e96259d2e05f879b7aaf79358bbd70c0312283d7e60e5bde32c988649f8d41c1940179ff43a3a198b5f5b0967e834aee3923fda941c23ba8dc35ca0b4764b3efe
+PK in G1 (compressed) = a3af6069e86ad56b627a3286dae4c697c9f3cb4a26e80e84b4112b8671536a9e96259d2e05f879b7aaf79358bbd70c03
+Signature in G2 (compressed) = a823778c87786ed5cbc8a1ed42fb54e25fdbd847e76bfb629389f3b4372afa6d5b8ac9bd77f7a6c0f44b091caf0856fc188bc70df7aa0732a0388efd0aec21e2549c08de473caf3b56468d1c0018559821c94c1fcc9d097921a16bf1cf587ea8
+PK in G2 (serialized) = 04fadfa7e2a83bee523f5a2d7a6245ff92ba8ec90d318225b6116884c80299a16785705abdd0d626e826bc7c765c37c40bacdc2559f66dfb868941cd1ab14e6a50e132c0ce70c5dc1168b8e1c072d8db2e010ac85dd10ea72b5b3785588941c70fa7a7c02cea0685192cd5fac01c230a6ab406ea4b28184b23b4d20120e40b8fc26118f67ede234583a28a1eb5ed657b10c81596a2557ac1dc69e80f49ab04d807fff6035f090d128a64e2ee083430ab438485d08020d6bc25deae6cec387b52
+PK in G2 (compressed) = a4fadfa7e2a83bee523f5a2d7a6245ff92ba8ec90d318225b6116884c80299a16785705abdd0d626e826bc7c765c37c40bacdc2559f66dfb868941cd1ab14e6a50e132c0ce70c5dc1168b8e1c072d8db2e010ac85dd10ea72b5b3785588941c7
+Signature in G1 (compressed) = 8f5e700cd4ec9ed0ed9ecc7b8ab92d99eb2baf931ef0d8bd0657b2677aab012f57cf713bcb7a491a97a50aaab00c604d
+
+COUNT = 13
+IKM = 000d1a2734414e5b6875828f9ca9b6c3d0ddeaf704111e2b3845525f6c798693
+Salt = 41f5991d7cd275850fa749d2ed3501b33fab386fff5554282659bff79a2b31d0
+Info = 41f5991d7cd275850fa749d2ed
+SK = 39f7d0f16533948738f75ee47ab8dc6507fe6f7630d9ce92178ec9c7e48e9d9a
+PK in G1 (serialized) = 14b22c347da1668997f5f4a5b29fdfb4399e64709d886325e5b1ef069f8eecef40529470baa0a84e1ba3a7b20a9f6ecc19a3d50df0f07ae3c4753ea4adaebac10093d8cb04fd00058786a8766724fa58041f851a530e5f3e784452ca22ed69da
+PK in G1 (compressed) = b4b22c347da1668997f5f4a5b29fdfb4399e64709d886325e5b1ef069f8eecef40529470baa0a84e1ba3a7b20a9f6ecc
+Signature in G2 (compressed) = 96f37c8a9bae617f70f16df0836d57ea324402b67dca56d0cd2a8a064c8c103927ddb011c45afcf516a5f0e8910858a80079e6267326d8882ae5847d7148812cdf1a480c445693fb085dfccbb964d1b1ef3118fff5a0095f0bdf5d568791f4eb
+PK in G2 (serialized) = 07640e923823309af6b7704f5dcdffc7ef06d6edd908af1859a4489a59283f9bd488f3f5572378e4ce3af9e292d780520c66b10d4caaea9ffae8c9cd5dda1ac2153fa854370f72b86ed2ab9b0979416e71e7259ddee88b41ea8d63f68c1c8abe077f05972b9e01693785e97833c0ae87cb3b116cebe0ee7c0fd2156abf58c13259176b53cf5b2f9d47ae175cd095c18f0d884987a51ae148c139f728dd4fd056691f4d97a93cd5622bd789c20a5c4f42ba9624791fc95d1e254395c48d863e84
+PK in G2 (compressed) = 87640e923823309af6b7704f5dcdffc7ef06d6edd908af1859a4489a59283f9bd488f3f5572378e4ce3af9e292d780520c66b10d4caaea9ffae8c9cd5dda1ac2153fa854370f72b86ed2ab9b0979416e71e7259ddee88b41ea8d63f68c1c8abe
+Signature in G1 (compressed) = a73721bc9e91c2f7427363d2fb478a60a6db05e9de7aab4689be4f503ae4e778d21bad4ccf992cf7f983246fe52b2517
+
+COUNT = 14
+IKM = 000e1c2a38465462707e8c9aa8b6c4d2e0eefc0a18263442505e6c7a8896a4b2
+Salt = 538648e2c38e8798c8dc18f150860607e4c838a8ae8bea1ead4e1e085737e96a
+Info = 
+SK = 540f286c19cdab3477c2a57fd5eac97eccf382fe5ca43fb7b9314cfefeeda68c
+PK in G1 (serialized) = 0c5f1e6c38729c477df696610d800fe11da31bea24e2fe007c2616acd5811a362060e59b805427944174bcca42ef755804b903c831843a984e4e836389b832c2fcb4c94600e816818c99715927e46ffe3046e8f9d59f723a0d19896b33e5d60b
+PK in G1 (compressed) = 8c5f1e6c38729c477df696610d800fe11da31bea24e2fe007c2616acd5811a362060e59b805427944174bcca42ef7558
+Signature in G2 (compressed) = 94f7267b6d3c917413244d5db4f087b2504c08d230600305dbf5a5c0e09af285cc79c5ee41be37ce648f0442ec9b2adf157612d21bb15f8e60e4a2e1dea4bfc10ccb115fa95f070903a0434fff8d66f2076e291899d491acf201cf592d07d47a
+PK in G2 (serialized) = 137bd9c3ff23db376402d495d5dbb12633c46c1dbe785ace075c7c3c1c15dbe603b32249a456b0bbe698cdbdd7d7507315d48251c2bf9fb31291eff64642663f706471538caa5051f95397ab0f8a359d704b6a2cef19d04333bf73f40032eb570317b5af5a3a8d7c766bf04ec81ee3fab1b6c6c1aaaed9fa763ec986ec325b514f1608490275b4db9a966dbe22ffe01e102878c58cfa340894d9bb78d7a161c0face5f399e05367872ae6728a80d3df0e041d858dad0e6d68b726889dfcbeb51
+PK in G2 (compressed) = 937bd9c3ff23db376402d495d5dbb12633c46c1dbe785ace075c7c3c1c15dbe603b32249a456b0bbe698cdbdd7d7507315d48251c2bf9fb31291eff64642663f706471538caa5051f95397ab0f8a359d704b6a2cef19d04333bf73f40032eb57
+Signature in G1 (compressed) = 8715e62fbeea7fbe589d205b8cb2cf54efc80271bb86ab2b6804e3a6bb41d0dec669617cc828ef9697b7c4ae3a1d4f83
+
+COUNT = 15
+IKM = 000f1e2d3c4b5a69788796a5b4c3d2e1f0ff0e1d2c3b4a5968778695a4b3c2d1
+Salt = 43838b7f0fe4fae61e7f9b5ebadf46dc6cd2a5d91afdf557a326043daa44b29e
+Info = 43838b7f0fe4fae61e7f9b5ebadf46
+SK = 4288f2f06d18bdad0975e71259ed07976a40bd177702700e72220ddcb0729c46
+PK in G1 (serialized) = 10520c59053729afe4d3962c0b142f7c763e6b1a1e7d4690e0189a493bace3f0defeb73e0d2361677fe05aa0503f95c519906a0f989f217a662f18dfaccf83a0ba09e70d81ac4940c11397e4c3500a947d3568f359b5d9e9a43ad31ce921e666
+PK in G1 (compressed) = b0520c59053729afe4d3962c0b142f7c763e6b1a1e7d4690e0189a493bace3f0defeb73e0d2361677fe05aa0503f95c5
+Signature in G2 (compressed) = 98f4b5f99a88d20b2e38100423dead8d4caa4398b68629d80bcdaf44b532ed4f195f17c5151fce12a9eb998ab040b8641324346fc8ead238e8cb0f81ccfa62fb297552f2cf6a89e01b419999d6647073c5cccac346dbe155ccd2904394cff928
+PK in G2 (serialized) = 03916880a0bb980e4ada2332099dc6c2c2ce6ff058b416088f9b9dda147dd0153168cc88fb79a831da6faf3de58c38f7012dac19f284e7a6842c9e7bf00b6aafc2b3ebf6abc7934eeafe15ee872dd33094e0e0294aec88b263e26df22fba5f9017688db1a3b2390d604e4813dc4fa02f15b542afaf47e25bfd031c232bc0e1531b85922a7dc3dfeb09c9c2d94f4aa258195986a8957a814ee1fac1fac05de6f41007388ee93363894d4e446458d403a85d86748f26f830ea863eb14c252fa2ce
+PK in G2 (compressed) = a3916880a0bb980e4ada2332099dc6c2c2ce6ff058b416088f9b9dda147dd0153168cc88fb79a831da6faf3de58c38f7012dac19f284e7a6842c9e7bf00b6aafc2b3ebf6abc7934eeafe15ee872dd33094e0e0294aec88b263e26df22fba5f90
+Signature in G1 (compressed) = 9594780bfe57b917f234746d4d95dd338c2eae2e12e53a6e695a27a01371e66e984154ca0eef73e9960864bab85601ca
+
+COUNT = 16
+IKM = 00102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f0
+Salt = fc620bc4e7b4b73c1092e32b86b19c6eca079be0c59d994cb9814c3d07a0d657
+Info = 
+SK = 51b1c7c5f418a973ca939bc9c92884773a4f109a2ea034d89cc18a9a4a322883
+PK in G1 (serialized) = 06678d19722110906b62b9c3b761e642adedef5726aceb704bf34ba30671db51bd33022c4f9588a4e2bb803f13847f870a7171d1bc5e67aa798abf23948a9b477d4187f6a2ba4086b903abc40996b3b50ac96264319b761b70f9c19d8136d0b4
+PK in G1 (compressed) = 86678d19722110906b62b9c3b761e642adedef5726aceb704bf34ba30671db51bd33022c4f9588a4e2bb803f13847f87
+Signature in G2 (compressed) = 994b36dd05600cd01480261a85f3bd2a0964f916fb6c41ce18eb072632d327e3c3eadde40388e5b54766b7af399ee9090c6e0f0e1f43a6663ac4b92eb87b2ddd1a04498cb3a9127db0384e64997239f421c9933e41ffd28c1a3db84638770bf7
+PK in G2 (serialized) = 10066725aa059ddf522e90f69b88a117f103657ce97727d35ff3a099071687507f27f3e23039c605a9dcd777ba7e310f18d6ff262997734702cbc05c8a09b582953b2c4b8cb6dbdf91556e440e46b8b0df14b76d09998fd65dfc6c4c9c72416d0203126c44cb09c037c7e040f6051e9433d02006866047852ceae6beb6728cd5b8661484c4368f33ae924d047dbdc56314fa1e79c85ffcf08c07d8b6e93a078e58fcd275f681390ceba515b955047448752ae021b3bf6ffad1a14f37a5315bdb
+PK in G2 (compressed) = 90066725aa059ddf522e90f69b88a117f103657ce97727d35ff3a099071687507f27f3e23039c605a9dcd777ba7e310f18d6ff262997734702cbc05c8a09b582953b2c4b8cb6dbdf91556e440e46b8b0df14b76d09998fd65dfc6c4c9c72416d
+Signature in G1 (compressed) = 8fe0b08c1f64379957448351cbff3748e5320e60d5e4267636e441e92c86340486915e4e512364ea82fd98f17f4ff969
+
+COUNT = 17
+IKM = 00112233445566778899aabbccddeeff102132435465768798a9bacbdcedfe0f
+Salt = aafa373bf008a855815ecb37d8bd52f6a8157cb5833c58edde6d530dbcf3f25d
+Info = aafa373bf008a855815ecb37d8bd52f6a8
+SK = 3d7acc4a4f24fb9e289bfe9d3dff5702e1ca68f63776185a586c9c82514c8b97
+PK in G1 (serialized) = 01fe18601e8ccade0721c343483ac75b8320e20efa165b3f52bb2416c438238b4ceef24b03b4aca8b8c0c301b41900c919dbbc86b8da24d66d5788cd07d16fe5994f4767f0e21d0bc4d549af4e6661408a4a13b7f23e5ccd8f358781b993090c
+PK in G1 (compressed) = a1fe18601e8ccade0721c343483ac75b8320e20efa165b3f52bb2416c438238b4ceef24b03b4aca8b8c0c301b41900c9
+Signature in G2 (compressed) = a4661be7577830ea85145e3d882e0ae51db67af1028759148e16b1f5f640daa16ef613fab865749816c152b66871f07407cc4f53442d1f09d012772d32a7d8389b40bfc8c56e7d3896fee497d4ea7c4491aa8d9cabd77461517cb745341b6b7c
+PK in G2 (serialized) = 058db830c45d2264db4b150a42162aa651b58c82e3256be639e169416b0ef3926929b9f12ae0e2965c0d30897a6e8376189cd6fa82757709627c1c0cfee54dbb9cf193173a54edcbecf2b15a6afb225a74217bfa5115d2d2628de526d5a34265092bab32bb9b8fc3f8c2b79bf5a46a014d9f900769a0f312c2868183351f47ff29fb146e2e40cdd5ff0cb12851267551166b783b212f75c1e4a9a54f2de10f409939fff2b4a7f8ff305be067abe982aabb1baadb2cf0b2e86eaa536a1a2818eb
+PK in G2 (compressed) = 858db830c45d2264db4b150a42162aa651b58c82e3256be639e169416b0ef3926929b9f12ae0e2965c0d30897a6e8376189cd6fa82757709627c1c0cfee54dbb9cf193173a54edcbecf2b15a6afb225a74217bfa5115d2d2628de526d5a34265
+Signature in G1 (compressed) = b5a26e57639ba404f7d738b083aaedec142e15ccade73d8b1a9ccfff3a750fb738e0f0e4caab333c0e4984044909a31c
+
+COUNT = 18
+IKM = 00122436485a6c7e90a2b4c6d8eafc0e20324456687a8c9eb0c2d4e6f80a1c2e
+Salt = 9ea6c66f060ee987e33001b7872eae6a0534a1134b5977271ac033f539e36fb7
+Info = 
+SK = 67f739548e43eda00674f8d806abf55433aef78dc7991e1217ed5515b043d4ce
+PK in G1 (serialized) = 13a7251f15b11366bf103e79f62ba9b20a73d3a4482620e6c58228047877ec6bb89221a4d4fcf6e65440abeb490ed8ca0fa3347583de21c87427e738b354e80179ecec65399f7d70443855ade33740803e7d53a918ec809233bda6c29ed01c82
+PK in G1 (compressed) = b3a7251f15b11366bf103e79f62ba9b20a73d3a4482620e6c58228047877ec6bb89221a4d4fcf6e65440abeb490ed8ca
+Signature in G2 (compressed) = 9332959d682fca952c3f99d5f7617a4ec87e65fefff9c32f5f6735c5ae0a5e474067a5e7c48da2c46d9b47be2f9c39d9146f2be08cffc96949765a2b17d1366286e0f95b6968addcf8d12861179e3e1b33d4daf3df82e1fb1a8c4c9d06f3c146
+PK in G2 (serialized) = 013295e053893e39dcdf44f474022a9ceddb6e8f0665584ec229b6bb12853dc5bb65c4369eb5defff67fb019022fff4f11487b0181660b53994067dfb3001e3db8a18c76e807ebb3dc241d82c380f68963b9b0fb18e9729521472a8a9ae837cf0a9432953489d371f4808c5006d84737ff4313f8a49954897d908e44f7a3d6d48538e12a4c30076eabfcd568f3e9600e187156e93834fbfcd5a11b1638316ae5acb6ca543219e0b7265611116600bd1ce530df2bc204c9190ab6ba1ce4cfdf3b
+PK in G2 (compressed) = 813295e053893e39dcdf44f474022a9ceddb6e8f0665584ec229b6bb12853dc5bb65c4369eb5defff67fb019022fff4f11487b0181660b53994067dfb3001e3db8a18c76e807ebb3dc241d82c380f68963b9b0fb18e9729521472a8a9ae837cf
+Signature in G1 (compressed) = a4863c4eaaeec74881f25beab80b5dfa3ac6332e939d32a771318f44d4afbd2736353c226ba05e7d79e2ac18bbab6b56
+
+COUNT = 19
+IKM = 001326394c5f728598abbed1e4f70a1d304356697c8fa2b5c8dbee0114273a4d
+Salt = 50014c614933d97d0b6a3313931c0ac70944ba4fb61247e5f322cf23720dc3ab
+Info = 50014c614933d97d0b6a3313931c0ac70944ba
+SK = 03ec97d38f9c462a80a8bde8fe60b73f7d3cfbbb027afd4eb3dded3b72f11e23
+PK in G1 (serialized) = 16872d7d399ffd56154ddd614cfd7e95e50edcabffcc9871516c9bab010b2a6f14eed0d025de29d9989b19791f583f460b00e01ec838c8733bcc29776a691d615b8f867784faae693f3e9a36475f901035dceb522829623916a614ce03b840e9
+PK in G1 (compressed) = 96872d7d399ffd56154ddd614cfd7e95e50edcabffcc9871516c9bab010b2a6f14eed0d025de29d9989b19791f583f46
+Signature in G2 (compressed) = 8f4320c625e9817761b75c4943207c4a475862b443317122b105d225f1060f77bfdfa6b5a1313459e9dbda16a52f545c0712a7c357582e4d5ad24b3c17dd1f613325b5c9c297376a0e44943c98c5be326ed88f5924a49bf390de5994d7cdca0e
+PK in G2 (serialized) = 0c1c4122814367160a7bf7c01e0da8663178ad7d5e18b252e0f05da246e71e7cdecb97706afe62b2fe55349a05c48fdf0a13e25475554880495e2c4227ee1c095be986c41fdc67a34ad0751cd69f83e718a4441e4c3e947d16c8a754d50884bb0152ac30de7a12329bd1a67c14e6d830a5f92464d194944414643c18cfbb0c3ed72b697e3024c1d66ea30e1e20b65825112ee52830f5029df53aef10a0cac8b3caaa7fde566f2dea05fa5babc3f8db243129c816f64e51dc1b7671ad748c2d47
+PK in G2 (compressed) = 8c1c4122814367160a7bf7c01e0da8663178ad7d5e18b252e0f05da246e71e7cdecb97706afe62b2fe55349a05c48fdf0a13e25475554880495e2c4227ee1c095be986c41fdc67a34ad0751cd69f83e718a4441e4c3e947d16c8a754d50884bb
+Signature in G1 (compressed) = a5b6a466d942aaa1bbd4742e9852efe66a87e830f12a02efd460efbda887b17794e4dfa12303ebadabce54b083cf42e3
+
+COUNT = 20
+IKM = 0014283c5064788ca0b4c8dcf004182c4054687c90a4b8cce0f4081c3044586c
+Salt = cd9b08e074bc842b721a1eb9d0b8f7cc4e714641703d8a1f4bf938ec71234cee
+Info = 
+SK = 5802d0c0f94d6bcdac301fc75a95d0474cfecd3e707f5a4ae87eaaf765686ac9
+PK in G1 (serialized) = 12dda55691c967119b724a9ce7050dbf7f9079d3dadfed7cda322f3f585ad2ef438c9c0759da4342ac614b585db1896f0ca80356e4b09ae459ba1a0745e6d036bc362eac72add2cce69488c3f3c07e87d64fd7bdcf6425163ca92d367ff8ccb7
+PK in G1 (compressed) = 92dda55691c967119b724a9ce7050dbf7f9079d3dadfed7cda322f3f585ad2ef438c9c0759da4342ac614b585db1896f
+Signature in G2 (compressed) = b5261d02ce3488c682e13f46d737a23b7378838b24e91d7dc5696cf08a598cf13c623e2081b6c7648caca8b10ee2123015bf40e129c97702b8f7a90e6742d9265248a9bc66f96f946654c506863ecc16ea8f45cf9fbcc646812ab9dc631e988a
+PK in G2 (serialized) = 01e0efd03361dacfd8b519a9b80e5c3c9c5c9433060dcca7e2949e040d140dc6d6a688c3d7ad5d1c245f60b2130d6ba4199a00f2d4425e6b0bf420e70d479902c2a434e285370c1523835ba5dd09492819691e52551fc0cc18362e731bf931b411a87abd620e6ed30b5cfb35f2fab04a937091868ddb8187ec3f6c73d72b167353ec092b6935d947a09b3cc52062e5c7020f62a8c85ffa4c7fdf4ff1f2266d4c820bf9fb8f675261acd9151e4bda0a2a2d62740edca3d76e7f36e2094265f5fd
+PK in G2 (compressed) = a1e0efd03361dacfd8b519a9b80e5c3c9c5c9433060dcca7e2949e040d140dc6d6a688c3d7ad5d1c245f60b2130d6ba4199a00f2d4425e6b0bf420e70d479902c2a434e285370c1523835ba5dd09492819691e52551fc0cc18362e731bf931b4
+Signature in G1 (compressed) = a3439d4d7342bfcdab953a03cab6c32dd77eb22a273a17fa6d24a88e35085d7f0b6f8e78a764d575dc0cb9bba7ef64f9
+
+COUNT = 21
+IKM = 00152a3f54697e93a8bdd2e7fc11263b50657a8fa4b9cee3f80d22374c61768b
+Salt = da4ea82c004b28148df4b7bb7c5c86671f30192a955d3b75be4e2d155492b982
+Info = da4ea82c004b28148df4b7bb7c5c86671f30192a95
+SK = 550012a4a39bf498229f8e3ad783cb488666e07205f197ed445ad0a844b88c15
+PK in G1 (serialized) = 0546b15e4f00367b323a8cf7320d3859c0a7720e7a901bfb43d1aaa849f24927dfc217948cfdebddf5a40c3c69fd32be0de048a8ec0a27108360d58bd02e837c49356ea317f7ce679ab01ccca14697ed2decca675b916d2bf948a4d738649177
+PK in G1 (compressed) = a546b15e4f00367b323a8cf7320d3859c0a7720e7a901bfb43d1aaa849f24927dfc217948cfdebddf5a40c3c69fd32be
+Signature in G2 (compressed) = 84c41aa59693cd3be15e1d9241043bd8f62dce2519144f692249c46d69c9de3eab776e339729a6d5d9409484d1b45e3a0f95060f8430f6bd7b4c2206e8186106c684359fdf0a1230458128bfeae668c100348992ea34dbfae49d76674eb9f820
+PK in G2 (serialized) = 18c942cbc17f17615b551a2afa945bc630098e31b273c3640255004dabbab51e96f49451e94778f71edbbc2aaa08f9ff03622ed8fd3a4eb7b1c761a665694ffab15699871d3dc5a7f087ba384dd32c8a145035e62fa23f5adcac2d09bcb9171917c2ad187ba520bb072c8c9371be425f45768cdcb1f0d5429e19b2a41a79f9d951b4315f6a0560dcbf0975edc2b27c7515555393044603a867d59a4a42397b5c2c135614dbd0669c4cb2e6f32ef093c3de8b6f528734ac56fc2f555ff6170f71
+PK in G2 (compressed) = b8c942cbc17f17615b551a2afa945bc630098e31b273c3640255004dabbab51e96f49451e94778f71edbbc2aaa08f9ff03622ed8fd3a4eb7b1c761a665694ffab15699871d3dc5a7f087ba384dd32c8a145035e62fa23f5adcac2d09bcb91719
+Signature in G1 (compressed) = a8329a9e7f8048d5e3e2d9e3b0986b717e6c80eaa2bf373a22bfa6d748929d6dbfcfba55fe7b332d318bd1d8d33437fd
+
+COUNT = 22
+IKM = 00162c42586e849ab0c6dcf2081e344a60768ca2b8cee4fa10263c52687e94aa
+Salt = 9569779191f3ddef8ee6d4c1277101e5551606bc0905254cf28f748ccf5a8960
+Info = 
+SK = 585162bc195df26fcd0e0172402d154f27cf722b65144dd950b399bc36d1ade8
+PK in G1 (serialized) = 0e93eee7acb7753c441ed7972c8741abd72668ef1bf4288ab9b552ecc30490429404fd7c4ae2643e85c49eda89e70c1c073556665ebb6ef6690e33a06c7386b6011c11782173475900ee9d3d49fa202794112d22c37c4ee16b2b2681b7d1ed81
+PK in G1 (compressed) = 8e93eee7acb7753c441ed7972c8741abd72668ef1bf4288ab9b552ecc30490429404fd7c4ae2643e85c49eda89e70c1c
+Signature in G2 (compressed) = 8b971cda1ac98c3e11787218dc2c8fbc58a4f2a1d4e8494246b048ee3248193f1801c798ab7ca7bd85076bb36cb0fa0403b838bd97935339c5472268cb85faac9a3fd029c9ddad4df70532f0e7be1012a7cd9c1ef483758b8e6878c1b9449461
+PK in G2 (serialized) = 0b025f17897ca4d14b0c9a2c113f17275349fd921f698c1b42e327c0fdd0c87c82ed1488ec8fc049dcacca38dea65ddc0464ad08c86ff2c4c0c42acc1e5552d8078d3267ee064a38c5c10874c0d0979b756608d4eb876ad6189ab80f7f195e7d18824a7e7ccdb75718658c59372bbd6dabb755ca5c14e32b7a2ccf4647206d9b710018442e33b3ff689953d17c6d5f8c092475c18d2021c271ea6222e66a53c89b714eb2fdcef263dacc86396128a0b82bafb1035501c6b1e2e4767c899071de
+PK in G2 (compressed) = ab025f17897ca4d14b0c9a2c113f17275349fd921f698c1b42e327c0fdd0c87c82ed1488ec8fc049dcacca38dea65ddc0464ad08c86ff2c4c0c42acc1e5552d8078d3267ee064a38c5c10874c0d0979b756608d4eb876ad6189ab80f7f195e7d
+Signature in G1 (compressed) = b3f6eebfeab93117acdfddf59eb9b9a6d6f2681d7649e133671c2d008245e231e74d3f332fadb0e2b41886a83e46c19f
+
+COUNT = 23
+IKM = 00172e455c738aa1b8cfe6fd142b425970879eb5cce3fa11283f566d849bb2c9
+Salt = 3217a2d624a61b140509c2d7ebb7c466284cb3b32d95761abe401349781290cf
+Info = 3217a2d624a61b140509c2d7ebb7c466284cb3b32d9576
+SK = 48558ed1eaa46d36a5fe88f8db3c89ff5ba7d622222f0a2ce8551f3b60a6985b
+PK in G1 (serialized) = 190aa4f84661d458a638c61768f5eb8e3346608e34eb449026177f67d27753c2bc90d53456ef4e20935ea29857416a0a159669486e3fb276ee7d3a71dd60e8681e18ac9ab68a00e5dbb858240cade67cb0c8cab5086abce336f31fec1497a593
+PK in G1 (compressed) = b90aa4f84661d458a638c61768f5eb8e3346608e34eb449026177f67d27753c2bc90d53456ef4e20935ea29857416a0a
+Signature in G2 (compressed) = a4a2b41eafbb4d7cbfa4d616fe53dabcbeac78d1d7904513f93744ad216b49153dee1958a7e20546a5c45c4da0e746380634b4aa8d3afbfb71e71743b48f90cf5fb8204094263aa77e371dbd121b9e093b0eb804830af08c290eef6b26fbdb6c
+PK in G2 (serialized) = 00ef0b96901fbe3114d77b8636d0cd0fc2e8132e306b2f0846cf01022740a73f31afaa5d78a0127e45ccfe219c2fffa2130aede6a0fdede6f16c34aa0483daa1501efafa5ab960c8129b2f9b22394fdbcf77539828a585c105bd0fadb5c3726f15ac32b70eafea81d895eea097b449fe19d8948db85f1aad3e59a1f2c514b74f39864507a42ec7c643b37f7d29aa470907b7234269cafadd3647853f4a4d1e42c9c518e7fd3dcba1fe089cba0b63f5092e826b7749113372d266639739ba005a
+PK in G2 (compressed) = a0ef0b96901fbe3114d77b8636d0cd0fc2e8132e306b2f0846cf01022740a73f31afaa5d78a0127e45ccfe219c2fffa2130aede6a0fdede6f16c34aa0483daa1501efafa5ab960c8129b2f9b22394fdbcf77539828a585c105bd0fadb5c3726f
+Signature in G1 (compressed) = 8366a1f133d1da499d582adf2efa8c0612cf3a9ade3cdd45331d025ec8cbee35619ec5ee3595aae59b925c65091095e5
+
+COUNT = 24
+IKM = 00183048607890a8c0d8f008203850688098b0c8e0f8102840587088a0b8d0e8
+Salt = b48b31d73fc3a54cb72a735df41121f1714bbdb38a7868ee119655fcd6b6b423
+Info = 
+SK = 02d7e536354e1d2e21ac2fc9cded56d3d5b8270bfca61a8ec0804580a74ded0f
+PK in G1 (serialized) = 163e503c9556eb3f7c6c7ae63c1d97fd5b582cf6501b47182dfba875d975a7430954a14efe5fdf50ed0f05b8336a202e05305dbce09758cc929a5d855ace14f7f4fddbae97227444f9e1934dc9cbab3579493cdceb54b8c44e1c671e6f7eaa39
+PK in G1 (compressed) = 963e503c9556eb3f7c6c7ae63c1d97fd5b582cf6501b47182dfba875d975a7430954a14efe5fdf50ed0f05b8336a202e
+Signature in G2 (compressed) = a089de0d6f8c83c5256a408920588df7c138664203b3c367f6cfaa1b3f07f24b98e979f1b13fb34464ea217de4a73ec31840c1f27e41365d77ce9cc9c8a7f641c531e5d744c51987498c411e87f2430cfa502e6dfff4a4d643432d422faafdf6
+PK in G2 (serialized) = 0f35b69e352cabacafc6e4e5895c5ea4cb3d20bededacdd3e5d3a158bf20a24e9dd9a0051344387e6ec0240031090f1718667977459ed0ef4f45aa0c731d57863350983e2acb342ea52a61ce95050285c963b9a00d75739c13e52cc4829e8ff614eeb5510a213421f87683ddeaacef684d7a111b2eb486c04bb62d43370ec7ba9d4476b6e066c1be0b3cabd7c42cab92192b0663602e46892c706d051d9bb8603a6202ac03cbd102e2b2fe513af466b4391d5fe135f3c6b9f35081c58b31d1f7
+PK in G2 (compressed) = af35b69e352cabacafc6e4e5895c5ea4cb3d20bededacdd3e5d3a158bf20a24e9dd9a0051344387e6ec0240031090f1718667977459ed0ef4f45aa0c731d57863350983e2acb342ea52a61ce95050285c963b9a00d75739c13e52cc4829e8ff6
+Signature in G1 (compressed) = 9182e55b648d516c817cdbaca31a016c4fda45cc5696f9f1879dae07a51707cadfc2a5148e7c2e7c03bb0cdb89d8380f
+
+COUNT = 25
+IKM = 0019324b647d96afc8e1fa132c455e7790a9c2dbf40d263f58718aa3bcd5ee07
+Salt = b5acd9203d3f8e7c3a67c1a8198224aa90951327b9af43d28bf97480dd08247d
+Info = b5acd9203d3f8e7c3a67c1a8198224aa90951327b9af43d28b
+SK = 4ce2bead8febac381349975c30af5d5490f97f4a4714ee2f2e339e441d86aa86
+PK in G1 (serialized) = 0d620eee0f736115be4b7b1103f23508a3a303d52773c49fc1ea607098de78fe1412eae7728be687e839517113f7fbae15c22ff3c287da352e789f5f94003d9fad2458c8d32c0f794dc998c89deb3fca0ceaa7bae93a4f95dbca169d803e303b
+PK in G1 (compressed) = ad620eee0f736115be4b7b1103f23508a3a303d52773c49fc1ea607098de78fe1412eae7728be687e839517113f7fbae
+Signature in G2 (compressed) = af872d7b627040c666883094a0b5caef16afb38587156e50df3277fada5bda9e570341c4a558bf1f2ea6cd0f9d9d238311e146e661a9a071c1f4d673c63600fd776baadf7e11734d76720d2cb7b5f48d22658c625744e16f9a814f29c6fc4dbb
+PK in G2 (serialized) = 111e9dbd55d0d05b3ba4b0b94d8f99a72d35219d40c7cf127c4f9b2425b9cc24f768e506a280761ccde4d17aa689508703ffecacffa809127d8655f217fd6faceaa288136418891dc2b756c621c5ba17c6d88f5553d4a890ab3a31ef2d43ece70cb6becf9e4999ae18e138a2e474f731985a2cf5621fbe0ed8e7c5169db64c11fc3ae7be24b9f5b37c19eeaad8f157600060609896b2760f57b5d01025d40e0735396941df30c4144a177458937a4adc32631145b4bfe3dc395e33fd5c85bf27
+PK in G2 (compressed) = 911e9dbd55d0d05b3ba4b0b94d8f99a72d35219d40c7cf127c4f9b2425b9cc24f768e506a280761ccde4d17aa689508703ffecacffa809127d8655f217fd6faceaa288136418891dc2b756c621c5ba17c6d88f5553d4a890ab3a31ef2d43ece7
+Signature in G1 (compressed) = 81ab58d1fdba95af24336afbf5951b34479ec9e0ed8bfe10cd16b96bf187f4f74a9965fef6aea554cea8a7c46e5b5f48
+
+COUNT = 26
+IKM = 001a344e68829cb6d0ea041e38526c86a0bad4ee08223c56708aa4bed8f20c26
+Salt = e43ddd660d60e6bba658242fb4eca80777bf456a616328f512209fcc8bc4f5e4
+Info = 
+SK = 277d8fa87b7bc81bb178e7a982c45885448a7f79dee51658e86684333e1e0a4f
+PK in G1 (serialized) = 0acf2ddb3f8cf661e4b86d175fb74083ca2ee0ea0b7a100604094fd40ab925f04b6d336aadba08d608dd7f567bdbdc2a0d30cd6c97a4aadd0109b0f7a052995bfec5d45e69d60b1f8817c45267845e06cd8eaad354b698fd5e57c56af8fc72d5
+PK in G1 (compressed) = aacf2ddb3f8cf661e4b86d175fb74083ca2ee0ea0b7a100604094fd40ab925f04b6d336aadba08d608dd7f567bdbdc2a
+Signature in G2 (compressed) = 899167b8d9956f5eec22e9f7866547c73504aa1e5e27915ff23b278e31e0085b4301842a2ee0b16318ecf8cbc5b8afc00c992e980049cc6ec9f7c3c9bc13734e02fdd55135dee723646f0bac2912f9122c88e8f577f10c2a3e086135d196fe83
+PK in G2 (serialized) = 07da8024e0c4d086c6fec4241ef4920ba3df11c4fc9d675d7ff95376dfc9e677fe61343757031bf35a61154e63010dc517155b55906b838c481f5dd8bf96f27f737d19e684db8327cf80464adb31c1f4350b0996e233d69c35016b1bf80df13f167471227b82cd61399a4a6bf465f8ec153e1c90681e391cb2917263e038580a9061f04efa5bc732e9f0191a23ccdede0daeadebbd6e66cb1e25a9f46fc42fd09fcdace2437d724c31b912b7186576119bad547311f0887c9e708e39cd166ec9
+PK in G2 (compressed) = a7da8024e0c4d086c6fec4241ef4920ba3df11c4fc9d675d7ff95376dfc9e677fe61343757031bf35a61154e63010dc517155b55906b838c481f5dd8bf96f27f737d19e684db8327cf80464adb31c1f4350b0996e233d69c35016b1bf80df13f
+Signature in G1 (compressed) = a293b532a31c94aa3d2d0b3a0ffb31145183a21e5d5b090e8493a66a0ce5c7fa8a9e1d475cf36b6a1a442de0d8064fd8
+
+COUNT = 27
+IKM = 001b36516c87a2bdd8f30e29445f7a95b0cbe6011c37526d88a3bed9f40f2a45
+Salt = a6be0a3f9f31e1753bae278fc1f2b0ba2d6344c5df4248d52c3d318cc0d6e45e
+Info = a6be0a3f9f31e1753bae278fc1f2b0ba2d6344c5df4248d52c3d31
+SK = 42b6783b38190dac537aba3ec859608faefee056fbfbc77dd723d535b2c1a579
+PK in G1 (serialized) = 08aadf0ec5d5ff9bd454877c8bd25b52692930bdee94f808762e1ad33aa55f04145bb839c8fc5cd7403a18923651285f0689ab62dcf779432230a2d069636ca31f6fedd5dea9de9dbdbbdbca5ec531507495d7ede8004a927cc52fe23ad8e064
+PK in G1 (compressed) = 88aadf0ec5d5ff9bd454877c8bd25b52692930bdee94f808762e1ad33aa55f04145bb839c8fc5cd7403a18923651285f
+Signature in G2 (compressed) = b982a444ba92517a1aa554e9279db27536c166ebe71071869acae152cc88eb9f0274d910520c1ef4a12272b7413505c9025ac0580fa9db99b37dc75527de59a87a1a47739f3f6af9a5fa83e93b6a0f9d63c550f43cca690b587d04f92c386a62
+PK in G2 (serialized) = 181242b15bb75ee51d4f1d960ee1b19aa14631f903db230a7cddae15c59ac0da1dc15ef5323b95f5426ab0081554faeb1608732cacd3c0273665440e7ebfb92a677f917a0e5c4ce75fa1ecb06cc613ee30d7e1885864d8be8ee85c03f576185411a733b9a6f466d26f7ff566d3be81f45cd403099b24fce9a7770bab2474fc443c7018fbc25ab13227ff5c4458a99f8814b1e92cce865de741ddee95a07337cb26f411b5153ac917862e23f383a1c931320f1147d347dbb0e961eca8565f4aeb
+PK in G2 (compressed) = b81242b15bb75ee51d4f1d960ee1b19aa14631f903db230a7cddae15c59ac0da1dc15ef5323b95f5426ab0081554faeb1608732cacd3c0273665440e7ebfb92a677f917a0e5c4ce75fa1ecb06cc613ee30d7e1885864d8be8ee85c03f5761854
+Signature in G1 (compressed) = 990be8aab171c4eebed4679945402e7640300b7d42bec103882d053d8ad402d0690de6532d8bdc66a51f6f360b2d44cb
+
+COUNT = 28
+IKM = 001c3854708ca8c4e0fc1834506c88a4c0dcf814304c6884a0bcd8f4102c4864
+Salt = af21d343b7404580dde0fbcb38fae0a537086952fe2860e34e9bab62aee1f974
+Info = 
+SK = 0a190a4495ad7c45df3e6986fdc3df5f9319ba6374928a8e6727ae4f4bbb671b
+PK in G1 (serialized) = 0a9f4b8b0f3ad6a387e647a0e0f12a3732d9a80c1f9bcafac9fa2ed8343823f8268f8a1f6fd52d8ee0741d159cb4bc6510e6d9107d1b2a7b80f90e85e41365efbeec9692c46fc70743f6ea7b13d3847faa4f3183517114f42dc128d7cb7f52ab
+PK in G1 (compressed) = aa9f4b8b0f3ad6a387e647a0e0f12a3732d9a80c1f9bcafac9fa2ed8343823f8268f8a1f6fd52d8ee0741d159cb4bc65
+Signature in G2 (compressed) = ae8e16096531d6c6f1635c92aff0dcaeccbed3575b7ef0aff525c39a29878433b9dabc242722bc019b814e44b5b46cce09984fb1b56a3d7e08b16912063b1edcb90b6ba44344e51b679a8b275317391bffaccbd40c37cf521f5dce2457b3fa2c
+PK in G2 (serialized) = 0b9b0ac0b71acfcb441f3d9bc074aa51a29896d43769fe2dbc08b7e44ee1a0abbc08b38fe138040e0d8ef13dda025e3408b9c85b27062c91e03eba94d601a15c16d40ee458114461e5b7beea11d6cea140e21cca942d6e878197b1af36998bdf0491e2df74b5e70bd69c452446cee420efdc88707defbf59199dde4b335df89ce8f674d2aed0397a752bdfa32de0918112de337a2bae58ff86f4c85e935c1cd7df71e4ad802de0b0e21d6a69598659d9ea2d44a93c662e89b02a76716ad22fa1
+PK in G2 (compressed) = 8b9b0ac0b71acfcb441f3d9bc074aa51a29896d43769fe2dbc08b7e44ee1a0abbc08b38fe138040e0d8ef13dda025e3408b9c85b27062c91e03eba94d601a15c16d40ee458114461e5b7beea11d6cea140e21cca942d6e878197b1af36998bdf
+Signature in G1 (compressed) = b673cf51ac274a758d943244c60e3a0012960a125cbaebe8fcc6f617429052b137e07a97ce37116be88b4431e931340b
+
+COUNT = 29
+IKM = 001d3a577491aecbe805223f5c7996b3d0ed0a2744617e9bb8d5f20f2c496683
+Salt = 34cc9ee4e25e31ad1709ccaef7cea5784502f3a664a931561c002cc92633eec9
+Info = 34cc9ee4e25e31ad1709ccaef7cea5784502f3a664a931561c002cc926
+SK = 722e5da6833f78ce91a4de51bbcc759b9c0d6e5703cb291e21c5d642806c8cdd
+PK in G1 (serialized) = 14c6369c48da656c5b036e4b172c834f1cb2c3570c3d196513ff63ab65a0249e4dd1ffdbf9fda6dddee63edeeaa7ca5a110b78d9d83760cd5b059c7c4e5083473efa549c9e02bd38d2aaea7d852a8c2a7e5d7f9b356897916cd7f484df83caf2
+PK in G1 (compressed) = b4c6369c48da656c5b036e4b172c834f1cb2c3570c3d196513ff63ab65a0249e4dd1ffdbf9fda6dddee63edeeaa7ca5a
+Signature in G2 (compressed) = b518a6295dce1333fee1a66d2eb5018b7c1701be007c8280192d092c42b2a61563a0875f47e95168a27b1a2d524572a90ef98c3be23b65a53d59e834ff77daf0c8e5a7882373136b78df1a6afde675bd63f3d8e97e599ee5b3874d09674097c7
+PK in G2 (serialized) = 002a1f3f34114eeb6c8f30fc596aba3a445d436d3ab205cfa13fbb65e20213bd9d7a076d2427cac4391004cb77b886020b2166b6562c697617434cf99a9857b09a78871f27aada2d70014a4f4fe4e189a8d812fb5c70ff74be97057d3dbf9b520fe13dcfa09faf27cc97790d63e5842fbb72254116aebfa74da9fde2f86a1531d0bb65f2c8fba25718f4921c017aac2a18d0f4800b7dda656a4be4c1f49a7f5e2f2600b7d31541031e17ac469d4af9c465d04c8a98c2052121acca282fae755d
+PK in G2 (compressed) = a02a1f3f34114eeb6c8f30fc596aba3a445d436d3ab205cfa13fbb65e20213bd9d7a076d2427cac4391004cb77b886020b2166b6562c697617434cf99a9857b09a78871f27aada2d70014a4f4fe4e189a8d812fb5c70ff74be97057d3dbf9b52
+Signature in G1 (compressed) = a652046bc19722fc7924999a41deefcc01f605a48fbfad7405012ee1ff96be703fda8dad354a81e2d5ee6569e8c8ff39
+
+COUNT = 30
+IKM = 001e3c5a7896b4d2f00e2c4a6886a4c2e0fe1c3a587694b2d0ee0c2a486684a2
+Salt = ff160d6bcac0dd35b6acaf035b69ca8dda8675b74999563f44973e44ca899557
+Info = 
+SK = 4e7edfad9a4523c1ffacd2562ecdd7e1d77e26c160f72b20b441d1f791643c27
+PK in G1 (serialized) = 01c8ba7c091d6b55dd6ff8f9685914112c92b9cc74c35d89fa08518a6a5be1342fed8fb29b13ae379e38327299e72cb3083cfcba5780eef56fbd4c722aed6f1f5003745b29c79ac2856db448b6dcd6f604252b2c0dee94e0a3363e04feaeed71
+PK in G1 (compressed) = 81c8ba7c091d6b55dd6ff8f9685914112c92b9cc74c35d89fa08518a6a5be1342fed8fb29b13ae379e38327299e72cb3
+Signature in G2 (compressed) = afe40f5f0723b7a6171dcce0c2fe01d4ab05c7ae3c0a1c44287ae98f88bb2ff021f5f94b78288aab590c0291afff19110f6c18ca67dcce88257ab05ed5d3119bc951825324a15aed61c12bbc88998c32dd02a8cfc924358fe1bd178344fb2767
+PK in G2 (serialized) = 15c5e754d9fdda7c909eda09619675ecee22c6b785c41d344be4fda1f4863159b6b35c2d9bf95add8425b69ebf4eb48207076dec72207125e589714916eaae8deab4aaf676a67bcb893cc21012e125302818baa6802f0f8e3da0a706578b50f20fa4ca16d9bfe741049d17d6d1018b96f63180a9a7c6a78b3bea0761079f9d1aa3bfa63dcdf7dde3e0fc751af133581914a074fc58db37aed09e3a3d555f466b27f9184a47b5ecb17037466f5278b4e48e5a4f463d95c425e6e78b1e20f4d693
+PK in G2 (compressed) = b5c5e754d9fdda7c909eda09619675ecee22c6b785c41d344be4fda1f4863159b6b35c2d9bf95add8425b69ebf4eb48207076dec72207125e589714916eaae8deab4aaf676a67bcb893cc21012e125302818baa6802f0f8e3da0a706578b50f2
+Signature in G1 (compressed) = 9554c91de2a8aadf7c2211d8a9c11bc8fce6dab254d6c6f734b5dd24b4fda14fb6d8d746687ad345e00fbfd3c77233ce
+
+COUNT = 31
+IKM = 001f3e5d7c9bbad9f81736557493b2d1f00f2e4d6c8baac9e80726456483a2c1
+Salt = 0828fbe8068521d9003508f0b4015c9c2d3d86008a49a8ff12c1677104837871
+Info = 0828fbe8068521d9003508f0b4015c9c2d3d86008a49a8ff12c16771048378
+SK = 3517d203ac12121e679c514186f1e2741a76fa3adb6e6e73116a5a21639633a8
+PK in G1 (serialized) = 02084c291faa158b6ce7f4f85f643de557bbf20fb3889be83d2a21a9acbfc0c464a00201ec1581460c86dee11948142e053f15faebc23ea2d1c5403c8ca0bb6b8de4c6df0e344407e93fe580aeb4b0502fcc63b751582c0ded77d623c7217224
+PK in G1 (compressed) = 82084c291faa158b6ce7f4f85f643de557bbf20fb3889be83d2a21a9acbfc0c464a00201ec1581460c86dee11948142e
+Signature in G2 (compressed) = ad57e180d3247aa4d3d897132f1dcbb5d8976cba4c8664c2fee13f803a710d610d85788262073453abb34136ce574b430e68d46f0265d5999ae992ab812e0f3f2e0672f05f2fa4ac9768383aee9e79eab705c3cd7989d80c585999cafa61b793
+PK in G2 (serialized) = 0331e7030c4d77b9f3bc30a730ffa50691cc90f94c8228d4d68944ab585abc2b1a98c1cf81f7db2aebacabbaabb71e6003706e2b49516d6b8f0becea15d21e39d2d85e1cd1a573dcc44579b109afb7e7ab88f98ac17e4782b9c7471eafe2c6d50fede9edefe12d1d9ec28ed5f5742f071b16070916204ed7fef2d41d429c81df4bf085c323f381049e9a6af15f05793211c2147b7797425d28f2dac7e935749fddcf876b4a1ca0c0e55610c56d4a9e9fdd26da54c2c6a31ee2f5d310d7834f06
+PK in G2 (compressed) = a331e7030c4d77b9f3bc30a730ffa50691cc90f94c8228d4d68944ab585abc2b1a98c1cf81f7db2aebacabbaabb71e6003706e2b49516d6b8f0becea15d21e39d2d85e1cd1a573dcc44579b109afb7e7ab88f98ac17e4782b9c7471eafe2c6d5
+Signature in G1 (compressed) = 8c75540fa55be6cce1850be1dbba560d151b797b5a5617650cd792accf728e2cfb4f350d6fb700a6b1860f53fa78c0cb
+
+COUNT = 32
+IKM = 0020406080a0c0e00020406080a0c0e00020406080a0c0e00020406080a0c0e0
+Salt = 67abcb5793d679b6c43b443f36cddbfff43b3b6cb8a83e39ae81c47af84bd48c
+Info = 
+SK = 58d4216ddde36d02daa181db257a16ab1ff57f551c69f4174ec48cdd5472ac29
+PK in G1 (serialized) = 02146607b7f6951749209de7bf8a4859de75f0a2f90f059b2247fd7c6e88154f869416054c98f8ed7ae0af33c820bb2607dc3961b5a7aafa42dfa36750f29a5fb0fea42de5afa9d3496e3dd7a523ad4033e232bf504087660cc8e53823f3df2b
+PK in G1 (compressed) = 82146607b7f6951749209de7bf8a4859de75f0a2f90f059b2247fd7c6e88154f869416054c98f8ed7ae0af33c820bb26
+Signature in G2 (compressed) = 81cf050e894dd0d3b9d37dd2da12a0cfd4156d775fd42334b0c5e7752e44af3d7233bb4e7943d705038f3b98158d1ae013a0f9e384b76b20c0fa5b15bbb7adbcb407abcebda60677d7f4b1fde93fa561b9087543866003125a263e98f93e3181
+PK in G2 (serialized) = 09c13f6fe3a7c86bf49eb7faf4efd928d4722346738ef394ce3a483d79c7d237cdeb4a274d0f6d00b3d212e99c36a706194d47ceeefb88a9821ee06a66c1c82caa48632d209d05a9218aa8402ff7363d24913e730fc90a8b312117f01b4e9d160a623907e6080fadb32c190d34f2be38fafc85048dfb243953b8a1db4b241f66c500e809fcd865cd6498aa81eadb958c0e3b4532e818ce2db60a13946c9d40d66297bbdf29e958cf85dca8e34874032f3bf041b18b58a1e17523fdb974189bbd
+PK in G2 (compressed) = 89c13f6fe3a7c86bf49eb7faf4efd928d4722346738ef394ce3a483d79c7d237cdeb4a274d0f6d00b3d212e99c36a706194d47ceeefb88a9821ee06a66c1c82caa48632d209d05a9218aa8402ff7363d24913e730fc90a8b312117f01b4e9d16
+Signature in G1 (compressed) = 8091e518bc3546f906c90c7f32837d29ddadb6292f643cb11eabb13254ee1841c465aac4eaf7ccdcd52efd106a445fcd
+
+COUNT = 33
+IKM = 0021426384a5c6e708294a6b8cadceef1031527394b5d6f718395a7b9cbddeff
+Salt = f13938d2144003e07536ba759cd9b56f52971f6096bf57d6918cd1084653be41
+Info = f1
+SK = 440a29424035d590b3541b38b5adb25d97e895ed4d7464425e0caf4667a7e241
+PK in G1 (serialized) = 176bb317859b8ef6ca73df81d3dc2a45e6f7467c82012a27fc136f514fb23ba36984e7ca9fcf7d070a79d78127e7c02117a926d2f82a574e58f79b11b4651ba4a73b9ef896ae08d42066b9784d65f2788df1518e3675a5c34bc73d38bcc1fc41
+PK in G1 (compressed) = b76bb317859b8ef6ca73df81d3dc2a45e6f7467c82012a27fc136f514fb23ba36984e7ca9fcf7d070a79d78127e7c021
+Signature in G2 (compressed) = b43e4240ab23d5ab5aaf2ac9d3a604f194c76c50506a344d4549f3cbb4fc33def26cf5f962f63504f594d2adf031112f1772cb1ee36b52169f2831b61857420f728dbc829fa6f8f88acf8e1964ec82660e2022b9efcc20552a226c964c9f337f
+PK in G2 (serialized) = 079c94ebe88c6ea9ffdaa79ae61baabd2987f89dffe76263d338fbfd8b0c127ac52ce04256e2c508f251e19ea47d82190c336a6186893ac3148f0bea59d4e7ca3cd99943fe3df437f9b003d34f3e7be841de261becf6a4c016db7cc87baafc460d90c288b9820e29ac37f4b4153a5f63dc081e4524ff6404db5f91493634211f0d3a752514ea1cbc5d5f3ffb74bcdcff0c72257c65200a56e8467a24189f5c6d1928bf780e5947d2a827c7b9886d48f43683de516bf19a0a3942a24cef549c11
+PK in G2 (compressed) = a79c94ebe88c6ea9ffdaa79ae61baabd2987f89dffe76263d338fbfd8b0c127ac52ce04256e2c508f251e19ea47d82190c336a6186893ac3148f0bea59d4e7ca3cd99943fe3df437f9b003d34f3e7be841de261becf6a4c016db7cc87baafc46
+Signature in G1 (compressed) = 8173cae6465b8b81d43356a5f9169a7596b0a4447fe301e7b037e03f78df73f0fec587309c06be546032d2fd19186699
+
+COUNT = 34
+IKM = 0022446688aaccee1032547698badcfe20426486a8caec0e30527496b8dafc1e
+Salt = 3d1165d03858ce6e9fefadad4ad7e0407996fe44b013d5e85167103d92c40efc
+Info = 
+SK = 165e2d704642794f4d6214ba1308aee593640bd324c37f1d6d7a1149691746e7
+PK in G1 (serialized) = 150c060e3db8c6f47cd4203b2844d62a2ac99ecf4652e931e021c0cb3bc60eeb55418b63a0866b474226e5b2ff86872d143ef86ba02489047fe62ec37e27e8a7ad6628140c9f2ed1fdc1e3889fa9b0480497721254296a8d99220c42d32a0270
+PK in G1 (compressed) = b50c060e3db8c6f47cd4203b2844d62a2ac99ecf4652e931e021c0cb3bc60eeb55418b63a0866b474226e5b2ff86872d
+Signature in G2 (compressed) = b0842be6ccec5e5a1466c6c7889f259387745353cf56f342348aa5a6df096113efcdae27caf059a18a2188f7d5ebf75e0f812eb73cc4d3ab59fb6fdb0b64781641202366fa38ded6c469b1bc47629511cb137ade0a7d4fa8dd874537ac5684d0
+PK in G2 (serialized) = 1410bea7e18b601e3b9f0933e2dedbdfe0380ce73a947edfc6b6e3c61f0c07be08facadb953e5f117d7d16ea2d642e6d04d3ccfcc59b574fda2214d1cd46fb0f5609dc7d8ef6808eecd50b54c221603fb95aa29cd76bb829ea56fa7e504582e916ef9d4b9457fc8fd76c870411ee36266804623bd270edf41cac4a15decf47923c4ae158d60b1ef0bcc66a0176f0cbaf188393a4f4af85a23de094e605cf06c30aaa7c835c6ba1c99128bb3b682608d397f1766c0393801ccbae6e2778ba8894
+PK in G2 (compressed) = b410bea7e18b601e3b9f0933e2dedbdfe0380ce73a947edfc6b6e3c61f0c07be08facadb953e5f117d7d16ea2d642e6d04d3ccfcc59b574fda2214d1cd46fb0f5609dc7d8ef6808eecd50b54c221603fb95aa29cd76bb829ea56fa7e504582e9
+Signature in G1 (compressed) = 82ec2f2ff7f9533215dfcbe9668ae799b225bfe94ac23d4ae8ab29977ec9c5506e951cb7db86ee64000fa7f74d45319e
+
+COUNT = 35
+IKM = 002346698cafd2f5183b5e81a4c7ea0d30537699bcdf0225486b8eb1d4f71a3d
+Salt = 5548bd89bf8dc629527259768f312aafa3b3de8c235beab024ea01eb92637593
+Info = 5548bd
+SK = 3f1619a176c7a9e130896267d858b305e7100caab8f5b53ae6b5ed503b63a1dc
+PK in G1 (serialized) = 0e7367294bc30a71e4d795b34463a72fcd196781dfc441864631ee79450b1281547f9a261d381aee1f92666dcbab92a6031e308e6fb087b0566cc0afc3a082c0c45a2fe9edb9074f8fc22acdb219e93e859a08e9a1645fbf55967dcd8d96d544
+PK in G1 (compressed) = 8e7367294bc30a71e4d795b34463a72fcd196781dfc441864631ee79450b1281547f9a261d381aee1f92666dcbab92a6
+Signature in G2 (compressed) = b996b402105a5db1e5938a6be58d1a9598daa2d49e0ee6694f8f54a54e307e4ae3ad74486379eb0f7e9f1d8ae1e080e410651e80c70de93ed7e727b66ddcc99135138191413986489e8cdc497115b4af262bdd46aa4301b8f805c5bb68a0aea5
+PK in G2 (serialized) = 150241976e0161530a13698a8d4eeb6a8374a0cd190f41120bd793c04b56acbecfc8e3f0d174c4eed69d5ebe885822aa12e249eba9d563b42c9068ac20e813951edf3e2c5e4050cf53bab7aab0a181110ed6580a72fa605c1085bee4f46155ac122ebdc7125473c24fd5ccdf254393c4ac76a04fe683f799fd637af60092a2a03e06e37ca295316095ecc7271798fe960b6d28b1b879e30d908b7d266361041f94826aa7566237fa92d2cba1a36dbcabfbdfe2ab06af9ad0d4c14c556d18a112
+PK in G2 (compressed) = b50241976e0161530a13698a8d4eeb6a8374a0cd190f41120bd793c04b56acbecfc8e3f0d174c4eed69d5ebe885822aa12e249eba9d563b42c9068ac20e813951edf3e2c5e4050cf53bab7aab0a181110ed6580a72fa605c1085bee4f46155ac
+Signature in G1 (compressed) = a64d20f9adf74e59d3ceee4b0e5ffb44e2e79199f8515219050a330b5ec17f24e0baf3782b47c23efd67672f2fbd3ce9
+
+COUNT = 36
+IKM = 0024486c90b4d8fc2044688cb0d4f81c406488acd0f4183c6084a8ccf014385c
+Salt = 9c86fb9a38bee698eb9e2c36a4c571647e48344736c9cf8f0baf14ec4276d064
+Info = 
+SK = 0b8ba293f9be6f1c8d4c75b8d131729f12835c8e499326e7d3b41351ee3360aa
+PK in G1 (serialized) = 12af80ffa7df213ac119a05f2faa23983b025f36b3db238900f547c33548581da373324574aa9055adef8b462c9b83af16bdf763e699d3f6de3d5b46bc1915930561fa972347b0fb38796b844ef373cd5520bacf1853ba74c69b25a367ec2d48
+PK in G1 (compressed) = b2af80ffa7df213ac119a05f2faa23983b025f36b3db238900f547c33548581da373324574aa9055adef8b462c9b83af
+Signature in G2 (compressed) = b0d177be43cd57b3b9770611d64ed0e744b243d4c4837c0819e82e71092d9cf3c22993a79019f67eb396eabf84d19ac51852e2c7c5945dcd94f8a07a9cfe594679050c81850b9792e06477a68a9ee5e326987a48f0e8fad7c1fa2c6e3cdbbc9d
+PK in G2 (serialized) = 04ae6e1e918b610718aa5b646dd7409dc4db1ad391194df8a85c60a21fa9416af3c4cff698ce67b6f1af49f8e7966cf0126481ab075225342fefea138d383cad8e0f6566f349c5c14bf9ebe13417eec86287f9e60b19b5c4c977905fd5a0a0630c33373da92a870edf7a694e5d80a11baa208949992f7dd2ec296b32858d22a1a1f76aed3157ca5b2387e7b13874055501ca221b9f0f08c9f08682a562745916139fd3afe5013443b0b0821792655140e354f64a24ebdb7b37bc80ce98337d36
+PK in G2 (compressed) = 84ae6e1e918b610718aa5b646dd7409dc4db1ad391194df8a85c60a21fa9416af3c4cff698ce67b6f1af49f8e7966cf0126481ab075225342fefea138d383cad8e0f6566f349c5c14bf9ebe13417eec86287f9e60b19b5c4c977905fd5a0a063
+Signature in G1 (compressed) = 96788573371a0ad54ad9d0e1dfbd0004b72835bcc4ce3974e08286ea91c2e3109ef235169fbabd054983eeaebf6b4bff
+
+COUNT = 37
+IKM = 00254a6f94b9de03284d7297bce1062b50759abfe4092e53789dc2e70c31567b
+Salt = 0b677874037e5ddbf8e1c77c5934eca2642e8426be634e12a1da6f0aaf8aac55
+Info = 0b67787403
+SK = 07bd2dba01392eb0b6bf604737498d2fa7f100588d41a6e0d22b991430457947
+PK in G1 (serialized) = 089f5056d530342acb668ac03fe1849ae80fad9b32d6eb1f87833e0b5d632c1fe456da37691a747ff0cb5ad77a0e5374088462360d7b275474a2061f7af676198550126e1ac84f882414b538804ea395918aa0538a6838e098a694a0287d7c78
+PK in G1 (compressed) = 889f5056d530342acb668ac03fe1849ae80fad9b32d6eb1f87833e0b5d632c1fe456da37691a747ff0cb5ad77a0e5374
+Signature in G2 (compressed) = 8faa7b61b0f2e1dd7586480452014fbefe04299865f72f8ba5ebbe66fa0a0c0c4ea156b5c116ad4f7236b0de6f6d45f8025e6be56f480b81baf11dfb33d527d91654034b919ba6318abe246db520223df58ec09aff88084735c7858548036167
+PK in G2 (serialized) = 0421dca0f31d09ba6c977f4a8c7625960e084052c360c38b8aeb70f76c7dc663eff330acfb8529f04762d379630578f804a16e928f7533fa49d5142a803a090d3c5a9741b6421f482fe438347df1ba61b89b39d87d245dd6d0c52784fb7a815419787335970a3e31caa6be636bfd275e4d293f571ef3ae3347d81890f7c883c3cdb9487c440d564dc06b25d317cdb0150811e0de0946959c93d15fc4efc07ba7760dacadd8398bb6282076400267fd78d0c9e50a6674b8fe329c7d5fab0b2363
+PK in G2 (compressed) = a421dca0f31d09ba6c977f4a8c7625960e084052c360c38b8aeb70f76c7dc663eff330acfb8529f04762d379630578f804a16e928f7533fa49d5142a803a090d3c5a9741b6421f482fe438347df1ba61b89b39d87d245dd6d0c52784fb7a8154
+Signature in G1 (compressed) = b8ecc5f481db933480f6889235b78ae0c108aa934792f86bbcc326a80dc8eb80e890cc49488f1af80ddceb4148e26c5c
+
+COUNT = 38
+IKM = 00264c7298bee40a30567ca2c8ee143a6086acd2f81e446a90b6dc02284e749a
+Salt = 538366c4d761b78b2697b00be35df0259261e372326443dcaed7daa3b8b906c5
+Info = 
+SK = 25cd3e434edb53f1b712265b042872b694bfd585994f472f4f2c7502b9dc9d48
+PK in G1 (serialized) = 08d820d964d6835c60aa3378f0ab841efae10511b49fba561e75b0e2780a997ea416ab86a4d39e09f0d400f79d44c77e029358138d473eb01c7185b73b00e6667d0703ec533029d0ca661adbea242837656dfa3f7d6510d59a24e78188c8b7f8
+PK in G1 (compressed) = 88d820d964d6835c60aa3378f0ab841efae10511b49fba561e75b0e2780a997ea416ab86a4d39e09f0d400f79d44c77e
+Signature in G2 (compressed) = b5e9ec40017f20eca1c091def4ef2899d40b40f08bd48d3a8e58e283979e11fc7177a163a612c850968558d44ec7e242003cfffa719dea5fc89a236739341af79e1999ef720c4b4428a588ac30d0ff0f9c70935b979c0aee8d2e4e99a09a0835
+PK in G2 (serialized) = 0f017330bab1d40860baf101d631448c13278150d8e6e0e652569fad47b4620f22ffed6225969a99a8d6c83938893ef70732a919b88c0588143d0ca96b5f4897319231eb134a9fd1107f52e09500c4343286601c523882eae679b7dcc3a4ffa7130bc033b9209f815fc6661d20d4bf1b6c9709e7e4b008f8d7c3cd0718cf6b0d9067e6e4c2346078d2706aa4733132da13a44c736fb0af0e44af017aade7f1635c30fb0d377111b57289771f93f51133ce6832c86493f98cbff04fd83b59b3d6
+PK in G2 (compressed) = af017330bab1d40860baf101d631448c13278150d8e6e0e652569fad47b4620f22ffed6225969a99a8d6c83938893ef70732a919b88c0588143d0ca96b5f4897319231eb134a9fd1107f52e09500c4343286601c523882eae679b7dcc3a4ffa7
+Signature in G1 (compressed) = b7c7dc4655aaf2094a2513bb55929b7b8d23cd24373731b09dbc18722395cdf6ed4ff551f14b1e1ec548b51012f895eb
+
+COUNT = 39
+IKM = 00274e759cc3ea11385f86add4fb22497097bee50c335a81a8cff61d446b92b9
+Salt = 699bb692cb6c05228fdcad22cbadbb56a64296f979a28ff2e04d1a3280dc7fca
+Info = 699bb692cb6c05
+SK = 4eaea6cbb6fc0db2286a930b9994d54aeb58f9df1cbaa73827bc49f04c607f44
+PK in G1 (serialized) = 14957b8ae1645b1fc59a53824c8c0b5f5d7bca4ed43991a66744f0108f38c932232b686485b530f11cfab4debccff6f30697c563135c842b96990438821d73d592ff03eb95040ed27e04a4c827521f1bc5b5a9854a9256d4080710bded08e207
+PK in G1 (compressed) = 94957b8ae1645b1fc59a53824c8c0b5f5d7bca4ed43991a66744f0108f38c932232b686485b530f11cfab4debccff6f3
+Signature in G2 (compressed) = 8148bf29f01925e7b1e4da03d6caa66a963fc7d4ad7c9bbba2f6407bdf1f89c0bdca458f29b831150b1951064f8db57116eb505ec8d8033c29210cc467d92300676d65c75ec2cb2e17e126a965b0330c8a5862b3d008be8c74c8dbf367ae8cc8
+PK in G2 (serialized) = 123e107a9c5fa9eb984a03aa09c44f875dbd1197329a5a066aab6539f9f08c72dd5466e2d26b27f45685081eee39e1920a4137eb0d82342366c7708c000b6e7c89ee0254186184b0d14920caed0a4742c5f83fceb41bb01b77137cd4e113bc810509e22e86b3231c0fd3682e06afb83365ebf910c6d97bd98622bf81aad13ffa51fb242fc5695d73b76ed7fca1fe84f60d8e629b08332e4e842c4b237d2613730f7074c67e6f1e90c3be19e99dd1008c590aeabc757d3b865d228a6d38423c11
+PK in G2 (compressed) = 923e107a9c5fa9eb984a03aa09c44f875dbd1197329a5a066aab6539f9f08c72dd5466e2d26b27f45685081eee39e1920a4137eb0d82342366c7708c000b6e7c89ee0254186184b0d14920caed0a4742c5f83fceb41bb01b77137cd4e113bc81
+Signature in G1 (compressed) = 90d7c5aa19e96204613489b519525d05b5f7c85990cc81e691efc9a34ba6825c5d623bba81c461055b7137724d02f7d9
+
+COUNT = 40
+IKM = 00285078a0c8f018406890b8e008305880a8d0f820487098c0e810386088b0d8
+Salt = 3f6cfa3e93ef8034ec867004b3c33770dfdb65ab780b56ad4e72bc74a4ce61ba
+Info = 
+SK = 2de1e90d6d817a786f7e37302597be394a4354eab30428d96b97a9ce60d5776b
+PK in G1 (serialized) = 0495ddc0f6e39a6e3563ac1b90f663b371cb6ac7786f927e13e2d6eeefa4f6bf0d41ecf474e917d018e0b250db8a56a316e68fd45293239a2f23c2bb4a487ac13573b6be671667c5cbf2f50e00262cbd31693c115ffed0e08872c811063a661f
+PK in G1 (compressed) = a495ddc0f6e39a6e3563ac1b90f663b371cb6ac7786f927e13e2d6eeefa4f6bf0d41ecf474e917d018e0b250db8a56a3
+Signature in G2 (compressed) = 8d2732b54f7639ae3561c93b748cc8c9e9cd0bd1e030504d2b972723ab36de8028d3679c3588c63b9431afe2a0c21bd40ed038d9c666e0673701a48426bb207d4dabea364300b1cf4494a5ebff449d263458bc53ad1d7bc7d320ad9ac3ec7bb5
+PK in G2 (serialized) = 000f7d6a836e69ba22819645cd7e4e282e2a9b6e546fed01fb3e182c052751a0f939d38fcfed63e6e62f2d243348297b04c1e56325054604899ea397e3b7bcbc49fed3572a00698395a605cd9d1ced5017b0416dc56d13aad2ced0765aa11a2600e02230cf3cf54f02ce45e9e81160d83fa241e853af886347c30f121ddfb3464e17c8f7454f593065910b494f61bd100b13d6aa6847758ec8197c8fe78843568decba54a3d1e0c38521087ddbd6ef485d6c52b2e0ba9a531539e1fc00b064ea
+PK in G2 (compressed) = 800f7d6a836e69ba22819645cd7e4e282e2a9b6e546fed01fb3e182c052751a0f939d38fcfed63e6e62f2d243348297b04c1e56325054604899ea397e3b7bcbc49fed3572a00698395a605cd9d1ced5017b0416dc56d13aad2ced0765aa11a26
+Signature in G1 (compressed) = a4d1c965784e0b39cc787eee1f94aada50a4b9b4eb122a4fe18c09e35745f1faf5b881df8d04aea38a632689c9af0d29
+
+COUNT = 41
+IKM = 0029527ba4cdf61f48719ac3ec153e6790b9e20b345d86afd8012a537ca5cef7
+Salt = d30367f7f5ab1fda7169c21d9f77e05e991e68a4c39c9e6ec2a964dfc955bd1f
+Info = d30367f7f5ab1fda71
+SK = 3a4e3f4cece69b4ac7632a404a9f11ab8e129392b352b8ec1a0e6252d0b353be
+PK in G1 (serialized) = 1968182d69ffffd853166cfa3962a12105b228ffe93310b57aa81586b13341806fa60809722a9469431b22028ad6dfef0822d04709067d7bc0ac97460ed301c6bca48f6ea2c0539f59732703b4ed8f83ecbb1d0d45f0372fe6e232fa6fcc76ca
+PK in G1 (compressed) = 9968182d69ffffd853166cfa3962a12105b228ffe93310b57aa81586b13341806fa60809722a9469431b22028ad6dfef
+Signature in G2 (compressed) = a79a9016fe3b3468601fbf0a892550adc5c6cbe6bfe648b095dc1368182d70bc777192fc8f3becb609df3e740b5abb49035ec17a43ad68c6669c168ba022ffd2126fef4df31bc283c60b117363a418ecb97601d3fcf004a2e8ec625cb15cd64e
+PK in G2 (serialized) = 0d2662d70843301e9c975ad18dd0eb5e9adf767f84b96214d619d243c37bfea151a9e79f2eeefb5f1548ca433d3a799409635c4a93c83a0ef1781dd6f225aa1dcf3c430810c6be6b5a66cef44a3507e315657340c08e145204032fac81e5b4a717b467f026e7ec00795577214b29cd247218967f7f74bf1fb6401731ac18f37712fb41e73842d2e0e7fab183b76e1fbd100dc455a99cdf1ec0cd73f84e1d882bb7a784e9eb795d5e09a53c13617402b8c7e7118a7f2f434e5dc5e97e662163ed
+PK in G2 (compressed) = ad2662d70843301e9c975ad18dd0eb5e9adf767f84b96214d619d243c37bfea151a9e79f2eeefb5f1548ca433d3a799409635c4a93c83a0ef1781dd6f225aa1dcf3c430810c6be6b5a66cef44a3507e315657340c08e145204032fac81e5b4a7
+Signature in G1 (compressed) = 8f671583c198c4036bf9456559d511a43511b5da24e9afaab3f86bd80cf59b8ea110ba8bf546ed83f5eb2614611b6434
+
+COUNT = 42
+IKM = 002a547ea8d2fc26507aa4cef8224c76a0caf41e48729cc6f01a446e98c2ec16
+Salt = 78f1704e67f04a7807c350710ed14fbb9cf756b43885ee811c9965ea57a48205
+Info = 
+SK = 623393b708b17b8f6eef6e53f656af7e24696ce391a499ac788ca1e62a0569fe
+PK in G1 (serialized) = 1464d270e78d9547aa49d17b87275529746f043f5f33693c086ac6dd22222451b332329aee95e8b6e726d254f1009b6a19e54604ca28a471bd4891251efe417cb3e824b9c384448a7c64de5bbaa7723872e07f79be0e668adf03e61f0b3bfa44
+PK in G1 (compressed) = b464d270e78d9547aa49d17b87275529746f043f5f33693c086ac6dd22222451b332329aee95e8b6e726d254f1009b6a
+Signature in G2 (compressed) = 8a9fc9244d9ebd5973edc571cb804e6e4e73f28860fe2ec3ba511732714ffe28be0d093395ee5adfdd156848857f2695077519bf7f924dd4f91cb81fe921760552f83b5a3e0fa399e6c594fc49d0a99326c81f3941a52e37139013f2a185e961
+PK in G2 (serialized) = 124f3d7a92dc287471845a3b934ee1857d04a422762e1aa0b63fc056a83ece08a6cd3612c62bfc8c0aaf83695fd584750a8b015d66a92e37983ee30329c80a66c4b9b77b961dbebad81b0248b15e3373e71f239e22ae70727b75581e041dfcfc019f532948593adb0bc7fa877675463660d09407aa37f12b9cf1683d7f35c0da74d85dba599da32d043f793f799b79b016ae9dde1adc03014f06f7ed15cdbebf29830df2029074ccd872b87323967da02f8ca6d4b7a3ae8858d6b3cfab2f9997
+PK in G2 (compressed) = 924f3d7a92dc287471845a3b934ee1857d04a422762e1aa0b63fc056a83ece08a6cd3612c62bfc8c0aaf83695fd584750a8b015d66a92e37983ee30329c80a66c4b9b77b961dbebad81b0248b15e3373e71f239e22ae70727b75581e041dfcfc
+Signature in G1 (compressed) = 8cefebfe549137881fae20a1786d395f322a4a7198f7a3bbd3bcf754bfb808bbee1c26cb5158d7defcc712ca604a3ac2
+
+COUNT = 43
+IKM = 002b5681acd7022d5883aed9042f5a85b0db06315c87b2dd08335e89b4df0a35
+Salt = 6ca13a2a6a50035ea3045d5f72cd2749e2a230829e77a01c9c7d79c00c4e876e
+Info = 6ca13a2a6a50035ea3045d
+SK = 534995e3a809c33d43220c25cf571a590ad71fbdd079c43649d28c57dd814ff2
+PK in G1 (serialized) = 0a1349359a523e3679ffc234be4d83f87e6abf559b6ed36463e34f1bc78b17deb73b84441885896480b9e12cae134f4101075448b6ab81aa146e099646701f54b5b399d4bcb893206abd4d20a9cbc09b55fcb50a805abd200629c5daf83091af
+PK in G1 (compressed) = 8a1349359a523e3679ffc234be4d83f87e6abf559b6ed36463e34f1bc78b17deb73b84441885896480b9e12cae134f41
+Signature in G2 (compressed) = 91bf9e0d2716ee1c398c691661da4c92865c9b8c012119ad3d7f99c356893f6166eee4adba8c82281066e6e8557e655b10b82a56c757d941c4d73229a2c4a4b9750edf1cdf9d45883c2dc948067f43d98da9f4db17973fb08580aa763d642f63
+PK in G2 (serialized) = 150268eba67b0a328a0cf344281cc6d41fc9a432c02b1061a82cd6eb515841320f2768c35ab668f4f35578a4137bebad13f896e75cd62e3ad8d37ee52e14f9e6aa2a8bd4a925d163c0215a1d66c0b7a30ff872477c2bdddf1315ddb8f04601590b23347c4f35455486600f3ee4b04753286ce1b3d4938a2ee260225a6826452b0679e7d195b0986440671f370573f6b1182b676623963fc58868a9dc785c7234f196f68d957642945916a387f6e2251d088cb8712a4ecab61d8afa86d28f4776
+PK in G2 (compressed) = 950268eba67b0a328a0cf344281cc6d41fc9a432c02b1061a82cd6eb515841320f2768c35ab668f4f35578a4137bebad13f896e75cd62e3ad8d37ee52e14f9e6aa2a8bd4a925d163c0215a1d66c0b7a30ff872477c2bdddf1315ddb8f0460159
+Signature in G1 (compressed) = 98037a26c7e42052b2bda5e04c3234e6075c025e0a4658dd253ff4822ac819fddbf69b86f845f5685e5d382e7f3e7fea
+
+COUNT = 44
+IKM = 002c5884b0dc0834608cb8e4103c6894c0ec1844709cc8f4204c78a4d0fc2854
+Salt = 82c52ed12c1d53a13f191cd65763a1dd0403889f4ff5910c2096f3a2badd9178
+Info = 
+SK = 199a6b502277ab4de8f71f1252e406cc99366dfa53952664d1be6790a964c794
+PK in G1 (serialized) = 0bcee22890a436176427483aa72f4745208d6352d8d9020cb2800a687552f61cc10a46f8b4a8ff85d365e2f8a5f24f68168884766472fbacae0a2f36ff7b2167a432dbe93d7128c2eda1c2f3580aa56f3c021a1e3f1b02661a744b986040dd62
+PK in G1 (compressed) = abcee22890a436176427483aa72f4745208d6352d8d9020cb2800a687552f61cc10a46f8b4a8ff85d365e2f8a5f24f68
+Signature in G2 (compressed) = a23741d498f040be7e66b76651e83d63e36e9d28c484db32bc783c196d7163f762b495a18410aa137d0c7afe8b0aff6e11d0b2143b645db27dca429e305b4a76b9d8b4177c3a020712f3380f471cbe2a01f2cf43929c2ebe78f5243a5bd31f25
+PK in G2 (serialized) = 03fc11564dc227c20937f902a6f39be371fa3644d68a63aca648148cea7280886ca21eefd630c3aad1631f5c3253182e0b205ef16f1690f214348145e069f1fe1d6e52eaa63421dfc52f5fd1e393f73196b1fc0f43ed53b31c160ff9e8f116b106ed95adae9d7d7128820bd68288d40309b2dd120a1bfa0c0b454ecd488aa317481792c8b46b439b8a96f130b6247e2f0df70a7c587d63d17f0c91751a06a64ca98ebee82c8b6c0c913e33fd1e4c9ad45a9a629c227ccda0452afb1b2b3d745c
+PK in G2 (compressed) = 83fc11564dc227c20937f902a6f39be371fa3644d68a63aca648148cea7280886ca21eefd630c3aad1631f5c3253182e0b205ef16f1690f214348145e069f1fe1d6e52eaa63421dfc52f5fd1e393f73196b1fc0f43ed53b31c160ff9e8f116b1
+Signature in G1 (compressed) = b609e0492cab01235e22c3ceddcd3ff0b0834a71abf8dfe71716a2a13d8575f9ced4cd25d0501912f38ac00a67ea1151
+
+COUNT = 45
+IKM = 002d5a87b4e10e3b6895c2ef1c4976a3d0fd2a5784b1de0b386592bfec194673
+Salt = fd6f245d2babe4ca8a8aa05f728dc8a826f9e20dc61d0b4a1cf35a1fdd2e22a8
+Info = fd6f245d2babe4ca8a8aa05f72
+SK = 4f2fd36a49bcd6dc9a14fa2d7471518ab8c7cd09a8c20b3f975c374c4c3981cf
+PK in G1 (serialized) = 00a4edff34c5ea1f983ffee43d41fb25104fb29acef259843ba60395aa90a56341c76273706a39fe626aad9727f664430ca18f9769807622ffe73c105e8def823ba2c406533a23ee8218d18c5f38d5cd5614e9adbbe6bbde55ee2a1b0ac5ca65
+PK in G1 (compressed) = 80a4edff34c5ea1f983ffee43d41fb25104fb29acef259843ba60395aa90a56341c76273706a39fe626aad9727f66443
+Signature in G2 (compressed) = 97c7df0185fa13c210b8cc0b9624c623007df7fd5111ea51239b0a5d67cb94c8dd9688a3cd0db1663a34bca93bc8312516d38d1e5760610a0d7b5330c554f07d195153097dab1284f98c6914eacf389164018fb8b7531d286204ea9889ccf937
+PK in G2 (serialized) = 003b387e318a6beef8093b3a1e2f41c95ee08e29c222a1128883bb5f08c23ec98a2ab3d34131645aeb10e9201243b1d60979021e9ef5fa0a3aa458726e78c68c1086aa79bb97f45f145d50c45b08db87145154668f346c787e8390f7f41716f00bdda0d2c60a639dc85ed47daab169200ca204c0c24b58c77cd521fd90e8c10c399e2b8d9323cfb6694510a8ae5f94d7057247b09d8b4820d28700a193c7a3276498838eb58e683a585ba79f7d643bd4c0b5a34701ccb91b93b556b63295816b
+PK in G2 (compressed) = 803b387e318a6beef8093b3a1e2f41c95ee08e29c222a1128883bb5f08c23ec98a2ab3d34131645aeb10e9201243b1d60979021e9ef5fa0a3aa458726e78c68c1086aa79bb97f45f145d50c45b08db87145154668f346c787e8390f7f41716f0
+Signature in G1 (compressed) = a12c81cd9caf1826b183c4d374a53813a9da8a4eb90fe88beb10794730e4a0fece991c43238160b25e42142f32164be1
+
+COUNT = 46
+IKM = 002e5c8ab8e61442709eccfa285684b2e00e3c6a98c6f422507eacda08366492
+Salt = 0688564dde01bb43334ab99c37552d7060d4771e27a46640b5126558902e1c14
+Info = 
+SK = 05ed6587273b7a367d0984741344abedbe7af0e69f180e366dd773012309f43b
+PK in G1 (serialized) = 0e89ec659b194948d1ab9c39a3a5a3e5731c63cf05355e311dc0de697aa3ade925da2a29136615a06603defef0fccc4e11ad5563bb8a767af5e743ce19791c8e83e00d5c92dd810ea7739c8c923b7a9e61a387acfca4717909cd9edc2dea75f3
+PK in G1 (compressed) = ae89ec659b194948d1ab9c39a3a5a3e5731c63cf05355e311dc0de697aa3ade925da2a29136615a06603defef0fccc4e
+Signature in G2 (compressed) = b7607adfa0d78e6fcadb30ef397669be79ceb4d179cff66b8de129fc9146fb17979af16c19cc8568285f5f41ce89e0ab166f0a1d4b9be76c4ef0a5c0937e5a0acc9b7c68df4844fa3801a6d1b4c9fbf07feac48a086bb44e8e00178147a06861
+PK in G2 (serialized) = 13981d4cdd53b5486b6fd8b392bb1190012c2e530a07573cc2e37466fb7124f0211e0fd87c68fd4c01f3ca73e600e57e036e1cbd2b8175d938542252a5552a8b8d51a4340ce944a0f5ad965ea0fa15c3c42808077f6aaa491227d290b89997b40429cc61c348821e183525adc20d607bc5cce4a9234004cc816e97883483759cd76588a5fb6dfaa2fe9b17a1688061ba061c445bfe23d6d1cf5fa138b73cf1746397d26798a46b82a5bb08cb5f53ea5cdf0f43e430b06a94a214dab6ebdcc6c3
+PK in G2 (compressed) = 93981d4cdd53b5486b6fd8b392bb1190012c2e530a07573cc2e37466fb7124f0211e0fd87c68fd4c01f3ca73e600e57e036e1cbd2b8175d938542252a5552a8b8d51a4340ce944a0f5ad965ea0fa15c3c42808077f6aaa491227d290b89997b4
+Signature in G1 (compressed) = 894cd96e360c4be74d3b2c5bea87d98fffa32a0f69214b211e302949de28c0640c6132e11894d3ad8ec4900088c0718e
+
+COUNT = 47
+IKM = 002f5e8dbceb1a4978a7d605346392c1f01f4e7dacdb0a396897c6f5245382b1
+Salt = 8fad9b92e7525e764ad804bddb1fb27bb8f5d2a941411458ee9f1a5ea389e0c0
+Info = 8fad9b92e7525e764ad804bddb1fb2
+SK = 1e7de42d82a819939bd3fd775b259409aca9ab0dd8ec8e090ee5bcdd2cdf8a70
+PK in G1 (serialized) = 0fca93c562dd7b37a924878c9e58c11289ff7fe8cc8b089b8b5e0da075b7f59d7b86e0d16b0e427e2062bfa1abd27ea119fc233b2dcd4e9b8b73743e471a8be7847ea069baea56c6dd166275b0a4ecbb5eb65229cdc6fa81b471e3e9d9cc2965
+PK in G1 (compressed) = afca93c562dd7b37a924878c9e58c11289ff7fe8cc8b089b8b5e0da075b7f59d7b86e0d16b0e427e2062bfa1abd27ea1
+Signature in G2 (compressed) = b1a3556d4adeba2d9eb2537602d7cc0a04bd90aeb45f6afc2709c17c33910db8e979bf803effb39c44274307335c2ad202207e634ffbaf0869690d9929b2d7367c4a455456458cf0145da0e389e254de188c5b35440e2f6c025a6e99450cd897
+PK in G2 (serialized) = 018ba0f8c365206b79a32723ad23b0a876215d9a630815a0337b4934e8bebc8316bb1be0166c32292990845aba56dcbb05934547c2600f7848135ff5d6ce43e1c3be466161db791fe705d33e69edc39f6a09059cd87879b1b0b098922b077ed319a7e2a718889141ecb94fceb4bcd9aa779b6a73e4b2513d20944bd091c01cc4a5bdd8b7a35c71c362538038780838211877f3478b6b90f73a2529a1d7117012a00445085588437bf2fb86bad41db5d50678648cb054b8e6f3687c79aaaa9a52
+PK in G2 (compressed) = a18ba0f8c365206b79a32723ad23b0a876215d9a630815a0337b4934e8bebc8316bb1be0166c32292990845aba56dcbb05934547c2600f7848135ff5d6ce43e1c3be466161db791fe705d33e69edc39f6a09059cd87879b1b0b098922b077ed3
+Signature in G1 (compressed) = 8b55a206f3734d9648374baedd4cab7646c6949abfc348a09e9ab2791692e974c7e68770a625b5403a3af8d5b959b551
+
+COUNT = 48
+IKM = 00306090c0f0205080b0e0104070a0d000306090c0f0205080b0e0104070a0d0
+Salt = 4e8b2d0745ca249f03fba5e51d3f80a6e02597a9dee2a9471d58cbf04bff01e6
+Info = 
+SK = 6c52eda8077af98e4cb9008128c829658ff0d3c3e1480daf3c7f16d1abb204ad
+PK in G1 (serialized) = 0a66bbdd4733b7a5adde1fa551dfb2713c73d644639406be3cec4f1f599c9010e43a18512066de340779ebb6872bc9ef177475782880681ab5ce51d5c1d56f566028766ef0958dad3c09c98d1b4a6497d42e85b1cdab018f527acaba6dc76cb1
+PK in G1 (compressed) = aa66bbdd4733b7a5adde1fa551dfb2713c73d644639406be3cec4f1f599c9010e43a18512066de340779ebb6872bc9ef
+Signature in G2 (compressed) = b4101f5efd368ea4e6f5db47a3529720598c0021d743ed497b2898d229662fdc4519fb4ce9ffa259e0b1117f364ad52e0250f8c595c71b30cc33f3768d1178f012a76d662c12012c6faf1dfd0925747b472b7a647c65466c542b9e460bc491ec
+PK in G2 (serialized) = 0c345660705b6699e46a6373674be9e2492a13377ea3f271db8f114ebbaa4666cc3b8c79967845492e146a1d395c1222168ee7219866be1cd09f77b0518238d5bc690da040ef90a05dd9fcc9a3800874f411e5369bde1b109200b5066ae1aaf102e19f1cb32036ee42c88f8fb027b59c70c9e336fb154805b58cccc8f0564eab4b0f71d0401b236f2ef9ac569504e5b514d3a11fa2ebd98f6d2c000233569416626335ef3524f951e2cd2862e2a2bfa85055d1e7a91c6275c37966a8f05f7ec1
+PK in G2 (compressed) = 8c345660705b6699e46a6373674be9e2492a13377ea3f271db8f114ebbaa4666cc3b8c79967845492e146a1d395c1222168ee7219866be1cd09f77b0518238d5bc690da040ef90a05dd9fcc9a3800874f411e5369bde1b109200b5066ae1aaf1
+Signature in G1 (compressed) = b0fc7a6b7835feab935e9235ae48e2622e65531a6295a1db859319feb1c3cfb1fce49dd9b3887333f90d5ec4542132f4
+
+COUNT = 49
+IKM = 00316293c4f5265788b9ea1b4c7daedf104172a3d405366798c9fa2b5c8dbeef
+Salt = ffc2fc8c2347d109dfddad25192457db13108f1771b379dad99838fe6075901a
+Info = ffc2fc8c2347d109dfddad25192457db13
+SK = 23aabd89a0bed6604c696e191f1fd2f2474e3f5ac4f9cc731e92cfd26c5f0e96
+PK in G1 (serialized) = 06e23a1dc21e3d5ab4e3a7d6383d99f91137465ccc52c941ae3a95b607f4168d6386ab84baae4b39bd118727fd94a36c05e0769ad50a1b9ef214d7ee85b8e5fab1fd921be0a88ee68c5661cf83c4f4e192d9730da06944b6518f564eb76bacae
+PK in G1 (compressed) = 86e23a1dc21e3d5ab4e3a7d6383d99f91137465ccc52c941ae3a95b607f4168d6386ab84baae4b39bd118727fd94a36c
+Signature in G2 (compressed) = b0db4f68b9e99a75849d9bbf4c131adc12c78e921c2c6697f6deb5227e93495cda8f33dee0a71246741f809a2788f81e18be163b982e933c9fbe43b9eb4c5c7269384c4a814f4176846267b93eb8cf4b72984c3f991804453c2cdb3737628640
+PK in G2 (serialized) = 0e49b3ac48683c6514f65fb3c6d24f9baf4471076f78abc6a3715ea0e8844c1e11324524b2af49dde217d84b93d8fa100ddc9f8618a6ba672f7016bfa644b8b39b4046a37c397177389ba17bf66c7806fbb7ee0e95bca215770b0228a6fc4ed71063d6eacd8341b03bccbac93f7b7a63ac1ff04635ecbe25117e5a65d4faef29881a856234fb06eba0c62d038a1c511f0be4ea5324380dc0939b2ee935b284d1483cff4040a1723f3dd9e69d2ac5c36094ce73b33dea0327956bbea60ee4b3da
+PK in G2 (compressed) = ae49b3ac48683c6514f65fb3c6d24f9baf4471076f78abc6a3715ea0e8844c1e11324524b2af49dde217d84b93d8fa100ddc9f8618a6ba672f7016bfa644b8b39b4046a37c397177389ba17bf66c7806fbb7ee0e95bca215770b0228a6fc4ed7
+Signature in G1 (compressed) = a9ac391f6ad1f3cd1598f1b4b15c0094b32a50671222c959d741a64fb86482ba63fe7ad7295a7c3d51d2a85385f54325
+
+COUNT = 50
+IKM = 00326496c8fa2c5e90c2f426588abcee205284b6e81a4c7eb0e2144678aadc0e
+Salt = 60845bd4d390a6f638fb026070cafde856213778e97124855f95278387c20693
+Info = 
+SK = 21243225b6eb24fb86380f335181b723c244488944f72c786b9dd7238dcad666
+PK in G1 (serialized) = 09d60ddeb66c5cf200dcdd9308da392150d49bba641f4e8962458a1ded57443158e0a1af426342ff546cb4e80f202ab611ae50cc7eff7a9fda2548ff1f547689ed13953dc47b8d094970493c4b47a949cde2b553ee02e765d80dbbd5ede2140d
+PK in G1 (compressed) = a9d60ddeb66c5cf200dcdd9308da392150d49bba641f4e8962458a1ded57443158e0a1af426342ff546cb4e80f202ab6
+Signature in G2 (compressed) = a5113e3bc18d5eb078508131e581c0f312632dfbc1bbc379d51243faef2ca9cef99785be9aa99757607611c52abcb9cc16f66324088f86f16f5b117f79b1f1410d3369802d6bde8221bf1872ae76ec1dcf1407ce59b60247b21ea304869bc346
+PK in G2 (serialized) = 1322c88f400adec469f0ad0a0134a79e80d3b0b6e134d21a160db5f56e2ec25810b508f7ed5d9047f4e272cda921c33300dbe939f0cfb3b9fdb39e7ba93e5e496fbd010ef0ef74d27bb030ef8229c90f59d8eb1ec8a85c7a377ead1848f7aaaf014ce48be3735a09ac2398fa986e0b73f5759a7ad79b6832938c39726ffc7ce288c8089aee972c6255be460654235f2009df984ba34c26f64de9cb5be80070a45f25d154c492d6f6c678b9b7bbed864e434c6ae9b85de9c6ff7210a7f2b69bb1
+PK in G2 (compressed) = 9322c88f400adec469f0ad0a0134a79e80d3b0b6e134d21a160db5f56e2ec25810b508f7ed5d9047f4e272cda921c33300dbe939f0cfb3b9fdb39e7ba93e5e496fbd010ef0ef74d27bb030ef8229c90f59d8eb1ec8a85c7a377ead1848f7aaaf
+Signature in G1 (compressed) = b0ff43d9464b5325cb142def25a9387d50865e81454eff3ecec65bd7b59f498cabde5992875dc8b0f5349be08f89393f
+
+COUNT = 51
+IKM = 00336699ccff326598cbfe316497cafd306396c9fc2f6295c8fb2e6194c7fa2d
+Salt = 97f9cd049193ca308cb0d5713af75ecc5729d81f4f8b200794a54e2dca1f2b6b
+Info = 97f9cd049193ca308cb0d5713af75ecc5729d8
+SK = 48914eec28f1d7c42e0c29d2cd7d1654c55767e67d0ae539efccf0b4de013c01
+PK in G1 (serialized) = 07c8fe961d9e177793ac9f0021b50b0d48ad8432ac20c655f56fd94c7a56baee5604af5c042896896bfb0eca7ff04ed30b81e3272372d4203b086b59c76697ae0c317afb890015fd90bce1d4f673d35524a278e334a6c21a6405138498badc32
+PK in G1 (compressed) = 87c8fe961d9e177793ac9f0021b50b0d48ad8432ac20c655f56fd94c7a56baee5604af5c042896896bfb0eca7ff04ed3
+Signature in G2 (compressed) = a0e3b2c601c68c8d1c8320a0834e34c2e23ba1f7bb43d08bfda73bfe1bcffd5be6b70c1008c0a1a35f39ec39ab5d68a410bf97fd2a385cd717779140bed9fa14ce760b190d6bec6e0440e8a1f4d314cdd70f7cecb1e6ebf01a8eab96ada85abc
+PK in G2 (serialized) = 01f082f1d1b6a748abb0bf1f062c3c4aada29bcfcbe8e953b1b7ef3c065c92d638b1b73df7fe6f450a1e6ad78eae0e210e173c1185630bcab077405cc83b2739a4eae1cb40f85b5a71f74283af9dc301eb2353fa98c82f16463770b9a0efd78010db88187d632f7b4c4456dadb51ee519aee804cb40bf6710e96f2d8351ae35bcdd0c4e0cd85e06e5dc2d99c7ffbff430324ed166741f37f58e079f688c9bb9862020a405ffa940adc1cd398a5def5d4f03388251b04281efbe2845c3c50ad9f
+PK in G2 (compressed) = a1f082f1d1b6a748abb0bf1f062c3c4aada29bcfcbe8e953b1b7ef3c065c92d638b1b73df7fe6f450a1e6ad78eae0e210e173c1185630bcab077405cc83b2739a4eae1cb40f85b5a71f74283af9dc301eb2353fa98c82f16463770b9a0efd780
+Signature in G1 (compressed) = 8a301466e2751e86629e8f60fd300587723fc346194cc02817251ba179995f2df28110d5a00b188d0f229e383c4d114b
+
+COUNT = 52
+IKM = 0034689cd004386ca0d4083c70a4d80c4074a8dc104478ace014487cb0e4184c
+Salt = 81633e75b193095f2c99072b22d9f555198f0bd22eb1b09c58b5e146097426ca
+Info = 
+SK = 5fefbc6189796d363c7ddc656f943f2a0a2ff055ae4eb1e6a5b321511a3d1c09
+PK in G1 (serialized) = 0a2b8960f4baf81ff133b92fc2b5b566b94ec6ac1679ed313c9a455241ea78d6d4d3d745eb8d0ed5eb0865e9408f8d480cf8fecc65bb5e48d340f3abc9b89e10dfa88ed56e58c4cc6fedc455d2ba621e342a9fb799795965fa7db59c1d37e263
+PK in G1 (compressed) = 8a2b8960f4baf81ff133b92fc2b5b566b94ec6ac1679ed313c9a455241ea78d6d4d3d745eb8d0ed5eb0865e9408f8d48
+Signature in G2 (compressed) = 8647b8ae62c95af38331d66cafbd0c1ddc5a46593fe3987ef41916a38937ac1fb3ecfbb54486f5fb809a9ea005f3a9100b7ccd42e21679bec81d61b05bdc13ffb75c43e72aca542e7875003fd3eca52b0646f71c93a9b1bd864e1191e5dbb96a
+PK in G2 (serialized) = 00b9bc25ef814e344ff1459fcef2bc3aa35428cc2ab04c9a083234cdbf9fd7467a9a42611764fb89cb2f4fe84bd29a721823ceaee76639822a45d9a12a7e44e6e0382e5b53da2b6074b1e6fdfacaa464597540346293d66cabb4b9ad72e8cf0b0bf6f0f39a63748c88cef56a08cca030ffdca11084d31f049d02dff6abdb7c293ceea36e983d6b5cba11041a4aeb52dc0b9a4194029860004f4565c05630a9bda78cf575d8e0fa27f08064036618a57caf7c0ab068036291bf71abce8669fe55
+PK in G2 (compressed) = 80b9bc25ef814e344ff1459fcef2bc3aa35428cc2ab04c9a083234cdbf9fd7467a9a42611764fb89cb2f4fe84bd29a721823ceaee76639822a45d9a12a7e44e6e0382e5b53da2b6074b1e6fdfacaa464597540346293d66cabb4b9ad72e8cf0b
+Signature in G1 (compressed) = acc40fe654c2effdce8266dcf48642228e1b7e2900514054f4a779f4fc2887d37d7218de1a2de094124bed61deea8dfb
+
+COUNT = 53
+IKM = 00356a9fd4093e73a8dd12477cb1e61b5085baef24598ec3f82d6297cc01366b
+Salt = d2f110a9d44880aedba6ab64f59e7100c03359647cbd45503d7bef7c2482ffe2
+Info = d2f110a9d44880aedba6ab64f59e7100c03359647c
+SK = 6ff400b8fcfaca076f85ae9e835d9068ca50999af06577edeb620ec4e4520fa8
+PK in G1 (serialized) = 17e1a7f1788459aad840dbb346ed5a7d3c513c17944191a4f2d8777fdc1b0e0fdb0b50cf79c340492f30e1ece1e3625907f010a3cf4afd4c933130ade49eaa575aa7f7659d75cb0544420e80c3bdcba7257044a3c59c70ebf087697ddf225d3f
+PK in G1 (compressed) = 97e1a7f1788459aad840dbb346ed5a7d3c513c17944191a4f2d8777fdc1b0e0fdb0b50cf79c340492f30e1ece1e36259
+Signature in G2 (compressed) = 9963ebd1fe0347f7362df0cbcc69146035e260aa7283e660eb961b47285399a4a9c9950239524b1333a66469e579ea320882a2499328d59dc4398712bfee259003b9854e483216898a95ed5b3314197c5eba8ab74fdbc85305cef1d6ebbc3d2a
+PK in G2 (serialized) = 156f5f2bfa87ca168509e3a20011b9968e6016f93906587f141210bc67cd2a032d445d164b1ffaa5affcc1c34aeb33d40126c2b1dbce3ebd3597a18c0b30f1184be97abbb0f2aa5da7ae3fb3a1f2bac8fa70cb3121597c7ce7fece656a8f91320d4836539c35487af80947023b9f6557c8683c8d05a6fd6350318d9b1c6886c7a5ceadb0bf9187641d6fcca69150524b0869b18a38ff647ce1b9c6e6a8b251139ed4545931259c178530120ab57633590491b399e4468184094a2da8d198ac86
+PK in G2 (compressed) = b56f5f2bfa87ca168509e3a20011b9968e6016f93906587f141210bc67cd2a032d445d164b1ffaa5affcc1c34aeb33d40126c2b1dbce3ebd3597a18c0b30f1184be97abbb0f2aa5da7ae3fb3a1f2bac8fa70cb3121597c7ce7fece656a8f9132
+Signature in G1 (compressed) = 8043735498b42229ac655b8bead56e37338adea124ea8470748bda34339b7a89d38b23e519d56bef0a7030d4d598aea8
+
+COUNT = 54
+IKM = 00366ca2d80e447ab0e61c5288bef42a6096cc02386ea4da10467cb2e81e548a
+Salt = ed3abed29db43eaf1eec83308f47bf7317c0056e6e0c48d286c70b3e7825eadd
+Info = 
+SK = 4e209e84ad35d7c03bb292cda61475bfeae96e396564c3a4a72930077de68e7d
+PK in G1 (serialized) = 0491ad6cd95880171aba8287d839fcabd5d3f800b1a28dcc8c2ba3d844081b4c7acb6af721fd7a68b8d7e20d1d7f2af2053ec78d67118ac1bc15d5d0041220e059b926de5afec32e0910dcd2c7b536993a92055cf1e6383cab3fc7e9786e60bf
+PK in G1 (compressed) = 8491ad6cd95880171aba8287d839fcabd5d3f800b1a28dcc8c2ba3d844081b4c7acb6af721fd7a68b8d7e20d1d7f2af2
+Signature in G2 (compressed) = b0313962568da73ca351324019d400be1eb9b7b88f597d6af901317b01d53ee68268f2b88b240b5537c35a18b5d4b26c196a496490ec8e806ca944250689c860843e4a7bec8e8d66c7b2f39c933ed56893b6bff64438dee8804eab85ab00f5c0
+PK in G2 (serialized) = 0c8cc957d521e557c76c5be21bae0b950b15dafc342c51ab743cc28e33a734165859068ccc3f6ce2f0de7208de924a350dcf89dee9e636e69c80784cbefdbb8fa29391bc0332ed26b858a32eb593511b61f6c2898f39e54a4d9d933af9eb4710050fb817cd0d67c20697cde803bd0d011489443e31adb2c81e4c9ead4ba7d9c4a7daa974b5465135c29425e13459e2a810ad92de6b7005f371cd0c32a9e2aeda9fd72fba7de2d61649fb78fd49b0226a824d76120c6d2fd3c76fe097cd008dd8
+PK in G2 (compressed) = 8c8cc957d521e557c76c5be21bae0b950b15dafc342c51ab743cc28e33a734165859068ccc3f6ce2f0de7208de924a350dcf89dee9e636e69c80784cbefdbb8fa29391bc0332ed26b858a32eb593511b61f6c2898f39e54a4d9d933af9eb4710
+Signature in G1 (compressed) = 993aafa7c3f0b0ba04e41e6ab457d9e8b8fd2c01d67389a5cf54b1d5a3007bcbcb2ad9f64006d639fcd0e1f79a03ef46
+
+COUNT = 55
+IKM = 00376ea5dc134a81b8ef265d94cb023970a7de154c83baf1285f96cd043b72a9
+Salt = 9169009d46a6beb7d3ae5161283f9346f5e579841684b0a54fae53cc672e4146
+Info = 9169009d46a6beb7d3ae5161283f9346f5e579841684b0
+SK = 31b90256439ce67d8b3904f43e024a75c6f4380a2113327426fe4456452fe040
+PK in G1 (serialized) = 160153023be73e09f3082017e4cff3cd1c0bbfe2fe437499c2da9ae0b56cda90f78b244d44c9219e51d03bcc867c65ec02dc299c17a5a015e9bb8aac27d0af4afec9657475da08302e65f17a92fd0fe794d2a59175a9c5058f6a016f62647803
+PK in G1 (compressed) = 960153023be73e09f3082017e4cff3cd1c0bbfe2fe437499c2da9ae0b56cda90f78b244d44c9219e51d03bcc867c65ec
+Signature in G2 (compressed) = b176b3c832caf8fc863127ddef5cdb9bb6ff9011a2f2d1bf5ac3c2744e6f6a07f65b60db28b20b63bbc1a5758eecd5191629fb11d11dc0bb7c55adcf984031956747c1be2a54284766607940584e6c01bf82419e0c38eb3d4197c345928dd6a3
+PK in G2 (serialized) = 00eed438ffb9d5381cfcd5a018d6ee7fa611791965f74642b1d387812f097f0344ec91511394888bfb52a9a1cb488ddb1511e7f5fd1e9803f8ab76eab6306c1cc09ec517caf0496dbfe5eeacad04f60e85ba8d0cd483c3a865bb0603c05e03861046d81c9b4e649152d17c79d9fc6fa8bc19401371400e9baad1ac13742e4e062f0aba66575c1a7342c5a372e429c0ff12259cac77b2a65948bf257f214465e25e852b9664e0cd4b8d754aa1b2805f4942f26f116580b52f9366192bd34599e2
+PK in G2 (compressed) = a0eed438ffb9d5381cfcd5a018d6ee7fa611791965f74642b1d387812f097f0344ec91511394888bfb52a9a1cb488ddb1511e7f5fd1e9803f8ab76eab6306c1cc09ec517caf0496dbfe5eeacad04f60e85ba8d0cd483c3a865bb0603c05e0386
+Signature in G1 (compressed) = a03b5da3ed273159f3a8b9c62069a9ff394e357ed854f92ec8526071980a2ea1ff6fcdf34e79085117449c7bef832e43
+
+COUNT = 56
+IKM = 003870a8e0185088c0f83068a0d8104880b8f0286098d0084078b0e8205890c8
+Salt = 913a21c29851444c879c74a230d51b6f22e15a769f392ca3219939051f5ea087
+Info = 
+SK = 2de5d925fdc2be30bd766b11e7979647c690d2ba588e5267dea6907ebcfd0c11
+PK in G1 (serialized) = 047d73eac22d2d53868722ba248eba3bf50e669e8ad3a2e0e6e8b6d760d26098be620394d5d7a94db0fa2c25bb821847027b876e82cee7beb188b53b463df2892bb2c43e6b32e7b4ae6124148e3287035815d6f9a9f55bac16c01db6a8488f6d
+PK in G1 (compressed) = 847d73eac22d2d53868722ba248eba3bf50e669e8ad3a2e0e6e8b6d760d26098be620394d5d7a94db0fa2c25bb821847
+Signature in G2 (compressed) = 8fc33e48e308f00f8f053c01da0dc33a6657cbed2bcc11d8bfe850b1d895df0cbec34dd0c69b54b5d78f7517e86b320a01c2a7f218610d273e84d9eeb3e7c45699a96fdd19ed2370cd8c1e7a628ccef7a113ac12d223fbd74c213e0799854b51
+PK in G2 (serialized) = 1531917d28cb1e3e5415d91bbfa0b0711a9f9c7d261a3a21a0699c48e1ce99e2965c9725e977869bb96f995426ec509b026ad4768207e3a11bc20b071dc7775ee8e3ebb871bc7b584bb38d686c75256e23ef7eb72c8aa79712eb48bb7bfc08fe03bee09d86e1846449233a9b55adad41918f26a82162bf1783ae0c416e995357785d647b16fa7d07b12fbf5196ca87ea17a6a5201bf1827a6c8ff8f6b1994b468edb9e1a7158b71fa2c240d9931338752f1145a933aaf5c28f1ac23813c719e9
+PK in G2 (compressed) = 9531917d28cb1e3e5415d91bbfa0b0711a9f9c7d261a3a21a0699c48e1ce99e2965c9725e977869bb96f995426ec509b026ad4768207e3a11bc20b071dc7775ee8e3ebb871bc7b584bb38d686c75256e23ef7eb72c8aa79712eb48bb7bfc08fe
+Signature in G1 (compressed) = 82f4be658aa4df4dafee061e147ea3f8cea12477bef0cfdb377b695e62ccc6b64969d0e1782ee98e5d4975312af172b9
+
+COUNT = 57
+IKM = 003972abe41d568fc8013a73ace51e5790c9023b74ade61f5891ca033c75aee7
+Salt = 5af16f37ff1c729aebcb8f6e4c97920ae9d116cf4461c6ca96ef0cbd43627f4c
+Info = 5af16f37ff1c729aebcb8f6e4c97920ae9d116cf4461c6ca96
+SK = 3a6c49c7f8932f3d934da9f59ede44c102853b638d3fda3a7936b87572583fe2
+PK in G1 (serialized) = 055e6031784bb685caf99f42497c4af56ef30e6d58463eb689eadadd546c0e20bbae4b128b834b239e9e1307f0b53911071698a577e3941d3f50048c9dd58efbd8715b09ea7d8764b36dd18635b0f7b34a64a95f53c26fc075b2b56f803508aa
+PK in G1 (compressed) = 855e6031784bb685caf99f42497c4af56ef30e6d58463eb689eadadd546c0e20bbae4b128b834b239e9e1307f0b53911
+Signature in G2 (compressed) = 89dd8b497ccb344aedbf618d08a06b6746287b1859768cc63828440ca00d27119b7eabe374de689c5a48c4f896677157198bceeb6fbe6739bb55cb136f61b63e94749819cc499690ee851f54ac70bbdf46274cccad9b68b6a5129f2a0c1c75bb
+PK in G2 (serialized) = 142467c5f95a01b7853fef07585c6133ea6f3499ebdba0bb2812136101f0d1ee6340497ee80fbd15d19d08a5bb51900e027898dc9f9979919accf39ebb8fc6745d20d0cee9440053bf532824898b2b3e0278b0916deca4d34048e2013314ad6f0e994fdf931b1b4348a2a954f99c9102cf5688817ffd1f0eb57e8b301c1a8a383c5880911a6fd53ba6cff5e19456421a06005c9bc60bf0f25756f97f49dbdc6e1f0133c18d95138b705c9c4210ec87745c4c0034c74dc44d8a4dc5a809d4a599
+PK in G2 (compressed) = b42467c5f95a01b7853fef07585c6133ea6f3499ebdba0bb2812136101f0d1ee6340497ee80fbd15d19d08a5bb51900e027898dc9f9979919accf39ebb8fc6745d20d0cee9440053bf532824898b2b3e0278b0916deca4d34048e2013314ad6f
+Signature in G1 (compressed) = ae13154bd2b925b0a1da9f7f0a0c77d9f513cf4581fb91f76e8d402ca30ff669ea7fa44415b79e791c9b87bbebdcfa3a
+
+COUNT = 58
+IKM = 003a74aee8225c96d00a447eb8f22c66a0da144e88c2fc3670aae41e5892cc06
+Salt = a8a6f9a0b977cf1483596142d3ce58a630d1f215c642f16872cb78bbe3ef6c88
+Info = 
+SK = 4c9fb37f5cc30419fc4823ea39634cc071eff11e2dbb0f33a2e7f2589487e83a
+PK in G1 (serialized) = 19f4027bf827fe393a71ea1337d35536f5a5af874e48043b32b63624d3fd08aa890811c21ef378154f9b689923d4c52e15b8f1ebad783486afd59f923834a24b8c1b32794daddd80de82765457d83afbd04f5c419e1af8c1bdebc828eb253c37
+PK in G1 (compressed) = b9f4027bf827fe393a71ea1337d35536f5a5af874e48043b32b63624d3fd08aa890811c21ef378154f9b689923d4c52e
+Signature in G2 (compressed) = 896d075a8478bf6206859becfaf912418ade790c588a30505f3f23b85fdb412ba7a7e340ede8a589751fdc7c31a03fa609614de53f06ced4d22201c99bff3b0a319ccb575a19cb259f834095d235338abf34fc665297c05c455b6acf5944698a
+PK in G2 (serialized) = 00debc9341eee099dcd5818e0a65e96fab375f53507bbe565e6ddf5c44c7605ed8f4669b64edb3a7b195b268468269ee1473f51937cb5a0cc7e616b38bbf5d961dd48d1571c7a2e479798407dd22b20f1b00e03f0f1c58cea6c99e17df4a9d1d12cc76612d3e9e99065d527150afd8d98bc4303cd172e244289ea2d745a65d03bb23c41984a2cf532b245ab614ecc9760e709d0f6039ca31a8cb7fbb1c25f47457c78e0bcf9a3e2ca44558272e7e970bd497ebf1e824fe3072e91530fae3a9a2
+PK in G2 (compressed) = a0debc9341eee099dcd5818e0a65e96fab375f53507bbe565e6ddf5c44c7605ed8f4669b64edb3a7b195b268468269ee1473f51937cb5a0cc7e616b38bbf5d961dd48d1571c7a2e479798407dd22b20f1b00e03f0f1c58cea6c99e17df4a9d1d
+Signature in G1 (compressed) = a44bdbe96e011bf3015676b41b14a594cf01fac78dfa2dde6ebd9109ebe041ecb33ecee7a9a2d4e7118a2554a4b64b68
+
+COUNT = 59
+IKM = 003b76b1ec27629dd8134e89c4ff3a75b0eb26619cd7124d88c3fe3974afea25
+Salt = ca2bc5f545f46ad0196fde417589212ede2f2653b88922903473c8c0fa0815c1
+Info = ca2bc5f545f46ad0196fde417589212ede2f2653b88922903473c8
+SK = 47ec0db47b612182fa509e4c9abeb7336c8e656c0123c3318bdb81a906b0edda
+PK in G1 (serialized) = 0ca6dcd9b26ff84f30bfe49cb9cf30e843e1639863d83eafeb37f9619e377dd729612db6d81bcb2a14898617a9f438830879502d01e34833dabc18ebce39c0b487ce4b8c8f2072fb69a20f840316e5b2c467173bdf3edb1d82e8c55ad713a155
+PK in G1 (compressed) = 8ca6dcd9b26ff84f30bfe49cb9cf30e843e1639863d83eafeb37f9619e377dd729612db6d81bcb2a14898617a9f43883
+Signature in G2 (compressed) = 80e72ca810d5fb077005a2cc32faf963647fa08dc97838d01ca10f40d976d6b20044550d68584962c0d040d73471f93315533ae3c70ea89ec99e0737a01f733d2320f9b94b9609d64213f15b57800a350dfaa542564b3275a3150b171b160f0d
+PK in G2 (serialized) = 062fdb2f1c04a25e501e9daf66b904b128240522c7a1685861038f0d08dc4957c359cb53614b96d1c5ba4ba640990c090f02a0a4631a68f27e5a6c9cc07d16f59286c04355fe473ffc18de6f0ef9281d075d548ad5626ebe1a0c1f4ba86e923b14adb998f241f7ead3f771d6457f4a6ac9d84aeffbefd7a086b69b5153476adee3c93a4e6a15a9577558bd2f22dd0ab4060321e355594d889b26687912dd8990553ae7e66ad063ebeb031f8218d6c0871ea2da5d529a37aef7c0754920f04ad4
+PK in G2 (compressed) = a62fdb2f1c04a25e501e9daf66b904b128240522c7a1685861038f0d08dc4957c359cb53614b96d1c5ba4ba640990c090f02a0a4631a68f27e5a6c9cc07d16f59286c04355fe473ffc18de6f0ef9281d075d548ad5626ebe1a0c1f4ba86e923b
+Signature in G1 (compressed) = a923ccb402ebaa3e20359ca471d9d10c6392df625a92e193c6569af62981fa7efd5d4b136110e25f3b05eea36243cfc3
+
+COUNT = 60
+IKM = 003c78b4f02c68a4e01c5894d00c4884c0fc3874b0ec2864a0dc185490cc0844
+Salt = 37d0cf1c7fc2e243a1a47fbf2975cd32fe1210da5a00872ea0de61f698861fcb
+Info = 
+SK = 5cfc572cd915d18888b4af2953c32d014a86ca0dba946b3f13b4cc9654da1d44
+PK in G1 (serialized) = 06076b8f3727398bdb0e0d75edb9456836e1ec7feaf7cea65480e3b72fd4401c78dffa8946b260e600d8229ee2d869e71110ba3dd4d8063692c817863c52968067c866130a15c061b23a031826743ea996a204059bef9c4407289d114bba36cd
+PK in G1 (compressed) = a6076b8f3727398bdb0e0d75edb9456836e1ec7feaf7cea65480e3b72fd4401c78dffa8946b260e600d8229ee2d869e7
+Signature in G2 (compressed) = 80626ddfad1381b873bcf4579dce3c016d48424493efad5d93119de430cd6c2f6457e9450c4037ec00154352904f32dc09c018c332d877d504a50ce4e32ec3474c3de81d06d20755c23ac901b9755f69607cd8fb722c271cc1b78f947d66d6fc
+PK in G2 (serialized) = 0e65a9e6e35c2b55961f00597f04c92c3ef2221f23e695107d9f81ad05a320a2d26559eebb5dad4ced1d328b98b39aa503d6fb77003de44dffd1ee9ce9a729e3ba231daeff0650eda7ddddd6b4d4c9991552b0ee3e531076d3a8fb56cb7c35a51781ba8ab0f9c18ce62d421a35e41359511f760518d7fade221b0162e27dc144c5b7d82c42903f88f3ba9088b7da6b4f0a2c829f84d7b6a5436da867f387b58aef07a2588bc04b2420bfc4f9ee197dbf5be9393b9582aa6fc331fd8c65acafde
+PK in G2 (compressed) = ae65a9e6e35c2b55961f00597f04c92c3ef2221f23e695107d9f81ad05a320a2d26559eebb5dad4ced1d328b98b39aa503d6fb77003de44dffd1ee9ce9a729e3ba231daeff0650eda7ddddd6b4d4c9991552b0ee3e531076d3a8fb56cb7c35a5
+Signature in G1 (compressed) = 89d3195794bf54b0aed8a733d5130ecf1908ec9cbe4f40f7b7ac247ba305e1ad3627fa72c62651b36b1ec603e4226573
+
+COUNT = 61
+IKM = 003d7ab7f4316eabe825629fdc195693d00d4a87c4013e7bb8f5326face92663
+Salt = 52847aba3e3c5d323e235b4e893c8cc0740f4eb75b2add2452f3f18e9c9959ce
+Info = 52847aba3e3c5d323e235b4e893c8cc0740f4eb75b2add2452f3f18e9c
+SK = 108726367dad2b5c84089f8ed271706916183ca2ae39cd35af8f977c9b2d1b7c
+PK in G1 (serialized) = 0ee77fb5636d85efc290f2fb99491f384a39e7937f22305cc48a8e9354b30ed8e929b5a9b9532861594ef2ae3950b64803e1bf79f7a5e7fbd10e808d03ba194bb2feb57a2e0fd6dec9d184b73bd4a96238fa7be1c654e9e13b7b60ff26ba191e
+PK in G1 (compressed) = 8ee77fb5636d85efc290f2fb99491f384a39e7937f22305cc48a8e9354b30ed8e929b5a9b9532861594ef2ae3950b648
+Signature in G2 (compressed) = 94723fc5b068e1df64260a44059773c04abcfec3108ef9374cdd046cde0f7e026c72fc9b893d10c55bfc846517bd10120a730a9472edc590729e6e8a3dcaf737ca15f0423d1b02fb0122e590ba01933d80f0c8bc199da8189a44b8a490158e9b
+PK in G2 (serialized) = 10dada023ca64194228213084e0afd9cf6d0287e4e474c53052b0a576e6e3aaef7e326552b26147a22c6db8da21c0de216e1d66055432378efda9536ec052dad19c37ee01c07d35383bf578b3f5c7172cf2f9ba222777f312e0209410403e48e0b1b798ebdf175d44560235f05d7cf181dd1802a33b219485e13233b91076190dad7664a50ddedcf9d8ad044aea2e5f00a55ceb3342d9c85d35e7df101cd0adfe8ff3bd2bac4bd869231a1fbba5dce0744ea491b35a09199dca61b36b3ee7a18
+PK in G2 (compressed) = 90dada023ca64194228213084e0afd9cf6d0287e4e474c53052b0a576e6e3aaef7e326552b26147a22c6db8da21c0de216e1d66055432378efda9536ec052dad19c37ee01c07d35383bf578b3f5c7172cf2f9ba222777f312e0209410403e48e
+Signature in G1 (compressed) = 8ef25dd8bf8530e1aedc4ffa5bb489e95a614cdc1e3c302abb5baa9a82c48a48d2e0df74ed4dab3a1e6967aefc51659c
+
+COUNT = 62
+IKM = 003e7cbaf83674b2f02e6caae82664a2e01e5c9ad8165492d00e4c8ac8064482
+Salt = f3ca8ea25d1fea2aca59231314caf7100435382fb1bc9a69eae1ffe150091531
+Info = 
+SK = 6a16b7f1ca17f84d15b15e59b8e50ffd01d5aedd8268d126ebd7ee585a7c521f
+PK in G1 (serialized) = 189b11987212ad1d8afa052df11f02ae9ede70d1776fa2fca41556d1d7cdb7c15764e8b48fc6c8537c92762d3c79c99112726cf57c6acde0a886d0bfa1acafc0c3fd8fcbd6d9b7ddc4cfe431360eb5514a1fe776b440446a44c9698fe075b1a3
+PK in G1 (compressed) = b89b11987212ad1d8afa052df11f02ae9ede70d1776fa2fca41556d1d7cdb7c15764e8b48fc6c8537c92762d3c79c991
+Signature in G2 (compressed) = b4371330b4985ff91272e4d19edcfa2e7752b3b8cb80790d388617fd73cb9038aa7b07274ad8a09e9bcb7200bac3bfef0abff3f9062e14951db6be1761310bd973a36c2eda11d14842c81f5c7926c3f485e24f6dd4e0ff1baa2d7d1060405f59
+PK in G2 (serialized) = 0e253662a0b08cf01c64f5e02235d8c495d860aaeece5bc0302b2e704ddd8b09e19be5f7546089cb8a011d11664097a61702221a2511cade545e370d6587513160a69874edcd9cd721820454cbe59831aca35678c3f1e19945a9e92a561d7d31137f0cfbf20d3f30cf6965fcc6c44c14728d9c9904618a7b88fa517c972f8047bf68c0f438c5fbcc2a61df21612eee080df808c2243e81076d126f59015a90a74df1782b8c1bf75041abecc79b48eb48b932f4c154f2c10ea19b62a4e7e19316
+PK in G2 (compressed) = ae253662a0b08cf01c64f5e02235d8c495d860aaeece5bc0302b2e704ddd8b09e19be5f7546089cb8a011d11664097a61702221a2511cade545e370d6587513160a69874edcd9cd721820454cbe59831aca35678c3f1e19945a9e92a561d7d31
+Signature in G1 (compressed) = a341b3cbb9e730b7c9f4c46c18fb2c8790ea1cb0126550aeaab4b447d23272267b864c64f73a7c892de0e5390efc0d4d
+
+COUNT = 63
+IKM = 003f7ebdfc3b7ab9f83776b5f43372b1f02f6eadec2b6aa9e82766a5e42362a1
+Salt = ead126d89d7e81b1743968bc260f52087dbb9a56ca63da54123f6756cb879476
+Info = ead126d89d7e81b1743968bc260f52087dbb9a56ca63da54123f6756cb8794
+SK = 6aeb8217d123ba4a920271ec7b053b3ed0f381b03440a738fdade2568eb47fbc
+PK in G1 (serialized) = 0b9a7019c043cb9b2e90ea9f18f39611f565f548ae52ae05a49ae499c898573df964652fe9800cd01ca7ecffec3e570b08640d09c6637b2a53873ec5c8b2e6c0a86863a6fe8acb2e3e61f2de06cb9d803d685bdf0fc0d43ee8ae1a2ad45e369e
+PK in G1 (compressed) = 8b9a7019c043cb9b2e90ea9f18f39611f565f548ae52ae05a49ae499c898573df964652fe9800cd01ca7ecffec3e570b
+Signature in G2 (compressed) = 857c1047b5e67fcb647f1355f75e14aaf36c2ec8bb88ec971502c6aacaf03c55d18805eed89915b2ac1ff681f0dd32940489fd90ebda2dd422b415a065a3e72f829942a32baba9ca8b5aa443ad5a418a9fef79e5ed9a33c319f645bbf8858e01
+PK in G2 (serialized) = 14687029f3ce94a0f69bf6dbe46c49d2706fba372dd621640b5662f2aa8b0c0f680989a975b61d87580d18e687bfc942103f72a2bc97a4bf847c01708389d653a971f83c341886fef1a15c3d49226d2ea3c33b78bbc43e5e8806a718eca8cab406afbca3a354a19d2b5fc6bbbb4daba808aaabdb2e771ae9afce930ffdfbde01f8f646ceb3a84ed010d97d16af334ebc0d8f89ff80cea373c1e0b53da2455845e7aa813c5b35d8d630e75c81519e5a41a34530d794cf1484751156a9c4924071
+PK in G2 (compressed) = 94687029f3ce94a0f69bf6dbe46c49d2706fba372dd621640b5662f2aa8b0c0f680989a975b61d87580d18e687bfc942103f72a2bc97a4bf847c01708389d653a971f83c341886fef1a15c3d49226d2ea3c33b78bbc43e5e8806a718eca8cab4
+Signature in G1 (compressed) = a73fe59104ff972f7530559e7bf485455d512b8f0f8939a5dc3a6af1d676c40a540765fc6b8c3b2b63bd89bad4e54ae9
+
+COUNT = 64
+IKM = 004080c0004080c0004080c0004080c0004080c0004080c0004080c0004080c0
+Salt = f355fe392ab97a9a3ae28725087041802c0853c8a2689377246cc2afbbf3cb7f
+Info = 
+SK = 1c4c5c92769857553081f4b6ae8e0f41a22df7ebc9d07f5ecf9c5e503103ea8a
+PK in G1 (serialized) = 086d7fa25b8270289a2f3a2a6e6528f3f071fe0583386d63c2030c3fdbfdb586ad33965eb044d41397f795c62ddf5693170b9f5297136f7d40d13c20c65877fd57ac147b0d6f257b98b74c6dba49eb49e82027f1b6ab653bd61ad8cda62a6112
+PK in G1 (compressed) = a86d7fa25b8270289a2f3a2a6e6528f3f071fe0583386d63c2030c3fdbfdb586ad33965eb044d41397f795c62ddf5693
+Signature in G2 (compressed) = 8433f90fa0f75126cc1b3c477cfe0c250c5144d74d792ee705605017a30d08be57d68429d805baf22bcf53016d28cbf7135ecaabb90152cd84cbf29ed859693e9d973a5f4893e075e4758c9db377d944270479a40f1de1bc045fae20756152a8
+PK in G2 (serialized) = 0ae3b5ba7877e922186c0435a7a51755826cdbb5c033f6fb5556a9dca14f28e50f61f07fb8c719dc08243675bbf647ef198964023dacde3437cb10ec38ffba1f0a1ca514b7e8a98a2d664bf9cb76c8a6fb4c02fcb6ec9b60b0606d163dd92bdd0c0832a11586034c55209636c7936971ad1df903bc2cb1d586588f1f21c83f48c91fbe8fd8210e194cbec6cd4eee260016f782ea004cbfc16c4678c62f92345e30488ea7762a318e1a1aa47089412f5b010c80909aad0899222072105ba0f49b
+PK in G2 (compressed) = 8ae3b5ba7877e922186c0435a7a51755826cdbb5c033f6fb5556a9dca14f28e50f61f07fb8c719dc08243675bbf647ef198964023dacde3437cb10ec38ffba1f0a1ca514b7e8a98a2d664bf9cb76c8a6fb4c02fcb6ec9b60b0606d163dd92bdd
+Signature in G1 (compressed) = a062d884cebffd6ba6a704a41f17e50859f91cba0460c5d6e46fd096941e6abc40356df1b0787212c49b101f2d2a18b4
+
+COUNT = 65
+IKM = 004182c3044586c708498acb0c4d8ecf105192d3145596d718599adb1c5d9edf
+Salt = bec5129bd36021d02997c2eb2a88654050584af43ca12bc240b9b4e17ca71d08
+Info = be
+SK = 2933e0c06e1087d441a98468ae1d7f333bd613874670533f2811c305d291c9f3
+PK in G1 (serialized) = 045ddf5f2f79f67b721a143e28fd8a85d989bb21660997a001d1b9fd7563d2c20617a5d7acd8d172cb6de20876dec3ad124c148656142b6aefd5739e99259cdfaad0c25c1ef6dda239ecb259add42656f8b31e0ad24e2461672ca32671253b05
+PK in G1 (compressed) = a45ddf5f2f79f67b721a143e28fd8a85d989bb21660997a001d1b9fd7563d2c20617a5d7acd8d172cb6de20876dec3ad
+Signature in G2 (compressed) = ab021a6e200b5e2cdd3df8114d9ae3f3761f78155f4a6632e84091e9c8357c7ea5e0a39b0a34b9987fa3e06cb00b380f0d201d057f6acb5b424293621f923a6228cd52df1bb06b2fd54e22f7d477d6407622d0dbd01f87dcd04bf299ca6ca844
+PK in G2 (serialized) = 16eb1e7662e5675358101034b37f3e891dff6b6c04b0d47c9472408c5d3a3a46712592c78b449b6713e2cfa7bd21092e0d4ac3e9f1dff968eaadc0b963d08f2164258c011388e875d52c6338e7c98dbd648e12748162ba5d0cb847b772b6e1b50652d44d1d49c0214f632ab8c2e75b8530f1158c7a61b1cc4351656f346af4daf452e5cced93c18a18a9c70986c4fd1f13ada045fa0fa1d8801bc2a08ddb1d77b79b033841323f371e12c794bb43262ce99e7a460fcb2878ee0938d0321b383d
+PK in G2 (compressed) = 96eb1e7662e5675358101034b37f3e891dff6b6c04b0d47c9472408c5d3a3a46712592c78b449b6713e2cfa7bd21092e0d4ac3e9f1dff968eaadc0b963d08f2164258c011388e875d52c6338e7c98dbd648e12748162ba5d0cb847b772b6e1b5
+Signature in G1 (compressed) = af65da2fa79b3c2cb8b524230c3507bc871b540c2f63cfa4bf2827dee02468ea80504805a46b0b3694e65a4c5b66f5cc
+
+COUNT = 66
+IKM = 004284c6084a8cce105294d6185a9cde2062a4e6286aacee3072b4f6387abcfe
+Salt = 414bb7dd0396915fd706eb8260842afa4fe39fe6e47336db49b6c3120742c14f
+Info = 
+SK = 27448251b4532d3bff3ac580dd892a435cf32e1cc5e5ef964c017f34fd32cbf0
+PK in G1 (serialized) = 00c5e9e42e4a64bb5dee0f12463f8cf56cd19dc93a79bbbaa73544c2927097dfac46d42afc77da0e7517e849c84c189917a313d1c20d5bd7bcf73bda3384d78ce75104884601077b349195a018fc58b0109a661016acccc9fedacc5df403f6d7
+PK in G1 (compressed) = a0c5e9e42e4a64bb5dee0f12463f8cf56cd19dc93a79bbbaa73544c2927097dfac46d42afc77da0e7517e849c84c1899
+Signature in G2 (compressed) = 99188916adbc9c9eb4275dd647cc0c57b0ea7ed058041625cd054c9b11db668a116677e436473e8f27b58783f1f2b38f09b63cdeacc63a006488c9b8ea00d29bef00f26718b796e2a978f94f6f5e8575600cff0af9fc9c69992a5b4f239548bc
+PK in G2 (serialized) = 019e8b5449f4691e123a0406b2f274ecbc1456357e2d119200d614d21e3d0a5f263061bc601f82ed70eb3228338f544b1192dbbc96fca5a2ca69676041ead0a842b085537aeeb66423b50f2a7b5273abcd82aa80a94d1f36ea867a068f99cd381015ea8d522cc4d22116ecb950305959362f8beb9d2624fc1779ea9e07cca90d80b32c9125ecdb8520dd3697c2967bf002e9d0ef98d4db61db2844c7abcc81d16d88de486620644110c6a7a5f1e34a6ab21a576ee2c14da8d5dfff62cc85818c
+PK in G2 (compressed) = a19e8b5449f4691e123a0406b2f274ecbc1456357e2d119200d614d21e3d0a5f263061bc601f82ed70eb3228338f544b1192dbbc96fca5a2ca69676041ead0a842b085537aeeb66423b50f2a7b5273abcd82aa80a94d1f36ea867a068f99cd38
+Signature in G1 (compressed) = a3221f4015e937c09dda2051d946c080491e4e2712493b61dbdbcc2994d97b60c51eca614a932ed102dbdc022e138c17
+
+COUNT = 67
+IKM = 004386c90c4f92d5185b9ee12467aaed3073b6f93c7fc205488bce115497da1d
+Salt = b301129e613a0e6a1d5131e53e091f282523fdd92c15acab25a4a71dfeacbb0a
+Info = b30112
+SK = 4f4e90a1529b3bb2b2061473e1482a44a3eb52426a8d0f3df06c543255d757aa
+PK in G1 (serialized) = 03cb7f0f971d8fbe8bf841618a0a55e209dada396e56e0ca16e4726e8bacc398e178833e7c2f7377598a02310feb306619543dad09917682322dc238926e73adf2b2afcaca073ec74100daec013f4ef2e77e060d9f29d43516913e62a59a2f6a
+PK in G1 (compressed) = a3cb7f0f971d8fbe8bf841618a0a55e209dada396e56e0ca16e4726e8bacc398e178833e7c2f7377598a02310feb3066
+Signature in G2 (compressed) = 97d1effed9fe3e7c98a8cda1bba8f840d7a51a6912e640cce983f805c0c475edefe8aa539895a59c859b6b17b6efc00702fae176c1aea669ae18920bd37498cf92d3312b09d2c3ef6627ed65a1c63ca93f42a6925c727e2fdd834e6e52ca6a36
+PK in G2 (serialized) = 039ee4ef509010e645df485196f1afaf31ea8fdb6d4ed39721e341f3301d441bf2e702627c8c4df502d00b47874bd6510c577ce40a3281d642ec026e7936a011e4ac093450905401050a207f49dcbe011bb42ed0099400927d3f24c9cf663db9173aa54dd090713db4c6b83e5da8e7379be769eabfcea4d7e0c76c332e511e6fcac408969d25c6cfc73fc4bca9db47e612e77bca11fae800066dd064c9d22d44ed22f7174612186532badf967946df26d1ade55f9985d3696f32f2e43e09d08b
+PK in G2 (compressed) = a39ee4ef509010e645df485196f1afaf31ea8fdb6d4ed39721e341f3301d441bf2e702627c8c4df502d00b47874bd6510c577ce40a3281d642ec026e7936a011e4ac093450905401050a207f49dcbe011bb42ed0099400927d3f24c9cf663db9
+Signature in G1 (compressed) = b18f62f10feff059b122675e7b50d349fe2c34ed21783b8f026bcfcb253a9678ffc56fbe0fecb2ba5bdb13028645a4ab
+
+COUNT = 68
+IKM = 004488cc105498dc2064a8ec3074b8fc4084c80c5094d81c60a4e82c70b4f83c
+Salt = da7feff232663cb9ccf075a8c3dda89d0566ff07c4a05192d69abdebccc1493f
+Info = 
+SK = 542adcb79eb619620c6829ccd22b69946697a03fa428609923557fca4d6700f2
+PK in G1 (serialized) = 05ea13e9bb58f8a3fd8544f521578e49aed1fcc7d4cb8722274a2bee1f204cdc07cb2cd18f68918b569ae1248e7dce300e0820ada01bb0b7f09986ba748eac7c2893089a69c0fd249da7dea25badc0c79c71ca299e158f1c9fbfe11c29c2e742
+PK in G1 (compressed) = a5ea13e9bb58f8a3fd8544f521578e49aed1fcc7d4cb8722274a2bee1f204cdc07cb2cd18f68918b569ae1248e7dce30
+Signature in G2 (compressed) = 972871a878825fb1601f379bcc911ee04df33a045a15740e3870186386ea2570caca7a5489ccb1d3c9e737085f315f5c0948aaa8e63efe6b1c486374612b76ca48f7822d71c993624daf67c3678e8039ed32dd42e1c6e45f19d9548de6aaf4d3
+PK in G2 (serialized) = 06dfecdfc9b2913e942a15f19498be6f0f1953931ced31bba42ea9babb1664e58159b130bdb98e9773dbc81545a16e2d0321a070a4c8b54a3e088e3f024a9f6a525294356f2de2e9970ad1c990bcce3ae956a0cbcfac12593bbd8a62cb17fcde17a8307b0aeb74ec5558125ffa3013f0d468dd12497b1a23ee6e79d26554ced79cf21b3f092f7ac9d16769f91c355f540304008c52e942b33e5233b5a1e5626d91e4128dd5681fcc48c415331f3c6a1ef2dc13f13809b4478fa92ce8a1b59caf
+PK in G2 (compressed) = a6dfecdfc9b2913e942a15f19498be6f0f1953931ced31bba42ea9babb1664e58159b130bdb98e9773dbc81545a16e2d0321a070a4c8b54a3e088e3f024a9f6a525294356f2de2e9970ad1c990bcce3ae956a0cbcfac12593bbd8a62cb17fcde
+Signature in G1 (compressed) = 8e6156ff3260ce3bec6fdfefde7a0fbae199592ee12a1545d5f8f043819ef785fc6e0ededf90c4e26132fa2f90c1c854
+
+COUNT = 69
+IKM = 00458acf14599ee3286db2f73c81c60b5095da1f64a9ee3378bd02478cd1165b
+Salt = 6fc0b444ec4fb371189fbd7f39efebc27fcf3924107face0f0720b0a26d1ab56
+Info = 6fc0b444ec
+SK = 47cd96a23e1a010e6b2cc6b0b098734ada0fbc89775036807e221111b47e3900
+PK in G1 (serialized) = 0fb39b8e4209f63fa05f8b6ab5411f2b982cfe4c4126ac543f9de1a6ca44bae7402fc01bc2c3252022d8ef93aa619646098d41a25a0933cbee8696cd25aad3ee514d5f6c6db3a36c8cad783250baca2dde469a1ac54f55aa282422a77ee32b5e
+PK in G1 (compressed) = 8fb39b8e4209f63fa05f8b6ab5411f2b982cfe4c4126ac543f9de1a6ca44bae7402fc01bc2c3252022d8ef93aa619646
+Signature in G2 (compressed) = 848916fc610b7d21e5228ab46d633a81ca12c70e321b2c3d2d775b0a15996bf630093f983f424c1c31546cff40281e57164687dcdceae697e84f41a0c75064b2ff676ffd047bfa1061de0c151a83b84814b05ffe1f5fe6faf8eeb5e02cc1486f
+PK in G2 (serialized) = 19ae6ce171edb25cb75cbb8c666d99e53f356983d8e1aedbec218495ea8672c3d931e553fa6f6a9c76c262a86b8c24dc1964356579c53d9785b51821dfa14b65aab79e51fbdd5310d1da4f50196541e47ab8ecb188800ab55375901556130a2d065141fb8e492e81f077d5a3c9688bb2eef30f4e54fc77c4e256d17cd3d1c962a5bc1f454d3ff5b5b9996f18c07b01130efc49cce5f256ee88427d6fc0e97ef8b31dfc4310db5c9e3f80e87cbf5ef5b270297542ddf7d5de14c397b389a5ca73
+PK in G2 (compressed) = 99ae6ce171edb25cb75cbb8c666d99e53f356983d8e1aedbec218495ea8672c3d931e553fa6f6a9c76c262a86b8c24dc1964356579c53d9785b51821dfa14b65aab79e51fbdd5310d1da4f50196541e47ab8ecb188800ab55375901556130a2d
+Signature in G1 (compressed) = 837964efa03080ce6ea055fb912cc733f444e18cecb71a59591a960842bd52678011741d94c3a114e8b5f51ecac4365d
+
+COUNT = 70
+IKM = 00468cd2185ea4ea3076bc02488ed41a60a6ec3278be044a90d61c62a8ee347a
+Salt = 2ca5a285bdfe057b37203d4f57cbc4526783ba72a84c9c54f6bce29286968aec
+Info = 
+SK = 0b40770053de36e0cd06dc4926233c2a317bf5f41078e5174fab7ab1f4ea2014
+PK in G1 (serialized) = 0a0c4f50c9e7d9bc5e3b15c11c4c718a7134d4c56f9109b542d7f76277ba199e4a20cf984d3a43e20e8fc87aae288dc51514711ffecbf88fd4597fb0f3bd55827da993eb6c2f684c483434811a948039b8de017b0b39f4eb54e1f8b2238985b5
+PK in G1 (compressed) = aa0c4f50c9e7d9bc5e3b15c11c4c718a7134d4c56f9109b542d7f76277ba199e4a20cf984d3a43e20e8fc87aae288dc5
+Signature in G2 (compressed) = a60224345a522e691064f9695af6e050e31c27abc50ace6e1c25d5cbbc87929dcc5d9f2658f7c14d6d5cb8e7dba194b4131070252618eaffd21037e84d3e2363f9d68479a3b5e2646e7114bd4f31a5124d2d06f29d0fcb96ca7892f170e20b10
+PK in G2 (serialized) = 166c846807207258ea95e9fa4c17ff35e23f6e02db5b9c4ca895e92e20896bed45aad4eb20865ecb84f48beab515c1480abdeea7f7a0bb22e0c30b7a4f822ea51ac03485b1155b7ebf0fe843d8e50a0fe54bd22def60fd7827f1740cd15ef6b915aaf7ee00316636f4270cff3441f1b9d65f0a6a3d9f9eaf714a5c293b1a33aef7b083d417a40d4df2db25be36cdec6905ec7d9cc76362900254d127c91de2b9fea81cc158e30b456cee5bf49381c258b3522f81da3d0d22119df88d23bb4d97
+PK in G2 (compressed) = b66c846807207258ea95e9fa4c17ff35e23f6e02db5b9c4ca895e92e20896bed45aad4eb20865ecb84f48beab515c1480abdeea7f7a0bb22e0c30b7a4f822ea51ac03485b1155b7ebf0fe843d8e50a0fe54bd22def60fd7827f1740cd15ef6b9
+Signature in G1 (compressed) = 86bae6ae9fe3b5dc12c4db23b4ee81d1fe89063caec612b74067bd31c99a2bcbef0a102e895e83ff46c0ff8c0389e47a
+
+COUNT = 71
+IKM = 00478ed51c63aaf1387fc60d549be22970b7fe458cd31a61a8ef367dc40b5299
+Salt = ffcc43033c515f705f42209ac47dfad7d77e979903f5171b4e9bda55a7ec0840
+Info = ffcc43033c515f
+SK = 0a899768fb20f2501167d9ea50a78f7831afeb720f7e4480bf66659ee0a6a0de
+PK in G1 (serialized) = 0146f39d00c3c8cc802654bb190a6a834275575afa4f08c1d2e0de62c264d3d34ac1a6f4303982df9afa25d3251e8f891331960803b5ac2a1a96a95a5f52f2457e1f7c48052694b624ed632b46fc9c3fff1443430d5472220a8ca97aacf728da
+PK in G1 (compressed) = a146f39d00c3c8cc802654bb190a6a834275575afa4f08c1d2e0de62c264d3d34ac1a6f4303982df9afa25d3251e8f89
+Signature in G2 (compressed) = aafd08789198c59ec0e040714a08dafb58e5833ae691d38abeb4818300561e8997821f78ed7491b2e29b3012f64b5ecc04793815a5be152f6df64b509e9491375ca9fd60a2aa59e88fabec168c3c4bb27c856142ef12e8f2f9fc33e04d456945
+PK in G2 (serialized) = 034c6be50b0f07db2d1dc2952e4706832ccb65369827ef29ccc27a61a8b64ea8ef5146e1b82a8f7cad29b921cbb25164174f613a725dafdaa695ecae0206562271ee21bdebaae5c0f36777ce0698c1b5178dec5f651f3180753ea98a54dc877e00884fd6a0024f9866d6bc2580b5fff75a5424d2a1eb6dd78e4b15b6c27b5a1ab9193dea5943b6e8bbd742395ac2db0012b9fb05214bebc9f34db30f6134ada1bb0fd0e53ae2a2645a3cd1a5c4d70f28643d47d0472dd338beb1dae021e8ebc8
+PK in G2 (compressed) = 834c6be50b0f07db2d1dc2952e4706832ccb65369827ef29ccc27a61a8b64ea8ef5146e1b82a8f7cad29b921cbb25164174f613a725dafdaa695ecae0206562271ee21bdebaae5c0f36777ce0698c1b5178dec5f651f3180753ea98a54dc877e
+Signature in G1 (compressed) = b6a6ed4e185d3f63070ec75f6bc29c4167b80de7310cc439455542999bf5750351c9a37003ae7773d2668879455a504b
+
+COUNT = 72
+IKM = 004890d82068b0f84088d01860a8f03880c81058a0e83078c0085098e02870b8
+Salt = a94a2ca1e6249154e458980fc205909baaa6f7b7951a46b67c93807fb1704c46
+Info = 
+SK = 71729b8fed14f0edb19f2adf2e3929e2e0888697ee8bd8ef5d1c720d71989061
+PK in G1 (serialized) = 033deb20fc7380a3a542d5608bba474bc8f3114ef1ecb581cd860adfdb383b1c1510e8598b3aeecac4b28433cc51a51213832b35de89cf85915c0ba1729d90a4fda55d466ae281b8ad2014f757c2493b41bd1bf4c798cd84bf281669769fd3ee
+PK in G1 (compressed) = a33deb20fc7380a3a542d5608bba474bc8f3114ef1ecb581cd860adfdb383b1c1510e8598b3aeecac4b28433cc51a512
+Signature in G2 (compressed) = 86344b6d75f92d1a4b2778ee002def749fc2bcc28f38cc586cd6bcdaea0f7abf2e111e8bcbd98cc104b7d4c51fbb24840ec1f91ebd5aa3c446c4daa890bc8c43712d18c321148a91b73e5440df9798f18fef6f024760406bae3280492f13cb50
+PK in G2 (serialized) = 015a43e9931f294f57d3742631d5998075bbe5170bbffa316c75126865f6e8fd81609199c5622c6affafa94a3058582507b5c6ba3bdd4a9700df2b8f9f5ce8f8c2ef6231506867c0fd031d1534dce1a43c50046339d65a9a63d529c3421df5d2094116ed9a178880a8bdf1f72528d4aed79cdcf4650ce8496089d698df7c3723af58ff644de19bf5908ca6238ab49884061adfcca78be1b418d01529d0e70885c5f4513231c21e63e3bd2ffeaa30eeee1294f08486b7fca7450781f153d6c3b5
+PK in G2 (compressed) = 815a43e9931f294f57d3742631d5998075bbe5170bbffa316c75126865f6e8fd81609199c5622c6affafa94a3058582507b5c6ba3bdd4a9700df2b8f9f5ce8f8c2ef6231506867c0fd031d1534dce1a43c50046339d65a9a63d529c3421df5d2
+Signature in G1 (compressed) = 903c989ebf467b400b48db2cbd1d41334d5b85b899b86053f4ea702172c5ffa7d629c706de3c3aeb14de000173983fca
+
+COUNT = 73
+IKM = 004992db246db6ff4891da236cb5fe4790d9226bb4fd468fd8216ab3fc458ed7
+Salt = 6b7f9544c5817ee2adb7fdb523825adbf32e9178215a510f8320852620f5204e
+Info = 6b7f9544c5817ee2ad
+SK = 30cb0269fbf9422bcbecf10e5e91bc1efe7e77f8f284a2683a1766de77a0d16b
+PK in G1 (serialized) = 02e7a99d555f286c3c3d8924b8272b65bdb3f9d33570d5c8d61be433023bc1c4bb2e7f5739a0dd1af27a8df898a8413e0c26c8df7f3664291ac476b0dc04083eea1ac0fca78c50e8ea5b23e45c74c578851489d6f4ba16ef8b0d422c706dd51a
+PK in G1 (compressed) = 82e7a99d555f286c3c3d8924b8272b65bdb3f9d33570d5c8d61be433023bc1c4bb2e7f5739a0dd1af27a8df898a8413e
+Signature in G2 (compressed) = 85bf56e5fe94dc3f31e2820efb17485a31cd3e33242094d6109a0f1e0ab6ce76f088311c41c82cef486d67cc108b6cdd150a7812dc92d5a20fd14e2723ef8a45bdae692a6cb4587e09379e955e60c27821e0f54ab79b1b825cb92dbfe153144d
+PK in G2 (serialized) = 0a0b1b1d49043679b93949aa4a3d4bd26bcb1a22c91507d5b2f7054a0e85ffadd5662359c85a8f349975d8edfdb46449151e75a6bc96cca71704c778607fb31acae904beed740f18bc84cd9e8adc9a005c08ae42a511c8f8be4c58bb23fbaf0e1061ce87e7098a2459be5f8902ef66b030942b207f75ec98a45825a7040417d78e54e94c81f105cc39c4b691d1e4e946076a497cf396132e1472a9cee07f427271244faf0c1d9b2b2a2ef9515f4939ca4d8e542a4300e487bd592f512cca53c6
+PK in G2 (compressed) = aa0b1b1d49043679b93949aa4a3d4bd26bcb1a22c91507d5b2f7054a0e85ffadd5662359c85a8f349975d8edfdb46449151e75a6bc96cca71704c778607fb31acae904beed740f18bc84cd9e8adc9a005c08ae42a511c8f8be4c58bb23fbaf0e
+Signature in G1 (compressed) = 88554320c231631abb74ce8483a624c9ab6cbb97837f0ae4fe2402e18d789ff6382d7bea1c017bde262640803c5ce81c
+
+COUNT = 74
+IKM = 004a94de2872bc06509ae42e78c20c56a0ea347ec8125ca6f03a84ce1862acf6
+Salt = 5e4790f7ab31f3ca809dc951f1db27a79bd50588e6b90b344715537caba6d4c3
+Info = 
+SK = 3f390cb49c342a4e7f9266bf9984f3668db345c6b7c2fb606c736ad0304b2bb8
+PK in G1 (serialized) = 0cce5e0d1372e1acede603f32512e0f5c665e4c2d73800a9fbe1751cb428c39f102ed118417d375ab84ca9031d55049f039e140f086e7567b3f8bc2fc5235a61d9b24527e8d21b1fa0938065718a61bf0b2caa72da5301b1870abac718961ce8
+PK in G1 (compressed) = 8cce5e0d1372e1acede603f32512e0f5c665e4c2d73800a9fbe1751cb428c39f102ed118417d375ab84ca9031d55049f
+Signature in G2 (compressed) = b3659621df45442b2facaa6628f2f65c92af11afcbae385c9aeda323bb846aec3ceee426ae05f6482336c21b7773bb44132988765dd9f250c35274735e8955adbecfa3c239ff80df362f05d21d97c53652bab43d93305e211919a3f1e5febe37
+PK in G2 (serialized) = 10dc7da4507405f590a20f24fd2f0bbd38ea73da2e20a033b0b619508cf02245c674506e9dd115635bb4f902429520250168114a32fed8236f99c12573fe7514f4f3ea7b00d3fd534067d3e913fdfc69ae9ee23da37c6c3d02491d1becd9787e0f56088d05eb77d6159906d019985a5c26a2c6e6ddca1a81c4d4dfc216275313d5fab4768f96f6761684a9398efa2fd60c9171d5ab076ffb69255b36d7cb5a265559f54e9f27a4491810d0cd43425a1d041a8ad1a0490f94f6f37e5409102ff9
+PK in G2 (compressed) = b0dc7da4507405f590a20f24fd2f0bbd38ea73da2e20a033b0b619508cf02245c674506e9dd115635bb4f902429520250168114a32fed8236f99c12573fe7514f4f3ea7b00d3fd534067d3e913fdfc69ae9ee23da37c6c3d02491d1becd9787e
+Signature in G1 (compressed) = a1330e947bc2bd719996994fcbc24f5b2410db146b0b570398b7ce89144676505f59ff26761b604016bd7c2cbb7d4082
+
+COUNT = 75
+IKM = 004b96e12c77c20d58a3ee3984cf1a65b0fb4691dc2772bd08539ee9347fca15
+Salt = adf5bbf0c1e81088b923f6c0b4b541fb72ffb65d90608b4de2943be14bdade06
+Info = adf5bbf0c1e81088b923f6
+SK = 4bb3a78dcfd9da75254744b4ea727a3e0e45694ba427a04906e8b65e96f7215c
+PK in G1 (serialized) = 1834603b9f1bcf57e58188c26c3be2aaffd688f3d5c8309fb9c8085183a4bed40da3515bd34f705c5466974996173c310e87c670ee149d2c330a68d3e45734376baaf5865c669406100a1073adbd14e16ab40253b371b6252e6af0114df9da23
+PK in G1 (compressed) = b834603b9f1bcf57e58188c26c3be2aaffd688f3d5c8309fb9c8085183a4bed40da3515bd34f705c5466974996173c31
+Signature in G2 (compressed) = a878461316feb72abeb7f259524f76d8a4bd2db756411e4aabc552ae34503e666a09ac595911a092bbc13370dccd6e380ffc1b288d120babdd83f672b129753a6402c63a604e727ebf08bdef52c60a3cde4495997505f34a879c52ace22e4f67
+PK in G2 (serialized) = 04121a61f1f5e302fe7285bb2126b41715cc416fb20a1f7ce90b7a6fb17964f208320758591cd03e5a8ccd62d114062b123178378a4bd2479ccef6338f3989fb2579db0b4457e26a039918f4ee60b3d4bcaa8d0b514cf6a542ebb5eb830569bb0fc91e54e2007479da3ad358dcdc8b2d289975efda2b54cbdc8978bf015b1b69530dcd34e72b688512a38db2f8991dba0518a36bfbd822e3248322d1dd465c4bf0a26626e367e5715149b842e969b142f279257993d8a159ecc3626ace4feafc
+PK in G2 (compressed) = a4121a61f1f5e302fe7285bb2126b41715cc416fb20a1f7ce90b7a6fb17964f208320758591cd03e5a8ccd62d114062b123178378a4bd2479ccef6338f3989fb2579db0b4457e26a039918f4ee60b3d4bcaa8d0b514cf6a542ebb5eb830569bb
+Signature in G1 (compressed) = ac5493b3dab017d90424bf7d743945f43082bbe0d5dc1ca0344338fc1dcca9fd09403665a1c0d2dcfc987838e94d6d86
+
+COUNT = 76
+IKM = 004c98e4307cc81460acf84490dc2874c00c58a4f03c88d4206cb804509ce834
+Salt = 777ea811f958bc571477a1694000f3f12ea6845ca794f6fe4e20d74197d18402
+Info = 
+SK = 0d1bb364b1ddec2d25b7ccfed229d4cfec3685fe3ec6b1c5c5ee498f4b516659
+PK in G1 (serialized) = 1111e134d72aa624017d509d22f6ff56551bc2e394a8cedce41e09a5c082f8703265ff502f02f002b840d96ff86acc5c129b9f9c975600781af23be9e7e6592c93672b1e53e88bf861ff18c8317b0172110648605d299a7bd9e0e1f7b7d33457
+PK in G1 (compressed) = b111e134d72aa624017d509d22f6ff56551bc2e394a8cedce41e09a5c082f8703265ff502f02f002b840d96ff86acc5c
+Signature in G2 (compressed) = 81a2694c9ee0030541ad75fd5b37a82e438bb8986e6bdfafd4c308988472770fc78c290c29d7bdc5a6b74caa81fa316f15547d0f5ab2c85d7c04aedefc6d30646743bbc5716033713c4c89c29d9ae54c49fb4c4bcb8425bff718fe44e3d31a41
+PK in G2 (serialized) = 16564bf6b7d7d99e16a4a25e455ab771100a6a7d0dc833ef3e1b752dc7048327c44d940f140026ee987e8bc9328cbed41176a7675e1eba72e830b59d1c0b8bd2ab128504c23b9ff2f8ba7dd45b8dff21dd4058446cb75b6aa12a3e74a113cf1103c9d6cd08e1c95a422c58dc8c211809049c9b7557f8819a61cc64b7fa96d01dbd318541b2aad5d8aeeef73cf7fd2c6812d3562859abe0d00625043aafef9065c6fd17cf5199e870ed235b9b2508f40a9e329ab377e82b2fe9d6781853baa027
+PK in G2 (compressed) = 96564bf6b7d7d99e16a4a25e455ab771100a6a7d0dc833ef3e1b752dc7048327c44d940f140026ee987e8bc9328cbed41176a7675e1eba72e830b59d1c0b8bd2ab128504c23b9ff2f8ba7dd45b8dff21dd4058446cb75b6aa12a3e74a113cf11
+Signature in G1 (compressed) = a9cfd9fb57f5eb48e59b35330cb9e2e8e4b1eaae14284321966e01dea0460efdbc9d90ae8b54a8c15dd3c9bb50f270fe
+
+COUNT = 77
+IKM = 004d9ae73481ce1b68b5024f9ce93683d01d6ab704519eeb3885d21f6cb90653
+Salt = c0742523342893abe5d0b4ce8d294662b90ee8d368d7beb1adef51e750977f82
+Info = c0742523342893abe5d0b4ce8d
+SK = 4047eace1c24e509ad6dc6fc8a63a91bfa471c74ae2903ef0bf015db2f0ca66d
+PK in G1 (serialized) = 10fcf6794555822bd24184459ceb19a90d402659647e0865db51a54c88e2cd9a1d9fb44b1c4c74396637d9cc886de7e00ca462cc236226cda284db824e823f6f85d63382d07ca18f906adc6da5126fe81b74cad355afa5ac2672d6056977536d
+PK in G1 (compressed) = 90fcf6794555822bd24184459ceb19a90d402659647e0865db51a54c88e2cd9a1d9fb44b1c4c74396637d9cc886de7e0
+Signature in G2 (compressed) = a321081f1f8b1297ddeba0357e556d3f8b39e1b825d4bb083a1c3f932efa4b070b572e577b0a59128e79f628f749ea030c6c421135acf125328fd656537adaff33c1e4f870dda92943668efc677fbe1dd596af05de7620d1d2bc28309b91f982
+PK in G2 (serialized) = 1899c7f57a06b80810da1e76ccb724ed4723d147b0c335e7b346686f9bfec8ab5a574140e10a0ef9771f5a5b31f434231587cd9bae6b72cde9f267c1eb27f6dadb929063ebf62a889c08d66eb2cc7ae11008aea35f419ce0f66d55c4f520320619c447e04975e21b0dea4d92e161c3dfd97b920180b6fa287f93ab47ae3e097812fa6a7a4ac2b97a2d7fae42b9bbaaa0155dc6d65b1982002a4bc4bbb376eb670aab95f36cc0edcba34c72e65af0e916510cab796ce42193f2377f83feb06d7f
+PK in G2 (compressed) = b899c7f57a06b80810da1e76ccb724ed4723d147b0c335e7b346686f9bfec8ab5a574140e10a0ef9771f5a5b31f434231587cd9bae6b72cde9f267c1eb27f6dadb929063ebf62a889c08d66eb2cc7ae11008aea35f419ce0f66d55c4f5203206
+Signature in G1 (compressed) = 8aa745c01b7654588e33d9eee679580ec9233a1d3b54a575f503de2668a096cf14d0caa3b2d2064e0b4816989b13ad9b
+
+COUNT = 78
+IKM = 004e9cea3886d42270be0c5aa8f64492e02e7cca1866b402509eec3a88d62472
+Salt = af6f4d373cb1c26b5e3447b5b58a83dbb0b74769304452fd379a8db803955a61
+Info = 
+SK = 399e98516ef82839d29f5205d3a098770e7d52188853319514b498c500d5a468
+PK in G1 (serialized) = 170818c905e371a86d2fcb2430d09b31cacd2f4916439da00a5f968bf77ead27216af43faa9241447c0a89d3a4d76ca116c9421c2c23839becc3d21efebe2ffe4dc6421c7374984eff8786b356583c965fb81fb6380bd70846ea2bca8e127cbb
+PK in G1 (compressed) = b70818c905e371a86d2fcb2430d09b31cacd2f4916439da00a5f968bf77ead27216af43faa9241447c0a89d3a4d76ca1
+Signature in G2 (compressed) = a0b3320785aa32b254b3477598ce44d60364362143e34288a0dc32c86ed8a24d5f8a5899848888bfdddae9702d086af6144da45700ad00791893bb441c4417ea05375c723f46babb24daf44c8babea654e6500f7579449d3e4df1e1343bdea26
+PK in G2 (serialized) = 0e63604eea6de57425795463d5080a001a2f535494deff7d2b943bb9dca207e694fb547727e93d93a23a806c8c9beca4186f1d1ac72e802b3ac9ec6530c497e3340fc33a19d53df315b66d3423eb50220437a88cd3dac2f165ddaf4ec6fc79e10c3fd959e06cf948780ab9f7fcbeaa1fb4d1903eb53ee681c7741c32402b183efd646175b21482d2f7e9e5d96a4b853b09202e3e50253d66217eb8fdc6b25893d0d58f10d7011852f16f924fb643ffb2bf098fb6dffd11b719b31831c8b040a2
+PK in G2 (compressed) = 8e63604eea6de57425795463d5080a001a2f535494deff7d2b943bb9dca207e694fb547727e93d93a23a806c8c9beca4186f1d1ac72e802b3ac9ec6530c497e3340fc33a19d53df315b66d3423eb50220437a88cd3dac2f165ddaf4ec6fc79e1
+Signature in G1 (compressed) = 86c9e6c7560292b52e8193f3c44c96f563eb9f598549fc790cc57f8e707a2ad13d5b3beb2ea7342a7618da07ff5d708f
+
+COUNT = 79
+IKM = 004f9eed3c8bda2978c71665b40352a1f03f8edd2c7bca1968b70655a4f34291
+Salt = 0e6183ffb5762b84f1e4bb49da364bfa7b224096c49330b6258f8b8cdbbcdba2
+Info = 0e6183ffb5762b84f1e4bb49da364b
+SK = 4d9b42583cd9450a591c351e9c85ee5d45f4a37e7a7f13bbd039146d94aed069
+PK in G1 (serialized) = 02532af64a9d8315f7b2d807c08adb7b25fe8eefda5a51030ba0ab34c1519f6fe763dbf987ca51e69eb5790e5b966e96057961e244b0265b0e7a8944a48d4aefb51aea7c1de26e7ecdd394e3a74bbc9493e3f48a547d187e6205cce92635622d
+PK in G1 (compressed) = 82532af64a9d8315f7b2d807c08adb7b25fe8eefda5a51030ba0ab34c1519f6fe763dbf987ca51e69eb5790e5b966e96
+Signature in G2 (compressed) = 859c161f68b4fe55dbcc70cc38582751a5b10caf5e075940af0cccf48c30e4047f46188ecd6452269adc0b478a60d9d514c1394d571aca7ac45ebb67a0dd6c7e643f43326c29694077af1adf38ba9332e4b278e4ceb66b32a2c7c93164d27b99
+PK in G2 (serialized) = 074649da48ad2331743973e3ac5408296f17a2803e7b7a75e14dc5dc3abb96728cbb4e8b7b6d5debe587e17d3e85602d064e19f55f2eb25120e78591a38535934028b533fe33c641c80314bdb93499cd496c7278aa8cb67bbfdd8e7e68514a29018855470102c6119ed9033bf223a0ae886b7281dcf3bf1c25dda55e3738dd1271411793ca00dcc7475a3a975c2136bf12c7e0907b9f3537a0429950a9665850427899782cfae216532ecbedf3320e407dbe38a2a5d3d20dbc8b839fb1a7ef5a
+PK in G2 (compressed) = 874649da48ad2331743973e3ac5408296f17a2803e7b7a75e14dc5dc3abb96728cbb4e8b7b6d5debe587e17d3e85602d064e19f55f2eb25120e78591a38535934028b533fe33c641c80314bdb93499cd496c7278aa8cb67bbfdd8e7e68514a29
+Signature in G1 (compressed) = 994abce0cc8af17afd17d1bff1ce50f851559a55d9fd57a87aa11a5aa839b02e206e16618bd273b8de42caac2374628a
+
+COUNT = 80
+IKM = 0050a0f04090e03080d02070c01060b00050a0f04090e03080d02070c01060b0
+Salt = 317529630a74545397d274a52a58e4a4edac017429430ada687940043c8e2462
+Info = 
+SK = 00ba27d16afbd0832ae0fdad3c0a3f4db574c6bb463e485a87890b3c12a6228a
+PK in G1 (serialized) = 0d4aa0b4e5a4fbc6ab6704a3f6f3b9898b36c1ad7cdfe926851383ed8877225876ed004cc9db465949ddaa8d627bf9f904b751336624a363febd2e19e72e46be043098a7240d52dce9bdc18e55d5faf2489cddf025474170c2c2292879e16001
+PK in G1 (compressed) = 8d4aa0b4e5a4fbc6ab6704a3f6f3b9898b36c1ad7cdfe926851383ed8877225876ed004cc9db465949ddaa8d627bf9f9
+Signature in G2 (compressed) = 805d44478aa200a6aed4c26693088a358a5176ba5324c373b10d674b5196082fa75573931b8cbff6a3936ab4ba45c2c604ae9c3b39532ce729e05438dc26f1385845acab91895a59a88b65503c98eb5276aacc70b0398304a7b2003973b937c3
+PK in G2 (serialized) = 0e50c06a78df85feb8caccd56b3a0be7efad199f98024d8e4dee0b234ec17cc863a5549e0621652a238f3495861472e014b634dca7339faaee72aa4ab740f81ccee4d03dc438abd166175d83e5dbe611721d6fe155dba12bb4aac408c2b0a5480b948308053ff086e5c05924b8dd0a16d8598db2e318c8dacc467b93d3ecff0e6152c29efef6614a6b1e8c3ac2814f87167fdaece9a6012571a240d6eb1db208804ba535831dfc8a9bfe639d5e532c3797fd65091e6ea9d5b41645a87843b4eb
+PK in G2 (compressed) = 8e50c06a78df85feb8caccd56b3a0be7efad199f98024d8e4dee0b234ec17cc863a5549e0621652a238f3495861472e014b634dca7339faaee72aa4ab740f81ccee4d03dc438abd166175d83e5dbe611721d6fe155dba12bb4aac408c2b0a548
+Signature in G1 (compressed) = 94fecbf169f30fcb19413cce9c7645df039e21e071dc3497b33e42bf638f0920d7c84d4df39c881fb4449dda600b97bf
+
+COUNT = 81
+IKM = 0051a2f34495e63788d92a7bcc1d6ebf1061b20354a5f64798e93a8bdc2d7ecf
+Salt = df698ca6e46fd155a06fe8c0c251836497ba3e2fe50c962cda007511cf0ce392
+Info = df698ca6e46fd155a06fe8c0c251836497
+SK = 0c99764ad35cca7199f315591945998e9dd646b7f1157f38b5f58d21dfd27e1f
+PK in G1 (serialized) = 16fdf8dc47b6d26189d55f3160dc481b4b0085f77f8a154c78486fa9592ee4aac909efaf0e20b5904b40446b57eca4a014df70a3f774079e9a03bac565d7af13199d7c70d008625cebfe059042c15ecbe42bea34a1f9792962ddda075df1006f
+PK in G1 (compressed) = b6fdf8dc47b6d26189d55f3160dc481b4b0085f77f8a154c78486fa9592ee4aac909efaf0e20b5904b40446b57eca4a0
+Signature in G2 (compressed) = 8aa6f2ba97725a038591fcad6660733941bb5aede5c094a777524906729ecb898931008ec9dd1f7f10d1c0eac46c2b2907dffe136c1b555b338e59f574b8180fec6eeb82e8bba0f73ba2b4dc47174c130f411c7689ff33fe30412c6e2ec6e7ac
+PK in G2 (serialized) = 17bfefa34cb5387f36629fc59d9172f53d20f2f961e2f57350ec643034d1ee9b4b190c391c6bd65320e5e348d7e6ab0e069bf8c7a6a2c53bae615daba6fee3041cf693100ba14514dfae480a36f78d6c7f05fd71b4092ae874e22a1caa9568551142918fcc888002b9307d0025a8891bcb3cda9cc7541bb30cc761f01d3b904af92d0db0ca7a8157fa8a00736a7de4a208f42d42ba0047c215f5fa74d03c12db5c468dee0ae2533fef2c7c185942430f302be3db7eb5bfc7b1b7fae2228c9066
+PK in G2 (compressed) = b7bfefa34cb5387f36629fc59d9172f53d20f2f961e2f57350ec643034d1ee9b4b190c391c6bd65320e5e348d7e6ab0e069bf8c7a6a2c53bae615daba6fee3041cf693100ba14514dfae480a36f78d6c7f05fd71b4092ae874e22a1caa956855
+Signature in G1 (compressed) = 87c08928419e40893a37df8271942243cae044f06160cafbc72194b076ff519b542f96a0bec33ad95d71ff2c8e88346d
+
+COUNT = 82
+IKM = 0052a4f6489aec3e90e23486d82a7cce2072c41668ba0c5eb00254a6f84a9cee
+Salt = a91f7b9e79747fbb001d18d1222e1995b9dcee52fe8b5ceb8f6a66d92152e722
+Info = 
+SK = 1902077622c1e659785c435ba884eef401bd6665b418e5dadb70e255f0417546
+PK in G1 (serialized) = 14d805f08baad243f80226e1d7db3f389077f832b37147653ddabf81cbede0deb51ab48cb305962f3abe26faff3c71751662b4e70cde1b0ccd766749cd32f30277adf19171777f64fd90d5dfd2fd42d98b1c6852e49acb767da14f81384b6ce8
+PK in G1 (compressed) = b4d805f08baad243f80226e1d7db3f389077f832b37147653ddabf81cbede0deb51ab48cb305962f3abe26faff3c7175
+Signature in G2 (compressed) = b960674d823980296d60eb8bb1a45bad22acb338f8e4831abca7ff49502ef687b90c897e33be3df7ea6cefd338cd7e7912c477ee0346c45ab9daeede199276b6d2afd2ede6158dc4ba150b563c1e2d46097bff364de8d3b256ed154f3a980747
+PK in G2 (serialized) = 0a81691c7c0a14fa91308651b4da7d5bbee06e5342600f58184a1e38c82c926f656919c176684448984a07763114a7a213f371f3bd88e5139f361a0e1d4a6681fb706693080b40c89ccb10db4568c79499769584711c3e4ab7015301aabc10540f27857784ec9e2bc2c8d21b75acf3440ad5718dba48cfadea928f7d58c34333b7e7da5c8a5618ca49ba1115a6c887af1721a54749304197723a8e87fc5ac6a31b5d2843f69f9b86165575bd78d2eecd999b8ef6c4ec763a13f6440e3c08d4e6
+PK in G2 (compressed) = aa81691c7c0a14fa91308651b4da7d5bbee06e5342600f58184a1e38c82c926f656919c176684448984a07763114a7a213f371f3bd88e5139f361a0e1d4a6681fb706693080b40c89ccb10db4568c79499769584711c3e4ab7015301aabc1054
+Signature in G1 (compressed) = b02a30477b25155e241480fc454825ba4e411824ddc3fbed81788e98d2e8e71ec92b602a23e8ea5bf573bc65a1b06cbb
+
+COUNT = 83
+IKM = 0053a6f94c9ff24598eb3e91e4378add3083d6297ccf2275c81b6ec11467ba0d
+Salt = 109b99de4e6ad76a1fa8ca7981a1bbf09b15b74b6165b9aea6ec42b1c0b2c1a8
+Info = 109b99de4e6ad76a1fa8ca7981a1bbf09b15b7
+SK = 6babae65dc3e7a19fd4d1cddf6b0f68503327fce698821f520c8d9520acb8e71
+PK in G1 (serialized) = 066c2f3c9f598173bc9cb14bacb3f3cc1fac93019a782ec129e03a1a3b64bce2a8db22390a60c86c37e5700b7b2d82440fa12abfc58b048e3670d3c3ed698a43ada90bee796ba30815e447e5701343701fe7aa5df9787125fc57a8fcea16a6fb
+PK in G1 (compressed) = a66c2f3c9f598173bc9cb14bacb3f3cc1fac93019a782ec129e03a1a3b64bce2a8db22390a60c86c37e5700b7b2d8244
+Signature in G2 (compressed) = 8eb8a8c166ee6ff0755e412c34643bd7ebd4b48f9d44748f4f4bb635c8eec73ab8dd866847b4dd0da4862f7f4709de941156064fed65180b3181fdb8d66d99843edb55e25c749a69b66d969a9045ae4d54f199a4e56c89fe648b6203b2e78774
+PK in G2 (serialized) = 07dfee3b607bfdc2885214b06a4532c7e6599a9e7078a9a1b461e960889a626be956f534092e1057fd4d89861eba18940339578e0e5f556d2c00e0843549443d396de95eedc0de50981118f72b7573950b320eab78066fc13ef4b26f4f82c83b09b53553f394e0d033c1c76f245754ca3c9bd111d0fb76b380962742ee02e94a9e1bf9919ed88955ea3f5454036fe19f057404c2cd4bd85be13a2ba642d024c187f23b69e908d7764b1841afca43a7613e50810a8f62a9b2b4482716ff608d65
+PK in G2 (compressed) = 87dfee3b607bfdc2885214b06a4532c7e6599a9e7078a9a1b461e960889a626be956f534092e1057fd4d89861eba18940339578e0e5f556d2c00e0843549443d396de95eedc0de50981118f72b7573950b320eab78066fc13ef4b26f4f82c83b
+Signature in G1 (compressed) = b4d60fbd5243f4499a2de2279cfee2b19c2df857810b63403b3922ecad08643ef7e77edf8ebdfe5fb7ff384db7902454
+
+COUNT = 84
+IKM = 0054a8fc50a4f84ca0f4489cf04498ec4094e83c90e4388ce03488dc3084d82c
+Salt = cec15de5c3a837aa4a15853dad7561bc625b9ed4320f238efde6c1556bedaeb3
+Info = 
+SK = 6b3f93711ddeacea890489b511d5e3b4418fc9769b2cff87c482a0ca391661e3
+PK in G1 (serialized) = 0456b8dca263ddc660d32641e9c9a163693a6118c816ce193869a12eea3fe746a438356d3f161944969732f6dcf8b06d08126e0cf8f3451b3600213acd012989ae0c2b4871fcd96d6f9d4947ebd4002c1e070037a9b6b56d54bb59676af31b5f
+PK in G1 (compressed) = 8456b8dca263ddc660d32641e9c9a163693a6118c816ce193869a12eea3fe746a438356d3f161944969732f6dcf8b06d
+Signature in G2 (compressed) = b8a4402de3cddd9a4ee1d2e1a2583c41721e3cce2cb5d97c4635d1453fa529d9bb13cc9d759b57fa22575aefe5f6a84703af5ae4d05be8ae138a24da72b00cbef690c24b067c2c3fb4061ed7aced066e3f0dab777448c8d1550b90e63720cd26
+PK in G2 (serialized) = 108dac542323ca78f4283072e996938e1ab0f000448c994d02c035e8596e533ce0575e770eea0f3d3ece9bd9f75af46c0368eb8e97d3924415de8088299e41ba5a18f1cad1b15e138d4da98c4e093716e5810f0d6274e66fc6d272a028b362f91661dd76a004c258e4e308ab5b7a0100a90e7238648158b7bc3046ee07a421a7661ca33bdb549fe1f231442bd5b421540223408b3ff7829eef06919c59e12837ca5c496950ca0ba142d900080b10be747f6164f8b6177cc8f901b086916be6d4
+PK in G2 (compressed) = b08dac542323ca78f4283072e996938e1ab0f000448c994d02c035e8596e533ce0575e770eea0f3d3ece9bd9f75af46c0368eb8e97d3924415de8088299e41ba5a18f1cad1b15e138d4da98c4e093716e5810f0d6274e66fc6d272a028b362f9
+Signature in G1 (compressed) = a03410dd4353fee1e14d27f30e64dbb9e6d6a2b4f7166b5b1b0e98104141849cdd4ec5d305459eb00ad3b87c6b54a8b6
+
+COUNT = 85
+IKM = 0055aaff54a9fe53a8fd52a7fc51a6fb50a5fa4fa4f94ea3f84da2f74ca1f64b
+Salt = 03b722a15d4658be01f1eb9def5e8be124710cc0e88842f78107abfda3e23ea8
+Info = 03b722a15d4658be01f1eb9def5e8be124710cc0e8
+SK = 68e86f2a3cc8f3926d6ff9cd6c8f8436b911c45f38e7b49620d64ea2fbfca289
+PK in G1 (serialized) = 0817f384702b8d7d0eab3fbdbe2ff8076f35068fbc362b04ba28aa9228ec40b0712c6bc45da9b8924fd8b76b3968e58d177a299a72bfefd3cb704e395a584ef32a8496ea17637183784e4a931ef76e42eaee5d75869af6414f968170e8e09442
+PK in G1 (compressed) = a817f384702b8d7d0eab3fbdbe2ff8076f35068fbc362b04ba28aa9228ec40b0712c6bc45da9b8924fd8b76b3968e58d
+Signature in G2 (compressed) = ae6d02de5e27527bc37a473f0516ae077beb699430c3a7f5476e3dfbd14742a160afd995253cc714508406903f01670b06b961c8d1368099f9f01013346cdaa75ad10bcf733a985d4eb792f4a83295017c3f5cd2362012f0aabdcfa8c602032c
+PK in G2 (serialized) = 13eca59fdebfe8d3276b0f879824baa34d5f35bd358662257af4fc888073ceb8dc8c8e7b5315568ab8bcf1547eceec77167f60947d9d6803b6c954eea360708bc8bcce0667ed9380e8b5ca5b87ce805da229f5ed5ab05233779972cc12887aeb0ae1d54bdbf66d485605247edfcd399b76e55cc354e88598ee0382c0bee6e9f18c8b97bcd590d4ee3f2ae28bc4902ca60b5c3faa58760989cde977859fd143db7d77b8a9ce34ea8d40d377f1e150c1d4149be82422a83de2bf25c28993b1047c
+PK in G2 (compressed) = 93eca59fdebfe8d3276b0f879824baa34d5f35bd358662257af4fc888073ceb8dc8c8e7b5315568ab8bcf1547eceec77167f60947d9d6803b6c954eea360708bc8bcce0667ed9380e8b5ca5b87ce805da229f5ed5ab05233779972cc12887aeb
+Signature in G1 (compressed) = a5c1e52828c8c3d98188d770528ba315dedc1b58966879a0c75f63706d1388535aa39b1eac6e5bcc5e603083ed85c194
+
+COUNT = 86
+IKM = 0056ac0258ae045ab0065cb2085eb40a60b60c62b80e64ba1066bc1268be146a
+Salt = 9c7a0375597ea265bce3b10431787ba8bc698c80ec275d5bacf20dc81d831cb8
+Info = 
+SK = 3773f7a1dce79b39e7cfe37d8f75a6b22cf82dc4e7d1bd85929910b7432d37b7
+PK in G1 (serialized) = 0eaf4d3ee4e96e5c388b1d1b491427990a6049afe5de95da61f276b04082fab22c6708f16e540dd26aa23ffd2a532e131771802f628cf702ffed5501e0f0c3e081b0ec6d9c24a11f3ffb5090562e30ffc4df20d44b0467c340d9aa34fbbb763b
+PK in G1 (compressed) = aeaf4d3ee4e96e5c388b1d1b491427990a6049afe5de95da61f276b04082fab22c6708f16e540dd26aa23ffd2a532e13
+Signature in G2 (compressed) = a4ac47863195d2bbaf633519a0c3b08255da62f8fbec166d1a79b1e10ced9331a33d0fba4a15d9608f852e85a9e0105e18b29bb6267468ca0569a24b4907b069645ed2232c896f3b85c6509cbe488f460b5d8976e4a684beeb294329e14365c3
+PK in G2 (serialized) = 0793c172c6a6ac7bd5f5306e66f3da4320262d7a86d44e31b82d48e0f5f0d16cc2d71bdcfa86da67140315c20738bd8f1304faddff39175debdfc8b1365a721b3f0c7758fa0498af0b14674cae1ddb06f9bb6a2e8a8872aeb86c100cd617e5d610438ebddd74dce3284e4334503f4eb2dc04c238165c0bd0390d07ae7707c53a1699729a828b893d430cc18b76dc179e149e46b791d3847220cc021ad35a5eff7ae6be3130dafbf5e83523dbe2b19b962f526e49579cf7138aa76f274fc4a665
+PK in G2 (compressed) = a793c172c6a6ac7bd5f5306e66f3da4320262d7a86d44e31b82d48e0f5f0d16cc2d71bdcfa86da67140315c20738bd8f1304faddff39175debdfc8b1365a721b3f0c7758fa0498af0b14674cae1ddb06f9bb6a2e8a8872aeb86c100cd617e5d6
+Signature in G1 (compressed) = b8acf413ab175ac297ec707c42ad37ed3b5bda79f03a53d4590d2540fa9a59a7c7dea06c9b6d38b53bbcdad2768731ee
+
+COUNT = 87
+IKM = 0057ae055cb30a61b80f66bd146bc21970c71e75cc237ad1287fd62d84db3289
+Salt = 5a9b0bd5d2219a965d6f2b0a51e7ca7ec2287703d8e758958754ba5e2b4aed69
+Info = 5a9b0bd5d2219a965d6f2b0a51e7ca7ec2287703d8e758
+SK = 0089d597a252dd53cd0f9db19dcb5030addb509cd8dd0f07f5207cf8bbfd1af1
+PK in G1 (serialized) = 05d524539d60c349876a6c7def6f8200e949aacc5ab7d2389182a3bdc7a77d3ae0e8d5c5c6b318ba71d1a1e926b6a0a60a2c4778864ea33d2706a8e3bcf0079bbd933e39bedff5625558df63b2281d188f70fd78d489b791301e19f346d7002f
+PK in G1 (compressed) = 85d524539d60c349876a6c7def6f8200e949aacc5ab7d2389182a3bdc7a77d3ae0e8d5c5c6b318ba71d1a1e926b6a0a6
+Signature in G2 (compressed) = a12beff0114721f5983fc6531fe8dc3f36fa74a03a15d921d43815b64c2bc25f1059af18dd750c03b65f869e499b77210052651a6b3224be3ea04ca3ba1f2c0678dff8b26fd16c56048210994b67769eccc2a7dbe991bfd2138f07001e8b7daa
+PK in G2 (serialized) = 020e167fb10805eeb8118e0912d8e15b7227fa6edfa35af385510c5dd96f372720edbcb2e5e25b3abed012f81fbb11a417e1da0561659a1a535f65723cbd55b805288d9bd00619ea7a69314deba83087221a2b5e596b12b2e55b6e1e494167f0192c76aa0c2204a0a37f9aee765ad3b6a08452c443212f6eb8e0cf15dc152a82a8687cf664e38554a72221e61faba61701f4ceb15f1e77ed33452efca35dd8dc6bf31c56e1f281e1ef193deae8635b13b039b6fd92a87b9df32ce74ffc1e5285
+PK in G2 (compressed) = a20e167fb10805eeb8118e0912d8e15b7227fa6edfa35af385510c5dd96f372720edbcb2e5e25b3abed012f81fbb11a417e1da0561659a1a535f65723cbd55b805288d9bd00619ea7a69314deba83087221a2b5e596b12b2e55b6e1e494167f0
+Signature in G1 (compressed) = 8ae6ab330671983a8f7a3972af2648ebc17b9728dca1b9a1575dccb3bc3ee6fb0c34012c4851fad6d5127b605baaa892
+
+COUNT = 88
+IKM = 0058b00860b81068c01870c82078d02880d83088e03890e84098f048a0f850a8
+Salt = 225804a9ba3d9098ff521895104e034c6b142567bbcdcdfb7df8d960ac43b081
+Info = 
+SK = 208764ac6b4976da4103907f22dee110a8725bd36cc8b879c989c5a3b19910e2
+PK in G1 (serialized) = 0bd6e0482b2635cfc5b0c018a46b472ef20de2ec11fe24ce34cf5e0457bb365fb33f5c134cd30c4866a0a8138bd990d7097f8b04c7d3b34e87843dad201862620db9bb51d379c36bf74e6a251c9d155d9c5e3cdf317fa79e0723939a5be039bd
+PK in G1 (compressed) = 8bd6e0482b2635cfc5b0c018a46b472ef20de2ec11fe24ce34cf5e0457bb365fb33f5c134cd30c4866a0a8138bd990d7
+Signature in G2 (compressed) = 8b4f2a90efa37d16c057cc1675895e5ed83739c95b3b5ce8a2321f2c1bdab07520c01afade63375f1df61b773c88ff831343d02ba1c61550499292db510b9a3f6b20972ef5e5ad6d253d32f519b25dc88aad0ea5dc69f64664da38424e1ebeab
+PK in G2 (serialized) = 058abca1ddaed3c0e4138418aa6876d3f3ecc509cfc97dd7edc6304df390bf6b565958e4ee3d8b6ab7263ec9745a032d0891bdca2fe4222241e1112a5dd84217fd91390deb161fb93e739d57da58d26e84a12548e17a0e378224a685ee7ab1c11443f5e03bb3243ab4017bdd76e5f605a3aeb02941ac0388b6814004d0f58954741f11e0d72ac376ba70238c30f14f720e94417b300b01dcb3617e111ba7fa8b8dc57245a1b7fc5e39d2d31bd84bb276b741e7bf26077fc8dbb21f4485d90a74
+PK in G2 (compressed) = a58abca1ddaed3c0e4138418aa6876d3f3ecc509cfc97dd7edc6304df390bf6b565958e4ee3d8b6ab7263ec9745a032d0891bdca2fe4222241e1112a5dd84217fd91390deb161fb93e739d57da58d26e84a12548e17a0e378224a685ee7ab1c1
+Signature in G1 (compressed) = b1c317be66b5ba356655b1cea78e9c1818f09ae24bae134902d7992145705bad435f0b420ef7f68092eba69f3bcfd5f7
+
+COUNT = 89
+IKM = 0059b20b64bd166fc8217ad32c85de3790e9429bf44da6ff58b10a63bc156ec7
+Salt = 54c3202123e41d0921a08a07a2c916ecfae21c06b2a2b22aee1c20f5d71338d5
+Info = 54c3202123e41d0921a08a07a2c916ecfae21c06b2a2b22aee
+SK = 19756211ee59c8fa9c1080b0750d4f006c09161c5cd07b0c693925a4c997834a
+PK in G1 (serialized) = 10bdf2ee89d2966ab984dbd796b737f9706432cdcf0a54dc2f8062ce7f7850761c2f92e6e130a83ad78ca35aab85efb61170e7fbfff948ebada8c86bc6e3d7a09f988df758b1f19563535b7370ded8e32372da16e9669b4e2526900903666df8
+PK in G1 (compressed) = b0bdf2ee89d2966ab984dbd796b737f9706432cdcf0a54dc2f8062ce7f7850761c2f92e6e130a83ad78ca35aab85efb6
+Signature in G2 (compressed) = b7ca72e442f7d4abc70ea88c1822017970d9c3c99c58a0d4cbeb54b949b5c0f85b200e8ad9616e77c9594cc78a914413055acffca79a3b15a9f95b5aa991d98c636c085445bdb36ab6ebf25799272a3309275b46aa9df950db919f64b81a8f0e
+PK in G2 (serialized) = 1754f25d108ab0b25e68d786d887ab52c5f772a68d8776fca03f6aed6f7d1ecbff299212300f8cb02609f4a45ca6126e106dcb9c4e7f52ca26b742d20b5f8a0242503f723ea64dcc02c6ee0904be9e3930d62950058c133ce6bc6998662c8b5006a89869313bf2245ebf07a20be37210d72b2df3af574b0e62120306b447c868772cdda3f3ab3d8af3847ef20d37c731131096866f5279942f776db6de8d25ddd0e4557889be68c67363b72768a04d6d8366808e69097529b5caab0fc24bb1fd
+PK in G2 (compressed) = 9754f25d108ab0b25e68d786d887ab52c5f772a68d8776fca03f6aed6f7d1ecbff299212300f8cb02609f4a45ca6126e106dcb9c4e7f52ca26b742d20b5f8a0242503f723ea64dcc02c6ee0904be9e3930d62950058c133ce6bc6998662c8b50
+Signature in G1 (compressed) = 97e80b01e6f76d5f65e15a19542b8736b51d8cb7252dd61022007825d538fbc879a232b798024fbc375b81f00509abe9
+
+COUNT = 90
+IKM = 005ab40e68c21c76d02a84de3892ec46a0fa54ae0862bc1670ca247ed8328ce6
+Salt = 04c548ceb1211afe7d23e25421b616d2b44014e7bab90dc38e3430a00f0e6003
+Info = 
+SK = 4f6f8744bf7a87fd82f2330c77378882af5d4079db3e52518ff2125b25567e5c
+PK in G1 (serialized) = 090299f35bd1e697e2b7b731a35b093eea6372ed71f072f8db8a34e8225484e52b3b52debe664b5a8b5decdf54f78cd918aab4f0eaa9e9082e24ba289da8505d8646af9615360fb85189cc6068b7604eb2bff00e4b23d4d5cb1da011f334a633
+PK in G1 (compressed) = a90299f35bd1e697e2b7b731a35b093eea6372ed71f072f8db8a34e8225484e52b3b52debe664b5a8b5decdf54f78cd9
+Signature in G2 (compressed) = ad5e495019842e000782bee5c6d468d6a8eb87b07800757e3bbdc3e00a2a67b7217fedcb00bb6b4f4e78b0fce255177701f76ac198735cd7c760ac1832ad2879e9d4fffc97b31d6a537cb4875cc562f6a2ed6f1b1c2073fc78b807900fceb3b9
+PK in G2 (serialized) = 05067758cb2fb23e682dfdb5e23c30d2e665c3857940d41a1e9600173b35bb0ec8946000ee463c3408a365831417173a0f6a9b86f0e8a34cca89526ff39a292ee164a526565490c2d1a391627f1bd57b29691af0458abbe561ae4ed71f7d72fc16fc7bc7b85c28d2fd48ebfdab32394519b7702e2055a2ede6f6884de9a71a41789a0f65f24e551024966c2b8aa0603815107cae674e5fcd835acbb199ca39d33f57c1a86dedb896ac737e826a7f8f83c2df4dea6778b0432aff0042c9a203f8
+PK in G2 (compressed) = a5067758cb2fb23e682dfdb5e23c30d2e665c3857940d41a1e9600173b35bb0ec8946000ee463c3408a365831417173a0f6a9b86f0e8a34cca89526ff39a292ee164a526565490c2d1a391627f1bd57b29691af0458abbe561ae4ed71f7d72fc
+Signature in G1 (compressed) = 8d4dc9716ed9a53724c40e1aa1ad84c4b38f9c9cd452d568a070cbe8458edb445675eba7001c0ffe5b61c481d9b81ff3
+
+COUNT = 91
+IKM = 005bb6116cc7227dd8338ee9449ffa55b00b66c11c77d22d88e33e99f44faa05
+Salt = 44a0f8b1b0ab7b93e4365c3403f4387c7af9aab4b6b81bc617018f18a998576e
+Info = 44a0f8b1b0ab7b93e4365c3403f4387c7af9aab4b6b81bc617018f
+SK = 330ac16cfa0b5a592bc0b588750827d9bc2c4c8b167c2ab2de6cad321738a8d4
+PK in G1 (serialized) = 113719788d75517f3f0a3dc6ef70113899832ada4db7cfbdb9978146d6c603581f9ad81f353a355e8c82697786627de511a79956fdfab961ab17660ecedcd9e892872e3af8c327ec2ee1cadbb0b6154be08fbe73e36ae8ef4f6f7d6e68824a6b
+PK in G1 (compressed) = b13719788d75517f3f0a3dc6ef70113899832ada4db7cfbdb9978146d6c603581f9ad81f353a355e8c82697786627de5
+Signature in G2 (compressed) = aee908964a91d8931d2e0f41c023d1614ea24010be1fbe22e9b6765504a46752317ed5e97be7834ecd394c26e7ebda36163748e35183067773d17d1b854b78779b75f300e62e8d4f7d9105a1e3c50a07dd411a54ecbd2000458334ea95215f1a
+PK in G2 (serialized) = 075c3731ada0ead29f41977ee6357b0cda3bf3777d7c99b711e8d44f8beee0425ea668b02bf2ab229f887f3054a5739709cb5755a8b777b9f576cb15155f50f8d0eb2768421618adb2837336ec1a73c8ac0e1ceda79f29beae0c63db6faa8be2148f32defa6de06f15f48fae167c981db4d80edae00a781a4db586f8d89039e213c9ff5094f689ba99c9dcec4b9da7a808d2b6b124ce8b558586d9b9beb81f397a8813b0a2daf35f398bacdc14bcf2442d3fbc71c0778427850e44a3d03cc18c
+PK in G2 (compressed) = a75c3731ada0ead29f41977ee6357b0cda3bf3777d7c99b711e8d44f8beee0425ea668b02bf2ab229f887f3054a5739709cb5755a8b777b9f576cb15155f50f8d0eb2768421618adb2837336ec1a73c8ac0e1ceda79f29beae0c63db6faa8be2
+Signature in G1 (compressed) = 92c4d720443e00226005158ce58300230031213c77a65540b8d9a9076a4af26eb38bb03163a3a931353fd61fd47845f4
+
+COUNT = 92
+IKM = 005cb81470cc2884e03c98f450ac0864c01c78d4308ce844a0fc58b4106cc824
+Salt = 62e4b97260a1a7e9967e109c42ee745466b396391d31c4332ed09a5c40f063d5
+Info = 
+SK = 2fa233aee90e12f4cc2b7bef770083aaa7f5b42a9a6ad2c4f69e46143f0c07a1
+PK in G1 (serialized) = 0b006cc3dfbce86e14a5f6d9f70ac8f9ef87e2a1fa685c0842892b1067be86fdb2210663fcb6fc364cad92370ae6828b04ff8624459a2b8ae009e5a44d1445925fb6f4faf5d5cf13d96a738406dee32c4a87c739caacb6c0fbaa7e8e989ade94
+PK in G1 (compressed) = 8b006cc3dfbce86e14a5f6d9f70ac8f9ef87e2a1fa685c0842892b1067be86fdb2210663fcb6fc364cad92370ae6828b
+Signature in G2 (compressed) = a19c0069b178233e7bb447032ebbd8d72fe55dfd523145b0bd1464fe4cdb3ef4e43b14ccce1c71ab35dfc82b916a498e0152e2b7c4aa8e511ef44ef39e38519ef7872f502d4dee84d2341344f035d6903a43f45e3ab8b1bc2f1c0d493ccdcd27
+PK in G2 (serialized) = 145323c7df08fc21af528e2a68be393fd7f7cbd749b21ce02a591b1d667b031f44eacd3781081f5500b4098dc1638f720b76aee4b5327d9de1ba2c05e021364f84840974e851cd3d0bf10bbfb84f37ff90bde58133670a808b5353db0e9633f318bddddd1bfe690b7736ed6929c1c363d813eeae42a7894e5e3aa1b19b5010d79e00c26126fe7e002635ccfe02e39b6f04624623bf1817edbaa1515102566a9d82193287c881a74f09f9dbe319fd70269abae2f814883b853725a622396462ec
+PK in G2 (compressed) = b45323c7df08fc21af528e2a68be393fd7f7cbd749b21ce02a591b1d667b031f44eacd3781081f5500b4098dc1638f720b76aee4b5327d9de1ba2c05e021364f84840974e851cd3d0bf10bbfb84f37ff90bde58133670a808b5353db0e9633f3
+Signature in G1 (compressed) = 8b2be70587c4353a38881c0b279bf3d289f5fa0a92ee083f6978c44d50c2c4dd2bedd42f949c9c1894f77f08c68489cf
+
+COUNT = 93
+IKM = 005dba1774d12e8be845a2ff5cb91673d02d8ae744a1fe5bb81572cf2c89e643
+Salt = 2fce12cad95042831d68e96e1a8234b3b561de94bda90cd8a2a5fd371afe7045
+Info = 2fce12cad95042831d68e96e1a8234b3b561de94bda90cd8a2a5fd371a
+SK = 60f1c5c73ac4c61b0b17e77299d88bc8259c51dfd665b6e68aa09e25d6180797
+PK in G1 (serialized) = 0c316858f5a4c47077c1a09cb38eaeca9b4eea15c44ddc6a8ed3fbcd48acabf8d8699246d6fa962e57f5207ed88f4973133bbb06fd3147d3ceea7c0ef799ebdd1ffdd19ec3f21ea01ed0d5dd5213afa99533b0f3ce6fc99a983c8a5ef77a3b46
+PK in G1 (compressed) = ac316858f5a4c47077c1a09cb38eaeca9b4eea15c44ddc6a8ed3fbcd48acabf8d8699246d6fa962e57f5207ed88f4973
+Signature in G2 (compressed) = 8b16880216687d414d6e48d9d5a9396371bd86dcbcd2d6477a84ee7e84adba0c1af7fff81b4a95e02d2b5101122febb11997ed625390a73ccfe9340a767f3c5a11d366b09215c3c4eb5ece8c4549b9dc1c0c9ddc95575433ea1dce9c8d5c72ce
+PK in G2 (serialized) = 15ff17513085e2ec9210d72f1d9442b331049bbe7ed4ccf83b565b9df245417e16968f464585fcf50ce2e6ff4931c4470d9fa2ef8ae216d6add53b173cf682ea1e018303c7142d2cd44d7bd752ef54e1604d4e27f1ab07009f661309d68e6ac40dc85f28fb7d3994bf7a9183068142e2c8126e0f152aa7823f9ced0c458600b656bbcdad866aa75c07b40766b34d44080d94eda11244ad8f000f75b4216b8a797edf30aa0b870ac2babf9dc0593f3570d85caa66cf857d7dca07a9cf8a71102e
+PK in G2 (compressed) = b5ff17513085e2ec9210d72f1d9442b331049bbe7ed4ccf83b565b9df245417e16968f464585fcf50ce2e6ff4931c4470d9fa2ef8ae216d6add53b173cf682ea1e018303c7142d2cd44d7bd752ef54e1604d4e27f1ab07009f661309d68e6ac4
+Signature in G1 (compressed) = b229a9d094f029a155be9524bc0ac12edd19267bfd358042003a6664565e5f3650ea528003cf70241dc521c3fe145098
+
+COUNT = 94
+IKM = 005ebc1a78d63492f04eac0a68c62482e03e9cfa58b61472d02e8cea48a60462
+Salt = 382147fb4ae93b3fca36726348f71398ba8676a22dc3b7706b325f8560a08996
+Info = 
+SK = 6de14fa247458d4adbcce9cb7950733bd9a935ef5250709872931a34fb04c443
+PK in G1 (serialized) = 08fc5a3f9f80dabb1a59baa5b9c8388de23d12093032bdab77bdfc97350ecea2df56ccc7d198127482d68a4058d72a031305ec833948a281dee98a0f15f5c8dfc9fe025f7be95442194274e98564e956441686b063941dd8302cfc1cd9b66be0
+PK in G1 (compressed) = a8fc5a3f9f80dabb1a59baa5b9c8388de23d12093032bdab77bdfc97350ecea2df56ccc7d198127482d68a4058d72a03
+Signature in G2 (compressed) = b9548de635acd33acc8a7d900c33df3fee8a5eb7469e29f0bf23af5a9b8d67efecda48bc36b320ca5db7370d1f81adc60d7ced213bb8a3c386412f28238a8a96fe184db24daa255b9af1b9a526da4f0dc11a8f26074932525327fd395b46d484
+PK in G2 (serialized) = 0543c7976878a1a7a408064e8c274f89cbe34a16cb42fe8263c8cd11e0f264225e4a25700f4288b6ff80a97519a25f8f1335fc3a3d4388f47b6b15dd83c3087118f210cf95b070e7ec011c312e69fe5f2736ac7f4a4f8669a614e812c46b12d71811cf9da16157dc913ee53ca78ff4a5534de2ba02349545452f56b6215a61c13d4125e49ad1b28a35e6bd673d95827d083fa708e970c60a113743250acba15e7ba02772402776cdc6589c42147a5a20330c36d4ecc6042fcc47f7c41bfbe193
+PK in G2 (compressed) = a543c7976878a1a7a408064e8c274f89cbe34a16cb42fe8263c8cd11e0f264225e4a25700f4288b6ff80a97519a25f8f1335fc3a3d4388f47b6b15dd83c3087118f210cf95b070e7ec011c312e69fe5f2736ac7f4a4f8669a614e812c46b12d7
+Signature in G1 (compressed) = 90ec512f9b5c5324ef385af72ff3b2a4062bf5694ec158cc9042dc1bacde3b5cf64a68766db280ea18da926d22b87f6f
+
+COUNT = 95
+IKM = 005fbe1d7cdb3a99f857b61574d33291f04fae0d6ccb2a89e847a60564c32281
+Salt = cf4b8ab5ed534fac68d3083c6e0738dc748f3517e10b7104b2f49fafd2ccdaed
+Info = cf4b8ab5ed534fac68d3083c6e0738dc748f3517e10b7104b2f49fafd2ccda
+SK = 36afea9b2c7242f072379289ca11ee657f5635f30ba7bc303a2aa7f4894119fa
+PK in G1 (serialized) = 0bf710562903a6753104a1a2b91b05624a4f5af111719d4d52834c10f910458d787df534bbfc9fd6236c1147ec000071149f6d13e3134f0e777e0e6b1731ae7f8fceced56fae2e6cb1e67dc284919258c53575ab71510d7ec21baf8e398aed74
+PK in G1 (compressed) = abf710562903a6753104a1a2b91b05624a4f5af111719d4d52834c10f910458d787df534bbfc9fd6236c1147ec000071
+Signature in G2 (compressed) = b6cb8a8b864e6a887952472327572fe140b6c5f4993c1d648edbafd19045f61ad679970ba8ea5b4b18fddbcc6f4cf9e80709da787ff3ab166aab5a4058761b105f8fe81ed3389a33e8ac53ccca29ad8d85b3cb653e8538c96f08c764fe25116a
+PK in G2 (serialized) = 0d522e0bb072a73f5693750f87cf415e5016d3c853042ccd78d8759ba352ec39a29cb7cc6be3292622c2736a06f01ca50eb126810c834b3ad1c658cc29c2b1de5a6e47b9a91bbbfd6d3d1d1909f29ded26858597dff89a075523b44b16530da801be1ae9bd11eadfeb32bc322e1b4b9ec8c63d7e075a613c287348b08871959268bf5bc9e71ea1e201bb6b1417b87ab105c23e393a1f5d0b9b607018e4b811d2de179ed9ef832e9a51089a913e0634ccc076be8b4e4c532307816555ca5f6700
+PK in G2 (compressed) = 8d522e0bb072a73f5693750f87cf415e5016d3c853042ccd78d8759ba352ec39a29cb7cc6be3292622c2736a06f01ca50eb126810c834b3ad1c658cc29c2b1de5a6e47b9a91bbbfd6d3d1d1909f29ded26858597dff89a075523b44b16530da8
+Signature in G1 (compressed) = 8853b3d0b56ef7266b39e5f9f337bf261e675b2e6134b4c22aa44332d373164df0b95e14128c44b311bc1dfe1ed1371a
+
+COUNT = 96
+IKM = 0060c02080e040a00060c02080e040a00060c02080e040a00060c02080e040a0
+Salt = c3c12c066bca725861731e173b7f41e60601d77945b90308d4b69ae1ed14aa81
+Info = 
+SK = 708e83f0a3f54cd3890f0d447edaba54463319ff186dd263fdff4983b8aed82a
+PK in G1 (serialized) = 06afa92a52b4929b4f0b90f23c668f00cbde0e37e295e9926026d8735fb5fbe2077b7fd97e8bed2f4bb5c4f4b021c13e19c7e4a5dc89ad6aa680e44b4ae45305058992f0890dd9e5d99b95427ad2770e14f0cd03277ca5bed6dbe7ed8a4da02a
+PK in G1 (compressed) = a6afa92a52b4929b4f0b90f23c668f00cbde0e37e295e9926026d8735fb5fbe2077b7fd97e8bed2f4bb5c4f4b021c13e
+Signature in G2 (compressed) = 90ca6dc3692aa707676a24ab41b077e2dc73f32237b7840df0b4edccbe45a2089a53986c53398b51e3830ed7e526c02e0136d51a032cd4b35c24ef2b2f79de217903a1a1d6f3579bdd290be9af707832552328b4b1a95f4697722ad6a5fd0f72
+PK in G2 (serialized) = 161723f8de9972d6def1d06da2cc9037324883743296a29e18aacbc2cc86b9cbfdb7e2711790f7bbc1770422bb8f58b911a918e19e1aea964f9ea91a3853dcf72b91988b12216fe160a804e15578a1378ccaae6cf3b154eff5ed56d6846e23e80840e5844ca6dec11e7484f89c4092f00ebe09d86d8e71a08279ad47d24a799b21a8de371ba1f1a6cf5456fdbf8afede00efa07284b459ac09ed295cd89f049d0794e9455776692e2e28ea980ba7b5ea32bf1c605b704f311815f1804bee2aeb
+PK in G2 (compressed) = 961723f8de9972d6def1d06da2cc9037324883743296a29e18aacbc2cc86b9cbfdb7e2711790f7bbc1770422bb8f58b911a918e19e1aea964f9ea91a3853dcf72b91988b12216fe160a804e15578a1378ccaae6cf3b154eff5ed56d6846e23e8
+Signature in G1 (compressed) = 98c9c482727693fb05071f286558c6f9786e77f006cd24a9bb354f5257864407b70d9d97373d623170b04e8aa322e709
+
+COUNT = 97
+IKM = 0061c22384e546a70869ca2b8ced4eaf1071d23394f556b71879da3b9cfd5ebf
+Salt = 9f4e8343ffc7f6c96c35ed1fb27814c9c8709888b072b00a9835e86e8ddd3990
+Info = 9f
+SK = 5b18d26a2d53bd982358a8066aa254bc131ce99710cbf90e74ae5303f9ed8a10
+PK in G1 (serialized) = 05527d8a028108af4fb6502453178fd97c9e4f9e425405d4f83d4c88d940d513dd27a9f653e26a7fbd31723f194a5244100b6213e92ee676b8234af806daad80ccb3563aa56cc182337c38c103688ce38d9bd331e5f66900bbe79423c63e67b7
+PK in G1 (compressed) = a5527d8a028108af4fb6502453178fd97c9e4f9e425405d4f83d4c88d940d513dd27a9f653e26a7fbd31723f194a5244
+Signature in G2 (compressed) = b8ce6b9fc3fcba4a2bf850d631e1655a0f8ba4e25855e67cdabe66335b6b8b7e8983c6362424eb737a139c0b3fadf4500e4bc114ae152578b370d42cc05105dfb8c88afebdd920e7113307484f5f2d0621ce1c162ce2cff27c68fcdf33bcdd70
+PK in G2 (serialized) = 13ab4f2cf71dcc9ac158628df16366e01604a31b6659ec0b77eb87150eb019e59ee0492b8cc6b3087bc20f4755c1461310d5083e43154c7f778fa1690063c2675b800502b578435b76ca77cff600709d6d9eb8206ca65769b40a8b3f39c5f2f802d9e0a3177b979dfd00db9ebcdc3df77fcaf92e000ce45e2eae665bfe8be3205e2aa4b138a800acaf46c7931c0daedf1691f974966c591205ac1487bfd0f006e0ed6e9055b856ad45dd59740f26b76162ba06d00b888f4202a17f909f3c607b
+PK in G2 (compressed) = 93ab4f2cf71dcc9ac158628df16366e01604a31b6659ec0b77eb87150eb019e59ee0492b8cc6b3087bc20f4755c1461310d5083e43154c7f778fa1690063c2675b800502b578435b76ca77cff600709d6d9eb8206ca65769b40a8b3f39c5f2f8
+Signature in G1 (compressed) = 8117a3c3db029d59ecdc0b1ab13c8622ceea1690eda9fc1462bb4159472211eb83d01250b43df64fe4c7ad17eb013cb7
+
+COUNT = 98
+IKM = 0062c42688ea4cae1072d43698fa5cbe2082e446a80a6cce3092f456b81a7cde
+Salt = 1d68ce8299e60543b5a2298ecdf1cf2510606e64a9e7433f69b2ac936d0b2e76
+Info = 
+SK = 727153ffe69ec98d2fa046fc1c6ac209684f76022abb03af82a15022526e9e88
+PK in G1 (serialized) = 065b7ab252255a05d1a0777ad62416519aa4382b606147581874797b5ff239bde80f416349a7e935a5e37ba76fc405a211a76bbc03ce3e3b719434befd790d5c647b2c0c653e4e75536542c822b0dec33965fed360a4db27522ce511cc34f64c
+PK in G1 (compressed) = a65b7ab252255a05d1a0777ad62416519aa4382b606147581874797b5ff239bde80f416349a7e935a5e37ba76fc405a2
+Signature in G2 (compressed) = a3fd0730ed725b81c687034c0926c1f5d55e96cf5264e6aa29a49f4623390813e5cd1ee9f164b4b91dac4b1b1b70c9381784dd9171b12f10f420196d72e0f5fb6555ea51bfdbf1b05c32db5efbb8f245acfe506cea11e02b3d60337c601223d0
+PK in G2 (serialized) = 089e0da57fc6df8c2a1a326a26f7aeac9f745b87fb08e42a92892d72cbb96ca795d331d58baf8013beb5b834ba49283411b8be2fa9a7679e24078679e69df56d04c22957558fd581419f217b09146f9cc06d4c286f753cd36d3ea7f6fc7d88550c21442ebbbe274874596676187fff24cbb2cca492c3454819da25721b09038bf671a8944d027a3d1cba57bd7618579800b3dad24cb782fa5f4429a317e44789f1279eecfe26caa08aab73d59bd8454cc13ade858a755e5943694ca96822486b
+PK in G2 (compressed) = 889e0da57fc6df8c2a1a326a26f7aeac9f745b87fb08e42a92892d72cbb96ca795d331d58baf8013beb5b834ba49283411b8be2fa9a7679e24078679e69df56d04c22957558fd581419f217b09146f9cc06d4c286f753cd36d3ea7f6fc7d8855
+Signature in G1 (compressed) = ae468484e0c50d4800faace5cf6e5486059e0f46b7b0f100e0b609af99fbf7a77aa2803512871a7a0475e0a201739953
+
+COUNT = 99
+IKM = 0063c6298cef52b5187bde41a4076acd3093f659bc1f82e548ab0e71d4379afd
+Salt = 03024e8c8e52975a93c95953a217297c1f2474a48f2e91c8f24976aa722a56eb
+Info = 03024e
+SK = 72e5cc350189a6e8b8fee05787f587c0991b9c9185bb471f57c94a1771a5dac1
+PK in G1 (serialized) = 0e0e602b653aa4c23b2c6c783a234b91ce1d83085843cb11137e08518b0b26d0ccbfeffb8ef7f49f98b17b99fe6623890fa3993022ca9d4e8d5a5b5680eeaf1c6c899adc3edf382d63e0879b973ce2f6cf3a24912c7deb688b809feee68026ab
+PK in G1 (compressed) = ae0e602b653aa4c23b2c6c783a234b91ce1d83085843cb11137e08518b0b26d0ccbfeffb8ef7f49f98b17b99fe662389
+Signature in G2 (compressed) = b8d8b1c3c7f031f423df1082fdcd3fd4cd0d65e37a1894e377496d597c43a14a064070f54a321a75cdb49148693bbe0705edd9873e294455852bdd9c675ef0be4bcb2a01fe8a3bb55b6f81ded6b342ed803c894ea7f77a34e49d502ce2173cf6
+PK in G2 (serialized) = 08b418f9a15c5ddc6818cb0ddfaeb3a4746a5df5c0878987c95e95944a6c717e8c4e9081d03ff94b3dd4ce7899be047d1980ac6d40d90de9787ddb881157b695fc0a4bf188074bfd86d23975d5f43de098d5cc0c3d11ac1bd4c46053d97a3ce70b429ba454b0b9b4c54cab8c272b2c92f117a9afb59f48acad4949cd1a01676684bd9ccb872286a4855fde742dea81061709b0459fcace10b57c1e5ae7a50be9afe51c2cecf4b78e275b61ff7ebc4217f09cee20d7d26697579d288c78b8e020
+PK in G2 (compressed) = 88b418f9a15c5ddc6818cb0ddfaeb3a4746a5df5c0878987c95e95944a6c717e8c4e9081d03ff94b3dd4ce7899be047d1980ac6d40d90de9787ddb881157b695fc0a4bf188074bfd86d23975d5f43de098d5cc0c3d11ac1bd4c46053d97a3ce7
+Signature in G1 (compressed) = 8e56022090fe0e4a74a5e9d075afe6685e903651ab062693f01e3c9b6bb1e39a61b5eae9edc2153a889ccdba084360db
+
+COUNT = 100
+IKM = 0064c82c90f458bc2084e84cb01478dc40a4086cd03498fc60c4288cf054b81c
+Salt = fd8901dd2538bfc866319161829f547902e77076eb40386b6cb237e77395fb53
+Info = 
+SK = 55b708480487809461dc063b55299c3dcd079f8125ceca4ed344dadad7afd89c
+PK in G1 (serialized) = 107c8253e702398f9d03549b36eeab94cc53409c4a5fe2d4004598d6fd1267177344410e524b70c1e0bbffa042f63ffd0d045c918ef7f81b6c2341d3e01dbfe5e60b2c28e3d09d31c2e1c0b62f083c4193a508d8c1d1eed11217e1e1515e5866
+PK in G1 (compressed) = b07c8253e702398f9d03549b36eeab94cc53409c4a5fe2d4004598d6fd1267177344410e524b70c1e0bbffa042f63ffd
+Signature in G2 (compressed) = b0cf158f9c419373d0618f8788dc9cc05a0be20f208e7723452d934dadfdc46f3eee6c1793d7751c06696d189bebc6c303651f87f566b84e6e10d4a50c55dea10ec05daec2afae8c5201216f32a33e7a0b84de63d9ee8e825500f7f6e5a7c71d
+PK in G2 (serialized) = 17a8c1165f4af2fef264b6650ce4ff4a9c259965a4b20a44126a048fbb1414572e6be8d7c99173edd01d458d1a9c572b19b5517cd2f53a2133099f038bf4c9f187165418da2b5c4a49f93f29869728ad8a225857f863149f987805d3a260e97c10753bb672917196a8ebc868f9c5a7cc9f1d1acbefc55a033c953104635c6313e0b60223a0646f591b70acde66802bf612346c3ac10759c5967a70b7243c66a5739c432e6a1bd1dc05d378edb8ded85eefa8a071b47ea493987e443167cefde5
+PK in G2 (compressed) = b7a8c1165f4af2fef264b6650ce4ff4a9c259965a4b20a44126a048fbb1414572e6be8d7c99173edd01d458d1a9c572b19b5517cd2f53a2133099f038bf4c9f187165418da2b5c4a49f93f29869728ad8a225857f863149f987805d3a260e97c
+Signature in G1 (compressed) = b571d8ad2a93d7cbf91c1e7e65f342b17f8676fe61d5defcd33f5aeed021334618ac565106aaf27bb982ef64ad24a6f1
+
+COUNT = 101
+IKM = 0065ca2f94f95ec3288df257bc2186eb50b51a7fe449ae1378dd42a70c71d63b
+Salt = b44e2756ca3916189f8679736bafe671f6a8caf39064d5af64921da626a456d2
+Info = b44e2756ca
+SK = 711a5ddf28b7c8e8cfae30121b0553c667a16d074b817f184ace61b7acc3057c
+PK in G1 (serialized) = 06beb992e150ef016fd5aaa9d86ffe80c59d9c37940a58a295819763643f65bc085da79c73943bb4641efcf54449c1e30a0c08cf5f78b2d487dcc61ff040db9e25e9b27cc18a353dc6c981a4a81b2f75b7c529a172f0a921bdbdc8b07f0f3fd2
+PK in G1 (compressed) = 86beb992e150ef016fd5aaa9d86ffe80c59d9c37940a58a295819763643f65bc085da79c73943bb4641efcf54449c1e3
+Signature in G2 (compressed) = a632ae2a2e73cf4f2c6a2cd3d172680e8864f0bbce4dbd93cbb6d5896be4281c5ffd3e24c85cb93a467f33af617992af0666c02d642e8df8464f7b0d33f3e03a07dcb64872535fc65cbcc177ad1c9e1e077493b4341bc819e068399b15c3332a
+PK in G2 (serialized) = 18acd0d2b24f6b6654ac43b7a8611bfe460a6dffdd8770de0f111f3fba0b7d98e6aea7522f20cc74a36dbaf1fa226e150f8e7daa8441579c32e7f58996852873fe3caaa23eced051340eda468ce4461dd62b3f286e98df321cf31d6161814edc0e3172cbf23ffe4a50835d2c28f76de8d314ffd05e46fb1a31c7e402d4c8afbc278fb89270fcc51c4bdc73b45aa458ac196776f7aca8d47beaf94c7d795803b06571c21e57ab8ae5f8e1d90d00d97a5f933861c2f622c986dc272b00c7a5aa04
+PK in G2 (compressed) = b8acd0d2b24f6b6654ac43b7a8611bfe460a6dffdd8770de0f111f3fba0b7d98e6aea7522f20cc74a36dbaf1fa226e150f8e7daa8441579c32e7f58996852873fe3caaa23eced051340eda468ce4461dd62b3f286e98df321cf31d6161814edc
+Signature in G1 (compressed) = 84b62d7be42314d000bf698a466d57cbbee56b20774ec8a0761d9ef0ebf94005bb6d8981f2a848bb67102189b4d2ef26
+
+COUNT = 102
+IKM = 0066cc3298fe64ca3096fc62c82e94fa60c62c92f85ec42a90f65cc2288ef45a
+Salt = cb6803234bcfd07208c4060d62a4346426258398e72c2b283c266d89fd8edd91
+Info = 
+SK = 2b5806a936e3c10c4efb3947222d8c09b2617df268b3dc358d428c529e1f7713
+PK in G1 (serialized) = 19d8b194c3a50d1a5b1ccd82f46c20a3fb958ba9382dd6dd25cf852b06d007e8a5be0c8a73aa73a260a75886bab08e0509264c7dd4284b72bb1d1668af171b82a7c65f2b3f9323bae28cf449c4c1fe268141d2657091b2dcefd7c6f8f7fb2241
+PK in G1 (compressed) = 99d8b194c3a50d1a5b1ccd82f46c20a3fb958ba9382dd6dd25cf852b06d007e8a5be0c8a73aa73a260a75886bab08e05
+Signature in G2 (compressed) = 8b7e824e18b3db8cb1fb05a979d0dd01dc28a89ed9461dd6d0fe09c655d293dd83425b86f8523cb9e8a42e783345fcff060fa99c597780c6b396b93deedb4d0d9db7de0caa0cf5b2fb364558d545331db0fe71cf5d12e6d9917a93409dbff280
+PK in G2 (serialized) = 1661e78abc5d411a69ab831895718cae024d1ab54df12476fe501a0bc896eef6d750984b020db81af10016c130f44b8415def8ec8a2888c187656738281b693e44f6a6c7867c0d0a99ac442117649ec0f568879caf60a59ed725050bddc7ce3a0e67b29ac1a2f60660ee9f020ceb5d2902ff3b2a65cd6989adfcc13b6cfa3b0f22632aeb0bd64e5e48cc975ff5bc0cf80b66c49d4bf087efff8347ab3c093ad81c0ae172dd60ac9a0e633669d3b020b67e2be24e92c076f1224c56e18c2d09d1
+PK in G2 (compressed) = b661e78abc5d411a69ab831895718cae024d1ab54df12476fe501a0bc896eef6d750984b020db81af10016c130f44b8415def8ec8a2888c187656738281b693e44f6a6c7867c0d0a99ac442117649ec0f568879caf60a59ed725050bddc7ce3a
+Signature in G1 (compressed) = b92b2c211b39170622bc74b1b4a6be1504302bce76e642c5215d6239e4c0c4b681bccc59c370e32e0ef72e1c5bdd22ec
+
+COUNT = 103
+IKM = 0067ce359c036ad1389f066dd43ba20970d73ea50c73da41a80f76dd44ab1279
+Salt = 23318943aaa732ae4ed227e54d209e575fe360edaee9726c8994bfad6c8d9878
+Info = 23318943aaa732
+SK = 0c6983e53fe42f2156e83f270c05675ddc4d0c5778a877592984cbf13d70aacf
+PK in G1 (serialized) = 11bda1e049f6c65bb4aa853db9512ab652daffbb4f3821f31fe5254ac37f07241943bad2fef9114308691f271b0c0010019e78eb75562d4774e31bac71dd06a5081eda0d947cdb140595484490c193e4b7ba92eb665af82051771d84303ef1cc
+PK in G1 (compressed) = 91bda1e049f6c65bb4aa853db9512ab652daffbb4f3821f31fe5254ac37f07241943bad2fef9114308691f271b0c0010
+Signature in G2 (compressed) = b5d3882c63c1e26c347d363d32a6285a92c32cc64d7f2dacfdf0f0798d22af5695b5d326dfca0e94c88133c305691f9403c5fec68b735b6af5ba1a8c43816eb71e1374e19c1bc894880c3e853e23ad4fce7b08fd31ccecfc85a3eec7d07a6ac5
+PK in G2 (serialized) = 01a386c81b7cc5a84375a59b322dfdec83dbd5396a66c3ad9d36bb458aa6060a1032b0b1c0c0e85e508dcf328ebfb465169ca080fc99623706dd990d219d8e89239a609942be6adae29b52ab0cca08fc5937265c7c6e73c76c552b062702993a10cbb7247f75475ff53d047e992db1b6c55ad988b37c6ad31c1fd45fcbee156a9be97e0c93f7edcef7f93584884ae52906dfc54368ba2abff8ea332ffdc4d978a2ed2373a505ba0b9f4d4570e7cd7ef65089e4e6e4e91790eac3c834e12e847c
+PK in G2 (compressed) = a1a386c81b7cc5a84375a59b322dfdec83dbd5396a66c3ad9d36bb458aa6060a1032b0b1c0c0e85e508dcf328ebfb465169ca080fc99623706dd990d219d8e89239a609942be6adae29b52ab0cca08fc5937265c7c6e73c76c552b062702993a
+Signature in G1 (compressed) = 80826a65f3098acc9ca110c3027f2b5c72aff85f735fd71eae085e4668434ebdb473315880bb13df19192cb52d510259
+
+COUNT = 104
+IKM = 0068d038a00870d840a81078e048b01880e850b82088f058c02890f860c83098
+Salt = 928aba242b421fa4dd2deb6f70790d66abb4cd6a73170ca21b65e14cee7b0c6f
+Info = 
+SK = 6ba6d05adb147e2a66ccc89e0792c8d6a899ebd75526af4a695b65c0ca334eec
+PK in G1 (serialized) = 150279f90c3738e6f3ef35220ba6d82dc5ffc4c22944622d57ae6fcad810e17eebabca3139ff3a11ce2d02157a4d5f860ff50b7d8a16cf8a2f4bee69fe1a538615c818bffb886b60bfca46963128126ca403957e921f3a0257320f86b57810c0
+PK in G1 (compressed) = b50279f90c3738e6f3ef35220ba6d82dc5ffc4c22944622d57ae6fcad810e17eebabca3139ff3a11ce2d02157a4d5f86
+Signature in G2 (compressed) = ae7a418f1fbf484c6d354157656546aafb7c6eb01d49e2c10f0105951fe15ea0614c595ff56e83d8ac93db9f3ab62ac916f66190741da04bd11548431834bf7c781b4e4e9687d22c9cb7386327d6f39bbcbe86fe6910b4b45686f9e036d1621d
+PK in G2 (serialized) = 14067b9b1cc8cfc00e50290961107c46dc63b953bbb15c61fec41392e7749b63deacc07d24106c1cb5c6e99f43ced75c0f48cf60a0f3791bbe76d2067ac5bffda35e1e4633a8054d01b9cbe92f812d54b13360ae8fe61225370e6cbc91a6aecd0b3be9579a8a9cdc9451edb9061ba433268c2946b7929d5d7be250ceabbb4d159f1eaba96449a0f96f8bb18d05f401a408cf5012473083cefa09296e6b8e3d3c1059142381a59d323c8ae7e347178c9460f21dd152b3436ce9d6fee5125ccb14
+PK in G2 (compressed) = 94067b9b1cc8cfc00e50290961107c46dc63b953bbb15c61fec41392e7749b63deacc07d24106c1cb5c6e99f43ced75c0f48cf60a0f3791bbe76d2067ac5bffda35e1e4633a8054d01b9cbe92f812d54b13360ae8fe61225370e6cbc91a6aecd
+Signature in G1 (compressed) = 8d676684c73bdbecbc0d823784f5e00c8dc9063a4261b1415159ecc12ba30138ad22b4283718ee42db07865928c1d5b9
+
+COUNT = 105
+IKM = 0069d23ba40d76df48b11a83ec55be2790f962cb349d066fd841aa137ce54eb7
+Salt = 00f35eca4d6e0f7a20eecbcc6dd34db3511df08415e974172548f01b34d1c35b
+Info = 00f35eca4d6e0f7a20
+SK = 4111d8ee463590e5096e922dd8a726b58f793f0e020d1fcc6c447d01f1f22df6
+PK in G1 (serialized) = 069d815e9a8b409769b5fbb382ddd8113fff3d4d5d65b2554e84b4138d47341958fc9c5b3e372fae6e4ac6b242675d58150bcdc0ecbe9b30ad6e40141ec9a56912053e2a0df0702b586938fa76b6fcd4e08268ab151171dfc2da157ddb887195
+PK in G1 (compressed) = a69d815e9a8b409769b5fbb382ddd8113fff3d4d5d65b2554e84b4138d47341958fc9c5b3e372fae6e4ac6b242675d58
+Signature in G2 (compressed) = 8a3cc09587f020b5923b5932a18040c00782512e4b2c9f3e52678492c54abc20bb22d6c797e716ae2d9ab61c56db645903e8c45e48ff36e04b03c43753e7d4beb785550dca897611977c76898dde9785bc09d8ca411ac0f14bc910f86bef6c5d
+PK in G2 (serialized) = 17471c8ce40582137dc53d9ee852c3e96d9a8d59786573add0e56adb0d6d6ac42a57a1a2d3e51e2cdac4047abe1a9ab313248220c5c11d4b651a737a14f32b13d225dd215bfc7ec0d5090c53ba9290924a9ea142da74ede7855bad5c4d43cd401106139d02df7e5f970f86d5df95033f97212a193a53bf9f8b8a4911f1066da2ed7b05084a49986a5d7e85f41098bbc605639d87702a2b8e60b6794881343b2b265bc3100fc1055a07615db819305dc448bbc7cf660c942dcf8ce8d30a9ea23a
+PK in G2 (compressed) = b7471c8ce40582137dc53d9ee852c3e96d9a8d59786573add0e56adb0d6d6ac42a57a1a2d3e51e2cdac4047abe1a9ab313248220c5c11d4b651a737a14f32b13d225dd215bfc7ec0d5090c53ba9290924a9ea142da74ede7855bad5c4d43cd40
+Signature in G1 (compressed) = 8bfb3c9d166e6eeed504b9d8611797bd6ac13b4616cad9170763dcb2b2294b7ec779c2363b21b4f980e56c4ab1a2b01a
+
+COUNT = 106
+IKM = 006ad43ea8127ce650ba248ef862cc36a00a74de48b21c86f05ac42e98026cd6
+Salt = 11fd12df9070c490260c3cd1315318a165493950f6822417dbae829d4d7a645c
+Info = 
+SK = 2b36685a2e4b4aba1497ecca637a140c91fdb576e696da843fd5d4aac2eb30e4
+PK in G1 (serialized) = 0d442ef255c3b8cec8eb53de6e39547da7c7a2096d66df86c1a8b36feea13327ce8f22c596f46f4c6032b7e59c9efabd0d59accb22e9b6b25be5a6019fd37f02defaf5d7257fca1fcb8a1a258e64747b78ac7b42f0de33d18153013fd2f6b510
+PK in G1 (compressed) = ad442ef255c3b8cec8eb53de6e39547da7c7a2096d66df86c1a8b36feea13327ce8f22c596f46f4c6032b7e59c9efabd
+Signature in G2 (compressed) = ab4b0ba4ec7f1d954d4674158d683a7efb32b46385c2c2b3811c7699b4728eee8b378401b4c0ee0739dacf7916da97f8176bc69024148c0793b225cfb1b9d525dd7971cd67f4607056ecfc20e5fc90225ec55498564b868e883c29bb76864f38
+PK in G2 (serialized) = 0e3ed9d003e23dfea52b4bda6de6b314b197c2d0895f122873d4ad490392e9f006d6b170db64a3d5a4dc0a0ad12a571402d632acfeea90233f73e3998e3cc33248fe64706bb7034e4a247b1f7d0b1dc37020f29f6850abb7b947c239dae80d020b3f52de79e9f7f3403b3867faacc5963074359c14a3a009235a1f4389e0580d22722882c54cbdc44edf7e5f80453310071626c911473395ed256d68b2d03f21cccddd0002307a2ff88dd492aa11fbeb3693a5a032268b28d799ee7a3c8ce43e
+PK in G2 (compressed) = 8e3ed9d003e23dfea52b4bda6de6b314b197c2d0895f122873d4ad490392e9f006d6b170db64a3d5a4dc0a0ad12a571402d632acfeea90233f73e3998e3cc33248fe64706bb7034e4a247b1f7d0b1dc37020f29f6850abb7b947c239dae80d02
+Signature in G1 (compressed) = a0d3f90a306d59f2628f35f7d4bb191adb3440c80302f35d4f646835e21e6fe2c1404d2d96c3ba3eff1a944a84460b98
+
+COUNT = 107
+IKM = 006bd641ac1782ed58c32e99046fda45b01b86f15cc7329d0873de49b41f8af5
+Salt = 9ee44ec5a3625ee94b91a85449e95b8a8b51a4482eff20ca99e5c278f9bdbdcb
+Info = 9ee44ec5a3625ee94b91a8
+SK = 581935b1c6fca48b24bf71bdd9135837393937c39bb3eeaaa8774b7aa778ef25
+PK in G1 (serialized) = 161b3c398d2642067242cf2a2a5fc319d453d1b335ee3afd4f2ee04bd1686b80f4ded5c3766f2d98c683d98e1ce201b704fa4cfb04241d95f544d985fad115e6c8e32c69a8a589151bc1dcdb2bc38617754edf957007da0a67b6909cb5a5a2b3
+PK in G1 (compressed) = 961b3c398d2642067242cf2a2a5fc319d453d1b335ee3afd4f2ee04bd1686b80f4ded5c3766f2d98c683d98e1ce201b7
+Signature in G2 (compressed) = ad616c3213166febcf54b855802a49c066708bf2d4750d85f461bcabb47442cbb6d679cce1874ac685189c82bdf5ff0d19462e14f1ca6e2b1a158b06122c110aae7852c31c943f00f4c7044e6f756ebc2d8221d1be01142ea5d4925ab822b0fa
+PK in G2 (serialized) = 133c7f8a69b0e8c0e6dc8ba4f64dfb587517a869f3538ff437336681bc8acfac96b7ad5e80c49b9358345b2e51746c0609d249e9ca7fb71cbb350972a3b14da755912da39a5eba33ccaa47014646e1085ea230d2d19ea17595849242f7cd43110a548a0e8bc3823663f4dc41310dbe298ad6f8ddf5ac11e3ab66f7c1b0fe28e496fa621c932381015eb0d86d429967650203ccb9d226a1bffe9f583257552530eb464370a1d98f738afbb590ab58bf936a85cfdb2bc263d955a03f6caf03926a
+PK in G2 (compressed) = 933c7f8a69b0e8c0e6dc8ba4f64dfb587517a869f3538ff437336681bc8acfac96b7ad5e80c49b9358345b2e51746c0609d249e9ca7fb71cbb350972a3b14da755912da39a5eba33ccaa47014646e1085ea230d2d19ea17595849242f7cd4311
+Signature in G1 (compressed) = 8ebb0221bb0a4bac9c0c9401e1d6c5fd555408815e1fb1a4f76b5824da8e1b190b878950ebb6bdf16771e7511e7495ac
+
+COUNT = 108
+IKM = 006cd844b01c88f460cc38a4107ce854c02c980470dc48b4208cf864d03ca814
+Salt = 6d219a717f02314e3af3f81a04962141efae59a024833aedd83f5b21479ee4ab
+Info = 
+SK = 673f29ad60baacd57edd2f70bdf0d5cf05f8dcc277a4c1a2a81d16a2ce0f4ab0
+PK in G1 (serialized) = 0cd2c300f31bf9ce3337d64387170e2217565c4761757d963413e0f2f47a0364581596c4ae1bff76ee468de3cbec151611d2fbb95737781857c7787a89772ae2fcb94b2c8d2c0cc378c6e5b42cd7da937cf66d2adc8fbed41eb8475113d2b204
+PK in G1 (compressed) = acd2c300f31bf9ce3337d64387170e2217565c4761757d963413e0f2f47a0364581596c4ae1bff76ee468de3cbec1516
+Signature in G2 (compressed) = 8fe3dc44cc3fa3dea5a253825980a8e571e1ac3d757cbd7aed5e3ba829d7173309b07c032aadd761e1c14444e60ccc600a72656514f6b92bb8849dd706d8a9b3e04cffe2e93d6e96535c17a0e94f2ea0a6c4fb7292827838f12fc777218bcb7c
+PK in G2 (serialized) = 0d62ec7d6b6f3135cd74b876e58bc952300fc72e9ef7bacd8d986293f46ddd637ef7fb3e6f794fd0ba702e90006e9bc20135172533fe5f24e616ef377bc68a5418419aa92936589c18cbf379fc10d729c7b9da0be6b24dfcbd4a576b6b0126ea0277037ea5d1da8c9e32712ad5d4e88c276d2b389c89c6196aa968e0597f0f4a86ac1c0999ab3b33b96c49129042fe3c016291f44045d5ad3b23eab16f0a04876e1a377a8ee58cad48ca2057377608e0fb0d58bee848a78944aace2fe7c9d545
+PK in G2 (compressed) = 8d62ec7d6b6f3135cd74b876e58bc952300fc72e9ef7bacd8d986293f46ddd637ef7fb3e6f794fd0ba702e90006e9bc20135172533fe5f24e616ef377bc68a5418419aa92936589c18cbf379fc10d729c7b9da0be6b24dfcbd4a576b6b0126ea
+Signature in G1 (compressed) = 95efbbaeab8d45ead5b6f8caab5ad3ee0b68e084dbae3bd38d6aeb9429e4a390e5d29929a5a20d02e648eae5b838f697
+
+COUNT = 109
+IKM = 006dda47b4218efb68d542af1c89f663d03daa1784f15ecb38a5127fec59c633
+Salt = 7d614613acd23c911a5d98affd5c75a52471697f1ed1fedacc1ce4c926ae76cd
+Info = 7d614613acd23c911a5d98affd
+SK = 680184ad65c30b573bd813e9a0e489fd53d8b9b0fd884e4e6e3fa726efcfcf2c
+PK in G1 (serialized) = 001d4d1074c8773ff37691012493401f0b24f40fd98811de3b807eda64f25e6fd66379a2ebcd8e9d807920692b7abe890fa50c430482b4568a01dc45695cfa675579d3314b87738f14ab28e5a162f7d4016b4401cfbcfe0b6090d7f3a5601dfd
+PK in G1 (compressed) = a01d4d1074c8773ff37691012493401f0b24f40fd98811de3b807eda64f25e6fd66379a2ebcd8e9d807920692b7abe89
+Signature in G2 (compressed) = 8400d814594c5507ce226d2f5b6cd46c2482f695d83631a547dc16fa1dfa501a80b3474378b671151ac819de7a8c41f003f2bbbe360cb6616af679f1074530df915896dcab7db8597e5aa196287d2a652260d6e2d4a26f0da94d7e2b255aefbd
+PK in G2 (serialized) = 15e3fce9e8a580aa2cbd02361875edfd2d34dd544256106abe3b81cb742ea8bf7e80047dbf867df987e2983db38bd98619e332c32e394cdaf5dd9dc7906d4af6d610b240cf289b257128feac6644ae94c900b30255530f6cd2f3fb5a723b6f6508ec0098f73df3dd5f48610cd55b266df0acc2a5aa0614ca9852f0b3d7ec691edc736a7d0cd577b6eb9af44c1c9efd48016834f35a8e82212d91907bbd29adc9077940957645a142c62bfb91147dd45a587de20ec2541411ef6127eb17bef971
+PK in G2 (compressed) = 95e3fce9e8a580aa2cbd02361875edfd2d34dd544256106abe3b81cb742ea8bf7e80047dbf867df987e2983db38bd98619e332c32e394cdaf5dd9dc7906d4af6d610b240cf289b257128feac6644ae94c900b30255530f6cd2f3fb5a723b6f65
+Signature in G1 (compressed) = 92733fa209456245599957644911657fac6303b27b94485248d65e07f8b832404d73c0918ed5adc2f17afd90bf55f61b
+
+COUNT = 110
+IKM = 006edc4ab826940270de4cba28960472e04ebc2a980674e250be2c9a0876e452
+Salt = b52355053928659e3666435216f39fd648533989423649bc717918c59d1830bc
+Info = 
+SK = 37f1bacc4ec11c56a31aab54fd71bd1865d4535722302e26f1c2283241d71a75
+PK in G1 (serialized) = 09a8c5815f0bb49f69378fc2594347b7c7afe90362aa88a0e68c6d679f3ee4d530bc1e87905292842e00f09b9fec1c8a0cf035625906db9bced22e2164a7e6ef9ef32b7ff1172526a891e93060f517784239cfd917aca3382d00fe57e0f51e78
+PK in G1 (compressed) = 89a8c5815f0bb49f69378fc2594347b7c7afe90362aa88a0e68c6d679f3ee4d530bc1e87905292842e00f09b9fec1c8a
+Signature in G2 (compressed) = abea28a633e312996da49a930e8a43a4a90a2a9972c65b8095fb000054e310f53e896127bc24cbb2e43728f160d23cd7048bed9693e79a62f94da1896ef932388ce5328807e1d07d011dc7945ec870df96da1254bf5e53a0e99ae0e4ef49e992
+PK in G2 (serialized) = 16caac91869b1c92d7e2a135d721a4c3d7cf4beb8d3e1add10d4009163c1fec48eefaf5cfe62ddb9aed3a26aa00235bb02e7e3318b300999b94876bac36d567027290ae9f88840ac2c69db209839f67505facbe77e11207a2a68320b2713e84d0e8eb64cc53f2cfbf1286e7c9ceccd8532861bbd0e80b7f627e6d2a3fd7de2cd935d80e63d95a2e8030ed8113248e25201098a35fb77333c830cf7cbb84d0248a5633d289e659ed2ffa019af946c4273d0dd5f7c48c274dcfbbed4a2d04bc4fe
+PK in G2 (compressed) = b6caac91869b1c92d7e2a135d721a4c3d7cf4beb8d3e1add10d4009163c1fec48eefaf5cfe62ddb9aed3a26aa00235bb02e7e3318b300999b94876bac36d567027290ae9f88840ac2c69db209839f67505facbe77e11207a2a68320b2713e84d
+Signature in G1 (compressed) = a10831ac9038760637d6616946f1f4207672d29f7e932592766c7eb02085d8e64efa48d5e6003c0eee930a9289488b9a
+
+COUNT = 111
+IKM = 006fde4dbc2b9a0978e756c534a31281f05fce3dac1b8af968d746b524930271
+Salt = 838fd9403e856ee87afc10714adc5eb68c28ad76c0509a2c0925cdd8dec628d0
+Info = 838fd9403e856ee87afc10714adc5e
+SK = 32784f9da9e6121bff448ec18c9bb9098ac8630ec3527ea00a002332e41c0c62
+PK in G1 (serialized) = 0ae73442505cc50cd69ec1fb94b46d88817eee64f1da0952ef515522bc3d962838fc06d8dac8fd857804c6b5c889909003af675ea8deb9b8505ca3aecd9495a9da876f8f1f41f4d2e5e25818d457c68696dd791aad885ea0ffad449b9fbf4316
+PK in G1 (compressed) = 8ae73442505cc50cd69ec1fb94b46d88817eee64f1da0952ef515522bc3d962838fc06d8dac8fd857804c6b5c8899090
+Signature in G2 (compressed) = 8a47f0cce2093009df83d0e85a772f41c3c8be8b7feb609ac4e9cf58dfc2f812ed143abe12b0e6c62a421ad8a43eb84901b3c75c4f0131b88e07e38f6dbc964fb60f4f9853d53c6a36b8fe4532adb7d5c8f293ff28fc0209acfcf7a0bc4486c4
+PK in G2 (serialized) = 0e30e823633db6bb37f2bb516cd103d39ed2a898a0f2d10aa90f1d8873ace80094a38f0406e2b7a7662c6eba22f6cd0203d819797d7610e19f4165ac5f165da107e63d5360abb41da9f6104e4d14c2f462a0c457868ebd56f49597c7ec101e6c0459518bccddbbb382bc983fcae78fc8333ff8918a9f650065115f6c0d834f133a582de52696e4979f9b6a18d0200028116974a9e8213b986ec436dedcaf5b39cdae6ded1e5ec157045d98f576c3ad2e293cd09b0a700591cd25b14d0d980f5d
+PK in G2 (compressed) = 8e30e823633db6bb37f2bb516cd103d39ed2a898a0f2d10aa90f1d8873ace80094a38f0406e2b7a7662c6eba22f6cd0203d819797d7610e19f4165ac5f165da107e63d5360abb41da9f6104e4d14c2f462a0c457868ebd56f49597c7ec101e6c
+Signature in G1 (compressed) = b548e2027ae36e96f2ca4932c53b11078fac2428d7e308ffd14dea7fbaa00a6331a3c4301d21247738c3909586ba04c2
+
+COUNT = 112
+IKM = 0070e050c030a01080f060d040b020900070e050c030a01080f060d040b02090
+Salt = f2beec3fe8042c558cfd10090e1b6e2007d49478311ac4ed57ea6c27616fc61e
+Info = 
+SK = 495da7c8a4b9ef98f1d4248a45c4a73cb59bbdcb26727b54ed79cdf0e7b42703
+PK in G1 (serialized) = 0753e7d6ac94997219194e13f2bfc55aa7bff3a43f484a776feb9aea5df7c34a778aa1da0ca3d9cc71d79010ed3b9e0b0ee8c965a8f7f227b8628b12e279c29e50ead9c899132e1dde096497aceb169c1431d33d2e6249a809297dc894707348
+PK in G1 (compressed) = a753e7d6ac94997219194e13f2bfc55aa7bff3a43f484a776feb9aea5df7c34a778aa1da0ca3d9cc71d79010ed3b9e0b
+Signature in G2 (compressed) = 84e531e7410a7a10ced6ca099d87b91c6946c9fb1f07701eb5cd6c68aeeac67c364b10168c903bb9a80b0a379db1dc0006ff0ac9fa3fe2c7327a453dce26f65f3c9be88e6041b790ebe60321b6daaab4d6b70dba6519fdf70264101dddfba239
+PK in G2 (serialized) = 0e4519b6b3060c1460ff8c520d3929ba2e30cbc33a8b242c1949722908771406fa36496bedc39cbc36e549b25968c6940eb16eb200582c33425a0d87d216b7475d0785e7ea0e5cd7c10a05f2cad21b75ff8355697c26fe1a4da245f3226900ec15d024f799f1a90d68771f670fd55942c033f82ba38b090cba378d50cc4e6adeb749286841efd90dd69f34b8d4511e6700560b34e271599e40ebd242253a584946e6db30c0535f3b95d335ec7a83ff9cc67b97614ab396d369c02de53e819da9
+PK in G2 (compressed) = ae4519b6b3060c1460ff8c520d3929ba2e30cbc33a8b242c1949722908771406fa36496bedc39cbc36e549b25968c6940eb16eb200582c33425a0d87d216b7475d0785e7ea0e5cd7c10a05f2cad21b75ff8355697c26fe1a4da245f3226900ec
+Signature in G1 (compressed) = b0e87f8cf87bb6e8d2e1458145012fd4174e8bf38e6b41984b22593c94e8c68bdf129023cdfb1b8592a1793bb2521ec8
+
+COUNT = 113
+IKM = 0071e253c435a61788f96adb4cbd2e9f1081f263d445b62798097aeb5ccd3eaf
+Salt = ea23365bfc501705f0ac4e537fe8663876f0cc0ec8dc5da06b7c7e13172990c9
+Info = ea23365bfc501705f0ac4e537fe8663876
+SK = 40483d00313371819f138154c1f71e25a580c4373d1c7868d1dedac032ae95a7
+PK in G1 (serialized) = 08f4af1fabf827f45e2a34a794dd01f978398121e8d6bc5b0b861e5818fa147a8aa4159cf86db75c40feb43a17d87b860d150b4a6f51c5dac86e27f091f1cb09026af20c3086ae772c3cd74d052fc023aca73640ae97f3b1f3d617eb088944d5
+PK in G1 (compressed) = a8f4af1fabf827f45e2a34a794dd01f978398121e8d6bc5b0b861e5818fa147a8aa4159cf86db75c40feb43a17d87b86
+Signature in G2 (compressed) = 8b821eb59bb5b8f717d69e53df209999f6d9269494c87e48081d3f290c31a0c2eb7d810b6dd58852494293dc539898f60b7ecfa8a723be4de71091382f160794e1f1fe03c73a3871150bd7a7b158441c922770dc7593dba891e32408efc9a427
+PK in G2 (serialized) = 1310cdb28d31f413b3929cd09cde9ac9994c3c33609d705f0a96db100b41829fd0e1cf301811c3011d80cbaef7800bd1053fe89ec5a3b66e114c6bc35bac73ad38b0a3654899f032bcc8b619cb93628785316ff140ccd981a2b4db338e896a160205e86bbe3fc39254cf8aeb93e7ae71fbd5cce374ab9228cdf04fd7b2059f04a4c60d4f112f1743dec2a58a1c6ebbaf0110aa10347f3b9b09cb2d9ea425c78ef1901f7d3ef65d7ee34810f36fde3449d709cd4d0f05da083df431649121de2f
+PK in G2 (compressed) = 9310cdb28d31f413b3929cd09cde9ac9994c3c33609d705f0a96db100b41829fd0e1cf301811c3011d80cbaef7800bd1053fe89ec5a3b66e114c6bc35bac73ad38b0a3654899f032bcc8b619cb93628785316ff140ccd981a2b4db338e896a16
+Signature in G1 (compressed) = ac73b0dc9dd9a89e038f8cd58a3fc37d1e176114bbe9006fa7c16c80ddae59f292e47889c6a99c90c95aa2223e98065e
+
+COUNT = 114
+IKM = 0072e456c83aac1e900274e658ca3cae20920476e85acc3eb022940678ea5cce
+Salt = 236f2d61c3afcf773e0c7d0e1f64b8eadad2e071ab02ad0cb1d1dbfd0a01bd04
+Info = 
+SK = 22c5742d6c374403b2ba1776752dfa93482ace837631a081cca9b275e2f913dd
+PK in G1 (serialized) = 0ba1ca3fb380451fb9568c096e118a94617a2bc1060ee73df5a7d5e51f7019f935f80b3d4d07f3128179cc31af3c905c146e0e4a6d292453c412aeccff351077384e0e7242fcce5d3b62b2f64e6dd9d5d84d3b417253ccbccd42ae93c5f06d40
+PK in G1 (compressed) = aba1ca3fb380451fb9568c096e118a94617a2bc1060ee73df5a7d5e51f7019f935f80b3d4d07f3128179cc31af3c905c
+Signature in G2 (compressed) = b6ee18ce2a7501d0a5ce05f5ee2b09902a102e2ed732879347275ceb6cf776be387a4bf79b272892ea4a06cd007039b613252f25498b82b45e4f5b045faef92cdb56f24a49e1e6d268fa781415dcf2ba4f695d71524b9f60c640e88ac3c5efda
+PK in G2 (serialized) = 01dfe2c26bf1a3bc95a975c5826a13b5c57d42f6d3d881b72746e263eb4d3be55e810a73690b5a2497a11e000863b94811b344af6fae49d29ffb197660832c85b792ec6e8bb8b25a2ec061c6a7f6510fd5156f73ca89b6fd690eda61c241955606e6d5050cdc0457fac377a645f3d07d43ff27585df0261e0f9ca923122700aed0e32071492be212322886a875c7104c0b3124564f908c5aa811c4f5e1b3d988f5a8bfc7b81a72e95e05749906313db4a8cc58498ead5c2bb6ceb54abb35541d
+PK in G2 (compressed) = 81dfe2c26bf1a3bc95a975c5826a13b5c57d42f6d3d881b72746e263eb4d3be55e810a73690b5a2497a11e000863b94811b344af6fae49d29ffb197660832c85b792ec6e8bb8b25a2ec061c6a7f6510fd5156f73ca89b6fd690eda61c2419556
+Signature in G1 (compressed) = 8d14ae42aea78a784ccd4c628473621cb70ea8d3d1208355f2131aaecd4961ed2e2a48d32c9f42e6dc5c1bcf115535a8
+
+COUNT = 115
+IKM = 0073e659cc3fb225980b7ef164d74abd30a31689fc6fe255c83bae2194077aed
+Salt = a265f1e3f22af26b65fe2785bd325da05d4923bcee97fda542368ec693fb32cc
+Info = a265f1e3f22af26b65fe2785bd325da05d4923
+SK = 6b3613c5b2dcf4d27d791f87ef1f3d284d90da13079b699f7d2d55dd69c77434
+PK in G1 (serialized) = 1a00bddb779047d55763313f4a8b1e1e5818164669e062d81e971c8a8c5886c6963e41dfaba42d41c856d4e364587ce70a873e3a9582b4e345e3e97a4289defa745d4bddf1fd679eaa913954da765de85dfb77839d66c2c4cfe108459f03f8fe
+PK in G1 (compressed) = 9a00bddb779047d55763313f4a8b1e1e5818164669e062d81e971c8a8c5886c6963e41dfaba42d41c856d4e364587ce7
+Signature in G2 (compressed) = 96433d928bb19974f92a11493e392a2b809c6cc5bb54a65626d570a3241cceeb293e80f5c086554c83a06a1d4c2a7b4f01d9a9e72719730ce6cccff1f2e0e20cd42644c23331396ced2985a843a23d16406e2772743cb7f2eadb8241a62835fd
+PK in G2 (serialized) = 106915f176c06d5e6e88d735ab00749919babece8c48f57a5f29f8e9b83603e39ec9f4f07b62f470028852fe6b83fa490f564feb85790c57d6a1d05e560fac4808894f085451102bfb395e066827ef75409f0ec63529b7b4a90d523c360f85a202552521eda0ebed028da6bdef90f8b69ab9b802d9583b04d37eac7422d2e5133fc545df6d4dd358330a49290d24cbc807650e6329b9f04c0ed420eb7f66c623e0027e16a2959a7ad95ad0d1e8d2a6036afa7404e9e41b8301b817558dcb95ab
+PK in G2 (compressed) = 906915f176c06d5e6e88d735ab00749919babece8c48f57a5f29f8e9b83603e39ec9f4f07b62f470028852fe6b83fa490f564feb85790c57d6a1d05e560fac4808894f085451102bfb395e066827ef75409f0ec63529b7b4a90d523c360f85a2
+Signature in G1 (compressed) = b42f2aed86c9d48ac3df5676c1e032c1015b91396edec3a6e850cdcf79f0cec6c26beaecffe1021ad5163b84ed2823a4
+
+COUNT = 116
+IKM = 0074e85cd044b82ca01488fc70e458cc40b4289c1084f86ce054c83cb024980c
+Salt = df16e60ba60c8cf47fdfc432f1748b91a0c4dfc47cf5441ca5183217e56e2e3f
+Info = 
+SK = 62c2c17c76818e4df1e96621ba9ef1dbd577e2470664e91b6a62371ed053da44
+PK in G1 (serialized) = 0d0fba3ffe5f564c995db1189c177f2fc821975584e2c64f2fc6ee4df8e75bc70405783c9984ca571e9f98228623f84f13113bd111f2a2e02713aec00edce992bf081add93516b28649ca6b40ba8ef5d7a28915be9cbced526dd95121e42f6e3
+PK in G1 (compressed) = ad0fba3ffe5f564c995db1189c177f2fc821975584e2c64f2fc6ee4df8e75bc70405783c9984ca571e9f98228623f84f
+Signature in G2 (compressed) = 8cd7fbe3731d94ae435b132b9ca1f83e2f526fc56214ec25d182985ed17ac0bddb5c4ad5dcc59abda9841ad4db069a701876892e856b70efbefdd3708d01bcec5656355646141a3f015b79157f7b67541bf0e03d9ce1d4816eedabb7d6b402c8
+PK in G2 (serialized) = 1456af78887ddddc42ab31e72d9cdbddb27a38b671d9321bf1424d6538929ccfade2c1f34b55d6622477342989ddbad013919f03f4471b9e09beac3bbbbfc771753b6fc3e30fd89823235c209315cf70cda3f6738722bb15428bff1d39d2fc850bebc528e72418ba00856a3a51360c4ad97bddbb27e34dcceabf20664a78979fc8b19290b7f33e666e8c103645b7bcdf071ee593270b9f0b13e8aea96063939bbf684282f0d855aa78c63c39abe2746100d0f7e0e9dad77aab5a07fd3f313766
+PK in G2 (compressed) = 9456af78887ddddc42ab31e72d9cdbddb27a38b671d9321bf1424d6538929ccfade2c1f34b55d6622477342989ddbad013919f03f4471b9e09beac3bbbbfc771753b6fc3e30fd89823235c209315cf70cda3f6738722bb15428bff1d39d2fc85
+Signature in G1 (compressed) = 8f50b617abd7ba0d8106c26d21b5a462d3be1cbdc52a91a1489ccbc6ee7f0961b7577ee1a22dfd10a4c8465d1e19ebcf
+
+COUNT = 117
+IKM = 0075ea5fd449be33a81d92077cf166db50c53aaf24990e83f86de257cc41b62b
+Salt = cb171be3614f46bd6272804b2fb550efd28101d6d5cd4dfea152df1b2dac16c9
+Info = cb171be3614f46bd6272804b2fb550efd28101d6d5
+SK = 53335802768f4eee5596718a8995ebd6880bf8f1c1f56b3932ee5df275e7b25f
+PK in G1 (serialized) = 137836322468bac4440307c2ec4a205197f921201a046bd9559faac4a0a7f55ae997471b7dea0f1954716a9ac1f53822090fd4c9fef55850d857d6223ba0a56dec21e0b5a747f444a73c4954cf4af01b4ead53fb41afd02e23d996021ee488d5
+PK in G1 (compressed) = 937836322468bac4440307c2ec4a205197f921201a046bd9559faac4a0a7f55ae997471b7dea0f1954716a9ac1f53822
+Signature in G2 (compressed) = 8d7fc33266ef2fddd2d8693c6cb931a2c2194ff5fef7012652e9ddf3ae1f5c75053d69242bbf40815b398faac5354218080a7bbc6123c42d2cb15ff92d1e36e2246325075207d1f0d66796f87dfd087e56d5a736995627e1e4ea5d0d74369930
+PK in G2 (serialized) = 022ca0bd9c8c943cf4cbb313aa56baab168b1b401aefafea203f4e2fbf0c96d6f0becccf532efc9f60b0b15e0c1ae99504bc9bb3c9fa1a05d33483dae18d39706f468bd6dcb2de64ad907b4477c350c559d894b5fb9cb44b3359fe3d7bab6410191890ef575a4478887835e4876d8e93f4b745e3dc2cde3551fb7e01dfce8353ad2ff83dbf419e7217d01961eac4f7831127cbec287a1d4cca018e460444d02e3cc67a915efc29c8dafbf7aae136cc45912276d201a3b5b1c444233a49c9f217
+PK in G2 (compressed) = a22ca0bd9c8c943cf4cbb313aa56baab168b1b401aefafea203f4e2fbf0c96d6f0becccf532efc9f60b0b15e0c1ae99504bc9bb3c9fa1a05d33483dae18d39706f468bd6dcb2de64ad907b4477c350c559d894b5fb9cb44b3359fe3d7bab6410
+Signature in G1 (compressed) = a2169edfce04f69af554cb90656d3b2a7afb63fc20fa877ad8fb10877f91519c556dc3d8449e12d50a72cc7c9bff3584
+
+COUNT = 118
+IKM = 0076ec62d84ec43ab0269c1288fe74ea60d64cc238ae249a1086fc72e85ed44a
+Salt = 873b2fbc70705c5edf87197a0b86e5a72fe4ea7caf9f260c4035fcf726e72170
+Info = 
+SK = 5de43c7d93edb2d84c27b68ca0e66db75bc6fef11954a255f9774a03321007ba
+PK in G1 (serialized) = 1640a562ae4aee6bfe44f8e6bb2f8fe5f2568f4ca875cdcd90d89d6cbe1f36a34179e609812cc96fd4c5699614f5cdcb04576692d8bdd8d901cef39f8dc77e19b0a2b367c76ede734fe26be79f3a72a88b2d5e8614b9b9fe6d80dc86ae109d96
+PK in G1 (compressed) = 9640a562ae4aee6bfe44f8e6bb2f8fe5f2568f4ca875cdcd90d89d6cbe1f36a34179e609812cc96fd4c5699614f5cdcb
+Signature in G2 (compressed) = 984d6fd24ef3f83cb8c7f3bb8922f81ea2b222966241329fecf4018a8ac912f7f267aec2e7f2fde907aceb23ed0bbb7209690cb1a60e39527b85a5ced379329cc5631ba3e392bef01ad0d419061bf21d5771281baa24a6d1c268376144b4881f
+PK in G2 (serialized) = 0deb890886bdebc0b3e2f7d3a7cd3917a8cb91e1b3252c79de9d2183fc9c4167ed1fb02dd23a207b8f37fe9a8104fd6b039acd7f06223c4d9cbf0874896712eb4065205c0c12c35192768a525186635f58124dbff18204cc7c46c6ab156983ff030278fbad579c8cad70cf99ad6332bfb5f3f93a6738ee488e86b173ae7b8cc29e1f0671fc98d8b59e09c5236e18993e06cafff8d121266c2889f431fc735f1658737daa3b8138fa41c2a8453b6089ba76d4a63aed318c1c6b9fe2043e161f63
+PK in G2 (compressed) = 8deb890886bdebc0b3e2f7d3a7cd3917a8cb91e1b3252c79de9d2183fc9c4167ed1fb02dd23a207b8f37fe9a8104fd6b039acd7f06223c4d9cbf0874896712eb4065205c0c12c35192768a525186635f58124dbff18204cc7c46c6ab156983ff
+Signature in G1 (compressed) = af3e304faf915839696a304262a1a086eedb05713194e58f4be839ec773f21210fa76e529dd9b05e3dd87ab964c4c59c
+
+COUNT = 119
+IKM = 0077ee65dc53ca41b82fa61d940b82f970e75ed54cc33ab1289f168d047bf269
+Salt = 135ce7badb8b0caea658c3b02d6d31e16cf1e18b68b9f50a27365f7c3cc2ab59
+Info = 135ce7badb8b0caea658c3b02d6d31e16cf1e18b68b9f5
+SK = 1a50fdfbcd492fc10d5583835f40d7e3127e051980e9c858495add0e5184a909
+PK in G1 (serialized) = 027ec087f5e1ae3384d4cb892de4e82d84568dd0c1dea14180c623ab6bb1244143fc1800cb96a1ee0198fc43eb88b91b0cf338be017da735abccf3343844f26a65f7187c486ab3f2c18441d02859824109e1ddf4f1454dadfc39cd76402175ad
+PK in G1 (compressed) = 827ec087f5e1ae3384d4cb892de4e82d84568dd0c1dea14180c623ab6bb1244143fc1800cb96a1ee0198fc43eb88b91b
+Signature in G2 (compressed) = 910b9c8a957f6938b2aa34c02ecbbbe17bb172e3c7c977b7fc0b57d1627b57f3571b891f63c50d6747d85d91bc3d2881100c4759ad700ba2335711d164d995f6de3760f2e169e9d8cd6bbad200af9e45b9a5b2b8bf0fe50de218cabc690fa596
+PK in G2 (serialized) = 12b42361a80c9092d957aa22569f3083cbbc95f66391802b41575d5d33e9f8d2bd3cfc80244fba9152d0235a8930fa67041b93a7be5b68a73a732011785545452ce71e9a12ddd135ef5f6bace26567ac3da1fb26fbe7bffa09fd30b744453ad80ccd15bb198380b66c630a3702267379a386718bcbb25a4d9f878294b8fa4fcb8494384517d3767e088c714b85f5cd92139c944a7b0dfbf12560e4909a6c637a9dfed8426b785308a1fbe0679d1ed13c5f976fb05ee87ccf2714d92e60edf911
+PK in G2 (compressed) = 92b42361a80c9092d957aa22569f3083cbbc95f66391802b41575d5d33e9f8d2bd3cfc80244fba9152d0235a8930fa67041b93a7be5b68a73a732011785545452ce71e9a12ddd135ef5f6bace26567ac3da1fb26fbe7bffa09fd30b744453ad8
+Signature in G1 (compressed) = a4292a493ed3bc98ac06e233fce33d201c43181bafdca13364db2a926ce2fa09b2ba39a1d1f2031d6c04369d103aba66
+
+COUNT = 120
+IKM = 0078f068e058d048c038b028a018900880f870e860d850c840b830a820981088
+Salt = 650e0ae690e9a4b63369f63074456871685cd229f14db26dd6392686ff72d40b
+Info = 
+SK = 6380f43abe8f0929435764030b0c6bfcfeb85a74f3f5060cec309e43949deebf
+PK in G1 (serialized) = 0e35a8f9a38ae51379bba3ae36f9df01ad706502d46d3fd2777fa60805fcb59c89236e2791df917319fa087129e9c6240c86988b05a73a388ceaa6b5881b9f92399266fbf80340fc2f29292935715e9a0fc10f92e7058e986dc15f8415732f1e
+PK in G1 (compressed) = 8e35a8f9a38ae51379bba3ae36f9df01ad706502d46d3fd2777fa60805fcb59c89236e2791df917319fa087129e9c624
+Signature in G2 (compressed) = 976ebbd0d840d8de83c7fb149e7477cfd79be1ff8b8c83f46f378429748767d17e2fde333f68d518267f6a36e765d422108e2da81d988ceebbaed117cc1150eb0e3383a878e26ccf379374797ef99c8533b0095241fee5147e49f64364b70494
+PK in G2 (serialized) = 0d1081360a3cdf9d657e02b27cb44a595b9b956b8091080b4d6a2003ddadc2d62e9b8575c8f6b544fcd725809d2f216301ffde14328750586665d1b6e9d5c2558423310c49c0444e28f5e291d7ff522abeaab51d6d028edfb4b0bb4db0ea0e3e0504d8921c56c83e678b1d9d18efb319258e2a24330860690e580d834455b0ab2af09248232ea514bf4573ada8905d84171e8a0528297ae6b4ec0e2311838cf63567f3114bcd9a5b582d15c959961a57ec0610b7d53a017760d5b46b4a707940
+PK in G2 (compressed) = 8d1081360a3cdf9d657e02b27cb44a595b9b956b8091080b4d6a2003ddadc2d62e9b8575c8f6b544fcd725809d2f216301ffde14328750586665d1b6e9d5c2558423310c49c0444e28f5e291d7ff522abeaab51d6d028edfb4b0bb4db0ea0e3e
+Signature in G1 (compressed) = 868ec4b7c90af21263f1cc8c05b78d63d994777c6e3b84db663bd96c0112f9565107966ee2448dc1e8a817cd38a0fff9
+
+COUNT = 121
+IKM = 0079f26be45dd64fc841ba33ac259e17900982fb74ed66df58d14ac33cb52ea7
+Salt = 3ad299e355d8fc06566b80686185ca5ff1aae0437eb515c00a20cb2f385d9327
+Info = 3ad299e355d8fc06566b80686185ca5ff1aae0437eb515c00a
+SK = 33f3d3024d07e4580b6f6c9726522ebb593cf3aab4bc64efcd845a0a827dc0af
+PK in G1 (serialized) = 067cb83421c1219054f87691cf29d983d83a05936469fafb8444d5dad5a65bb00a06e3d48623b146b3acff0e88c7179e0bb149fef8680aa30443346e3aa0217d9d09fd43a62887aa5ed671531f4569142484c98efbc046adabcd390b240b237b
+PK in G1 (compressed) = 867cb83421c1219054f87691cf29d983d83a05936469fafb8444d5dad5a65bb00a06e3d48623b146b3acff0e88c7179e
+Signature in G2 (compressed) = a910d679ba30a6781185f161566d1c3e66b8474a9b42f0eaad982f3bbb7016fcdb637ce4605a279d69f273a9c89750270be28df228057912b4dcb101799a9df7cf993ed60862127e9f26d97023c4f22ef1109927ecb5e6a83489c0b02f5d7be9
+PK in G2 (serialized) = 1360122339cc04cea97bf099e45d4c2f662da01b79b18528ad7936daf5ab14eccf7f498dda31e5d810f2505a5521ac0d02e20f4f4c366fabb70032ef780ddcd301b72bf32b8bda7abec329cfea09935dc915d050427319a9b5c7e4cb404447c7137096a956fa19a87673e127f1ccf74d9e0a655e54e230260b7bd0f48ebe92724d8b7a1111547339965f6429b47e63f2014539ac68e78a75caf0ae0be592d4d4bf311e4e86642b5182ce7fdd3256e62e2058ecdb4cfb6a179523c30101529817
+PK in G2 (compressed) = b360122339cc04cea97bf099e45d4c2f662da01b79b18528ad7936daf5ab14eccf7f498dda31e5d810f2505a5521ac0d02e20f4f4c366fabb70032ef780ddcd301b72bf32b8bda7abec329cfea09935dc915d050427319a9b5c7e4cb404447c7
+Signature in G1 (compressed) = b40f0ba5792b0c88562ff0b271a52e56257cdc6f25ffb5034c55497efdd8f8b1475e5bbd196bfb2040541088d6911d5d
+
+COUNT = 122
+IKM = 007af46ee862dc56d04ac43eb832ac26a01a940e88027cf670ea64de58d24cc6
+Salt = 259044502834daab6f1b6710bfa8d98f4e5d303a431b3835b24e1957150406fa
+Info = 
+SK = 2a865c72ba383ff959451dc8fa414d252ce3ad0adf2fdb91a9310ab41e2d1a58
+PK in G1 (serialized) = 14b2781fb46927ddc970d2a1e181dd21d04d2b0dadff2abe22546e5cb8b07b86c3ca0c317755781f8324e8dcebcfedf210434fceb53e7710037bf08a5def3a1a4f174125732bf839cff4bfa9a72ce4d76926d6718e37df3af67d5b1a53fc35f1
+PK in G1 (compressed) = b4b2781fb46927ddc970d2a1e181dd21d04d2b0dadff2abe22546e5cb8b07b86c3ca0c317755781f8324e8dcebcfedf2
+Signature in G2 (compressed) = 852a9a462544e3acd664b00bc0cd37316dbb150ad70757685b8ad5017b448a4316e93e3a28db80ba6a2cba56d0a800a81198310f55ff0bb749dc655b3615e64f719dfa29e6f1b08f157832ef7f4b8cf0d135d7f01856f29de63aa8c905ac406d
+PK in G2 (serialized) = 020b6a90a7930eb3297afc2e3ffb2f602fcb7e037b8ad703e4323cc06622f6039a01eb937030ccad19dc0b41aa5ee927106343beaacf07b3e94fe136bff18cb0518fe2f42ad6e24ba039dfd119ff13809a26503ab65f7cb25aea40d8d16b724102e0ea9315fad8a5fe8f990d0dcc9d285091614ab0068fc9096d13f20fccc7ad0408070ec0741a10b8028fdcf46c95a1131e0b3555615ac344faddcab43253cdadee7cd64f0ac712fb2ff13124a3aedcb03a794a9a4a969c1b978ca5752d0e40
+PK in G2 (compressed) = 820b6a90a7930eb3297afc2e3ffb2f602fcb7e037b8ad703e4323cc06622f6039a01eb937030ccad19dc0b41aa5ee927106343beaacf07b3e94fe136bff18cb0518fe2f42ad6e24ba039dfd119ff13809a26503ab65f7cb25aea40d8d16b7241
+Signature in G1 (compressed) = a29ca855a5768399a4e8ba015584f51eaeed98e18a59cd7dc190193162692a398132fdf18e76930012003fff1a239b6e
+
+COUNT = 123
+IKM = 007bf671ec67e25dd853ce49c43fba35b02ba6219c17920d88037ef974ef6ae5
+Salt = 2b413b46dbfba1d92d0acb07da9ca2382a0a46e70bdbdaf7a48a84a9458c09c9
+Info = 2b413b46dbfba1d92d0acb07da9ca2382a0a46e70bdbdaf7a48a84
+SK = 5f592c2d85bc05c4b19af716997a84b472211a92f712210776d5cec40c407835
+PK in G1 (serialized) = 05f2f35777f4302fb144a666eb746395f08e0c91f2209ef8e453d2e7e879e7abd3980d08cfab995de13a1c0985f9f3be0e2cb1b49feea57478b35c55d89bcdafabd2a5c34720f3774423b84825a0f5e880198e4d32a578a62bd579c7d14e5071
+PK in G1 (compressed) = a5f2f35777f4302fb144a666eb746395f08e0c91f2209ef8e453d2e7e879e7abd3980d08cfab995de13a1c0985f9f3be
+Signature in G2 (compressed) = b18670a297713ca527e5b014537872cd535e3894607e78afec5cc3f9336f6a3d8e10cd700d952968bb25c5401241f3600f2116d90f41fe3d666d4cef49f084a4115305a8083ae65f53d2d26ff70077da1ea83b6eae1a28038ddce69d557819eb
+PK in G2 (serialized) = 06f3467cbb7720368720aef244a4e85bb3d7905f9ff329e4dc3879c546328c1ff2223deb2533960733e0106ff79b23c3084cbf8b81059638b7cea49cf4430fc8f34564bb3f61f3974c13590ac39ec337ce29a1d40272ae363843e5fb401bb6b406eaec7c549edcd1aacb86e9c5cf82311629a198ac2301e16fa1e6249850b6ce26682bc44f7792af62f86d5795c551cd047792c65d529519e04defe1f4c88530f921542fcaafbdfe5c615832a7a818027018d4ce381ca0ade6dd804706190831
+PK in G2 (compressed) = 86f3467cbb7720368720aef244a4e85bb3d7905f9ff329e4dc3879c546328c1ff2223deb2533960733e0106ff79b23c3084cbf8b81059638b7cea49cf4430fc8f34564bb3f61f3974c13590ac39ec337ce29a1d40272ae363843e5fb401bb6b4
+Signature in G1 (compressed) = ae1a8b009c446dbcd0e8b9a8708efa037411906accb3ad17dbce73694a6a8fb9de1a4e99cd93ed4ef67b47e19e60e98a
+
+COUNT = 124
+IKM = 007cf874f06ce864e05cd854d04cc844c03cb834b02ca824a01c9814900c8804
+Salt = 7ebfa7e7d336169d990c19f365da8e1f10656bcc7ebd6411bb9c134843598cba
+Info = 
+SK = 4d41afd597aa240dd46318232fc091e24413a4bfcc999b98265754c6bb49ed3f
+PK in G1 (serialized) = 0ff8fbbb110f6af92678d40ba200810735161ffd6cf1703e8769c2f4d32d9616fd9546c5ab43aba27240304d89c8152611c6bead5ffda82e2c2b703ebfb68fc33ba9635c15544b535ec71f76fa0be96a59bb0ef2f6536e98282477ae2aa9abd4
+PK in G1 (compressed) = aff8fbbb110f6af92678d40ba200810735161ffd6cf1703e8769c2f4d32d9616fd9546c5ab43aba27240304d89c81526
+Signature in G2 (compressed) = 88f93cd995138a0fb29d0fb0cfb6eb6843b53b3dfeb51f7b1896da1698ed508ae86a32d20a73a272a543b8e94b70cb9406b32925f39490bf60b553a9f0397c405e1ccb6be1c96dbf70c5b4f82a2ff86a54719a74f8cdccdc2893ce658e0b8e81
+PK in G2 (serialized) = 15a0fdff0b8848524ac8c7d01dde932e544312d8430551cd7cb78f2a607d3e4cb6baf7c1bd21f59a000dd28e933601f1156c6fd4ccb3475ac0b2ecf10b5e8b488c22a2edfa574ce7a7ca38b3fc353a49e6804f215ec082028c1d8e6488d349e3172360f96e94df98e63975bef40e480a0977a2d73f5af024cd60e470ca77c926cff7579df0f6e407e57ac7c3c6b217360fdc7db2f626d6d67d4ffe3f41a06f1e377514cafec32a91ce591d5d4492150cdfa424a8d06c98e487ca4aede3bb57f1
+PK in G2 (compressed) = b5a0fdff0b8848524ac8c7d01dde932e544312d8430551cd7cb78f2a607d3e4cb6baf7c1bd21f59a000dd28e933601f1156c6fd4ccb3475ac0b2ecf10b5e8b488c22a2edfa574ce7a7ca38b3fc353a49e6804f215ec082028c1d8e6488d349e3
+Signature in G1 (compressed) = a86fd1607dd123ba191c4ccc17577aa9028b237bf3e4b5f4c9e487b59c29e26e1785b264fc14fd504659a04e068bd76d
+
+COUNT = 125
+IKM = 007dfa77f471ee6be865e25fdc59d653d04dca47c441be3bb835b22fac29a623
+Salt = 2dc13db5b2186412ed13f87963108c7ebf7b1cb166d6c3927ea6242ea33f56b6
+Info = 2dc13db5b2186412ed13f87963108c7ebf7b1cb166d6c3927ea6242ea3
+SK = 30e8e974db0749dfb7872bb66226ea271b01eeffd955deacfb322d7f083181e9
+PK in G1 (serialized) = 0a69ec20607c7c02cc3898ca7d40e6afc0be3dc3f3482a695a7329aadea38d754c372788907b95eba1f839ff12b910f0075284f1f935ff85b0c4c31c880c93ca680e4929dbea963712d1d298cde2c2f3d14f8d5280ee8021cccfb2b82e492e3a
+PK in G1 (compressed) = 8a69ec20607c7c02cc3898ca7d40e6afc0be3dc3f3482a695a7329aadea38d754c372788907b95eba1f839ff12b910f0
+Signature in G2 (compressed) = aed1ee9fcef85be4acc6d676ef3cd75d422cffd5b6fa7f1a7e984dfa1b971379406eec553f814f9e8ef3f0f3a58658c51261b35be3b06b6104a4d29ac8795b31a442191d5a04eba141215acb791323b31a2b71a50661aadfa1dfabd2ee4eeb37
+PK in G2 (serialized) = 05870c47b3953eec68b38f55b84aefd574467cec9655fb05618ce843fe5f098874980be9d5d1548a358f114da4b1a61412686a14f867eef2eabe8597bc9e43d4180e8c8e616f13e9bcb327f63ea65d13d38b39cf3989745d3b887ee95c29416414318802c3dbe842b379b93fe3f06f17a9096132fda5c391532d3f7354486245e9ba9cbaea4cbb14965fd40bc4222e2b12f2d60302df01b9209107c5a9ba075fc76355e714671878a34383bae2452abfe803f0ed84e685e4c040c3b929a58e69
+PK in G2 (compressed) = a5870c47b3953eec68b38f55b84aefd574467cec9655fb05618ce843fe5f098874980be9d5d1548a358f114da4b1a61412686a14f867eef2eabe8597bc9e43d4180e8c8e616f13e9bcb327f63ea65d13d38b39cf3989745d3b887ee95c294164
+Signature in G1 (compressed) = a47d32f09eb2c3aadb697995bc26b6cd60aacd31b29ee0fe090b904063c35fbbdd3fc123b752359a42dd66d613b92217
+
+COUNT = 126
+IKM = 007efc7af876f472f06eec6ae866e462e05edc5ad856d452d04ecc4ac846c442
+Salt = 41cf324a5fd4004ae5ad2e04599c40e71722f4cd5e0be426ed8d7194456907e0
+Info = 
+SK = 616ecab93f953118ebcac77b7e92e702da6bacd2949f8470afd7b1b8e3ba9497
+PK in G1 (serialized) = 016b0bde594c2acf56d5241a49523b28a3a0d1be70249711ea85f4bcd42702826ab5dc079925607df0f0b4413bdf49cc04a50c6241f855cf812f16c27dd6937b41254bcbae9a1c5087289a62c83f3263448a1b3f4eda9429c7a9f8199973c7ef
+PK in G1 (compressed) = 816b0bde594c2acf56d5241a49523b28a3a0d1be70249711ea85f4bcd42702826ab5dc079925607df0f0b4413bdf49cc
+Signature in G2 (compressed) = b5b88567ff0a312e2dcefa9ae7527302297ceae279e45a5626000d25df54ee6f6136644a188a11ed8f54738324da381618043b640c50522a377a70198621a5f4fc6da2da9612db9ff165c10527ff73ed227965b7a89224d84fca53870a6c36af
+PK in G2 (serialized) = 1640922cb88cb92829787bf2d967e85e0f1fb295f11b0d9ab30f1bb5dd7ac65b4eae6d7f558978e25d024c74807c6a3911a727aacc0bd90c55616261f02980d99d476295e36654a8398ff1516fc178466794994785bfe2bf1cc1470c4a6e47b20f9b720ab8f1499f47ce232a8dc7d212480fc914f4da1cb71c5136c2a4eee9717cb341d2a3f3b29c8ef8c0b6eab3ddfb037f6fd25878a0f16331cf382d087c27d647f115814eda457145b85b54cb7f2ab69e479627adbc61991374ca2f4159d6
+PK in G2 (compressed) = b640922cb88cb92829787bf2d967e85e0f1fb295f11b0d9ab30f1bb5dd7ac65b4eae6d7f558978e25d024c74807c6a3911a727aacc0bd90c55616261f02980d99d476295e36654a8398ff1516fc178466794994785bfe2bf1cc1470c4a6e47b2
+Signature in G1 (compressed) = aa7dd00cc6c13c3a9ca8a67c8be517d9f89ec6ce5d5612132ce5bde80b562aad12ec349908f18c44db48751a8d5e7e2c
+
+COUNT = 127
+IKM = 007ffe7dfc7bfa79f877f675f473f271f06fee6dec6bea69e867e665e463e261
+Salt = 7cbd6c4d657d51b0dd4210b98d89bb50e2d4051ce4bb8fb3e46aefafc74ccb68
+Info = 7cbd6c4d657d51b0dd4210b98d89bb50e2d4051ce4bb8fb3e46aefafc74ccb
+SK = 0a2b2f6f87765bd218c791719982208575662c71b1031f75621a8555bfb54419
+PK in G1 (serialized) = 00152ccba4eeca88186ee529f9170cc38ed65cfb3244bd90bfcc93bb7d414be3e6852d0d04e52cba0e4328db5f337e81040fc3b98bf8a94364af1c3dc7cbbe50a3a7665c55be3e864172d3d9576e618837f84cfded346c006beaae867a8e35ea
+PK in G1 (compressed) = 80152ccba4eeca88186ee529f9170cc38ed65cfb3244bd90bfcc93bb7d414be3e6852d0d04e52cba0e4328db5f337e81
+Signature in G2 (compressed) = 80e5cc8a669a23c21374417db9de784aeffdbde14b31e8ba552192fbc8fa48cb6fa86735dddf4e83547dd786975d44a213d759aa8d163f53ea0d4efa33060af1ca884da789ada8b8c2b2a9fe26255b25e0c2d0eaed4c3b82afa9246ebc979f8a
+PK in G2 (serialized) = 0df18202a4cd487cd09eb772cc459d1573e4eca8e1f9780d860cea824a3d73d302460229f9ce18f1d2421a84c34aafea19d4873e3c63f85d5ab028e07d04abdc7c9db9fc464037e87c3f95b75340a07cf12bd1b9beb53edc2655f8bf3ed3839409b17d601e822fc472fd75341adc9cdff1f9200bfb715f73bb6a2e260f077488adc0540b450f51073bdccca6f71baec2001c80b8a62f299ce8160e0b7ce1140fe6f7911f3a1264577f480b1ecb66bb8b0b1e63d60e57edb92d87ff4ac52663c3
+PK in G2 (compressed) = 8df18202a4cd487cd09eb772cc459d1573e4eca8e1f9780d860cea824a3d73d302460229f9ce18f1d2421a84c34aafea19d4873e3c63f85d5ab028e07d04abdc7c9db9fc464037e87c3f95b75340a07cf12bd1b9beb53edc2655f8bf3ed38394
+Signature in G1 (compressed) = 861bad2564840803cc1bd423e8650abe5c0b429b957d8012f0a70e96672b731b21832f3051852adfe7d6761c372d10fd
+
+COUNT = 128
+IKM = 0080008000800080008000800080008000800080008000800080008000800080
+Salt = da60b92bc70e999c07a6ded180a16c1e801e89a5722b565ea242d6aff2f507d8
+Info = 
+SK = 3468069f2075b4185e1c6ba5c6a9ebeb32fa277d00a0e8a82d9deff345d9d274
+PK in G1 (serialized) = 0ce11187c4c6c905b12c6066bc84b76563c03a586a0f78a25a5a336738e68b5b58dc237e3f8dfb5c8e0526e6e75e1d8b0ac9a96e07110cec378cca67f6b585016a2d9b9f8be9c67b0be722aac269d077fad5ba709ab94743449401d5175da1e2
+PK in G1 (compressed) = 8ce11187c4c6c905b12c6066bc84b76563c03a586a0f78a25a5a336738e68b5b58dc237e3f8dfb5c8e0526e6e75e1d8b
+Signature in G2 (compressed) = 8c30e929c0a5f730ad7642a270601c5506393c4446e418afe2cf68a081f612190b642ec5cbf2afa2b3e012292c780ddf04fbcb9cd299910106e2578699d579f4de95133a7820d0a145cdf7cf72b7cc32c6120049c90b0a572c854a477df77873
+PK in G2 (serialized) = 017dd9eef82ba2577915d474e6b358304bf65c6051a20f2c954b46261eb364eb92d2f3e2765f882a8c1d1148f8422e3c068ab6b3bc1a89a320444caf093478d948e7322e12c91f96683a7c1dfd892239586d5f322177a03cdb811b416d7dc905109351ccb1d6887a51cf30df54d693ac3d24421e10f12fa6722412ad4d6af7ece6c8a11eb91fb9996e2356d5a724144f1036af3769d02709cbc167e0997de0eae665d70c860a58f7a68fd59d6c33063cabfde94c119d82ea191a7a27e17ff1e8
+PK in G2 (compressed) = a17dd9eef82ba2577915d474e6b358304bf65c6051a20f2c954b46261eb364eb92d2f3e2765f882a8c1d1148f8422e3c068ab6b3bc1a89a320444caf093478d948e7322e12c91f96683a7c1dfd892239586d5f322177a03cdb811b416d7dc905
+Signature in G1 (compressed) = b7594257af08e4a5aad6cc2b45814cd6f886b4da323c531e96c65622fde6e9d8a288a9cac165d51c071593ddbf8aa200
+
+COUNT = 129
+IKM = 008102830485068708890a8b0c8d0e8f109112931495169718991a9b1c9d1e9f
+Salt = b55c6019523ecbb3c5582d84d9e2bd973c8507ad7c74c5c96c77749f9188e486
+Info = b5
+SK = 5156f5badc46e2f889e686c34d4437fb25dab732dea8871c6e1fbfb47f828a12
+PK in G1 (serialized) = 0400369d8c1fb3f6a2f5623fdc94fe101e898570943f81e0020aa1ce67babb9598eb6aa902a9f81b137bb502dcd08c5615bec222149c954c3eb7a30a893779ed5bb4ce41d4f0b93dbac93dacac85167449b1ca22b5942c569023d21b7d37c4e7
+PK in G1 (compressed) = a400369d8c1fb3f6a2f5623fdc94fe101e898570943f81e0020aa1ce67babb9598eb6aa902a9f81b137bb502dcd08c56
+Signature in G2 (compressed) = abfb26bb2c207d0d3ff8a199a28fe3d6f85367e0db6db1f3dc866fe12453af1f9e4bdb9836c559d3c437467b942d61c217dc5b85857ba7d628250f82744f865ef3109dac95a4806b454d0ad418ed7e855aebfc575006d2d103934c8f02141997
+PK in G2 (serialized) = 16ab7209137f7c59b19b0d7db4217402afcd16a0943b92e2d5e8e6c48712d352f14d30625d93b0a09d750fb75a841600125974cba49d05997e0a2de4b354324b0666c150f3967c6f951b81ad1c9f61d0d649b8d78176aaa12c722779e66b177a0cc9a32c5b28d236c387d7f4c40ad521a2dbd0af15e85f477e3ea679ea979cf10cdb31c7c258b79fd009e180e3db6c3e166f01e6484d82306dbe6c8b7b8f5dd090e4c137035c6d160c0bb93bf9e56c9f49731423accf824e2b24bc15179393e7
+PK in G2 (compressed) = 96ab7209137f7c59b19b0d7db4217402afcd16a0943b92e2d5e8e6c48712d352f14d30625d93b0a09d750fb75a841600125974cba49d05997e0a2de4b354324b0666c150f3967c6f951b81ad1c9f61d0d649b8d78176aaa12c722779e66b177a
+Signature in G1 (compressed) = aa8aeb4237384d19f6acaf66c64b6bab949e516a1dbff03f8c0fb457baab6795309b7d837392edf93fd8235bcc37e209
+
+COUNT = 130
+IKM = 00820486088a0c8e10921496189a1c9e20a224a628aa2cae30b234b638ba3cbe
+Salt = a109038a02be6b49970c2f79ad0f63cfc4187c024d1c7bf2788a6ae45366c4f4
+Info = 
+SK = 61829a100bf46535078ffc4ca8fba681c755cfacaa04e8cfaa2e10d03085e4cd
+PK in G1 (serialized) = 04b2bd2d8ed36eb2e20b5f67e3370470a0a0d313ca49211029fea451846871afba973e2cd06b5580e42bc0f6df950d4314ae27c2b558b18bdf963dfcaf07c467da710a17ddd7b93c4f6dbed97e990f9b837ba0a1bba0dc1ea64c5f490fd505c9
+PK in G1 (compressed) = a4b2bd2d8ed36eb2e20b5f67e3370470a0a0d313ca49211029fea451846871afba973e2cd06b5580e42bc0f6df950d43
+Signature in G2 (compressed) = ae5ab26e930bd050488be8515feef70b4988742c9cffcdee8b0ad6036db584e1ca7fbf022a6dba579bc402c7eb4149030521c238d9e6226906b6ba8dc0e940586d8983c1fb7e9f15038dec137fe0ff69eb99f9cc3d863b7d366ef60b57903c39
+PK in G2 (serialized) = 04beb66496cd417ed2e873a38fa9036542dbf1e843e61849ea4ee64e4e4fe7969e5f7ef58896ffd5bee643f01b1185a107c887c589fdf6a39cb3258d6d9a2dc82834a28c800c316ffa01facf1f28c27fd9ff44a5610aadbdee0656becedb119b12448f12849d9ba754232c080e313e663d644001ed166df842fec76161aa67aaea8df5537a80d7c134c9000ac84477e5188693be6f0d0020e5e539eefe092a13eede1f4a7793bf4bf7dff47ecc33ede945aadc7ce4c1a25ee7a3bdbb07c9c066
+PK in G2 (compressed) = a4beb66496cd417ed2e873a38fa9036542dbf1e843e61849ea4ee64e4e4fe7969e5f7ef58896ffd5bee643f01b1185a107c887c589fdf6a39cb3258d6d9a2dc82834a28c800c316ffa01facf1f28c27fd9ff44a5610aadbdee0656becedb119b
+Signature in G1 (compressed) = 880d3a3fbcb0c3953b546204a8d109987603a18d4c79e140ff1abae804aa8430001d442e566d9eef8bfdc0f3cb19ae65
+
+COUNT = 131
+IKM = 008306890c8f1295189b1ea124a72aad30b336b93cbf42c548cb4ed154d75add
+Salt = 5a7cb05f012a3f34e06468b4f71a83c4cd728845afec602ff3bbf4c0e200c301
+Info = 5a7cb0
+SK = 712b3a8eb608e49b4404953695410a28f038b8bd9f196b968d82fb90aac5b58c
+PK in G1 (serialized) = 0366ad36d295b8ded1e687aa20e14e067e5f71dc55897fecf2a00e8124df271a17730aa5ab862b7dc7fb51c60d9b2b5b15eb556a6030d07716cbb857a7e25a28a20b01c21987f738f327ddb7ea016168d08ec0169806d3ed2cda56a513798daf
+PK in G1 (compressed) = a366ad36d295b8ded1e687aa20e14e067e5f71dc55897fecf2a00e8124df271a17730aa5ab862b7dc7fb51c60d9b2b5b
+Signature in G2 (compressed) = aaa296b2b92bad411829a7741a0bcc4557f49a813f6d632a37dc161273b0e9de450550f1295e20fb6e7832a68ca2227f122a281bdd55ffd1db987c3f9f460f0da7416b81e9e603d046eafd85f36a851292affe225b1ac18a470daa166e528ebb
+PK in G2 (serialized) = 12c501214d58353a9aa44c4017860ef703233caceab4835dbfdd46055cd8b84a7e23bc02d195b8d63d42cf9cbe889465186a7bf6bec4b55a1402cfde5505cc30ebed5e2f86aef7d16795ba1394c08e04a3814545900f40bedd7f1e295825f72902ac33c93dac0e17d6f5f9211b840d04e5703bce5c2fb3879c9ac92762509ab6702a53df6662f7e83dbe63e754663bc903b1c7f2f43ffbc0e0b2fbfd7d661f504faafa38b96785e7bc98e83b31574656d30817536bd19e20d5f13640573e7797
+PK in G2 (compressed) = 92c501214d58353a9aa44c4017860ef703233caceab4835dbfdd46055cd8b84a7e23bc02d195b8d63d42cf9cbe889465186a7bf6bec4b55a1402cfde5505cc30ebed5e2f86aef7d16795ba1394c08e04a3814545900f40bedd7f1e295825f729
+Signature in G1 (compressed) = 8aee3dc68f4911a23b23358dda9bef39812cbb2aa05bd1dd990c28bbdacaf544250bd7b47579c8d17be00710c3179a32
+
+COUNT = 132
+IKM = 0084088c1094189c20a428ac30b438bc40c448cc50d458dc60e468ec70f478fc
+Salt = c8812dcbc8dafa6d290987899d299be50b09c4b30fe2358ae01131a0a90a8658
+Info = 
+SK = 1f8b79a221bdb3c7349006570361ae84f6abc8810557e00b67a3978786356dda
+PK in G1 (serialized) = 016ab4b08ef1e4bbb8399e14b32f85d39cec1ab83e7cffa446b9db153f12df4f2d6c035366d683327dd8622af04517540922ea65c4efc34ce7a14d20b1a519ec1816bf7db3d1f5b0a2abed93be4ba20ce04ea2ad310b1a59db32efa6ad66687c
+PK in G1 (compressed) = 816ab4b08ef1e4bbb8399e14b32f85d39cec1ab83e7cffa446b9db153f12df4f2d6c035366d683327dd8622af0451754
+Signature in G2 (compressed) = a0365ee4a3c5130730b68d1890ef15d0cc597d7491db34f58b5610259bd13d656e0d91be83ab21607442099e797612b00c2df9d308dce3fb25385f7fe6f251025475d71030304d29857142ff4c35d66c12cecf7ab4c982e4abf2767acb6da05f
+PK in G2 (serialized) = 0e1b6b14d41ab82668b4e24b0545db2d087a57d5842d95b6aed3087154368ec6eb6d007b9494adc323b0660236ee07cf05dff151714f222d3ae7b8e8b458211efd62132d3742ef13a09f541c28b4593043ba56b748dda3fafa61b8f8f2380bb60cdc0b14bdd38368f6b88e19c6207576e90138aceddfdf34c2ba4233f4d035f7ba93d531995b0ca97598996a70e1823108ebb98bd1620d8377a30bc34704842557656058858bd32da9c104ff1ecbf50f67e611deca18c471ff47b38e12443e7d
+PK in G2 (compressed) = 8e1b6b14d41ab82668b4e24b0545db2d087a57d5842d95b6aed3087154368ec6eb6d007b9494adc323b0660236ee07cf05dff151714f222d3ae7b8e8b458211efd62132d3742ef13a09f541c28b4593043ba56b748dda3fafa61b8f8f2380bb6
+Signature in G1 (compressed) = ad384dc19c1753bca808618378de683f0d68533da7879edbdf27b206da509ce323440042c7859b4c303121cbd5cae422
+
+COUNT = 133
+IKM = 00850a8f14991ea328ad32b73cc146cb50d55adf64e96ef378fd82078c11961b
+Salt = e6ee18fee4c24fee84ac30b465778089751c0bb39c79c282a8eddc2ec513ec47
+Info = e6ee18fee4
+SK = 11ca6b365aa99fdd23fe8aa6f97816530870db2ffa30999c279c2b0c8220e183
+PK in G1 (serialized) = 03c8c9ebdbab0f6aac06bd40a3f1a4478c94f4f1ca5bc925465fcf47e4de31e948a23a6a07c6b0722a4225ea3db5f68a00c116b71cb43b23bf17b7365dce5e333f01d2a709479d8bc1edc73333f161e2df97742bf960d0dde5fc27b09c5c307e
+PK in G1 (compressed) = 83c8c9ebdbab0f6aac06bd40a3f1a4478c94f4f1ca5bc925465fcf47e4de31e948a23a6a07c6b0722a4225ea3db5f68a
+Signature in G2 (compressed) = 968bc1976d417c8b16234844631c1c0a5c3c120fe7f9bd715e885af048bb50c427eb168711a536fd15641bcd9c289eb907220c6ad9b1209f720ed29109e3eb3f1d5a94f8b513a799347e533328281379ca4dc47e0de8fb128205965a4270eb92
+PK in G2 (serialized) = 0c6013202ba614ca30c06d54de6701a952ecc55bfba5c2869f5018cbc8f663db7d0719d4f580ca33d859d4191bb2d89908e5c3e4fe6bdeaf52c2d0801a4a371d18c4fbbce39b1986daf7d34bd3af75f8d8a40b346679626fdda7b1acbbac38e20573af88776155baf81bb6df3bf348aa8ea5e80c03251400d65c685e70866f8d35e296eb23f9faafd1d06c0bb396c8d0133b15273ac5821d121ffa3bcdb107d90e5d3d399a938da39aa8506c47042da99c4e5fea0f86c3417aabc784cf41818c
+PK in G2 (compressed) = 8c6013202ba614ca30c06d54de6701a952ecc55bfba5c2869f5018cbc8f663db7d0719d4f580ca33d859d4191bb2d89908e5c3e4fe6bdeaf52c2d0801a4a371d18c4fbbce39b1986daf7d34bd3af75f8d8a40b346679626fdda7b1acbbac38e2
+Signature in G1 (compressed) = af5843d3646a02cac7bce081fcb95cb27e5ee436e3ac32cc7c7263ae6bec38ffdc8a9440c9d1e533f2dad465a554fd67
+
+COUNT = 134
+IKM = 00860c92189e24aa30b63cc248ce54da60e66cf278fe840a90169c22a82eb43a
+Salt = c254ff607b8d94f9ec1121b97d885fd5f2613e0b8d9845c903da228e8d0ce5ea
+Info = 
+SK = 44b9615e7db6ed77214539e6684536958816b40fd5eb7b026177b15040da0e7f
+PK in G1 (serialized) = 04c5698e0805cbdbde64555ba8593ce9fe549ff4d1bc15797f30b2590f0842159ebc5b67303cd8009161ecdc3acf22d3138e6fa3de2ffc0cd64459d67b9eef1f1a0e3a1d0cd539250ed285691d4e2df50513a1ae541b48409fdcd3e59b12c18f
+PK in G1 (compressed) = a4c5698e0805cbdbde64555ba8593ce9fe549ff4d1bc15797f30b2590f0842159ebc5b67303cd8009161ecdc3acf22d3
+Signature in G2 (compressed) = 83cf189735f93a8c93dc2160a8791e50fd54709877a9f122f259c0d4fc41dc1ef629866934feeeac04821adfabefca16064e6ff9789db78a9371c3bf6d78fceab638308de0113c7526d5614acf689f6d13eb9865bb89813e5608c4243c7b69be
+PK in G2 (serialized) = 03bcdee39da17f93abc46b75aa6c4609e6e6fb1641ad2c61bef5741bd43218f31544a004a9e1367d258b5a4451890eb0057ce8430ca91ecd3aefedb660a8f9b5ec1b34bf9f60773117253200cae85e440f0a32a2beab83e186106c3a50c09d1508a4708df541a9a4bb46757cb746f3f9ff64e2f2662aeaa2d2488a9be677d9102f1b512f76e2d18ebfe8c81f2581a5e111e8de2e02fa81034443665d05be2f595693870f16718fea8febc9fe7dc2c39d754cc3e55bc59955dd2f6849d2081da0
+PK in G2 (compressed) = 83bcdee39da17f93abc46b75aa6c4609e6e6fb1641ad2c61bef5741bd43218f31544a004a9e1367d258b5a4451890eb0057ce8430ca91ecd3aefedb660a8f9b5ec1b34bf9f60773117253200cae85e440f0a32a2beab83e186106c3a50c09d15
+Signature in G1 (compressed) = 9335f61cebc7d06b3fc4b98fb4805cc8f0b266aaeae5404672609c9e7bf5d0a331e66ebbeba8d0daaa503018b0ea4195
+
+COUNT = 135
+IKM = 00870e951ca32ab138bf46cd54db62e970f77e058c139a21a82fb63dc44bd259
+Salt = 88ddac02d5ed579c3b513b63c78a53bcf723aa6cb82a25ae905f32ad6fb681fc
+Info = 88ddac02d5ed57
+SK = 2f7402fcb36f6e6853dd3b678b366d910caea8cb732043eda97b66998dabb834
+PK in G1 (serialized) = 02abbb315b7166d6d9e35c38ee68e904acf2ca4b70bcb93154f74314c361286b829f72b4ddca1a19b7af0dfb34d4a5850e12f49b81ea830ed6daf7ef85aeb79c12936ef426ad54c9974c936e29c17b68236f0acdb97efdbf7bcf5524e2412751
+PK in G1 (compressed) = a2abbb315b7166d6d9e35c38ee68e904acf2ca4b70bcb93154f74314c361286b829f72b4ddca1a19b7af0dfb34d4a585
+Signature in G2 (compressed) = b58a395be60fd3bae3cad99432b8d4326e2a140211248ad55dab081be641f02d7d1588775d13a52c063012bc32c78287150240aefea05d494840d863bafeeb7e10b3949df8e2a3794f10545b228d11ed0104a97117326faac93075a7dada33e1
+PK in G2 (serialized) = 0ce9bd8a219cdbf2993998bac0b9ff59da54969ce81ddd0146d3ceb5ab8447e577f718c1a8552ac59ae047be251681580ea4ef295605e46dd40ca71ac244fa46f34b3823ef6b5a19f396e9336588c0853c3324c5f87e3d4bb408f281d568ddf4116de8fab623e7bca2e49008fb5caf272b30ef876654ea2e7899c2b3a6a46685079d8f08a8e17a69d4e83353284e1bd700e3fe2494205456251c1b9ac200fdb2eae98d6b536cc57d42950d8cfc4c979a65a0d57eb6d670b00c7beeac75170c99
+PK in G2 (compressed) = ace9bd8a219cdbf2993998bac0b9ff59da54969ce81ddd0146d3ceb5ab8447e577f718c1a8552ac59ae047be251681580ea4ef295605e46dd40ca71ac244fa46f34b3823ef6b5a19f396e9336588c0853c3324c5f87e3d4bb408f281d568ddf4
+Signature in G1 (compressed) = b226602b204e8e9764a538601562e436b517adc974db40e50a27975a0cacf7db9e9a1614986bea3d2098f7ddd565eb61
+
+COUNT = 136
+IKM = 0088109820a830b840c850d860e870f880089018a028b038c048d058e068f078
+Salt = 2075405e66a7e6f963204a614837d5a31cb501d0503da995b6a6ddd33ea137d5
+Info = 
+SK = 5343a04902d6955f8339e1c940fea7a6c82ee9e6f1fddad8a79726b5f066edcc
+PK in G1 (serialized) = 196654b8d8470da284d0fed6794d9375eff7c84293a43917e4695df6c9982081dfed52ca2d912fab2aeff0e6cb4a14e6192f753842079bd3e739686381a53436b44bb729261afec0ffdd30f1711a62fd107f7cec27fb4cd3e3692d25c69923ce
+PK in G1 (compressed) = b96654b8d8470da284d0fed6794d9375eff7c84293a43917e4695df6c9982081dfed52ca2d912fab2aeff0e6cb4a14e6
+Signature in G2 (compressed) = b4d736ab35afefb3b9a89e649dfb9e63fc68070f53b26d5c8ad31534607f8743f893c666e212bacc32f96a17aad8bae50d8a807ced4065d01bc955d854791508486956c9888140380d4d5023d9733af14853e19efc9b3d8a4e6971ecc264edcf
+PK in G2 (serialized) = 17228e8387cb2fc6d3303ad846ff4db59d74af71a01da3c24cdb2348b15a2ef9a6d1bbed722539f276e0c01b5d028ce617f53bf71a86715cbdb7347b54cd8ff474155857e90e68a8df4dc4be8fbe321feb4c0a51d294a2904579be5556aa7a0b0939f41a8cb584b765001597d77f47183413ddd92035832193e5a84dcceb9c6e66b8f6daa8068cd7a7a478413a5308ce034839266596b02e663818a488392f58478e6cc6580434f0e2cac59456ce25c5c45e5a70e00fd644e28753d0fa8603fc
+PK in G2 (compressed) = 97228e8387cb2fc6d3303ad846ff4db59d74af71a01da3c24cdb2348b15a2ef9a6d1bbed722539f276e0c01b5d028ce617f53bf71a86715cbdb7347b54cd8ff474155857e90e68a8df4dc4be8fbe321feb4c0a51d294a2904579be5556aa7a0b
+Signature in G1 (compressed) = 8a48f6937b1d5763656cdd3a9aad08aa14d53c0cb4c1348a0847325ff8e77e84e7d7c1f460117577a5e8a13817eac906
+
+COUNT = 137
+IKM = 0089129b24ad36bf48d15ae36cf57e079019a22bb43dc64fd861ea73fc850e97
+Salt = 5e92315927510e96b895d47ff42130ee228419b698242d1ab483f039444b20da
+Info = 5e92315927510e96b8
+SK = 199d12189cfa59c196451050185cd835e06bc5b382dd9cc006b208b67b742135
+PK in G1 (serialized) = 13b7e9d4cb84af09424707d7329bea85d1122ddb0f3cd94f4060ff0cb467e4d61f68a475971740dcca6317fa3d5727a0174764ce46cfd21a88e452356cd28518c7d8733e1ac6484fada715d6e372a8a567181b0a81e7fd7aa6122aa0bbe8b59d
+PK in G1 (compressed) = b3b7e9d4cb84af09424707d7329bea85d1122ddb0f3cd94f4060ff0cb467e4d61f68a475971740dcca6317fa3d5727a0
+Signature in G2 (compressed) = b9e506a405d81645aa3385b730bb678e6cf17a14d6548c4c88ddbd8d83218ac3c1c94af3e67420ab5abe90765d044387031f09add7985fa5c8c5a3a12b8420a662f83c8205b824bc8dbb63763f84eea78e96929a827d31df8980fd37f08fb915
+PK in G2 (serialized) = 0d0720fe0cbe0fa9bf00725368244b3b6d1e7a34fd9bed087abdbf57c0553d749065f061e7efead1b76eca50f38117a619d35a222a26e5adaf047c6f188f827c36e84c78bf34bf283084652eda42a04d6f3121bbc75bbd10d5a72ded65e5e5e212039d8cf6bcf635fb1972879e9434b536dd2c581acba471ef5a50bf911d0ca6702b0d122428b08f5e8b83c01d3d907a0a88d8c8b6603b61cfc0bb6f6efd2b631e4b0164a6548e7139eb135cff7ad84c3d09f7184da8fc51d616333f9d72b207
+PK in G2 (compressed) = ad0720fe0cbe0fa9bf00725368244b3b6d1e7a34fd9bed087abdbf57c0553d749065f061e7efead1b76eca50f38117a619d35a222a26e5adaf047c6f188f827c36e84c78bf34bf283084652eda42a04d6f3121bbc75bbd10d5a72ded65e5e5e2
+Signature in G1 (compressed) = ab46e50693f123f45f2a68b15d86a96d45bbba141c6c02da1d7f4634fcbca8641b90aa4748a06964387d5c8675d7c7c7
+
+COUNT = 138
+IKM = 008a149e28b23cc650da64ee78028c16a02ab43ec852dc66f07a048e18a22cb6
+Salt = 4722fe58a781ddadbc843a0e98a5d33718952d28216ecedb3f733a887f7d1ab1
+Info = 
+SK = 589c36f3f7554a03a9594e0d7a97f5b7668b927657588c541d3b494047049079
+PK in G1 (serialized) = 0cf9fb644c0ef50d177a315aaa5c34e8b99eae0f6173da8dd1f6b5526298ade8a3276232ee868c77b3f1e2541b0582e51559762691bfbe905ae281f6afea6033124d775aa6d42bb3ac54712fb2aaadd8eae0c8cfafa5172c0e0d8d77cf100391
+PK in G1 (compressed) = acf9fb644c0ef50d177a315aaa5c34e8b99eae0f6173da8dd1f6b5526298ade8a3276232ee868c77b3f1e2541b0582e5
+Signature in G2 (compressed) = 8b503a0df48c5d933c9d44842ffa45dda63c742fdc6bb9f5d075c8f9305779d2fba8856f2c90fe4869949bd571b41c8b0c75c314d2bbc4a52cee07c31f9e3ffb44cbfb1eb99b97f9dfaf03cb90a6e7006c0e2c4f64cd2f342e2494d0274a4b0b
+PK in G2 (serialized) = 12cc36acc51b96b50f8b1407b13b8b4dc0b29b01f94e1598a8671156851c688d8e4e1e9182a1f1b06e4d6d5e5886ad6318c6f88a53ae1f83a6049f4e336b13a300e829a7594d251ffecc34efa73333cfe59f71d5e47696a83c0ab7b4d1a00b530d335f400892f3b8e1da76e919da65edfdd72659cf384c2d3a34a0b0565226a267ee804710c1e79501a22d14edbfd233057035a262d7a27985fcc1f07cfd4e79cabaef9152a2bc3723a8b737e36601a86332721cf406e78805a335e5834493d0
+PK in G2 (compressed) = b2cc36acc51b96b50f8b1407b13b8b4dc0b29b01f94e1598a8671156851c688d8e4e1e9182a1f1b06e4d6d5e5886ad6318c6f88a53ae1f83a6049f4e336b13a300e829a7594d251ffecc34efa73333cfe59f71d5e47696a83c0ab7b4d1a00b53
+Signature in G1 (compressed) = 81452cbd93cfc5bd5f107d9e3929e73f713f311c354ef8acd315d1867d59c9a53296a9f76c52b47ee489199551ac7b14
+
+COUNT = 139
+IKM = 008b16a12cb742cd58e36ef9840f9a25b03bc651dc67f27d08931ea934bf4ad5
+Salt = 9e25fbf342948bc63a0d762bb7dec5e383357fa04b729ab98a8a8427de8ea85c
+Info = 9e25fbf342948bc63a0d76
+SK = 17015c0a07b8bb74ce2108d403ba4cd85f91704d5b770c19b1ecfc25bcf209d4
+PK in G1 (serialized) = 0062a00437af7fab9c9268bd00847721d9f0f07b4af2141762baaa4d1bcfb8503b9d0a8ec3fa6c0b7d159b4fb1d7823917f5faf658389ed9b4cf459f3d134a4ef9dbda92eabf0011fe2bbeca1d405036d0a556ed3c6ca0be47d814b3e56307f0
+PK in G1 (compressed) = a062a00437af7fab9c9268bd00847721d9f0f07b4af2141762baaa4d1bcfb8503b9d0a8ec3fa6c0b7d159b4fb1d78239
+Signature in G2 (compressed) = b8f00107563b044a0b9314233e9b56b947fbca0da6232ab2b44b68e870e8e19d1832b50aa9b187181b01f9491adf41f314ef2ba8f0bb4548b54f4b9bbfc48a78838cc686a050d68a5316cb578cb6e34d1d8cfda8e2f47151040aee7198b1ba92
+PK in G2 (serialized) = 03d045e8f598de0676ad5d0bd57dcc76603a5d130fbbb222cab5f096e90f7c4c742321043ff4fc92ab3dd88e3a209b2d135c0a396056b12b0db8292ddb12d11a1697291e742466f1908defcfc85b3495e142f303ab1f6bb98fd1ecf149e70ed6090b3779dc12afbd358549325adafce434e1aaa3342934fa71f167eaf46096fd4390c03f8527f6ed1a7e049ef5421bd81133fbfa873b94a5aba2a57f89a8f1d5cf4d3214bed62078d0e774b6147ae05ffeefd5510f37f74a82c3530cfe3900de
+PK in G2 (compressed) = 83d045e8f598de0676ad5d0bd57dcc76603a5d130fbbb222cab5f096e90f7c4c742321043ff4fc92ab3dd88e3a209b2d135c0a396056b12b0db8292ddb12d11a1697291e742466f1908defcfc85b3495e142f303ab1f6bb98fd1ecf149e70ed6
+Signature in G1 (compressed) = b3ab7136d25097ea73b381cce22ee538a2b31343ce7b73bf9b20bb3707718f4de4f34e426986e5377d9dce5345adf0a8
+
+COUNT = 140
+IKM = 008c18a430bc48d460ec7804901ca834c04cd864f07c089420ac38c450dc68f4
+Salt = 7528166fc2befc6c51d5154b17d476546c674a41b0d022dfc9b98f190250fcd1
+Info = 
+SK = 40e1c1469e5677073741ba79f521ba40cf314d588292feb8d77325cbbca55906
+PK in G1 (serialized) = 0adbe380cbb24a705d960cca146bf7a71adef59dc3252b06a802ad7cfc43d2c6d7d209342175ac7d608788b697f7a6010397a91eff7c0c42ded689ec65f5afcd28326d78521093d5022dea10e4c299895bb2e6f0f51f1e8567eb99f2f7cb9c0f
+PK in G1 (compressed) = 8adbe380cbb24a705d960cca146bf7a71adef59dc3252b06a802ad7cfc43d2c6d7d209342175ac7d608788b697f7a601
+Signature in G2 (compressed) = b560d987ff47c2e13d591f4431c28fe20089833dd4bc8e1fcd36e5a04063aa1a5286e7adab80899766ab137a54d7b3bd065c3a8494c81bc34c808056feb1e017a6c771879cae492986ae3949296ae647de018ed695b1b27050a5a8c1589bdeee
+PK in G2 (serialized) = 0e5d93c0577d850789075f2f2398fd765f0ce2a288a11f7833bb9bc1bd999ab0552849261af44b21ef0f5774a5aaec8603902140528d0a2d829a2bbb0d56d1c0784f9951c9863bca69459e686d6e60916cb0bd35879331c458b2099d3671921e0246eb2e9b8a667765c4f5ccc2c6a8b8e562d57521b0aed9306a8aefaf42c056a8e8c18ba061bba69dac65edffa89f110c0ce083185b3e3c3d9ebe28a35fa4b117fb33b57f8e70655b0ac182e8effa00b9ec62e37a6d72270dbb5bb076d6281c
+PK in G2 (compressed) = 8e5d93c0577d850789075f2f2398fd765f0ce2a288a11f7833bb9bc1bd999ab0552849261af44b21ef0f5774a5aaec8603902140528d0a2d829a2bbb0d56d1c0784f9951c9863bca69459e686d6e60916cb0bd35879331c458b2099d3671921e
+Signature in G1 (compressed) = 8ebd29f55243bd762e8790020b365485d4ddcf7ecbebdd71a9464ee01bbd9c38e43111e588d2ec920a0524c48b37309b
+
+COUNT = 141
+IKM = 008d1aa734c14edb68f5820f9c29b643d05dea7704911eab38c552df6cf98613
+Salt = eaaafc1ebfcebcacc33180b2ee580cf1da88e27c1ef699f909d09a4e94592e0e
+Info = eaaafc1ebfcebcacc33180b2ee
+SK = 2c6ee990830cbf657bfad9615c0321a74ef328c057aff028e82bafd883fe3777
+PK in G1 (serialized) = 18569c4b932c907148b394a41df7e932cab753e4a2ae28e306e17f5b452a802e4b0f0149491827a4a120ff7ab0f2880e0924dc90b6dff7cbfc2b236e012c9950da758ea85140fdf5cfa44c2b5cff730e8df02d7d745ba4f6a7fe51d5c31617b0
+PK in G1 (compressed) = 98569c4b932c907148b394a41df7e932cab753e4a2ae28e306e17f5b452a802e4b0f0149491827a4a120ff7ab0f2880e
+Signature in G2 (compressed) = b6d6509bf8ea823f2bccdc938b43add09ac4a4508e64900c150e2a8e85afb21fe737306c1505435a960ff88f0cc6aa7811fba35355330615aaf5b220414dc9cab517b8668f9e4644a8ca02ddef9014224183508e753983a556969143836890ce
+PK in G2 (serialized) = 18d63b42d0e3f38d2277739c1626d1b43aa5d3585ee5be70f7c12025a85bfc36c0036ba00f62dc3873c6738256545f91129c477297afa40efc8024c54e6d53c51e7e0a5637d23274a898f2d1e519536e9f8346df9951583bf88b02a6e21cd7d5079a92d228d5f211f069dc8a78a7c0051969f3afa4064521731eebbe786a7b02f2bb7ad80b9f2f59e91e148702aeee3b163c3aefdeac0324a90a6cdf858a0cf2e19dbba083e79bec9d0d68ab46f27911237fb544c2b4d8e2c5daaf3b6b7a05fd
+PK in G2 (compressed) = 98d63b42d0e3f38d2277739c1626d1b43aa5d3585ee5be70f7c12025a85bfc36c0036ba00f62dc3873c6738256545f91129c477297afa40efc8024c54e6d53c51e7e0a5637d23274a898f2d1e519536e9f8346df9951583bf88b02a6e21cd7d5
+Signature in G1 (compressed) = 984cc21f5e2e08bc02d61804f9a6907757403651e1384be0292a36d73a0221e62baa6dc201f5a36af01111b427e5bd76
+
+COUNT = 142
+IKM = 008e1caa38c654e270fe8c1aa836c452e06efc8a18a634c250de6cfa8816a432
+Salt = 2c120613d75cd6a86fb1f153783a03308d22bf386fcc303906b16a366de36b27
+Info = 
+SK = 31cd2b7c335997d3322a60b2776a8940b75e7b7198804a58686e4ec3a67bcd84
+PK in G1 (serialized) = 0b79a9175ea5af1eb33cdf6e93585959fd6e417e67ee3a6e2433247e0bfcbf1aae6537023a2e83b55a836dc8f23ba546026e376936f70b7f68af15a93ce478c5908f4ca6bcb341e8240604d6e70c868730e6a00f372174aef20fde0060824c1e
+PK in G1 (compressed) = 8b79a9175ea5af1eb33cdf6e93585959fd6e417e67ee3a6e2433247e0bfcbf1aae6537023a2e83b55a836dc8f23ba546
+Signature in G2 (compressed) = b4cf71be29cd467734f9710e446ba8e08f17035acffe71d96df7aab65dcb4ae77957479216b957c0b911f186da95820d02f85aae0d7dbcca56ffe645afd2c70a1d41c02db83c47737c7ea338f09404d650d48633fdc4137411bf2aeb18673be6
+PK in G2 (serialized) = 09133bbfd17c9e6aca9b1fa0654c5d6cec294bbe8d00b067456fb2270dafff57440e56d1cdf81e314be4d01ced264b2c01fcbf5aa3c5dc5c7a9b6d8ddf30ea04525e204cbb8d49e3dc109266f4cecc34da1744d0434d3104acca22516fdf6e51158dbb7f571f89dcf276ffe24ca848bc82b7494140a31a560c1eae01e2d177dac132b893b5047de62cec4d1afcbeae6f11f7c7d3d6c54d49ac9f8efe3b2b7974c613d8ae9d9efa881b55f12fd49cc9f90d9ee4ef061f32944ec03049fc53d9b4
+PK in G2 (compressed) = a9133bbfd17c9e6aca9b1fa0654c5d6cec294bbe8d00b067456fb2270dafff57440e56d1cdf81e314be4d01ced264b2c01fcbf5aa3c5dc5c7a9b6d8ddf30ea04525e204cbb8d49e3dc109266f4cecc34da1744d0434d3104acca22516fdf6e51
+Signature in G1 (compressed) = a29cde343bcc141d3380da873f1b43b9e75f800cae298c19710ce3b37b15f1c0d208cbb101fdd6bd777a4e601fb4eff6
+
+COUNT = 143
+IKM = 008f1ead3ccb5ae978079625b443d261f07f0e9d2cbb4ad968f78615a433c251
+Salt = 7c113fbf25c535ecc69847f1c052b8e81437b719645f6d140181596f77ca1e9c
+Info = 7c113fbf25c535ecc69847f1c052b8
+SK = 424d536ed3bcf0b132b4f5547eae3df3e2ec02addcacbd0fabefaa490bec7843
+PK in G1 (serialized) = 00007e6aea8ed3c52a0b4933fbbb2dbb7b24e2cfc9a385118da220145533945071eeea113f3ebcd97f276aace4ded64906dc09dd77a4accdfe9d132f8bec37a9676b2ec1b5aa6a29ed3a4126a638b3bee958f2738845b87e4278aeb22a440d8c
+PK in G1 (compressed) = 80007e6aea8ed3c52a0b4933fbbb2dbb7b24e2cfc9a385118da220145533945071eeea113f3ebcd97f276aace4ded649
+Signature in G2 (compressed) = a9164847e5369648c4d520176a56c3b72d632074e60058e9710dff508f7b6420dd62415daa3926b20005126cfd30500504d2b31f4063c7f1cb384aa88c320be8ae03f01b0f2a5e4e431cbb86dc28588c3f262f9a9c2a99781c530c143969e427
+PK in G2 (serialized) = 1800d290619bde3f3dbce648213b704a74c5ff09293bf4d917368afbe829d71c1e632d8aa46f14ee9018908ec0b96e8600abe62ba199ed22db405632820c4d1dbd1cf25abdbac801d5f93a6ee970fee39e9357cdf611e197fe0182d0a3498dec053ca02c0a268143b7a591070e9a7492f8f076cc92326d50adee6ba81eed870318aa0bdb2c197698908b7bcfd0afed7c07c392b318f8725c4ba0a876adbd7466d07ccf0e7bf34afdb668e2e7b0e03aea31c2b8ea5f1b4ce5a18ee7da567d9e73
+PK in G2 (compressed) = 9800d290619bde3f3dbce648213b704a74c5ff09293bf4d917368afbe829d71c1e632d8aa46f14ee9018908ec0b96e8600abe62ba199ed22db405632820c4d1dbd1cf25abdbac801d5f93a6ee970fee39e9357cdf611e197fe0182d0a3498dec
+Signature in G1 (compressed) = af56487804b9dba9da2ac2a5e26656af7371fbe5ec773584b9767f9b744468dc0863e011f8af55b000e1c7d38670d493
+
+COUNT = 144
+IKM = 009020b040d060f08010a030c050e070009020b040d060f08010a030c050e070
+Salt = 6ef68745ff0f5366eb8c41061e560ee5f0229f751491a8bc928e8102da0003d5
+Info = 
+SK = 1456d696594bbe8aa81696bc7efe62bfa2dfa58f2419c2c30f0ee91bff2a1448
+PK in G1 (serialized) = 15a1db9392eede38ff29a0f73bd851df8facc31e28c74280e67ae6a9e8d9c21740e739dc56f8cc537dee828eea85bc6c1727b8ec1606e724fa61fdc11117e1c683f3bad2c83438354d78c452245d93dded253efb240a6ea4b38a2eabf31dac08
+PK in G1 (compressed) = b5a1db9392eede38ff29a0f73bd851df8facc31e28c74280e67ae6a9e8d9c21740e739dc56f8cc537dee828eea85bc6c
+Signature in G2 (compressed) = abd964571247feb8a42ddd65e34b5f29a6505fe4237748d34ff0c56ae16230f69946c30dc0ec97e67a33908d4e8469131274558d16ffd5cc07376daca615eb7a4c38ce4c81c72f4a0e9950e6bc1f3870728a542e4b8693804c8b2becda416235
+PK in G2 (serialized) = 055e5cdf72b6d9d48c5282c2f5ce4e5126f364f18ce7792d00fda9877a0c31dacd38460dcba830af1ba3f471801e947b111f19b1fec8fabfcb9cb1d4625bcb47b46decdf59a172bea221381240b80a83e79225d174a3e2cded9e9d671eb7e484099b3d8ab4613847e7fef49422ff1499700999a580efffad52e7b8c186bb3aa5efedcdeda9a2b8e1dc445cba80e80064199bc8c458a4767d0b9d197cfa87014f21dfce323134bbc06b87e75cb5aebd70a314b18d614193abd17bc4a5b4ab6c3c
+PK in G2 (compressed) = 855e5cdf72b6d9d48c5282c2f5ce4e5126f364f18ce7792d00fda9877a0c31dacd38460dcba830af1ba3f471801e947b111f19b1fec8fabfcb9cb1d4625bcb47b46decdf59a172bea221381240b80a83e79225d174a3e2cded9e9d671eb7e484
+Signature in G1 (compressed) = a4977844005025eed48c809ac24c717c91c0751930d795bf12badc314610b032ead941bec6094f689e96ad06eb6943c1
+
+COUNT = 145
+IKM = 009122b344d566f78819aa3bcc5dee7f10a132c354e576079829ba4bdc6dfe8f
+Salt = 83468519ad6bad34396032fb455da0238af49b0908d37043ad7ce485d5044e59
+Info = 83468519ad6bad34396032fb455da0238a
+SK = 2481a240437103cf1ab5151b5511a52aced923955f44bcda13953d075e714679
+PK in G1 (serialized) = 00d5d90c718cabd12273c402a91a9abb6474e6a0baba6c4c11902813afee63b4a6ece62e55319dbd1a8628179f1153d2112e0601d24bb9695faa178531fed329b4524a9615a72dce34ded8f0a262a245fd3206994fa8467ebbfbc2fa87db3d88
+PK in G1 (compressed) = a0d5d90c718cabd12273c402a91a9abb6474e6a0baba6c4c11902813afee63b4a6ece62e55319dbd1a8628179f1153d2
+Signature in G2 (compressed) = a41dff1a2eb105e45471d72cd6fe67fb22ce198b82cf9418b16ab26806911f5cd77a966ca87fbddc89ab80bcd7a3130913d7630dd3f876a64e9589e06a844a0b2d260e386dcaed352d35104414eb2326ab72800849ef8b7a927b707f9d104421
+PK in G2 (serialized) = 120ce65b3ca3635a1f67faff318f3af2e9776fc4b0f4599d1268b55da2101e8c9020b7343005bf0c7446f13ba034f4ef14b4e17addfc29248c580a8934898a7a8c76fc3d204d2fca195ea470b4a567babdd846abfcdf09ac29fd96036b5cbdfd139786296ddab2970a2107a262fd5ed9a1d722dd49d2125e080669b921e1936f87bc1f97ba81c82ffefa12bc33d09584002e74935c9cec234a4ae3ba8e5ad44e6f7cb8a899684346cf08779bd9c3b8bd54dd6441580c4160a8879ba25435392b
+PK in G2 (compressed) = b20ce65b3ca3635a1f67faff318f3af2e9776fc4b0f4599d1268b55da2101e8c9020b7343005bf0c7446f13ba034f4ef14b4e17addfc29248c580a8934898a7a8c76fc3d204d2fca195ea470b4a567babdd846abfcdf09ac29fd96036b5cbdfd
+Signature in G1 (compressed) = 8f2dfc34fb2037c8f419d2c5625e27bdf0f94db40422c365e874d57cdbf8af571743a09af78069e4ca2b87e116b259f2
+
+COUNT = 146
+IKM = 009224b648da6cfe9022b446d86afc8e20b244d668fa8c1eb042d466f88a1cae
+Salt = f0b382d92fa440428f8fddf59c156ff48635cd382063d5417f059429594c4ee4
+Info = 
+SK = 44271fb74946ad49d923e900aa584e0368aa61debdb98d319116e19e4b0e928b
+PK in G1 (serialized) = 19268ddadc6e9d174b5519ce252f7c1576183027ceca4db87a5394f5a95ea81e5d8c63b6dc7d4e75a5d57213c3a16b6d01c581cef4781f46f0f3b1ba695b69e75e145166966cd576e7c019a8c71f05dab5bcb727090463772cd02d57f4bad346
+PK in G1 (compressed) = 99268ddadc6e9d174b5519ce252f7c1576183027ceca4db87a5394f5a95ea81e5d8c63b6dc7d4e75a5d57213c3a16b6d
+Signature in G2 (compressed) = b3d1ac3c2a82de3cae1e50cd241d4b8c1bba199b9ad890606705cc679e74d29d89833153970cc76b307ac99fa8a69cfb0bcfc259221c77724639c234000006b9563266eccab49d7499c982aa247cc45104d62884ab9ba0fcdf33e61c596414ac
+PK in G2 (serialized) = 05e6e6731d1f74007c35827c1614fb9dd2e13d87e608d19f3d35249497d1995977be675238d9d1435864dfd86b2f0308102b1cd8a502e74ea5ef4f8ad85da8f91eee744ebca53def54dc3ef38467e29615de4b10d836463ac00e1eeb712cd0e40462b1f602a8115c92a1a4f733db9a63b19341a95d2ac4954b53950856a92016fa70530478bcd9f73b047be2f42fbc350ee5b3a90a7570077c063ec84a3659d3e53e2f2ce13753ae63ed89b200775f06485a34db0952a6e27ff1eaa76aa144ef
+PK in G2 (compressed) = 85e6e6731d1f74007c35827c1614fb9dd2e13d87e608d19f3d35249497d1995977be675238d9d1435864dfd86b2f0308102b1cd8a502e74ea5ef4f8ad85da8f91eee744ebca53def54dc3ef38467e29615de4b10d836463ac00e1eeb712cd0e4
+Signature in G1 (compressed) = afa7b58d2f4363954886eee5c02271461d4e1702c8401f6b8724b0be017344a1e257b3ba854125705ca8613e7c7846a3
+
+COUNT = 147
+IKM = 009326b94cdf7205982bbe51e4770a9d30c356e97c0fa235c85bee8114a73acd
+Salt = 348b763a87475b89215a8bbee61dcdbaf4491910a480fae2b8822fdd393e16d1
+Info = 348b763a87475b89215a8bbee61dcdbaf44919
+SK = 2d028153e66371ab190b236c162c1f27010557a3a85280df733cc80bee880563
+PK in G1 (serialized) = 08a6074bdf7fac642c3a18506b20dd1a4e8ba189e40a4943ff59fae46076b756953265d0fef5483591d56e720eafe0ac0bf4182331574e519f086de680d83cb9b299ca207920f9e11b13d65de1a55ca02e0d55d9b30841ceceda2614727eb0a5
+PK in G1 (compressed) = 88a6074bdf7fac642c3a18506b20dd1a4e8ba189e40a4943ff59fae46076b756953265d0fef5483591d56e720eafe0ac
+Signature in G2 (compressed) = b1ea2e817a587dff2473700f82e332e602b29f53e17a5fcac9a562011a9ac1f32bb1ecf7143dcd07460330fd72b535060c180fa6bb775d078973e26cbe25df1e0bf95c5f280d5fd54449c0b7949963dfabe44b7ab4646ce103dcdd4d68f51f8b
+PK in G2 (serialized) = 115f07efe2b6b3d040ccd0f66cfe4ea93b3cf06e7cd650ef7483c06584edd46daa5c98266d7776e7978e7c8dbd0103ec0985020310139703017f8e819746dc618acd0100d81c9980dcde6f91393e584e2f5f056793c3b333d6ce35da78616ed71002c68f4bf03b4c43baffb23fee2c37f86d3e0a32d4546779bb79eca153a10959b021e7bc3e5c7aa157f92c050e68180595316d5b0d17a2baba49dae34f4d0e7e3367b0124d44a0ba044ac4ed07a1cabe7e59d905057f1a2ee2a870d492726f
+PK in G2 (compressed) = b15f07efe2b6b3d040ccd0f66cfe4ea93b3cf06e7cd650ef7483c06584edd46daa5c98266d7776e7978e7c8dbd0103ec0985020310139703017f8e819746dc618acd0100d81c9980dcde6f91393e584e2f5f056793c3b333d6ce35da78616ed7
+Signature in G1 (compressed) = 8e4504022aabd6c81c9b9a695f347f0a9ad40ad9421898ae68eb77ccb737363d1f6f6052e03949230126809a2d5d63fc
+
+COUNT = 148
+IKM = 009428bc50e4780ca034c85cf08418ac40d468fc9024b84ce074089c30c458ec
+Salt = 93974745d7cae23f3355fdd42d37450a86c94c99bd941e298ab6ad7bc36382e0
+Info = 
+SK = 4f1d7911f217190532dba3335701b48d45bbb8a61a762f0109a40595477cccb8
+PK in G1 (serialized) = 049201355bceb7473ce063fce6599761178675395534f787b330bab05ff242c5b8b9c43a711f496380805a36c31fb9c7093c86dfdcb34cda8e081ee764dedc8a9da6580d4d7fc5f25847fdac4acba4f033e8e257389335629b45116e15503314
+PK in G1 (compressed) = 849201355bceb7473ce063fce6599761178675395534f787b330bab05ff242c5b8b9c43a711f496380805a36c31fb9c7
+Signature in G2 (compressed) = a112e713f644c32a3bb0691ba0a63e984adebc0012f6311532cf20704c1afffa27b30ad9910453ea4177c9269deb7325073d13e824dd0b64b9fdaec0a5deade474ccc2ed037888d521e3955a03daf2d9bfe06bee2a5e0175404793ae3ff37fd7
+PK in G2 (serialized) = 0682e7a7ef8a0a364044443c211460f5600b80fa1f642ae7851291a7cf93b646f5b6bcb402b69a06632037f9f1cb789915ea25ae1648f5221577085236d4244fdc2f57079b0775036a2e1293f00212dce057e1037e04e5f61999d7f8f15df12d1468af76765cab0ee2fb3564c9829f2e07d20927619202cf0452a49a7eba61419eee0d0b101149903d51cae7eff92d540b934c1e702bd2aec2785be32e26059ee700e5d7063961ad60fa26c05a06796c16a1453b9dfe91557c87d56a4b1d8e13
+PK in G2 (compressed) = a682e7a7ef8a0a364044443c211460f5600b80fa1f642ae7851291a7cf93b646f5b6bcb402b69a06632037f9f1cb789915ea25ae1648f5221577085236d4244fdc2f57079b0775036a2e1293f00212dce057e1037e04e5f61999d7f8f15df12d
+Signature in G1 (compressed) = a903bd7617b1bc0fde9c63d0d4afd97eea69333d6435c28be5d1f1e34eb99a260d51fd0e9a54bd50b4cc190fc40d0123
+
+COUNT = 149
+IKM = 00952abf54e97e13a83dd267fc9126bb50e57a0fa439ce63f88d22b74ce1760b
+Salt = dfb6b071106cb2a3a6c81f4cb19d4dc1b97633131292b58af0f3dea002f8b267
+Info = dfb6b071106cb2a3a6c81f4cb19d4dc1b976331312
+SK = 182465ec6a938c9cbf706bd69c6d0e2e70be5caab9f2a4c5d2e0a107dc99a4e0
+PK in G1 (serialized) = 0e48d32229a08aafec302a34fad3129d8d032f03bcf7fec626ca2ba5a22a78665f0cf21d4e814ccf5222fb783dcb2fdd1910a27f373342a4f5d2756236b06ccccb41decd136df11ae31b897a3fcfaadfd491de1c2b27cba71a08169bdb5ed846
+PK in G1 (compressed) = ae48d32229a08aafec302a34fad3129d8d032f03bcf7fec626ca2ba5a22a78665f0cf21d4e814ccf5222fb783dcb2fdd
+Signature in G2 (compressed) = af98d62bca074df5648a821a2c0deba88e9800782190a4b941c423bc650584f2db56fc570d26d43abacdb7e4935169d60aa42e7b0f0c2d7f04ae1072cf8de005e802697632bfa93dccb529a8582388cc6943626d3690acaca95d17bf6e841189
+PK in G2 (serialized) = 10bfeac2023cd8272dd9ca62a240b031aa88768d105955a60c7e1126af30a3820febda668f3594907426055b707f19d30576ae12c28adbb595d4f68dbaacc38578397b749eb0cd3e08ab58b06927b677cb227ca72a3fd0d35babd9b3d71dd59718d1340e52deb81904107175ec767c048424e11c13fad4e23f97d08af1ee11a54bfbdb3fe13f30d488deff84f402147d10d44ad2e7079328c269e2578d8367dc6c6971e57524b3e5b7600e2a739854127bcad6c3195d6d4af622750d8745d6c2
+PK in G2 (compressed) = b0bfeac2023cd8272dd9ca62a240b031aa88768d105955a60c7e1126af30a3820febda668f3594907426055b707f19d30576ae12c28adbb595d4f68dbaacc38578397b749eb0cd3e08ab58b06927b677cb227ca72a3fd0d35babd9b3d71dd597
+Signature in G1 (compressed) = abff605059d3eb29155118693609559c0af6132662c112148ab686804354d89ffc45d64901c91009bb03fd7ec91e9d13
+
+COUNT = 150
+IKM = 00962cc258ee841ab046dc72089e34ca60f68c22b84ee47a10a63cd268fe942a
+Salt = e037b232b5f4a6343bb7bdfed08675821b8506d2f4dd94e919790e523dfddd9d
+Info = 
+SK = 1a28c0cc62835fd12abfbc3108ccd149ac8faae614f0a34781a16f7e2cf707e7
+PK in G1 (serialized) = 091ae7c2fac05e994120698fb331d97ce1216976f3373df92da93e93df9c27c59c16d5d908cfbc5b75d72abf2b06c5d708b5002f1d3a1d9d9d4ea48d8d94a7276b967064fcd8415a6e5ecad2aeda3b84bf011e874e13665684be9e3bee7ddf37
+PK in G1 (compressed) = 891ae7c2fac05e994120698fb331d97ce1216976f3373df92da93e93df9c27c59c16d5d908cfbc5b75d72abf2b06c5d7
+Signature in G2 (compressed) = a408452cceaf03099e8837196ff05606aa35660fdc708c4819a530284d52a8fa8db163e163a56142945de3abcabb138d14a203b61c8f6a78dd1c8383e1dba520b303fb0b4eeeb13be53e103cf77876e5a8fda69b91a6eae0f1d376032c6140aa
+PK in G2 (serialized) = 03bc527e2c156498a83133554b84ba6ddaf7fa2aa7c5c86f2217126b25f88ae184d87b40409f11dd387872908180f66f02f0841c6d18e31a2622166c844da6075f1891eaefea9dd733ae42919e6df1c3c30c7d7fe965347663e25bdf2a7aa76815d9d168e6776d0d8fb399f8d4380418899c86b9ddb21046b5591b9f1bd7e307d93bc552e7084bd2181b37efda203b69089db85155ffaad4740e2c80b111a928dceafcf333e115bd035495681a0233d6f4528b9fae0bc9169c77ff2ee3170539
+PK in G2 (compressed) = a3bc527e2c156498a83133554b84ba6ddaf7fa2aa7c5c86f2217126b25f88ae184d87b40409f11dd387872908180f66f02f0841c6d18e31a2622166c844da6075f1891eaefea9dd733ae42919e6df1c3c30c7d7fe965347663e25bdf2a7aa768
+Signature in G1 (compressed) = b72f043bd829edf819522ecfe5c04b60ed09849579f5c21108c40631fb8b3aef4fa53d440d4946a20a42dd392651efb6
+
+COUNT = 151
+IKM = 00972ec55cf38a21b84fe67d14ab42d970079e35cc63fa9128bf56ed841bb249
+Salt = e9bc7bfd0096d52c9100fad3d040dfd2db1dd3bfd193b7d430183709287eae14
+Info = e9bc7bfd0096d52c9100fad3d040dfd2db1dd3bfd193b7
+SK = 28ab5818fa284b73194a8e1505e32a1f9b72f2535fe0a2deed945a1ef7be3798
+PK in G1 (serialized) = 12241d88492ddb4b2d99bbb1a8bf1f39d883132eb13aab345a160d9f29b0c898d7e284f24c61f13f6c084dab5a69aee20e657be02f73a94740a30428d37e696de3f5162e28ace26e42271b0b931d02e1d2923e1088f16cf22594be99e647b845
+PK in G1 (compressed) = b2241d88492ddb4b2d99bbb1a8bf1f39d883132eb13aab345a160d9f29b0c898d7e284f24c61f13f6c084dab5a69aee2
+Signature in G2 (compressed) = a99aad8b121d328f173b2164c2ca9bed00013bb6982aa5cf7be8a104055c442324f5bd048005978a7a3817105e7539ad0257e3dfec8eb0016505fb7dfeaf8bc3115e724feb1c44b50cc4c996464060053dada07cd487a27f66ddb02757370ff8
+PK in G2 (serialized) = 04b5500a6165190436424a4f0f58757a9e17cc73b5f70eccf09fd95078f3d23e2f8416bba22a3609d9397f40f5b306d80e3c1f744c86a5661d6da828b6a1f580a350c75334b0fea548770e8c5d49a32c39aafc23b444cf1f2cb8c7ff1265e1641201275398d4a5b2b9295f8515ce10c015765e54fb3e1843e878d14d1c0e786cc313d7f925a35b4da2038ae82b276c47166f11f9fa56b93663092def1d988ab11e555762af0a6930059915ec143597fcf8159609bbb0dfb23f14e0348364bbb2
+PK in G2 (compressed) = a4b5500a6165190436424a4f0f58757a9e17cc73b5f70eccf09fd95078f3d23e2f8416bba22a3609d9397f40f5b306d80e3c1f744c86a5661d6da828b6a1f580a350c75334b0fea548770e8c5d49a32c39aafc23b444cf1f2cb8c7ff1265e164
+Signature in G1 (compressed) = 8fbb5c23b90b26fd78c5cc780647c7ad6ea9359a25e32fa66aad25c5aace687640432e715588e6e33e4557bde43d16c3
+
+COUNT = 152
+IKM = 009830c860f89028c058f08820b850e88018b048e07810a840d87008a038d068
+Salt = d2113d71688813c40dd8930685e624ece281033f2dbf76be35032b1d324dfa72
+Info = 
+SK = 5951d731153ec580346fd156908458f9a4ae544fe50a6487a30f6ad662f75748
+PK in G1 (serialized) = 16de66ad1d9474cb0d98e6ac6a5611159845e0669a71eb25eef04db6833748e0d78ccc92a9de539cdef3a060dc0be34102f95feee460d96d601227b7680ae438e426551828de5891d702d7c76e9666d12ac042b44b3ade5741ea136f65a4a92a
+PK in G1 (compressed) = 96de66ad1d9474cb0d98e6ac6a5611159845e0669a71eb25eef04db6833748e0d78ccc92a9de539cdef3a060dc0be341
+Signature in G2 (compressed) = a106f874676778550b1eb30bd3d87e29c68aadde188f9deeba0d8f13eb63c09d4a3a8612f5b8346a784edf1e9a544c0b19a8d88a2d566d00093e38500f784dca40cb99163cb060581143c9af1840dd6c76255cccedb6d92d82988647203a8a90
+PK in G2 (serialized) = 03d492bc52bb972107ca95e7abb2007301b4e6486433b2e2c3d6e66f2d6dfb38b66d8b28be4c020a94faf7af6f071a4b11458441cb6176ae3d749a9a62bc4a14c1b0fa53d2daa1e4c32814fa7ae1fd72eb966f78c512ea04a6212688ee3cb1640ebe585425754ea37c56a1a1df270a8972078f5ef151be20a389936b56fef593f45e8886fdac22a9537cf18d28a371560a5aada7c8c902c811caed4e28656a1dec40733d87386c0964aba9429063391a36a80f24526d3d25592d42145c3966f4
+PK in G2 (compressed) = a3d492bc52bb972107ca95e7abb2007301b4e6486433b2e2c3d6e66f2d6dfb38b66d8b28be4c020a94faf7af6f071a4b11458441cb6176ae3d749a9a62bc4a14c1b0fa53d2daa1e4c32814fa7ae1fd72eb966f78c512ea04a6212688ee3cb164
+Signature in G1 (compressed) = 93d88a987311e89f4370ad3de630c5c58fe3e535ad2a32f46c3b8d6ae1dd53246658028738c3fadab9d8e55a9a4c758c
+
+COUNT = 153
+IKM = 009932cb64fd962fc861fa932cc55ef79029c25bf48d26bf58f18a23bc55ee87
+Salt = ce552facc26b54445c1abb9a68260f822f38075eed4746e4a5d0d85b774ced20
+Info = ce552facc26b54445c1abb9a68260f822f38075eed4746e4a5
+SK = 3a1474d9212a1eadac78fa7a773a2a60c950b4ce551f30265da6a9b690196f39
+PK in G1 (serialized) = 0a7adc35da30aa2ecf918ad6288fe9ef66d2b150d1eea66addab267de2753e492ea7569b717c31952fdcd73609b163c801797be74202ac0f904ac65a53e37550306b7610c525a0e0e2783e06efefda092a99553c318d79c4e105be6493a3180e
+PK in G1 (compressed) = 8a7adc35da30aa2ecf918ad6288fe9ef66d2b150d1eea66addab267de2753e492ea7569b717c31952fdcd73609b163c8
+Signature in G2 (compressed) = 837df692883a11ac66223ceb152e0ea12143c6e120a61277e81bbb61e68fab2e6e355fe860a9a2683d73d6d4cee90e350a22d0aba44947409c5d93eb12ed3732b3f8f1c757cea91e9b756265bf68aa2cefbb6dbb9fb7d294dbd3b0e9c334bfcb
+PK in G2 (serialized) = 00c42cacc80188fd379a20493769109812cdde9bb2f40bdfefae47601441c2c07035a220d68bdfee5fd2845da18185c616ce02580f53784fd06cb84cbeb25a729a2b8039ca4d14e5e5461b11750a28b3c3bae392fa30a8d1347b30770036f6c71541f26c179b69bc0c84827ba7400b3d4d03765bfa7c9514c85357592cd08bf5026494881b06202ad60d02d28cdfd39215f7e2017d10aaf878708caca3f2bcf5f7e8e86e83e740decf12c08bccd37915f94d373c6649a7367a237bd733f2e5d8
+PK in G2 (compressed) = a0c42cacc80188fd379a20493769109812cdde9bb2f40bdfefae47601441c2c07035a220d68bdfee5fd2845da18185c616ce02580f53784fd06cb84cbeb25a729a2b8039ca4d14e5e5461b11750a28b3c3bae392fa30a8d1347b30770036f6c7
+Signature in G1 (compressed) = 8d97b76e1499cfb4c248a1eec23f53e27eedf1688e47c2e2510e5a066bfe9904bae5861c539c81eadb50bbbf06f82886
+
+COUNT = 154
+IKM = 009a34ce68029c36d06a049e38d26c06a03ad46e08a23cd6700aa43ed8720ca6
+Salt = 3332d8adeaf28da67b8e4145aac2a59787809b37e65eb0223d36fd3a091c9fe4
+Info = 
+SK = 731490fc1ce6e615ace768d761a99853fe4fe94b8ee54b8f24f4ad251e65ccb7
+PK in G1 (serialized) = 0b92569edb4e9006d3f1d56ad8c578b63be56eddf77f3e71f951a3193e5243a4b6ff5b97f037720fb84d35d91671801310b99f58f2c2265a2db04f5ab5a02eb8e81f6a85ed80bde92804e114cfd50b8395f4a9576a785f719137b391f584bde9
+PK in G1 (compressed) = ab92569edb4e9006d3f1d56ad8c578b63be56eddf77f3e71f951a3193e5243a4b6ff5b97f037720fb84d35d916718013
+Signature in G2 (compressed) = b8fe7b7518c8a746d867bb317e9a99e9422f5e89f67b2497a938499e12c8a162b8355f408160e522f04668163b5670a115a57c7a71d419e380d84c09d957a70eb23572763fc41897652a471174ec3b81647348077108f9c2588acbfdcb7bdf39
+PK in G2 (serialized) = 171e1bf75b86648c646d8a96f7bb2f039fdf7472f44230db25af3ee04511fe3156fb70be3c97242915230d73215e554c088c43e4aa40c6c6153eb4a972d1d44a38893b776d8404805b1b29faff75f1fdb14381bbed02a4d7fd3ea71812c88ba706afeeecea9cf1199b46bb46e115507665649c109f4ae0a11a439f53143336e4bd71686c86b2f5c5804f924c6782d144034e5b3abb6f641d6d3721b1994e91946e5df4e8413b461e5ba9116f52106f6836fe6b6c4f2d76c8a28011697b8b0dc4
+PK in G2 (compressed) = 971e1bf75b86648c646d8a96f7bb2f039fdf7472f44230db25af3ee04511fe3156fb70be3c97242915230d73215e554c088c43e4aa40c6c6153eb4a972d1d44a38893b776d8404805b1b29faff75f1fdb14381bbed02a4d7fd3ea71812c88ba7
+Signature in G1 (compressed) = b6f315bc6009044a9e13d8441295a33331166139437befe1deb24fafe95dcdc363a3ad9d617b3857186e82672488ec3f
+
+COUNT = 155
+IKM = 009b36d16c07a23dd8730ea944df7a15b04be6811cb752ed8823be59f48f2ac5
+Salt = 6d5c5eba37533c604463d5a82dae78a5b18077ec724d76e78eb8454071097b56
+Info = 6d5c5eba37533c604463d5a82dae78a5b18077ec724d76e78eb845
+SK = 6440dad4c0cb0bcd9329bbb3d5ac2059dfa529890015daf0b9cd2cfa5725682b
+PK in G1 (serialized) = 14bff0a577412b6e1a7646d5393ac89a560bc8662d3ee0636c78b02b0c408e41775f31facc2482a9ad053bc1f912dbcc13bce08ca3c7b6aca46d215a0ab51aa4d7da9f0a65cbd43a2b588a975192343614182e09ff96142f55d1cee95aa5672f
+PK in G1 (compressed) = b4bff0a577412b6e1a7646d5393ac89a560bc8662d3ee0636c78b02b0c408e41775f31facc2482a9ad053bc1f912dbcc
+Signature in G2 (compressed) = 941804979b7a00364df2cec7cfeaf919c0691d9009e4a30a73aea2c215cf0fdaa05d77cf5a2b0ded5273b4d87449ae42045be23cf50c81fc38ad7423521dd132595f0a0fad55c2b02b8b04d344c37c1ce057e43160cb80a06809e22271ba9d98
+PK in G2 (serialized) = 0bdee6c9061ce1244de8732f945877a0440e07d7d50fbcfddd1d61587afab38b23f577e056b6ae43af085d7981e58b6103be9aab5648073ff4f952fb949498df2ea33a5ef35aee1af01c51277313371a1daf20a43115bffb519b88db2efe16300c6264375bd6634eaf80c3a2253ab20612d890a6100510587d642e4a159b82cc33ef4cc02f17d8ad2679c7b4a6133f2017dd046057f570e7dba1e735994f54db592ea45f26a96ee04db826288e23cb2918bbb2f9545b7bdee555f73f54639556
+PK in G2 (compressed) = 8bdee6c9061ce1244de8732f945877a0440e07d7d50fbcfddd1d61587afab38b23f577e056b6ae43af085d7981e58b6103be9aab5648073ff4f952fb949498df2ea33a5ef35aee1af01c51277313371a1daf20a43115bffb519b88db2efe1630
+Signature in G1 (compressed) = 926f086e4ef0ff15300982d0da48f1b600fca2c73c1c860db03dabc2e3163774fd47543c8a6ff98c64c2a2742c5b1599
+
+COUNT = 156
+IKM = 009c38d4700ca844e07c18b450ec8824c05cf89430cc6804a03cd87410ac48e4
+Salt = c7eaf63a365f2de3bd1592eec0af6ef6a079f1e943817620aba52eeb565f16e1
+Info = 
+SK = 0b7da9796a1370edb24171c06b4d51c1ff7a64f01d43bc1d3d8099d4b2c44bf3
+PK in G1 (serialized) = 0856cc0dc6daae3c2877223605d1a8f19d37ebb845bcd9b14e871b5808cf09b9fa62f25d567efbd0677460e14ef11b6213145eba47ea62a59b9f9341eaf8b9659ae4a105700d2f73a47f7c8bbc830bcefe9f42f0f4e83540b6740a65311bb905
+PK in G1 (compressed) = a856cc0dc6daae3c2877223605d1a8f19d37ebb845bcd9b14e871b5808cf09b9fa62f25d567efbd0677460e14ef11b62
+Signature in G2 (compressed) = 85c34816f53a3289c69b194c339f3d82e84468f008f0b34872ebcfb80b74b7db4870e277a5351fa1e4650374da91f7321033b2c7797230511ba525c3bd4f65988b78586bb4df478a79c0889aa36860715da4a95959c38c5e4426358f577d9fa4
+PK in G2 (serialized) = 0028d2283e1cc8f7a5e00c5863d41a387d9d19609440801fc4c8ab30f506c8691f588f7dc1d83d8f1df3392b6b3b2b53044f12b64e120edb18a99ef9316f8e6ce40f726123e9e10396337d40655f35fd9e76ac4bce911f8f84788bc4395adf4006c4e92bdc1e45fb2b6039aa6fa197b3af8c0c3b27530b0a6006caf7d642bc312642347026460ed582f8d7d423e50c270ae716e1a96b35c9fd30e78f524cc75db767ca1b0c87482f90686c3f349b2c9e8f07228731182e1cf2bc1da378038291
+PK in G2 (compressed) = 8028d2283e1cc8f7a5e00c5863d41a387d9d19609440801fc4c8ab30f506c8691f588f7dc1d83d8f1df3392b6b3b2b53044f12b64e120edb18a99ef9316f8e6ce40f726123e9e10396337d40655f35fd9e76ac4bce911f8f84788bc4395adf40
+Signature in G1 (compressed) = 82173a29cdb0ba14c5346e6cdff3e8d181eb8ebc0c8213a84a57cd5e5a4807b7465dee2e485ad550cd7aab148b8880cc
+
+COUNT = 157
+IKM = 009d3ad77411ae4be88522bf5cf99633d06d0aa744e17e1bb855f28f2cc96603
+Salt = f2298cc21d5ece9e409dd6ea76546a2e75fe82f9ef73b920767d5253ecefeb22
+Info = f2298cc21d5ece9e409dd6ea76546a2e75fe82f9ef73b920767d5253ec
+SK = 046aa74f73efc01bc96753b192e1ceddc9f4dcfbd32b0c9e0426a2e8a85001b9
+PK in G1 (serialized) = 15d9376ba5f6d84830698033b149ab0aa4c5f709f3c355cd8e5c2f50cf8733b3f515cccc74b3445906dcfb260813fd710312421a95081d7983d94ba934bdbb563a362945fb39d734d02899df5bd49e20a507b0b92651b9c417433ff6d8c3ae10
+PK in G1 (compressed) = 95d9376ba5f6d84830698033b149ab0aa4c5f709f3c355cd8e5c2f50cf8733b3f515cccc74b3445906dcfb260813fd71
+Signature in G2 (compressed) = 84fb282f95a0f88716f42922e46c875aedfd3c7ec8a838508fc24199e0c2f84926af68978b219192bb21823c76656140131fccb5cb58eeab26d593d3663f36b9487356aae2d6490e2c7b7c48df966dbd79e0df7c511938fd8827f99efcb47a41
+PK in G2 (serialized) = 0659f8440173d96d9d102fab1ad0584d29c949af49885365f28ada1c2b06cf488a05bdd36402eac8cfe854997c84253503ece0f954c02a8ff6a67acbaa80cfab7bc1274d299dabfcdba48d03824c9aeab9ffee0d26abef6896f909e3b410f58300128767893140cdcb97cf8beaf3468d4828a70396c68d9c45dc599cfec603f299ae259c5e46221c4ef4c210cd9b0e67194e81ea8d77eb4161943bb67f20ae1427b469dcfb7f2f50555e82e32daad778cb3d15155ef0599fe30f6815d6fc6609
+PK in G2 (compressed) = 8659f8440173d96d9d102fab1ad0584d29c949af49885365f28ada1c2b06cf488a05bdd36402eac8cfe854997c84253503ece0f954c02a8ff6a67acbaa80cfab7bc1274d299dabfcdba48d03824c9aeab9ffee0d26abef6896f909e3b410f583
+Signature in G1 (compressed) = a668bc42bc06d5f0384867ab6542ce8a945ebca3e521decc611c2fbf014f83d738b3bef9dd254b563b45f47ffb8419be
+
+COUNT = 158
+IKM = 009e3cda7816b452f08e2cca6806a442e07e1cba58f69432d06e0caa48e68422
+Salt = bc2df815a51b2bfdda54ab3146779135ee4150a1c5fe6095f85029300c75ace0
+Info = 
+SK = 4a12098b06d8572917c76633a1ea50f312713356c6861c160945e0c2c6f2302b
+PK in G1 (serialized) = 03225d5e64b2a771fa05a8dc9970559f5d4e9d1c99653760b401f4e56c116a0cacaf201408ef56feb82236997f2c5cc303bb7022efe7b4662e2e1cfa9fef0804d653f23cb9389e37722585872b63f613d71e3091ba4cef11bc4dc568aac69b56
+PK in G1 (compressed) = 83225d5e64b2a771fa05a8dc9970559f5d4e9d1c99653760b401f4e56c116a0cacaf201408ef56feb82236997f2c5cc3
+Signature in G2 (compressed) = 8574425075c3bb459856fcd850fd9c2123257cb9b346495db71b52cc601a76562acfe623468b0e2fce327712b97cf5d007d2c052605a389e4c8104d7c72f01683d1ec9c29ebd895a0236e2d10d63e6beefa962b076b4ae04c0d9c1fa5aed6090
+PK in G2 (serialized) = 0b6c28bd06c8a4ced21946985055f3d7913fc1f1340eaa10dcc5660821fd75eefc2242d896d41083cfe4655920221187065d103dbc9cb0863c187bbf0bf0f6855610cb1b7c021bc00a6b305877a960fdea93ef30e62fbc2fefab328578d1dcaf14b556715806f5f9060dd09151b5f3934b679ca34267a01f4e8fb5f00e514ff0b3089ecc99b74393b1f67bd34fa00cbf133bb12cdb779b35bc772918c2c1a6f51980017947be0393e916174da447741fc6ebc21e10028f551bc51fb3f597176c
+PK in G2 (compressed) = ab6c28bd06c8a4ced21946985055f3d7913fc1f1340eaa10dcc5660821fd75eefc2242d896d41083cfe4655920221187065d103dbc9cb0863c187bbf0bf0f6855610cb1b7c021bc00a6b305877a960fdea93ef30e62fbc2fefab328578d1dcaf
+Signature in G1 (compressed) = aa736b31f23a3c38a14cc600a8fbea4d4c6ea19bda91fa6987afb26502b0758335e03f8ee1eb37556fdad74648048f12
+
+COUNT = 159
+IKM = 009f3edd7c1bba59f89736d57413b251f08f2ecd6c0baa49e88726c56403a241
+Salt = 930249ace8329ad7e26f281076ef756512d151eb601f340a86d77cbb5d781017
+Info = 930249ace8329ad7e26f281076ef756512d151eb601f340a86d77cbb5d7810
+SK = 698fb71d429807caec67f16f8cf55c6dbc7e10b963f486e9f3ccc571dd0fa65d
+PK in G1 (serialized) = 0186765d344a98353125dbfb89016f274306008f4090ec69c006c2000f4ed2be93ca7311ee473e7717d0345f84bc3d810fbaab2c56762daef00d0d1db1c0dcc3a4a11394990f6e018ac5c6430fa4326531b52ed32486e2c721ceaf01ee4ecff2
+PK in G1 (compressed) = a186765d344a98353125dbfb89016f274306008f4090ec69c006c2000f4ed2be93ca7311ee473e7717d0345f84bc3d81
+Signature in G2 (compressed) = 96d1ba7a2cfce62eaab9b095f6709631360761cbe5df723354fa77ef555bb06ba7f87242d03a5be46ff7d4d721e5de3b164a989ee584c9237f6f896812ee28b1680e2289e61edd4c264ea4a7e7f4435a2b3756a6bf9be19d75db80a38f7bc41e
+PK in G2 (serialized) = 133e6c16a92221e898fc770752d947bffe3be5375a81c625c83da563e5a5fbe021ffcf2d4b9b57d81b0a53580f584e35029f8705ad0761c63776d3c8df5b40f9326d5384f48e8cc540b2e17eb6175b77c0ff5367365e5b8013d47fdd0554d79c02ef61611a298a9b10ed2b3290a446811c5ff79523524087e92b1e0830dacbc008ec45449d5fc82eb1ec0c6b15776d530d0eb9b34e9d43ed57b3a1cce5813258cd807fc3c39246e65b9f511cb4b756fa52f59ddeac63f1d17dcfc7c6f30d9fa7
+PK in G2 (compressed) = 933e6c16a92221e898fc770752d947bffe3be5375a81c625c83da563e5a5fbe021ffcf2d4b9b57d81b0a53580f584e35029f8705ad0761c63776d3c8df5b40f9326d5384f48e8cc540b2e17eb6175b77c0ff5367365e5b8013d47fdd0554d79c
+Signature in G1 (compressed) = aee8230d2aa074fb47832fb7f56fc2a07ded4112314e3653660b494f235aea5d4c30a7067d2d1ad11541912517f3c6ed
+
+COUNT = 160
+IKM = 00a040e08020c06000a040e08020c06000a040e08020c06000a040e08020c060
+Salt = 723e69a35592a873a04d710da846b58948df37f5f442be2c2f00b4192c77757f
+Info = 
+SK = 51b67e08e54a3fc1877c898f8aca907bca04103dfb144fa4aa2e7b28a5f5701f
+PK in G1 (serialized) = 043a200d76e741f50dd7af53214cc92e4d398c1b9fc12beb6750bad7109c4f7fadd811f56f952714dba3e04de393e7ce0420d8f7836734a12496e74c119862798881a61d75f4586508edec0045d2076e133f6cd70e81fb23e63a34b2140535ae
+PK in G1 (compressed) = 843a200d76e741f50dd7af53214cc92e4d398c1b9fc12beb6750bad7109c4f7fadd811f56f952714dba3e04de393e7ce
+Signature in G2 (compressed) = a8dcd5a71ca007a00b58a0086e8c39673629639d53f52a5fc6a6a71b7244d2cd7ee3e4a4297c6f46cb134821e1d872320996a7a192b33f36d10776570ff517ebb80610e66cfa657e5a162fff4a1738d97f54669d14cc31a943eaefc1107bff3a
+PK in G2 (serialized) = 0b8813144c9541770cd43eefbb5aaac1f66a6180947159f391a93ab2f780d473c2d662058a6722f04563e1d778c9ea49036115299b8029fdf84575a58c1c7c90b89ea77dfa172020b6a8561aa0642a10d7348a4668c60cb9757232df57c907fc1452212b8409e16bf42c62b4bd09eb09ddb49c1ef40c0751939603de9da0a2e2bf94495b611c6e72926465aac8e97b7912371c2e8119663076d3667a8285ae9621cc5932aabc5343d7fe2d9f177b0b718102f8f9ce693bfb78ba09d0eff17933
+PK in G2 (compressed) = ab8813144c9541770cd43eefbb5aaac1f66a6180947159f391a93ab2f780d473c2d662058a6722f04563e1d778c9ea49036115299b8029fdf84575a58c1c7c90b89ea77dfa172020b6a8561aa0642a10d7348a4668c60cb9757232df57c907fc
+Signature in G1 (compressed) = b0398cc7cadf7e23e2034d1f23dce26303c14eb2216171730d31fd76aa366356e94febe8c1a3e52c62a0cf2559abe704
+
+COUNT = 161
+IKM = 00a142e38425c66708a94aeb8c2dce6f10b152f39435d67718b95afb9c3dde7f
+Salt = 4254947ac5dde164f555accc6ef444ba370710493cd7eebaedd7bc133c7643c7
+Info = 42
+SK = 64eaa5f4424feb7f107dd7330b7b420684e7cc8695820c73fa288687584ccb22
+PK in G1 (serialized) = 10b726c51428c8ace380ca73322500ee7544b9ac4ce60f21a48f7699f6330d837b7ae39e27874a16f1e7de89655e14660805693e7eda6f093107a7ef6a21129186f2c66c4fd90b096851007e93900d0dc419fa288896f4ad0474a8632aef7c41
+PK in G1 (compressed) = 90b726c51428c8ace380ca73322500ee7544b9ac4ce60f21a48f7699f6330d837b7ae39e27874a16f1e7de89655e1466
+Signature in G2 (compressed) = a8d428966b371f4bdbf9024e5bda85fec46be8fdbab37bdc6d31194d9263ded4a4a6fa87a603eb67c0dcb14e4be21c66039b27e94ab857b068317c88c1d7c476b38aa717f902a9c6523ad7778b90206b82d0d03c33df01859d80b536e4eb4bff
+PK in G2 (serialized) = 025635e4b7061d834b790c9aa565a2ec14235924030d7255a13acd618bff08233c801b0bb173fcda2dbb17599814e47e03889fe131897d6a301f04322e4796eea387e245ba7b0e98958250b993c839eb3ff6c686c9360a6acdb5f9003b69a8c00b33e5774ffdcf3ba5d9e5ccf1f228116e0b612dc0cbb207ea36167a4dcc3ac53834ce2e0f07568cd881b0393826373e0e0eb76a3c9faa087b120686e42a434c29f6da5e0938d50f41aa8d26378b67ea99f1746aa1ce9a51120bfece8460f507
+PK in G2 (compressed) = 825635e4b7061d834b790c9aa565a2ec14235924030d7255a13acd618bff08233c801b0bb173fcda2dbb17599814e47e03889fe131897d6a301f04322e4796eea387e245ba7b0e98958250b993c839eb3ff6c686c9360a6acdb5f9003b69a8c0
+Signature in G1 (compressed) = a5179b76ba43e0d61883afceb798ae10990af340dbb6805841740244108437847dbdb4150139bee0a4bac9460f2b790a
+
+COUNT = 162
+IKM = 00a244e6882acc6e10b254f6983adc7e20c26406a84aec8e30d27416b85afc9e
+Salt = 9734d1ad84fa1d78ebd9b6ac83527d5d31c80d853877fb09afb38b43608f8650
+Info = 
+SK = 6430538830772f57773941c1b91bd9338d47578352e405e578d24a49b784e1ab
+PK in G1 (serialized) = 1399cd2720694f8c65cae1792d32e3426df18086cd9becc0de9bfc6895230a1ec0922472d3ceee663d641b39bca4de7c00553abd0b610d57d686ba8e6fb8d752234cdd5ed6d944fdd7cbe4dfae500c98d90af2c25a32da8b1c04ed3614343686
+PK in G1 (compressed) = 9399cd2720694f8c65cae1792d32e3426df18086cd9becc0de9bfc6895230a1ec0922472d3ceee663d641b39bca4de7c
+Signature in G2 (compressed) = 8a506a3c846ce66159fc0c6844725a238dfb2f6b48b7afdce9f3676ee2817ba854676521848b3c8a7b69a8782c0970f61632cf15658abc90366d207b1af4efa94f43f7563f93555f7e18fb581e0fbd3904eeeaa1caa69876fe9ad8c6a8ccc71c
+PK in G2 (serialized) = 01ee83a8f7b68ccbf8d518a512e0f0fed79fcceb59d99328d5752e49ff008db0016e27c72f69121c80458a892607ac0901ce9ab0ceaa4c038ef7d2b6771a7ad07de1a01cb1ec90b6350c9201d565af9f9f49672c7ef609cd5bbe66856373efaa0d5ab19abed017fe82a4844baa95f4badd05ce16915e90c56de13991d6defcbcc6b3f7d67d3e6ca51e71e18d288ba5680ee8009d4bc4816b8ded38cb4a9bd47d1f607864f915b41826799c2708e4737b4c88ad609ebcc662ebefabbdc5de0e29
+PK in G2 (compressed) = a1ee83a8f7b68ccbf8d518a512e0f0fed79fcceb59d99328d5752e49ff008db0016e27c72f69121c80458a892607ac0901ce9ab0ceaa4c038ef7d2b6771a7ad07de1a01cb1ec90b6350c9201d565af9f9f49672c7ef609cd5bbe66856373efaa
+Signature in G1 (compressed) = ab17c7c5d0127a4470c86bc4e338122fb40f5a3417084a64b5d1391c4371dcb403cf028a6328e7ed134798dd6f063e44
+
+COUNT = 163
+IKM = 00a346e98c2fd27518bb5e01a447ea8d30d37619bc5f02a548eb8e31d4771abd
+Salt = 49f869b7e4df41c17fd33e414067c26294d2ccf030a10a605974baedd43d1229
+Info = 49f869
+SK = 0db952bcb753a701fab5ae11e9ab2ddf6884da66e5d0db1793cecb6b0f28beb1
+PK in G1 (serialized) = 085041208613a1ca81d5893a56aec4f9fb667e5b4e73878e229277b4ac19b075e1caa91c4ed3fce143deceb30a8275450ac65306f8cbdaa46653402ce5b4e8daa11f0db257a86061c12d2154d914391ce6145860f02da574cfa8b291f5d73a87
+PK in G1 (compressed) = 885041208613a1ca81d5893a56aec4f9fb667e5b4e73878e229277b4ac19b075e1caa91c4ed3fce143deceb30a827545
+Signature in G2 (compressed) = adb6879a714cc7ecc27e20b1966c6725f5089137983934ed73da9f83cce025c679488efe9e8462b450df91827924425815bc446ec38615dfebef51dcac6259110a2e40128cb290881e04e1566967c07b75d7f81272eb8ec175864376c75dc164
+PK in G2 (serialized) = 0d1d0f2fe1e9c85e77b74ae02e67d76af2c67262dbbd4f59c85df0ef6f3e08340f405861a40cda45334eb5328c4509ef0ca564c0b0e6c0004e5937600d1f87e3e4cd3b057b749ad268f8077cce59d8503791a0a461eab8c41c64182c9bd4e9f0027911b5a913dac095e300c5bcce18afcf73dc019cc3eca9c87d04a3aa58ba548e1e157b870d7977a4562009e96a55e1070f05d102740baece4507ea49493e24213064018f07d087ff22d88ea1f39a4c4957631ed0e37ce65a4aab44e1d35e29
+PK in G2 (compressed) = 8d1d0f2fe1e9c85e77b74ae02e67d76af2c67262dbbd4f59c85df0ef6f3e08340f405861a40cda45334eb5328c4509ef0ca564c0b0e6c0004e5937600d1f87e3e4cd3b057b749ad268f8077cce59d8503791a0a461eab8c41c64182c9bd4e9f0
+Signature in G1 (compressed) = 8b5600b8e7d66588dbc1593d175fc89cb067bb76d2f5c12cde38cfc3e81f834d828c7eda2f9d04f31c82f22fd3615fdd
+
+COUNT = 164
+IKM = 00a448ec9034d87c20c4680cb054f89c40e4882cd07418bc6004a84cf09438dc
+Salt = 2a75e696112a3bb3cba64a2fdf2d21bc726a2ec17de73930c189579f411b44df
+Info = 
+SK = 0550a6ed4dc8b35b81bb62cd46640751e84544e8ccf3859e62f3d394e4291050
+PK in G1 (serialized) = 00d8bb5dd4ae90d6c44f8085b7514150980a91c27e96dabc53384bc95b434616cd6d4778ee29041f64df230bbac95ac5105cf109f5ea4119686a7451bc4d45f9e2f01d45a929dd85943f2d7240a5561617e64de6834ca02d09bf3c1f3c2a80ce
+PK in G1 (compressed) = a0d8bb5dd4ae90d6c44f8085b7514150980a91c27e96dabc53384bc95b434616cd6d4778ee29041f64df230bbac95ac5
+Signature in G2 (compressed) = b02f2c11bd102d04650121416d5b0db413ea0ed3684bf7b728b3f69fd320aedb7a4ad0b51ee5c208ebe837ea15c9a4a110da00a043cc56e500ec49c82354f74c60e21077482e0a40f7e152ec4ce2697fbf4fba72f98b6c88f36c861fbde0c437
+PK in G2 (serialized) = 03c30cfc97f90c1cba7d6583a4d5baf344cc5de3d6c153bfa5b7f54f5e7dc919bad951f746346cdd431235e8c03eb81c1823466599456f37842f01c553df3ba9b17253a184350d3bfaaab09eeeff5ab2b8f21800210ed43d53282f7b2413769a18dc807d33e59ae5b82cdda3676597167f9e74d822a6c8c14f90dc2cbb44786712b7fbb65c1452fa1e54ba5f74953cb3094fa283950983e8870219d0b631ff1fd05822288d546b6ea2cdff155a7ce864b997b5ac22b7e067c7ed0f635017df2d
+PK in G2 (compressed) = a3c30cfc97f90c1cba7d6583a4d5baf344cc5de3d6c153bfa5b7f54f5e7dc919bad951f746346cdd431235e8c03eb81c1823466599456f37842f01c553df3ba9b17253a184350d3bfaaab09eeeff5ab2b8f21800210ed43d53282f7b2413769a
+Signature in G1 (compressed) = a87c85e97344a5e4285e827b160b3c0ac267988963c58c9fd6942a8d63953af0b88bc8c22c49a6e612bd7ff982ed91a7
+
+COUNT = 165
+IKM = 00a54aef9439de8328cd7217bc6106ab50f59a3fe4892ed3781dc2670cb156fb
+Salt = b5158e87d547dc5d8e3c022785f4405f07ed928112002258c104d3cbb5d76145
+Info = b5158e87d5
+SK = 6e0cb6a86e996aec0f3f9f0fd570504c65a556e87384f2713b6adf53e38eb9aa
+PK in G1 (serialized) = 132026185bed33e1853eb2875b19d0512c7370ed5c9311e5a94f809e093eeff73d4190fb88d71b07890526f4a2b121cd0a409faaf5bbd5e2048138cce59af6e61aff322df858cc572bc65024fe5b5092733db53bb84ed9cd1f27fa9bf40a9ae4
+PK in G1 (compressed) = 932026185bed33e1853eb2875b19d0512c7370ed5c9311e5a94f809e093eeff73d4190fb88d71b07890526f4a2b121cd
+Signature in G2 (compressed) = 923fefa64496268baad2388b856232a5a1b1947dcf885df4a74ff9e4d5c508fd9ce58a385a882ebf5b6e58afe8691a7c159bf09aa6c50f35c0872d3005faf50c8d60e88365bbf8ffbbc5a5ca712689dc41d3f060b0d22e058dff9bc94ab528d8
+PK in G2 (serialized) = 117b5dae040d27458c2c307f264ab67006a45da4af55dae710b36909bb13b5b6492b214128aae00796f730c39cb0c4bc076e13d195ee73c42a33ff66fbf19d0ea3948410217bf172be1d4aa38f381d7016657799dbf5abcdf35a78529a72781e0b7c5848a59ac2e607df99fb62e54138a34edd8039c1ac3a7edcc58392c9bf46bc3921b810da3f84e6caa5f7a107f05504ebee5b95fc19ed1af6bf35480776d79bbabbab7dba4f1b9f9caa7f421f1d786ad356a9ecd45db5d2ca422bef247431
+PK in G2 (compressed) = 917b5dae040d27458c2c307f264ab67006a45da4af55dae710b36909bb13b5b6492b214128aae00796f730c39cb0c4bc076e13d195ee73c42a33ff66fbf19d0ea3948410217bf172be1d4aa38f381d7016657799dbf5abcdf35a78529a72781e
+Signature in G1 (compressed) = aea1cd6d31e0443705f76163bc757038e1c8511013ec9c13069fa0816b2c163392362125a6dd0eb7c484ec7ebcc48cc2
+
+COUNT = 166
+IKM = 00a64cf2983ee48a30d67c22c86e14ba6006ac52f89e44ea9036dc8228ce741a
+Salt = 23a5a6b40d684abc3e53f51c44da9c0b9ea7f8b285acfaf5fbf3ee4f49145821
+Info = 
+SK = 638a4c557d5c18fc7e7028231a18c5ea454cf5eb03bc256c4892206999f2ce36
+PK in G1 (serialized) = 04c2a69e4976c469dca770c55b4b3b153a642177362f30de572bdce2805b6e53668c4246f23eb98a401a8b20eae712350584374971b6f35fc4b033d4092394d3f79d7ff0d3ebe93fe92b01a3e8f108c8a01c1324e6e7e73b5b5dd02c2d5d8fe1
+PK in G1 (compressed) = 84c2a69e4976c469dca770c55b4b3b153a642177362f30de572bdce2805b6e53668c4246f23eb98a401a8b20eae71235
+Signature in G2 (compressed) = a5c088cc394b4c5ec65b2ac6cdce9ddcc7b9ca370b436276e4c185e6a584be58781ab0660ad3022aac487e9e79ede6b201c8c7ce1b988a9f908eaba555faa42f4e1b410e8fc0977238caf5d3f169e28002837fc5cfc8c2a294cf339902e6204b
+PK in G2 (serialized) = 028f006e61302c357c499e0f127cd82229ca4fced1522fc444a8dbf5f5f866e849b2919ae123caf2eccb543f14c082411106e9802c0a8ea50435c439e058172b2b6f306564b48c9dbc5122081a91f72d7d4d768039b66d7eec28de84bca718d305398419d122b5898df1b475754822513276a8df66fad7b24c328dce574f2a82351ba8c95196e880850ce6c008caf57a1452df7e1e212f493d6595c49b6573d6c806382db09d49341f7d7328651f2a3a75d64524d26662a61c900d2d7ef33f6d
+PK in G2 (compressed) = 828f006e61302c357c499e0f127cd82229ca4fced1522fc444a8dbf5f5f866e849b2919ae123caf2eccb543f14c082411106e9802c0a8ea50435c439e058172b2b6f306564b48c9dbc5122081a91f72d7d4d768039b66d7eec28de84bca718d3
+Signature in G1 (compressed) = a4c91000a5bbbaeed4228643604f73cd4563c5ac2f43a4804304283db3736c495399837fa1f70f5f8c84d0225fa2ebf3
+
+COUNT = 167
+IKM = 00a74ef59c43ea9138df862dd47b22c97017be650cb35a01a84ff69d44eb9239
+Salt = 12bc092edd1c56df48f1ad444f20c1d2e24566cfac67f7b9d463c4c37d0bc87d
+Info = 12bc092edd1c56
+SK = 070b82ca083f0119ae1617beecad96a048e4b9f6481ef9041de5f47f6c570a58
+PK in G1 (serialized) = 0ba6428c5492e83c10e94b1fa82afec208ab135175844e6ec2222958066ef39f1b93c8fa84c9865df370ad7ef515e03404b4d11001cba429a8fbcce5b866898c7a71112fb8a2f5f83731d3f4f0ad655d4589f4f3fc9e8bec40e60c4fbf9343d9
+PK in G1 (compressed) = 8ba6428c5492e83c10e94b1fa82afec208ab135175844e6ec2222958066ef39f1b93c8fa84c9865df370ad7ef515e034
+Signature in G2 (compressed) = 8549d9bc28bd529bca2aea840d4f71e67f0413b5e984759354d2c5a082eac3b976f8aa3db42f00d7ff26a42008658c0013726ab5fae4d561e2d6619893a8b2006d02406f580266dc530e134a2167d676de749e76619b3ed65a1507ac79531851
+PK in G2 (serialized) = 0a7f0f656e62c3599d2a182edba3167622c201b2bcf3919dfe52e67d79179fe48eb38aeb5379e182fdc40ba767e34aab16e6b5d9a1a34faebeb5520a38bdb42280816cadc82457bcaed2921ec217a2f4de5b27fdb06e9761f89e697fed54f1b5055b4decafb884ac029b381f4219f1e5934dd2f0efe0b9811d435e6b1a36a8857e9da38a7c004790c75a71825c8a796b126502d6c1725ce3d5ebcbb93df5bb0bf83274a498f25b6a8b59077d4d08a346156634359352a125b7d9b85d44f6082f
+PK in G2 (compressed) = 8a7f0f656e62c3599d2a182edba3167622c201b2bcf3919dfe52e67d79179fe48eb38aeb5379e182fdc40ba767e34aab16e6b5d9a1a34faebeb5520a38bdb42280816cadc82457bcaed2921ec217a2f4de5b27fdb06e9761f89e697fed54f1b5
+Signature in G1 (compressed) = 836c9dfe8d8c341067bd0b93dcb260db39627f762fd84c5fb09bb84b90aa458c34ed32b4e3b51fe1cec981408286c693
+
+COUNT = 168
+IKM = 00a850f8a048f09840e89038e08830d88028d07820c87018c06810b86008b058
+Salt = ede98ae875af5cfc470d5bd9057c0fd046e20f1f6f3b569e485c5f0db2bad2e9
+Info = 
+SK = 3f0fc0814476f0fd1bd67bdfe9b15ebe42ae61247c9ec3c6ee6ea0207ed1f593
+PK in G1 (serialized) = 115b7fd5dfe64bd4f012269a275f58c40ef36a303e9560951fb5eafc7510a5d475bc8c88696f463ade413142ff30793c0ebfce29d60092c82b96477682e55a68766822812da1adb91167d68b8a50f644ec90604b610ee3d84b28c8391a941746
+PK in G1 (compressed) = b15b7fd5dfe64bd4f012269a275f58c40ef36a303e9560951fb5eafc7510a5d475bc8c88696f463ade413142ff30793c
+Signature in G2 (compressed) = 88f967b82ee8a06eac038ff98b0f5df0f7dfc229c2493a5b0aff4bf8e1b2fb41136d8715c77a5d86e7708b02be73d1c81059a0b16d28165d69a68f5e20b248b452794e5cb7830a970e00aa92448647fb1c82de651ee2474d329c97dd1b08072d
+PK in G2 (serialized) = 17caf89cdd350eb9e7032e0ed0900499b2f55ad0520768ec5de62ed9c7e15ca659bb3c9e5260ae68d6af55a9543ab842044867d746400c894db00f5ad2429abd9e58c9b336079fc3545e8557c23ee92242fe1f1a54c61955bdaba78c7fede90c0e0f3a99cca60481ff3b63cc733309e89b85138ce51ddc0970e21803495ecce28141976ca64bb6195b20e691b16f57820c7ddb499027fcda4bd13e3402af1e83b1b4392afe8b86958d0a19844c001612152075aad5564d185fe895670f592f33
+PK in G2 (compressed) = b7caf89cdd350eb9e7032e0ed0900499b2f55ad0520768ec5de62ed9c7e15ca659bb3c9e5260ae68d6af55a9543ab842044867d746400c894db00f5ad2429abd9e58c9b336079fc3545e8557c23ee92242fe1f1a54c61955bdaba78c7fede90c
+Signature in G1 (compressed) = 8c2c84ed65f42e95a59e0e30b8d722ced494c9e215f604eae885ef1fdd605168139abceb7083f4f469e9930c5aea9490
+
+COUNT = 169
+IKM = 00a952fba44df69f48f19a43ec953ee79039e28b34dd862fd8812ad37c25ce77
+Salt = d7e95d986ee18025a8e9311e07116ec48d3026e54f8f1246b34208deee17929c
+Info = d7e95d986ee18025a8
+SK = 30f2bbc7533cad5b6b7c663e6ec2d4ac55a9dbb45bed9b2f36b7847dd5968721
+PK in G1 (serialized) = 055a14dbadce627b46d1e24dfdf7e03680b64e3c19f971392132f0d0883d7dea244b843fe14d01465b866b88ce82314b0d7bdd7a69d05fc82348aa81da8ec095021a0d9376a5a78ab49bec37a0ae81df47d82cd80d2086d356da4e3bf0076a87
+PK in G1 (compressed) = a55a14dbadce627b46d1e24dfdf7e03680b64e3c19f971392132f0d0883d7dea244b843fe14d01465b866b88ce82314b
+Signature in G2 (compressed) = b63da3e7c90d0a7f5c27f46274de29c2cc17eac33d824fd1f6ad789a27d2ee635229656752cfe651197e60a8b805aa1002e787832000aaf0ea336a91eb2c4e568503899af64e8ac31c7d2a1fec150ed7cced8eb85d95a0c51a9b82fec26b0d64
+PK in G2 (serialized) = 0d30ce5d81e08848ac74e1221fcd8dc1b301b0f57960dd018c0ab3d491d6b75877eb98f259a97dbf0c11c057189462e213f0ad6547419a23f89329695ad26b4e7bcdef315c7944e3148ad7a1f210147696cc74a3deda2d1dcc0589fffd221600077b5244f0f4107f94df14e902cb39d318f05947aa59088899b4a2a64ee6a0edbaa4587ed55cd0c87ebc538129800c0e128b8adef22e0215a8e742b52f95583e9f7049692ba88ed7d9e5dce9f8aa2d455881c6d89484a975965a47b242af650a
+PK in G2 (compressed) = 8d30ce5d81e08848ac74e1221fcd8dc1b301b0f57960dd018c0ab3d491d6b75877eb98f259a97dbf0c11c057189462e213f0ad6547419a23f89329695ad26b4e7bcdef315c7944e3148ad7a1f210147696cc74a3deda2d1dcc0589fffd221600
+Signature in G1 (compressed) = a9fe67224312f80aba1f053471c37ee6066da9f57d5b0e99c0ecfd63b87ce186381a0680d96b1ebf82c5e752effb328a
+
+COUNT = 170
+IKM = 00aa54fea852fca650faa44ef8a24cf6a04af49e48f29c46f09a44ee9842ec96
+Salt = 48b1494d6bfae902adacdda45c82cd823bf1d65d9350c40db51c98aba8131192
+Info = 
+SK = 48eedb686812fa665800777cc3207bfc29018a30f01475cb354607434b5e3ab7
+PK in G1 (serialized) = 1360178d0419516670cce9bb77ccc66da6ad22eb40a92d33eec52254a57bab709c93aaf94fe34bf6693622cc4f4d85d40b53354a8285d89d1a5e23155ecefe7dc27c427e9e54077936f29f427acfdd8e4d21f769b89573f071da996931c566c4
+PK in G1 (compressed) = 9360178d0419516670cce9bb77ccc66da6ad22eb40a92d33eec52254a57bab709c93aaf94fe34bf6693622cc4f4d85d4
+Signature in G2 (compressed) = 99f4bd5125dce19a2306b86cd4ec93b3d4b584fefcb077f22923ed4571222d09400b66de5b9c05c8406704429c8ac7740ea22313211003ad7edcfc83dfcc353af71ab52586fcf4f60a8b08c024b29c27863729b1a0ef621003b49eff8e4eaae5
+PK in G2 (serialized) = 0dc9e9c5eccd6c01bc81de56c1d39d729254455ad6cc5ba827e7a5617558ebf310ad872473e94d60b4a450f4b855bfac01290b487a0cf4d7dc8b6fa9eb9f4a2f46139a13b56fc684328db401fb1e778d9eda2d44510e1e1c4f23cd2490aa6ae51376aefda3df3d1f3ed324120a7d4a4ecf0fe97b8f21a15da6926ef742906992fe1a934c528a7fb31b71eb79f13919770c93708180c635b111244d42c4c67e053af97ef07096927861705e044ce140391b36f3dc85adbdd6107a0ebce513b8f1
+PK in G2 (compressed) = adc9e9c5eccd6c01bc81de56c1d39d729254455ad6cc5ba827e7a5617558ebf310ad872473e94d60b4a450f4b855bfac01290b487a0cf4d7dc8b6fa9eb9f4a2f46139a13b56fc684328db401fb1e778d9eda2d44510e1e1c4f23cd2490aa6ae5
+Signature in G1 (compressed) = a43e1ca3695bbdb8fa6d428ea8c0864851d27d1e3a0a3436b14f775a1d34abdb5a22de5e6f5fc7b0e469a3946bf53e29
+
+COUNT = 171
+IKM = 00ab5601ac5702ad5803ae5904af5a05b05b06b15c07b25d08b35e09b45f0ab5
+Salt = c7e391c4408ef68f318ee0a2fc7a609ea002ef10f2cf2c8ca4da38101c478824
+Info = c7e391c4408ef68f318ee0
+SK = 3cfa59cb901bd147b3b3b6fdc5f508c478ac017c517972ba3b42af4c08542728
+PK in G1 (serialized) = 05763ab3d03160f58e3c1bc18e5d85b9202719c2559130220bb40fc8a6c8d54588d959daa0b9b14c91a6e9a392eb36a318850b4515e4448c251797d5b2e509fb3a2129c609ba03739c8fc4e1acd711d936df6347785356d08543f071a4e187b2
+PK in G1 (compressed) = a5763ab3d03160f58e3c1bc18e5d85b9202719c2559130220bb40fc8a6c8d54588d959daa0b9b14c91a6e9a392eb36a3
+Signature in G2 (compressed) = b649bb78f08d3a5cf6f84367977efed5fcaea6af62df54cb36cdbfb1e83c91704d8301189a92a1a460942100f827d9310134e92ddfea376060a91db5270f7d9c2b1774cf7fd1e1eadc7bbfcd4a261c9dbb7b0b730c752c517e8302f708edbeee
+PK in G2 (serialized) = 030e064a8f495eb34b1959f73e096d0ce3b79216799ccea19d11e27737cd2cd1a55c9fd20aa1490ef7f13718b3b76a0909f168b01d5a939d8452288f3646e30501dcd8eae34cd53554af17e67b376e820d4f711d2271f40c9505fddedb6552980933a7b1cb8b53d5f90917c3cb6be06f2f8b8de50e0a1b5b789fbdaed5f68edf3e35e9a1e26c4909d5df4ab9f0d6bf38020691f70d20f582e062569c253a131c103180bf09d84bd8ebd1afff240836f1ac637abcee1d052f84027ecdb9173eff
+PK in G2 (compressed) = 830e064a8f495eb34b1959f73e096d0ce3b79216799ccea19d11e27737cd2cd1a55c9fd20aa1490ef7f13718b3b76a0909f168b01d5a939d8452288f3646e30501dcd8eae34cd53554af17e67b376e820d4f711d2271f40c9505fddedb655298
+Signature in G1 (compressed) = b6412c894e576b0261eb898ffcc84fb18d0367784dd1dc08f71eb82782b60fbe0f7909ee730623c11f43b38d6961cd9f
+
+COUNT = 172
+IKM = 00ac5804b05c08b4600cb86410bc6814c06c18c4701cc87420cc7824d07c28d4
+Salt = b2d9ae0df0bf003571894cfba0bf2ae5d59075c3fca2ddc51133b160a8bf1561
+Info = 
+SK = 6e0383fb7293f7890dc71b22ed1e13fd4b50dab92814c6736f7d6e86c463826a
+PK in G1 (serialized) = 0894cee529617a8cc3693ce6ad0d6184a912a5d2984f6d897396a5ca327d795cdfdc12eb5c2dede412ba3207db5aab5f028d7aeb5bf6dad6b076132f56f3b9eca2bdbceec572136ff33a4a19415dcbf9f7bdcbc8abe350bd269da20bf35f53c3
+PK in G1 (compressed) = 8894cee529617a8cc3693ce6ad0d6184a912a5d2984f6d897396a5ca327d795cdfdc12eb5c2dede412ba3207db5aab5f
+Signature in G2 (compressed) = aa044d075992f720cdd480652bb8d8db91dd5d277790464a9be9949f37f4f36b38202e7da3e5baa66836aef26adf52e10c175643a5cf4b897513c5aefa62c5aadae9f949c2a4471e249b66efaa0caf188c70065730b32bd251b6d22d1c67981b
+PK in G2 (serialized) = 08ed249150e6d9c9c42db9ffd202c3ee3c8c051c253275c38490cc296092cde8f08c3aa26773444a08ef228181e5da3514b492658b4c29d72dbd0569bc26d31d6f7ca30ccb850250789679bb32c2148f03275f34fa95a1186560b1534c52f1f9196fdb48898d03f3ed01aae905af17323e7338f1065c8b71107f51252dbcfdf116819f8915f76fcd258eb31e0bc486e10380adfa0287021dee94501da0da937b9f79abe50c820cabe3957fef6734d28268bada4f58d176f7f04911b73e9c952e
+PK in G2 (compressed) = a8ed249150e6d9c9c42db9ffd202c3ee3c8c051c253275c38490cc296092cde8f08c3aa26773444a08ef228181e5da3514b492658b4c29d72dbd0569bc26d31d6f7ca30ccb850250789679bb32c2148f03275f34fa95a1186560b1534c52f1f9
+Signature in G1 (compressed) = ab5d3a81da1d349529f472656c95c06d4e0ba13639242d9d2c98154ae1d409df8d29b373ebccc64755fa5969e279e179
+
+COUNT = 173
+IKM = 00ad5a07b4610ebb6815c26f1cc97623d07d2ad78431de8b38e5923fec9946f3
+Salt = f22044bf20acb55ee8f10a549f0d92e8e9f0e5b30f793e33c5fbf69650d31fc9
+Info = f22044bf20acb55ee8f10a549f
+SK = 36df5f8e655244d6b262ef5fa35bf0902915dec56c3144cdbe4363a5bac1cbaa
+PK in G1 (serialized) = 18061f8036225efee159c6f8b569e84f72e68beaa7aea01a6f47dca67f014e7dff34e526af2c1bd65ccd4369e9e686c612be0b17b5be581ff042b928194e517f8f0e481fbf3f3b39208161ac8d440bf42b0b4b61ac1443278294619f4d6dc508
+PK in G1 (compressed) = b8061f8036225efee159c6f8b569e84f72e68beaa7aea01a6f47dca67f014e7dff34e526af2c1bd65ccd4369e9e686c6
+Signature in G2 (compressed) = b6c69682818f449fb391c6c15c0aa888bc9039712bf7a34c70cd37dd46f65c6c48415ac0737cf86666a1de7d10fcfebc0bb73478b0990e290fc6227d1dd8af7e40061c0c1c925a5076b4ede4a3e8822bde8fd8072919fbc1a36b2b042df8a293
+PK in G2 (serialized) = 1593705eaf12ce92ae5dd44a4de268957369eca76dd89299f904d722ae48be7e9125e4fd7b69898cfa541cc0def1e1831538e0b3c91ef89828a79e5a6cad925c563820c3b897792b93558f43d94dda31056b0560e6aa9381ba9d7388fcddf9841817930fb89faec6bb7fe7464cde9ca8812b2aa13c281ead552f70f47ed99ee2fa1e0a42045734cabc897ceeb4fe4292167434e428fb175412caf8321339489dbe0faf0d6840c439b80c89d7e78fbc65176f1aa2cd0d27423f168bcefe6fe2e3
+PK in G2 (compressed) = b593705eaf12ce92ae5dd44a4de268957369eca76dd89299f904d722ae48be7e9125e4fd7b69898cfa541cc0def1e1831538e0b3c91ef89828a79e5a6cad925c563820c3b897792b93558f43d94dda31056b0560e6aa9381ba9d7388fcddf984
+Signature in G1 (compressed) = afe17122da6ac3c2640d149f9fed565e497a54164129c6bbff1e59ff0d2438064b69bc8fac384354a45398610542a223
+
+COUNT = 174
+IKM = 00ae5c0ab86614c2701ecc7a28d68432e08e3cea9846f4a250feac5a08b66412
+Salt = 53f4a3e29e632867e5720b91c0c9589d7317534cd3dd31290fcefedb71afcef8
+Info = 
+SK = 5c9f7ae1f0f48ef5fea04950695b401be91ec8e38305e9369e776b0509b6bff8
+PK in G1 (serialized) = 18fe4f975c717d2f657f2d147cd80aadc46e6ea3f5ebbbb79e937e7d9b350b5f1be4b41954bcad2cf6b612f944735d790f34fd113b842cbc88c0366c0142aa73df874dad4a78938993822483e11f2a98a2e1d4316167276237fdb7179f88319a
+PK in G1 (compressed) = b8fe4f975c717d2f657f2d147cd80aadc46e6ea3f5ebbbb79e937e7d9b350b5f1be4b41954bcad2cf6b612f944735d79
+Signature in G2 (compressed) = a3c2c553c0e925ea4c9893ca4f59b9440572827b67c5eeed54d98072fedc62f245ea57d040e0518b0855d88eeab7c385016d1787514fb108d979fd31ad79db79cb98f84d83a55aa979765033feeadf8054d034b3982d2cc0ce976e29f117f8b1
+PK in G2 (serialized) = 1818a42bfb80c918279c8992a6fd2fc79892f7f0241e0c8006e7e52b0c2fbb7e3f50446802608402a81f347c83f576e40492d55f36295dc128a2057b3cdad69548f59cdf8ff85806e2456baa6147eb9f140aa2ba8c4937640fcf83ea27699c170dc14d0916444ccf9706b37b49ff92ac515ad2e03d68972ca964d37c3a8893710df41057c606af1511237942e807ddcc009af3f3af1d4ea231edb812e29f71c9eb87efde722a1c115cf1af37410d66e17ea1079265c709522404a2bc95792438
+PK in G2 (compressed) = b818a42bfb80c918279c8992a6fd2fc79892f7f0241e0c8006e7e52b0c2fbb7e3f50446802608402a81f347c83f576e40492d55f36295dc128a2057b3cdad69548f59cdf8ff85806e2456baa6147eb9f140aa2ba8c4937640fcf83ea27699c17
+Signature in G1 (compressed) = 88b78c2491692a2ca1744fe82c4e27e324de5c99c9422b89a000217ae7b2cc964f54b344abaf43cee2215cbdf264a860
+
+COUNT = 175
+IKM = 00af5e0dbc6b1ac97827d68534e39241f09f4efdac5b0ab96817c67524d38231
+Salt = 4a856b46cea432b7c74f64b1c9c2c8f802c785ddc1c2ab5dc27bef927305ac52
+Info = 4a856b46cea432b7c74f64b1c9c2c8
+SK = 72e92daa6171d538f929da8998fc0929f1645b9c450dab23c81d5a3e6d1cd8f7
+PK in G1 (serialized) = 06735bf6b383cc76171c0c78ce507c0e4983bd9a0840745575ea41d747c20c2e1629446942d8a061156bd9406de24d6b1772d367b8c88a2259f247ccdb3d778ea0e0f6ba6a742b26ecaaa4a4435189b584c35b73c80a95975f8dfe82b192c568
+PK in G1 (compressed) = a6735bf6b383cc76171c0c78ce507c0e4983bd9a0840745575ea41d747c20c2e1629446942d8a061156bd9406de24d6b
+Signature in G2 (compressed) = 83921a6ed4220447714169ab894cace3193f3bf909c695ffe7d3b7482b86c14d3f48cde9d063bbc288d028d99e15e027011992713fa511c298d35b7e206bd93f02a1690d56e6764e58bbc075c5b93435bd9e7c2e2bf13c476fc344dc8ec38e62
+PK in G2 (serialized) = 129cdfc539924b3e5027dd6f138d509d0085e0029e3904482f137d73f2f05ec3f314c9b92ca7e2fc62062424d7322c1e0d83093b7a03ab0c570a0170a9842dcb5d115729c1e280137c20581a07d8cea30a30c8684e6867791a98ed673b16a72916cf84d945a03cdbd123286f3b07aff2af0fbba5e1744b0d385b3a5f09951130932e8fe3714091a8c7cb9a08ffe5a48807df8c2fc4c402854b3bf3ffe76ffdbea14496c9c675e32648de7516401a5fa8049600026b5bd7fc05952ecc6bf16e4c
+PK in G2 (compressed) = b29cdfc539924b3e5027dd6f138d509d0085e0029e3904482f137d73f2f05ec3f314c9b92ca7e2fc62062424d7322c1e0d83093b7a03ab0c570a0170a9842dcb5d115729c1e280137c20581a07d8cea30a30c8684e6867791a98ed673b16a729
+Signature in G1 (compressed) = b2e2d9cf4c8854124b1cbc37712f236ae4def9f49eec3b2f91d3a4b59331ce62feda14ada821b80281876204658516a7
+
+COUNT = 176
+IKM = 00b06010c07020d08030e09040f0a05000b06010c07020d08030e09040f0a050
+Salt = c0cd1df8fd66d3c7f9e34eebb1ef78178d59ee6ebdc27704883ec423c2d3e65c
+Info = 
+SK = 72ba5f968eb5da939380d49bc2623d91c119d0d2c9fb96ac10853c25535d0f9d
+PK in G1 (serialized) = 09856e889f394967448c7be2747b0144c94d14f06bcea01c290af29dc4995535d45a06ddde0f6c2c5be1092c10dfcc130f23f466b6fb392a47f43f6c1f62bde076788c3f28a981b40fa34a430121bc61cea9def26287435623f29e3ae9e044df
+PK in G1 (compressed) = a9856e889f394967448c7be2747b0144c94d14f06bcea01c290af29dc4995535d45a06ddde0f6c2c5be1092c10dfcc13
+Signature in G2 (compressed) = b7991d2490794c58860c3ab312307058bb5daca236ec9a1def6a7d06514967144d6dcb20c0cd89edf15c64699c10bf3f11e2c0cacf63642c9ec597a9ea6b4eab2bbcf07d6fef0a37853ad696351b18d80080b69a8260570fabbf5a7bb41d5c75
+PK in G2 (serialized) = 03578c84a0d7c39c60119555b92e758f2cdb91eab125bfd2542cd6e22e3f121001f1f4ae21f1bd0cfa9c0289697e3cba0dbe46b3df170511dc7e53ecad44eb42d4cdc50c298735d2cd62f1ee70e80c7b2984968bc5e05c59142abb64e6bd7ead06cae54126721b730078b5c14ac4cc26f25207619fbce531406a77066f194b790dbaec32a26b449053633e59ff3f0bba0789ab108a341d283fdd1bfe4c481a619bbbe1f268ebe449e4854b577d6f2334f4a362a2f77cd91e84b6b5f90b22f56f
+PK in G2 (compressed) = 83578c84a0d7c39c60119555b92e758f2cdb91eab125bfd2542cd6e22e3f121001f1f4ae21f1bd0cfa9c0289697e3cba0dbe46b3df170511dc7e53ecad44eb42d4cdc50c298735d2cd62f1ee70e80c7b2984968bc5e05c59142abb64e6bd7ead
+Signature in G1 (compressed) = b939b86c2865c18a8846b39d952e6559aee77c98e04df03cb366ddac3b88e5b7d0929c3c305fbf3045cbe2dadd8ae5dd
+
+COUNT = 177
+IKM = 00b16213c47526d78839ea9b4cfdae5f10c17223d48536e79849faab5c0dbe6f
+Salt = eb6e68624453c01b5baf9bdb528089639d86953ea9f4ebef23a66cd28251a34f
+Info = eb6e68624453c01b5baf9bdb528089639d
+SK = 3ef713e48090c7f09645ae056b96cf4734718741a41f9985625fa9326f447267
+PK in G1 (serialized) = 03740e1e959cf69640f81c092ac1e9e1a785af1d6ff907605d6c67ac57b3de37d68539ed2d98b782506ebf6fe8e6df0f163251aa3b5ead393dbe6f6c105f33bbbc710ac8baf13fcdd025d6e56b5b373794eff9a0ed2b7c498fe1be432144afeb
+PK in G1 (compressed) = a3740e1e959cf69640f81c092ac1e9e1a785af1d6ff907605d6c67ac57b3de37d68539ed2d98b782506ebf6fe8e6df0f
+Signature in G2 (compressed) = a6956e213ec388f04d5fb140e19b483996f4e798c61002d26dfa92388c82685702edf02bfa2cf71b853e7ccfc77f72340ff11900bd6486a1d628404f7a3c17db12e477ef201e1109e2543513635ebbe73bba63a580bf7a0e29006cabf689dfec
+PK in G2 (serialized) = 13fb9ee5cf657125c69d1c759d90503df6c25e85a49e57ba85f4459fb5cce96c34ffa4d4e7e18bb45afd9593a6d077bb0ff9111a3d6afc45fa5906d05fe193da6587289f128136d1365e3d407d87253b0b1003d78062f3f09f52bebd590c64d711b981c4b5f82886ea7bb215dbbc3c56f713c3b85cfe71b2691fb10b8c36df7da2ff9f58bf9645c066af81289359b6b30028f2f692aace61fdce1e015dbe6b33efaedb0983efbbf74ae3033fbbc913a7781e6252be38ce5b3f2acfd6d8377a6d
+PK in G2 (compressed) = b3fb9ee5cf657125c69d1c759d90503df6c25e85a49e57ba85f4459fb5cce96c34ffa4d4e7e18bb45afd9593a6d077bb0ff9111a3d6afc45fa5906d05fe193da6587289f128136d1365e3d407d87253b0b1003d78062f3f09f52bebd590c64d7
+Signature in G1 (compressed) = a9dc72b58b3a9ea91ad5dba44dacff97a36508241d0036b63421f7bf18adb9ae54cccdfdb16aafb1289b86d3782530fa
+
+COUNT = 178
+IKM = 00b26416c87a2cde9042f4a6580abc6e20d28436e89a4cfeb06214c6782adc8e
+Salt = 6d6a0148deed4684e55b7ee693bc9c8d60ba3e68893258760c1b319434c5e12b
+Info = 
+SK = 065d8ef1832daa739c9b14082ccd23a36fc4de0fb9866a357ce7c8b8926da5ec
+PK in G1 (serialized) = 13a98635ce92060b8c720c9054043abc551f5dc4894bbb9ee64c3920826b7393b7760b62bd5c7577a5787fd189dd089f14867d092cfdeaf83c7d9cd91e44b97254e0bde4ae20f4bdce3b61d9d82240799d56dff103d9cbbe41b40d9ff7a6231d
+PK in G1 (compressed) = b3a98635ce92060b8c720c9054043abc551f5dc4894bbb9ee64c3920826b7393b7760b62bd5c7577a5787fd189dd089f
+Signature in G2 (compressed) = ae7dca24bac1ba68b03a1582232a797c8614647e674bdb48a5f0c78a26d046afc2460534aca8da26f22d461021b058bb184d099187b6e0e706cdb66e9d365dcf46380aa592398f353e74ab63b093973b8a062bb6200c94d2c0cef0681ef58c21
+PK in G2 (serialized) = 18740e906d8a5637c449416cc98d75c703265e51c8605760497b927df4d5e582a46e12833a16247738d3fa433fbc68b8190323f29a6802e61a5cc765441cb983d9593598561799211bf82dcf09fce49e60d79b94c25d1734188f3039ebba91c40cd90e09c9438ad7a5603072c417a9bbfa6c2bffdbb8e3a47962b7a3e15368e363cae9a015f0ede27e52b37a2d753e7c01ddca089d8b363eee05f72ed77102c71896d55fc92661ab9dc5a2689fbea3e4bccd23d7688b23fa9a5c953aca9c55b4
+PK in G2 (compressed) = 98740e906d8a5637c449416cc98d75c703265e51c8605760497b927df4d5e582a46e12833a16247738d3fa433fbc68b8190323f29a6802e61a5cc765441cb983d9593598561799211bf82dcf09fce49e60d79b94c25d1734188f3039ebba91c4
+Signature in G1 (compressed) = 83a8ff77f03b53bc010fa3b9275a7b4332b6326af947bd0b21f6d93003b1ed85c3de19a42c6a33b332ceeaad43cf5068
+
+COUNT = 179
+IKM = 00b36619cc7f32e5984bfeb16417ca7d30e39649fcaf6215c87b2ee19447faad
+Salt = b8f77dc9598998e48dc2fb9183fee9f068fa6a58c24314a9b5b289b26af0356f
+Info = b8f77dc9598998e48dc2fb9183fee9f068fa6a
+SK = 5bc90e4cc6fb1ae21f886d1aec5e63470459e2c42297e21ef62bacd7c051170b
+PK in G1 (serialized) = 0cb57ec83ad0504f33cee3dd987d4ad6397785178fca6412f8235fca88860d1ca7cffa7d6b6d82e5731ad21638b43f5205a731aafa61e465222c0e6b21986ede428bd9fa474a677e3a587087e550f4028d0d860d6f261a2f82177f037439c9ea
+PK in G1 (compressed) = 8cb57ec83ad0504f33cee3dd987d4ad6397785178fca6412f8235fca88860d1ca7cffa7d6b6d82e5731ad21638b43f52
+Signature in G2 (compressed) = b27ee4c6dbff4a35655f9b444d71f536fb5ceaa022371b546f85a1007686f225ee5f15d3cc29d0409e387ea30aad76751723edde188b2856bde2969f586d67af6b8f6bda37a38dfe4c547c28b8891d0dc9320e374c300f8265dc10b6d3839a43
+PK in G2 (serialized) = 083416d811725819453501d579b8e3e1642d9cf3604f6261b5a75383f2b3c1ecafc9db73abfbfbc7d85622d81eb6b5be0ed22f9f6569c50ad1d3636dd9eb242e42f5099f0e7fef469b2eff45a17d640081fb7f60929ebaa167211db65e91256b03a1245a2a6c0e96406d1733639a99b8d35bac73ca069bf5a2b314a8dad923c9916c3b0a46da1b6f9bc96cbaa1a58efd102ca35c483df663168fc365ffe30c228c26102ec01aadd2f25bed5cb49861cc0e179b62790765a8cda2256476c5789b
+PK in G2 (compressed) = 883416d811725819453501d579b8e3e1642d9cf3604f6261b5a75383f2b3c1ecafc9db73abfbfbc7d85622d81eb6b5be0ed22f9f6569c50ad1d3636dd9eb242e42f5099f0e7fef469b2eff45a17d640081fb7f60929ebaa167211db65e91256b
+Signature in G1 (compressed) = 837fd20b3bf492dce56fa3d41beb3f8b0ee8b5a3329e2f268af99bfe07f0277275f5fed7727387e48e128bf9d3670438
+
+COUNT = 180
+IKM = 00b4681cd08438eca05408bc7024d88c40f4a85c10c4782ce09448fcb06418cc
+Salt = fe12af14da4ee036be6696fcf69d771e07406cb394f9818cd0d1627e1e2cfbd1
+Info = 
+SK = 319f9dce0a7c97fe7223decae5b484ec233ba02289e0ab9c1e6c8e30ea611d31
+PK in G1 (serialized) = 0ab6fb27150fd269f143fbbd52fdb700b6e620316cf293009b1ffcdfe85aa5053f3ba6bdfc6ffc2153ade097ac1bc82b0b6ba25278539bca1cddddf007572fa6f298ceca40d644e7b77a3bebcca42c630f37b9c84ab7ad5d09ddeb86ecd41a28
+PK in G1 (compressed) = 8ab6fb27150fd269f143fbbd52fdb700b6e620316cf293009b1ffcdfe85aa5053f3ba6bdfc6ffc2153ade097ac1bc82b
+Signature in G2 (compressed) = 88f897d62752f48d3906016fec0799305882bd79b7346964a360667686a8062f6056956e42d5059361dea57836e5fe7f054fc8ef1b37251438b8817ba0db7d0d36397a166c756640a5097e387b423a8d34a1673fbe2cd9d6993d3dcf0cb575a8
+PK in G2 (serialized) = 06412b53fbb9eb7f425f31235aa7eba926747ad3419c446143863b34da2e21b861cec7bc7409bace6d71f8de1d07f3e50aed3a179561a35e9d4c1a3403c3898950b8cddd11cb1124cc3a37b2ed4494d6cafcba9c284717b583a0a0a96fca286c11adbc01d634476926bcf2d5aea44c309049e1e031b79f36aebd9e3ceb284dcae6634aeb08102fea0f12348ee99b017b18d0539ecf33d52e7db79076cc8cc4266a169da619f9fe4db142329bb9b6e12a403be45383150e2fa8092a122af7c0c8
+PK in G2 (compressed) = a6412b53fbb9eb7f425f31235aa7eba926747ad3419c446143863b34da2e21b861cec7bc7409bace6d71f8de1d07f3e50aed3a179561a35e9d4c1a3403c3898950b8cddd11cb1124cc3a37b2ed4494d6cafcba9c284717b583a0a0a96fca286c
+Signature in G1 (compressed) = 89c10bba8d24d7bfd8b8991d9ff2d042fcda0bea708d173e41c2a0a5659d41957df29735c30586599a804464a2644465
+
+COUNT = 181
+IKM = 00b56a1fd4893ef3a85d12c77c31e69b5005ba6f24d98e43f8ad6217cc8136eb
+Salt = efb5bfc878ef203a503987e2f088f88f4e2db6ddecf0311d98adb00fcbb3f82b
+Info = efb5bfc878ef203a503987e2f088f88f4e2db6ddec
+SK = 0c2ddf8ca09ea26c3a3fa407741dde575947d221fda8532b348092d3b310ec25
+PK in G1 (serialized) = 019be69da10f8bb9a9b3b4dc40532adbe1a2f67410eef7f15793115afb4836d4f20d036f72fab014bf9a3df6c5808b140b6c6422ba1183eddf972ecb618e085cb579542cda8e5c2cb0901b0f79f2aa43455762576a3788df4e456090bf5eff9c
+PK in G1 (compressed) = 819be69da10f8bb9a9b3b4dc40532adbe1a2f67410eef7f15793115afb4836d4f20d036f72fab014bf9a3df6c5808b14
+Signature in G2 (compressed) = 88f0eac6e92647ebb87f83a97dcf9ec92a223d8a2b53e695f9277f4d6519a32279fd3eb4ecb64b5af04a718d5c51cd60110e4a5073ed3092f56b7c172fde5b973c3c56bedf4ac99c9ab30a4d63330e445fad93a0a0c54e63af0cad44542a3805
+PK in G2 (serialized) = 0aafb5ac33aeffaf72321149757223501e13a3566c55267a7f327bb0d2f18c62eb59cbfe526608616cc68d1d3e4a6550081649ac4428047f248847d9a95a5799433bbd8c4bf7d1184b8faaf0dc6215c69d8ccec1d9c4dc2a353515d5f70b6a60120483a9ab2e5f98d1a0dd222fe33e4e59298b7d4af1ac0fca78fff1afafa2c6748784297a070b5d13f5f62310c1759016ca76eab437f928f4d450b016be1efdea17a0131893dd4e24c8b63a2bae6a5124b26b978bbd0e124471fe100a99f6a5
+PK in G2 (compressed) = aaafb5ac33aeffaf72321149757223501e13a3566c55267a7f327bb0d2f18c62eb59cbfe526608616cc68d1d3e4a6550081649ac4428047f248847d9a95a5799433bbd8c4bf7d1184b8faaf0dc6215c69d8ccec1d9c4dc2a353515d5f70b6a60
+Signature in G1 (compressed) = b0f41037cba63dd755cd6a012dbc1cd2529c5747cdb8694658e6c067bf8866a96171ead2abda518293022d09f974286c
+
+COUNT = 182
+IKM = 00b66c22d88e44fab0661cd2883ef4aa6016cc8238eea45a10c67c32e89e540a
+Salt = 830b944f7ebe547302ea6dacfc17b437e27f6dd728bd80802b06d5c65fc75be1
+Info = 
+SK = 04b25f92e0d4346aaa837c139fb167bf532c4d369ace566f0afcfe42169cc1db
+PK in G1 (serialized) = 010050dd421e485d30873cb4748618e7e98e585eac8f6b51075a1957a36ddb357176269ffe4eb5f0a1261e78896a80e004184304133f512ebf01f351ab454ed1cdcb9a795dd5796f881d94a8d16d5885e39f53848973dbaeb087f34038f645e8
+PK in G1 (compressed) = 810050dd421e485d30873cb4748618e7e98e585eac8f6b51075a1957a36ddb357176269ffe4eb5f0a1261e78896a80e0
+Signature in G2 (compressed) = a57da37514e7b5d5f9f989528aee5e55f7a068d674d1ac739cefd6ec8d033825c606c65b71ec80099ade60d54f41ccd70b0bf74ba7bdf9a8a2ddc75bffae2c7e0411609b1cf52812e450d8f518e0874dbe96f9e44b06f8ee7640e8e00d04c521
+PK in G2 (serialized) = 0b433ee04ded988d1ab077445287f9763e2fe556a658cea3b16e974a6f257eb0ac9285b64c6088c875059906e3e15a43086a09490e31dcd318a08ad65caf16d2940b42a0b2f818d368af5e808689339fab7b2ded1ad41a99bdeee5084730dab7094846133c6545f2f207714f2de3eb43d450812547813d629231b4c3610174279b3d5cd54c89f65fc01347c49a9e260f19b74f823b2d33ee6e2d3ee801c49ee02d08d24e46285cb4fbb131d39ce150d39a6c2678b61ae1129e41453f87a42f23
+PK in G2 (compressed) = 8b433ee04ded988d1ab077445287f9763e2fe556a658cea3b16e974a6f257eb0ac9285b64c6088c875059906e3e15a43086a09490e31dcd318a08ad65caf16d2940b42a0b2f818d368af5e808689339fab7b2ded1ad41a99bdeee5084730dab7
+Signature in G1 (compressed) = 81940d1b6df91a1a1705362a3f54273142c9e175bc57029fb1b00465b5972cd0366eb9ab8bf488b2f3122de4d8740d43
+
+COUNT = 183
+IKM = 00b76e25dc934a01b86f26dd944b02b97027de954c03ba7128df964d04bb7229
+Salt = 90c869ef724a64ee8f60f6a374696fa9679547563e96e4b120095cecce09a715
+Info = 90c869ef724a64ee8f60f6a374696fa9679547563e96e4
+SK = 16fb7621c958020f16ebae5f91a8ab1517f8aaaa3547c716c96fd4b39e43f19f
+PK in G1 (serialized) = 0206407a7978dfad91f9a478cc0cd1120995b2f8b478a4fa6e0ca3daf16c3a944b808918233916ee5285d99a9050d32211de4cc48d317491488840156f5efe35a85f7d565f6358fe5f1b7e635294b188a5c108616e2644d027f6ae05769b1418
+PK in G1 (compressed) = a206407a7978dfad91f9a478cc0cd1120995b2f8b478a4fa6e0ca3daf16c3a944b808918233916ee5285d99a9050d322
+Signature in G2 (compressed) = ad53d57cad344c0912ef674ec86671c1f975168ec650df309252d4ff7b468759dfd6de8f24fee8d6a2f29722e86dc442100947067ecfb1f144fe63cfb5e9d1df78cf0380eb952de4f9c25d18757b128177bd287942776c86d47ede0deeb1ee01
+PK in G2 (serialized) = 068e55b15b472d93ca02af07dcc45bbcfc6c8977955abe9a560e91a0f15099fa6a99260e1d4e393a4ef21b4608b3b266027a97e411c45c54ab10246d0aa674cd3f6d2a3bf6a8eded5ddc69fb3e368383a51ed969215dafdd86bc46225ed3a3ca038b0bc7aa719a8fcd058b57518aec71cf48b3df0645d9258f9e4d45925a7b227ca71ad3fce4868e39affbc49154e5e312ab2cb77d25c4a27ea3b374dc30fd603256037ec205840294e28e7306ccada1ff136acb02ff9ace1503e275cca337fb
+PK in G2 (compressed) = 868e55b15b472d93ca02af07dcc45bbcfc6c8977955abe9a560e91a0f15099fa6a99260e1d4e393a4ef21b4608b3b266027a97e411c45c54ab10246d0aa674cd3f6d2a3bf6a8eded5ddc69fb3e368383a51ed969215dafdd86bc46225ed3a3ca
+Signature in G1 (compressed) = 8fa5986d9a5ae511a2d3dcc11041f973b9ed720030e144cfccaf04a9413f70f09c32a1483a1f1592e43d2e80c5386405
+
+COUNT = 184
+IKM = 00b87028e0985008c07830e8a05810c88038f0a86018d08840f8b06820d89048
+Salt = 62b18107e01d090a6d06d052b8e9bec3a9d703c06a4e13c8c8be69d08b1dd8b8
+Info = 
+SK = 4ed5782237adbff5e13416cae29ecf1fcf71999d91ea72b954905c0d052dfda7
+PK in G1 (serialized) = 13ff7f5da35996f33250eafef7925e9de006c8ff60714f2716e961e08f31bfea64ce2903610212b76ed27bc3013ed93f01165a8f525d0c37bf0047634f96eb6c8e419df8daca3d8920fa6d853be022fece05e7ef4ea9d87fdd5cc30448b4f20f
+PK in G1 (compressed) = 93ff7f5da35996f33250eafef7925e9de006c8ff60714f2716e961e08f31bfea64ce2903610212b76ed27bc3013ed93f
+Signature in G2 (compressed) = a4b0869e9c6ee0748e112a99dd51ce09e249890156cdddbc35d3e8fe8ecb8332d15753fc0e5d591c3c8088e919649c6e02ded5ae9e714d4a329647f830f610891cdee7b4c4cfbb8ef27503dd29151d069c74f99b211f260f6ee4db16b5b1ea51
+PK in G2 (serialized) = 04b6182daeea827ba5ec9453b2ef64095508bff5c5b822b2faf38a56fdce22c20d3a28218ad7d20747b612d8108eb6511052ca0bf81584caed89c52013ea97ba35ad780c66fb1d6282db57ea3def6a7337d60fc1f0a11fd7495b95391526c0040477f6fd5b589fd2964191625d51552733a1dcc9daaef1e5f420a1395ba8fcbcb0d7c7b27c405cea87c485696b52c5d8067f1b5737004aa2d8fc24a463e10c18f6c9442aa78d536482cebe51cebe1de7211fb232c119ef3204daea0c54c024b6
+PK in G2 (compressed) = 84b6182daeea827ba5ec9453b2ef64095508bff5c5b822b2faf38a56fdce22c20d3a28218ad7d20747b612d8108eb6511052ca0bf81584caed89c52013ea97ba35ad780c66fb1d6282db57ea3def6a7337d60fc1f0a11fd7495b95391526c004
+Signature in G1 (compressed) = 931d6116df4529510898d2b1bb4c19c68e714887695825de10bdefb8f9025cbc6d7f2ea0907a5028b4c1c4999bdf6778
+
+COUNT = 185
+IKM = 00b9722be49d560fc8813af3ac651ed7904902bb742de69f5811ca833cf5ae67
+Salt = 8987d5d30e99a0b518bd634c827bddde9abf50fc980db99cdf6e1e7d18d43b56
+Info = 8987d5d30e99a0b518bd634c827bddde9abf50fc980db99cdf
+SK = 450f0ad184de8627e262602ce9d4e66dbc303eadd4f3c3c29d8fec56b830817b
+PK in G1 (serialized) = 0def90facec67f6e9eafdb1ae56c6c3475f27bfcccaed67db6ebf947f7e6c1d0b28af46fdd93050ac59e44e1e643331c0e1f7a882e8ee47c99314287a988dd2eec7cbcf81d05d0ad32512a09b838526c7ba2de145580c50c1f332c62da42e66a
+PK in G1 (compressed) = adef90facec67f6e9eafdb1ae56c6c3475f27bfcccaed67db6ebf947f7e6c1d0b28af46fdd93050ac59e44e1e643331c
+Signature in G2 (compressed) = b6dc3eba72a3314a955c57250570c4e0096deb686082c0deb66d5c731665aff0dc73a05f8bfa4e617f91c6d8ff3e77c410025cfaec9f683bc30f316c802811760d7e75b899f0cdfa27cf7271004a859368fa0668a18ecbb43484f358105395c1
+PK in G2 (serialized) = 0205da66fc4c3c68794b357e1faee03fa52c8b861f598448d1639adf7d47957aa5a3bbda18dec747f6ea2e5b259cc24d060119dde05d0e67554e9238ba9d1690adeddc124a61681b02628f5876dfcb5747ffe2fc7f996bf84aa905af215da2bb19a1a7393082a101132321e5a81268456b9e7215b4a84c68351c9e2a62c920f9643fa25cf2ad182715ebf34d946e172d14f005e375786536dbcb9eba3f9cef5efcfe5811f418a28de6329aa7b1c0740e8a754dc4db7ec747ff27a80dafc78486
+PK in G2 (compressed) = a205da66fc4c3c68794b357e1faee03fa52c8b861f598448d1639adf7d47957aa5a3bbda18dec747f6ea2e5b259cc24d060119dde05d0e67554e9238ba9d1690adeddc124a61681b02628f5876dfcb5747ffe2fc7f996bf84aa905af215da2bb
+Signature in G1 (compressed) = a045b9df54a6b9a19a2517e4c863072744ec8d341462cd886157e56210e2ffd0862ad86790e61343398e28ce166048c1
+
+COUNT = 186
+IKM = 00ba742ee8a25c16d08a44feb8722ce6a05a14ce8842fcb6702ae49e5812cc86
+Salt = 6704d423711381144b84c7444fbee3db3cf75e20638ea8d7b126f4216248c587
+Info = 
+SK = 450504ea1e30b2e0d29811a30af5f0bb4b1b53bdfc39513e71d01f1ddf54c4d5
+PK in G1 (serialized) = 00ca7b69ec12767a919f2b1e1a1f3990f486caa19e998dde4b5ac7ebac34fc2f69bd7cc58b544014463dd1ed37255b970f23d7de6a1dc98b88a719b46cd61e9aa2affbc807e21de9232b460dadcbee2780475eb32eb0eca995b3364452ce50c3
+PK in G1 (compressed) = a0ca7b69ec12767a919f2b1e1a1f3990f486caa19e998dde4b5ac7ebac34fc2f69bd7cc58b544014463dd1ed37255b97
+Signature in G2 (compressed) = a1b0477ffbd94fbd50d0151b17ad4db5d77d018236d1ff920d242dd99226d936a6ec83f5779f3f2388f5839ce3cfb1940f4096a0887804b7ba5e1fd00661b22e81b384ab780bd67453e66ab2dac7bc0e12a244c6630f1c6ae0483491ef837cf4
+PK in G2 (serialized) = 10bb177cbbbae4f2ae1723f69cf9607ce21f25bb70467c7555aa053315e9fc95dd98c2609ad00fb3b7ce409b97cd35d800685e5b242c212eb95c2fe01e0f78c0daaa07e8802ddbf4c772e391915179d966ce8879a7864c8da1d1d323167daf7d0bfdea5348904e4ba6346a6372a3e10fd6d4f90c54d60e395fa1df45249cc3960a0f863cf996cc7771f08d335caaaeb10b1dc0564260ac76af4893c5d89d4a03bc6c3d20a65c1d2ee32580bc8ea6fef56b7c33188c9c68ada1df1f25e4dbac27
+PK in G2 (compressed) = 90bb177cbbbae4f2ae1723f69cf9607ce21f25bb70467c7555aa053315e9fc95dd98c2609ad00fb3b7ce409b97cd35d800685e5b242c212eb95c2fe01e0f78c0daaa07e8802ddbf4c772e391915179d966ce8879a7864c8da1d1d323167daf7d
+Signature in G1 (compressed) = a750ebf6c47051fae4da1341c9a12e1507754a5148fc000ab22db18f7c0ae76a047eefa58d36d1cf2d2124cf77bddcc6
+
+COUNT = 187
+IKM = 00bb7631eca7621dd8934e09c47f3af5b06b26e19c5712cd8843feb9742feaa5
+Salt = 645e0cc30dc6100350aae9270b8b558ee300c4c2812abb69f532c7f33f77b706
+Info = 645e0cc30dc6100350aae9270b8b558ee300c4c2812abb69f532c7
+SK = 39a779d1ddb21395843ff18fd3b8e48c995a90e9d8302f666dca5db333406505
+PK in G1 (serialized) = 092dbec87a4bc5fcff6335f423e4ed8b07a56cf21625a56a6a8cd674d09790904e8014c6fa72f159d95bd37137bb058001de690c651e432ccc7bec3c599445e950d52663119b033186c086fbd54c3f67d34b1ee100a6e55b80d4c8f2e09b42d7
+PK in G1 (compressed) = 892dbec87a4bc5fcff6335f423e4ed8b07a56cf21625a56a6a8cd674d09790904e8014c6fa72f159d95bd37137bb0580
+Signature in G2 (compressed) = 8cb033f7cde922a3f39d840ce39d9b6a6d39d622b29348604da5d64cd92963a0dfbd607ea994ff6dcf8fa9af54ed27b518b51316c1e0f0e4c9b29228cf3e8051cf1dceedc176de94dd4f43963886aa8501ed7066f55782fb5cbfcd4d2cd87360
+PK in G2 (serialized) = 0dce599450d1d70142ca6888dae15265dcc27a692a8bf0b3ed3622bb217608d74fa7762864ede1470cffc1e187fbe51c07eb2afbca22fb7ab190d4fc5c08acc05e06452a08bd501c984b565762add2c7fe5f8c1c51b5d7a773b25deda206dd9d0b9da2fbde5fa24af5700e8cd2b2297f63c70173a940fafc907bb31835a3f9796f36c1ab1b4fe3b8a7ce80d5fa9e87b5115b06987255db34ad22542e128868697748970aeb59b49606d9466d0584ecd058c566680a38a3442895de5ee6fc81fd
+PK in G2 (compressed) = 8dce599450d1d70142ca6888dae15265dcc27a692a8bf0b3ed3622bb217608d74fa7762864ede1470cffc1e187fbe51c07eb2afbca22fb7ab190d4fc5c08acc05e06452a08bd501c984b565762add2c7fe5f8c1c51b5d7a773b25deda206dd9d
+Signature in G1 (compressed) = a2145de142fb9ccaf2288d390beb988fb8a53e1c859a47cacac6c252ad67bf0bc28843e42fbecc0b54cb580e605d911d
+
+COUNT = 188
+IKM = 00bc7834f0ac6824e09c5814d08c4804c07c38f4b06c28e4a05c18d4904c08c4
+Salt = 55f9b764be478143d69101caf2789b25b5da26cd2a61d7a6cda7b267d33f0d33
+Info = 
+SK = 276b84f7d1a6ed12e31a85d5764b447358abc8f5e648031c1dec8d23cf1d472d
+PK in G1 (serialized) = 0e4279e1a8465432fa67a1c47829e3072d572d25865ef90f7202b7bbd5b8221364a89b74287ce29dd79085f3b650fbfd057eee5c497c8d730c821323ade9baf99133952c616a2d71cc36b1f76e71bcd227e40cd627f5793247c6914925745240
+PK in G1 (compressed) = 8e4279e1a8465432fa67a1c47829e3072d572d25865ef90f7202b7bbd5b8221364a89b74287ce29dd79085f3b650fbfd
+Signature in G2 (compressed) = b34109c87fcbc47885b6fb4ff40511072378ba07747363dc2badedb3afb7dffa1e07573704612309b4c21ccf4edf177c19ddc9f4401f59fca6221a58f2fd32275d4b449543754ce73a692fb00a61ea882838d41efdfe8667fdcd1ed1094c779b
+PK in G2 (serialized) = 1557b0238e8a962992de9876e11f1ab9d53029a6f2ed8c1b92ba1e7c50eb95fb801a649af171641d45b27af27567d43c194afa73feaa0e90692d0e59cf94aa7eee8710f6e96292093cab4cce9247acc257b279312ecbacde58e895d4e1772435196c5c4be2acf3aa8fd6d5ffadba4511f70a78a0ff90207bb5ea5fcfd1a339ec94074d46362fe5f5a5f3237be0337e7119d3abc240e9673c73016b7e32b7ed93156c6844577891e0a7a1997d6597f3837eca5ae7eecfd66d9c377c073a8fa3a5
+PK in G2 (compressed) = b557b0238e8a962992de9876e11f1ab9d53029a6f2ed8c1b92ba1e7c50eb95fb801a649af171641d45b27af27567d43c194afa73feaa0e90692d0e59cf94aa7eee8710f6e96292093cab4cce9247acc257b279312ecbacde58e895d4e1772435
+Signature in G1 (compressed) = aca30c6fd07d2b154f2a9b49bf53ca45119fc45fb6295c4fdab637118647236b7a09a64e3872deb992aaebdbb18a9ddb
+
+COUNT = 189
+IKM = 00bd7a37f4b16e2be8a5621fdc995613d08d4a07c4813efbb87532efac6926e3
+Salt = 37d8e91cf0258bbac354584a953534ac804d223b45592417ae4f925617224e3b
+Info = 37d8e91cf0258bbac354584a953534ac804d223b45592417ae4f925617
+SK = 23cd97d0372b51506d3d991c44e6a07af9e6f4c57ee12f41586b1b5ef8ea5563
+PK in G1 (serialized) = 15c5ae59b10b278bf800868c17cc6187b54353fd33d99c793fb6636799113789ead6117a139a7faf6f6b877a3797c5db1182609e93c77c69882f359d9606d78f8b915c5656df3e2a5a70e0947d5e98bcfa9366df179bad5aaf51ad54cffceba4
+PK in G1 (compressed) = b5c5ae59b10b278bf800868c17cc6187b54353fd33d99c793fb6636799113789ead6117a139a7faf6f6b877a3797c5db
+Signature in G2 (compressed) = a068c97afd1e67d48e0a96f7319babd6fbc546a0d52df3f05c96c1831d18b4ab5c64d6b83dc6b49909022fc09c8d72b60df0a5591d9752de690480e56339e081c0768836544dec77543465f40ebf398da3df10c673a2cc0d5d26dfc66e07609d
+PK in G2 (serialized) = 1747c67de1676ce1cd78123e1ac623c9157739e0f77bd7297f0423069d82155618181454c843f80bd8bfed2838c40e2a0261494804f8c9a222ea0ef3e397f2823bfd9f05eb7f9daf2af2e1eeca6f783cbb930622b77c4f9b4dd093ed7bb3d48016cee59eda3b6e942302d254c680c89ff27d3a24ca7237ab0fd7e4d196f6bc8a5c3bfeb307efa3a2e062bd4858fe7430090358ffefd78b6608323d6ca74e85970fbe1902986b1d87a89ba5a41a5d31b2698c0ca48dc5eb53b3358afac9e1c38f
+PK in G2 (compressed) = b747c67de1676ce1cd78123e1ac623c9157739e0f77bd7297f0423069d82155618181454c843f80bd8bfed2838c40e2a0261494804f8c9a222ea0ef3e397f2823bfd9f05eb7f9daf2af2e1eeca6f783cbb930622b77c4f9b4dd093ed7bb3d480
+Signature in G1 (compressed) = 83cadbea292ea43e36d57cf3fcd3b1da05e1d44bfd99f3f0fb408329c599817b64813416bed787282d967582184e06c9
+
+COUNT = 190
+IKM = 00be7c3af8b67432f0ae6c2ae8a66422e09e5c1ad8965412d08e4c0ac8864402
+Salt = 83560749ec5a52b77f5acc1189de9d8afa917f36ea0f78d42f8d507eefca2cd1
+Info = 
+SK = 27da3d2e63a15e641a0220f91b2745371cd2b8d6e7ff67cc0e3eebae20ab0ab9
+PK in G1 (serialized) = 02af60b948b47347290c7b28d8ab3837f3a06b0ce0ae97ad12365bbf5b155721dd224ed2c2edb848c7f229d14ee001fc069d1aed427feb41fc47ec840559db077504265b6a6140b1d2de89f14d91634b71a6e52752c4c70da172ec5cf4f15a80
+PK in G1 (compressed) = 82af60b948b47347290c7b28d8ab3837f3a06b0ce0ae97ad12365bbf5b155721dd224ed2c2edb848c7f229d14ee001fc
+Signature in G2 (compressed) = a50105eb67e470088c5d1669bb38bca966ee84327a17df60dccbbcdc8463e1fed7f0fe74b866bf10ef27b064c5466a1b16deee93d5ef958a121bc72b33613be01b66acf9f653ac9238b1673b1bf4051544f7e9c81d4a23cdf3a9a6b160203dc6
+PK in G2 (serialized) = 0cd97e506c4b26bd5322ce33f180db64f54483d475cb14cb4a6ffd9b2bdc8e2f04fbc15240bfdc374ae141c7172cd78016c8f709678445845ffd7526e4ae7b533c2190445f4cdc00b72ba300619e8719b75c11416df7ec737e7fef3bf42f735e02c1f977456c1eb7af280a210d2e306f366ebc374c9c913d19ab977b097f15618b1a6c034c1ba42881c001b05fc9d23b0ae4ee072a6a25c0254037da9832e2a6cad495837239d3323760280d885a38f217321bd50fde04968fe9faa59a48a98d
+PK in G2 (compressed) = 8cd97e506c4b26bd5322ce33f180db64f54483d475cb14cb4a6ffd9b2bdc8e2f04fbc15240bfdc374ae141c7172cd78016c8f709678445845ffd7526e4ae7b533c2190445f4cdc00b72ba300619e8719b75c11416df7ec737e7fef3bf42f735e
+Signature in G1 (compressed) = ad58947f082cf2de112054b5d894d0c8b406604ac6dcf11e8c99afe6b131d3fe730f4fdf5c7935aa6fa4e51e4fd78ef8
+
+COUNT = 191
+IKM = 00bf7e3dfcbb7a39f8b77635f4b37231f0af6e2decab6a29e8a76625e4a36221
+Salt = 48b869183365ba1739fce9964ff5faaf377f9149e8c2d9ae33366bb0ef59e9a6
+Info = 48b869183365ba1739fce9964ff5faaf377f9149e8c2d9ae33366bb0ef59e9
+SK = 152e17560009b9b362585a0f9fedfb3a0daee8bf8231d3c6b2705e55fc9ace6f
+PK in G1 (serialized) = 01e675334eaa8016f882e0b06e13fe0041065455f6cf14237989e5426197bc297b7ced419a7576ad4194cccb48b4fb0b0e5a0db36ba1da81d53b674f852ebc7d36c3bf333e475569de263b81c6d762a585b53914f2566af5bb8db68e4e31976b
+PK in G1 (compressed) = a1e675334eaa8016f882e0b06e13fe0041065455f6cf14237989e5426197bc297b7ced419a7576ad4194cccb48b4fb0b
+Signature in G2 (compressed) = 8f4b75a27d31416a96c0c5bf3f63e55f95ae05fab87b097e072ecd3c30f525dadbbf6aaafe3827ce447bab461177765f001cf0a7edaa75bc9f55914f70493c0c1a70f1cc7cebcc013d595444d73433ba5e1fa48813a8ac8dbd463bfb442329ff
+PK in G2 (serialized) = 14d1073ac1260fff8bace76fa5a47306532d2903b10b0399e74b13c3fb47eeb3bbf6ed6231013c3307ecc26ec647a47e1670757c3f1ee22b4d5db99388b0e9289bd5791c4912723cc11348e4aaf6628e15c5c5618cad0784933ffff014e6f7d2010b3547060ad0d02aa9cae06f5afe146a73393bcf995736014b9005495d448f8694dff5f0ee78db9bc7a22abf2941a60b3f208d273895b96a7ed7c545d31f810888f14e2a8f59e6cb57e1fd5d1b253c553ed49e98dca8934792e539b339a8e6
+PK in G2 (compressed) = 94d1073ac1260fff8bace76fa5a47306532d2903b10b0399e74b13c3fb47eeb3bbf6ed6231013c3307ecc26ec647a47e1670757c3f1ee22b4d5db99388b0e9289bd5791c4912723cc11348e4aaf6628e15c5c5618cad0784933ffff014e6f7d2
+Signature in G1 (compressed) = b94e88620ac7329dabd071266e37f2595fb618be367f8b273188e22c64132bbaa89d9eece0345b12de6185ad922e4859
+
+COUNT = 192
+IKM = 00c0804000c0804000c0804000c0804000c0804000c0804000c0804000c08040
+Salt = 510c98252c8aa7bd052e75abf9d889a348f8212797241d6a792f25e24fea6bf7
+Info = 
+SK = 504dae65718f8eac135892947363a50a826eaf3a2fb8c2516c1133642e1ef5ba
+PK in G1 (serialized) = 19929faf3a083a44e7af6a37261482384c6e36139a1fab5727835d1dd4365fbc348b4490cfb48ddfcf3247c31824a3f81682715aec5d7f0b263515738c550361e1763b6e40a14545d0747fc4836038f64d10ef907d3b00d2fba15f26aadedba9
+PK in G1 (compressed) = b9929faf3a083a44e7af6a37261482384c6e36139a1fab5727835d1dd4365fbc348b4490cfb48ddfcf3247c31824a3f8
+Signature in G2 (compressed) = 8b048f2567965908034b43fb688b2fd8b2363ac69ac02821cf4524f7c18b0563276ca0d7b70f3e37d41c0009d3d1d762104570a0be472a32cf32cef5fe69a82369cf1b2fd10fad57bcd84f06ddd9654ad56971f645d843bfd30d980a5a408410
+PK in G2 (serialized) = 0c875f6fa74b60416406e9a83681a6734cec659933009174ae2a8f9e801367a744738dfe06786b7d588bd0a4e0ddfc5807909c0839281383b3a165acd3284bb63dc741f8f6f9fca19276a9f7fe46677e590f02d425110047831a6646eac2b308142c59262d2e37abe96897c7f4fc161cbd823c89622f2408dae675489d620d1ad186c3d6f3ea32b8ea2deaa99f768aac04b4518f25c52d7a6233b1ce656c0f301284b8543315c2945a195a4c9f23a633d7658aa595d1f3d2f7282e58edaea1e5
+PK in G2 (compressed) = ac875f6fa74b60416406e9a83681a6734cec659933009174ae2a8f9e801367a744738dfe06786b7d588bd0a4e0ddfc5807909c0839281383b3a165acd3284bb63dc741f8f6f9fca19276a9f7fe46677e590f02d425110047831a6646eac2b308
+Signature in G1 (compressed) = 855b096a374d17416097077713301e7e09ade010ab4df51016f9a69a271ceb40981edc1a338d6334ff5b43b0f1a13160
+
+COUNT = 193
+IKM = 00c1824304c5864708c98a4b0ccd8e4f10d1925314d5965718d99a5b1cdd9e5f
+Salt = f055782d982e8550005d94609e457de9e673b25150d7d910d2e2b0495aacc9ae
+Info = f0
+SK = 07c2904abe89e62d0a086757bec7b7f20305cf659c6d8f245910ba0ae6f7ba09
+PK in G1 (serialized) = 0afaaf2981beff4cdfd772a41b21e498f2373a0eaceae3098eba23b8a03fe598dbf1b09418dbdc57b32e9fcfb95b76130fc65ce785bb61051c1b6b68b679fb3deacff03eb9394dd4c284e79554c0faeb2b55651c2395ef49c43734a5a7c24dcf
+PK in G1 (compressed) = aafaaf2981beff4cdfd772a41b21e498f2373a0eaceae3098eba23b8a03fe598dbf1b09418dbdc57b32e9fcfb95b7613
+Signature in G2 (compressed) = b556264e6fb956377b437289acf303ca06047ba9a88670ab9839c1a977db3073b1744d882c300a02d330815e4c5fb9540081026911ccc6a61cedbbd8ecf3181870014cbfc2f85b123918986d4eaf7285fd95527972c4831f01016ded771be8e6
+PK in G2 (serialized) = 03fce70e3a39b64caa29efec732768adb058f78cb46fe61202f2499eab1e705f833b9b46bef2fe6d91afa0573a437d35151d80cd002691306f07b02323ffa4e9e50195c4b9fee0d24086a4b6c3b84e93725325196ae05fb0070ee3959e8fb5de0a592f85b88be3d6c2e254888c9b175a7eae0ed4a91f0e06e88010113a05db7b4123accf73b305977dd2df426b069442003d6d54db679b77e010f5c2d96491bdb7a48d65a7a98163ad8f66bd6d82bfbfa433f8bcaa0f3644f65731293b0985d4
+PK in G2 (compressed) = 83fce70e3a39b64caa29efec732768adb058f78cb46fe61202f2499eab1e705f833b9b46bef2fe6d91afa0573a437d35151d80cd002691306f07b02323ffa4e9e50195c4b9fee0d24086a4b6c3b84e93725325196ae05fb0070ee3959e8fb5de
+Signature in G1 (compressed) = 9191c2a40c4e465fa7a57e890b8cb968511970b703e26d0bad1eddc0ad39e30525861058225af106a670971dbfb23e6b
+
+COUNT = 194
+IKM = 00c2844608ca8c4e10d2945618da9c5e20e2a46628eaac6e30f2b47638fabc7e
+Salt = cd5585d1968d7ad64f6a05b6c35a38dec4a9d12d191c6b935df7fc5e42cda6b3
+Info = 
+SK = 3a00aae210c36cea00181fd967af0e677f28447b3e91ef6b4c08f3e031b13a78
+PK in G1 (serialized) = 032fbc882191f6a67ea9a3bb55a840f4ffa0a17fc5e88ca68d5ebc94e7bf91c210811cfa2435493e7997e78e9122fc03184c2e0337edc944618cd4b4d9194033b0e4bc048681e138ad3243a9fa3f5c68f542a08f9a4ca1426072543a6ddd2929
+PK in G1 (compressed) = a32fbc882191f6a67ea9a3bb55a840f4ffa0a17fc5e88ca68d5ebc94e7bf91c210811cfa2435493e7997e78e9122fc03
+Signature in G2 (compressed) = 8ab61ef361ab128ca71f303848380a9ef699790bfa604576d64b39f9c4b2520779e4026d676723f97cd1e8e7464e1a1406643d448e46a8e813dc68c5b3efc7470a1acc9137706380cdc06584fdc482cce77167da7c3b7862a6913e2c0946ce9c
+PK in G2 (serialized) = 07726143323c226af26e083dc6989d576cfcd325076571e633d1cc1d0c99ba124a4aab06e1135d023e7e23b438879a170e482301cf96de7d9ed5f10b0a5e737e8f05faaf9784eeaa426366fe1a52378cdc7bddd592c051f8f9151f87cbe3be2208781dcd573f5b3c09e7138f0eb2c13fe01664cb053c3b13e220a539b05a20c3260706891a10a4ddf88a7d572edac331045d2573dc20f7a143951fa262bacfa65eb9b2d1466d8dfb939f887f84249e6a2d29df451a86822617a0a3f0932398cb
+PK in G2 (compressed) = 87726143323c226af26e083dc6989d576cfcd325076571e633d1cc1d0c99ba124a4aab06e1135d023e7e23b438879a170e482301cf96de7d9ed5f10b0a5e737e8f05faaf9784eeaa426366fe1a52378cdc7bddd592c051f8f9151f87cbe3be22
+Signature in G1 (compressed) = a6a288b055aa190d45699f37d8a99867ab2673107f8c06defbef63f2bc0ae6e9794e17ddd5814843521b3478df612614
+
+COUNT = 195
+IKM = 00c386490ccf925518db9e6124e7aa6d30f3b6793cffc285480bce915417da9d
+Salt = 347ecac7e7cdf03853928d40a2456dec0ad3e33074b42be06f80862f62755074
+Info = 347eca
+SK = 6596e540445ae8a6d811b495770eb52acc63b5c5d63fe1e718094944b3cfee81
+PK in G1 (serialized) = 0c341aec32391cb20f7ac8401be38524528a531e362eb458d8f7b835ac890d5bf43dcf21d980ac8f92c286f3116dabbd100747764de27ddfc30f2460d7391c386c7aeedd54806465dfcb0825609f00632df828c87fef12f1f5234fd4bb249ad9
+PK in G1 (compressed) = ac341aec32391cb20f7ac8401be38524528a531e362eb458d8f7b835ac890d5bf43dcf21d980ac8f92c286f3116dabbd
+Signature in G2 (compressed) = a8b012369b4e5fa5117f5178c628238331b172b6cbfd518ff2112eb86fffa85ccd9311f9a7cc0394e5ccf7b0c53d578d197259ce7889d3244969f9ede4ed61272997c99c8a16c3f23049a8f9da1cdd7426b602426d21ec6037c95b0e2b2d73fe
+PK in G2 (serialized) = 1284766d7d7f1a3d03e8f9ddf850740d40687fa464df6ae28d4beae56d175ff1da1b35a3e6092786e39440c5582bb87c1544e951f937765cf207eb67c91b4e8d49a7b8d628ea35e143c536f692546443411d029219e30929517b817263ffaf4d110bde588566cf7cec5df8694b8a481f77fe7d920c6361df3780e410738af3d685af3266ad0b40432a112d774d90db1306cff29571ad0f1a846e5ca046ac38735898464df56cceb82ab609808a83f9b960bdb4a9c220cece72e4f2c9e3ccef5c
+PK in G2 (compressed) = b284766d7d7f1a3d03e8f9ddf850740d40687fa464df6ae28d4beae56d175ff1da1b35a3e6092786e39440c5582bb87c1544e951f937765cf207eb67c91b4e8d49a7b8d628ea35e143c536f692546443411d029219e30929517b817263ffaf4d
+Signature in G1 (compressed) = 86c7ffa559e9c6151845487d755e93417551eb9370696b6119cbc3c4cd048fd32ea19c9e670b93ec1745cfebae849e77
+
+COUNT = 196
+IKM = 00c4884c10d4985c20e4a86c30f4b87c4004c88c5014d89c6024e8ac7034f8bc
+Salt = 2f32daffbd5f156f055123d823e1c788e41a648028a21b4ca3eb65ac0d6931a7
+Info = 
+SK = 1a326924ce6c344d856a697387b2399f58cc557270c3eec9c6d4762e7fdc8593
+PK in G1 (serialized) = 0072f5fa56730c9fc18bc9a19dc99c3ed5ea12f32ef042473b9cb7f87098a82afe515d273a6ee2d766b2da29eda5d6fc17ad7e435facc4dcd7acde90467852f9ee0340ba7de1558c3361dc0373ec1a8e44e0908f91b5d438a63511297a34bce1
+PK in G1 (compressed) = a072f5fa56730c9fc18bc9a19dc99c3ed5ea12f32ef042473b9cb7f87098a82afe515d273a6ee2d766b2da29eda5d6fc
+Signature in G2 (compressed) = 8a0fbecbacc6117fe8e483c9b32ab696f6953e25a7c1bc7603bad25d980c4a7896bb2c09b62e63e4d7e1e849fe06315013926de904823c6ed70c78852bc5e8d5b1356d05490695ccadd9414ad9d38838bb356c0351d9616554dbeaa94bdcd9be
+PK in G2 (serialized) = 049b9ff0486a83a1691e74f9fedbb3e600d27bb9e6be56448b57a174a51b88780438b362ff79c8d61c21d5ed92b48bcd01e8ccee0fec37e4a4f14430432939da5d57f9492b12a2238927a1b02453747b5514ba47bf179f54536f074e88f8b155055cb181a813a0c7b874643e5b3f884c1cbd786b42fd5f82487a050adca9117450a44dcbbc0dda746a34bc7347d9a24f02d3591b316437d1c65582300196282138c8374c1aeef832d234081549cb37acf701e23147da58f38c89a449ec0a0703
+PK in G2 (compressed) = 849b9ff0486a83a1691e74f9fedbb3e600d27bb9e6be56448b57a174a51b88780438b362ff79c8d61c21d5ed92b48bcd01e8ccee0fec37e4a4f14430432939da5d57f9492b12a2238927a1b02453747b5514ba47bf179f54536f074e88f8b155
+Signature in G1 (compressed) = aa4fb5d8f36fb348508d4c4b3ff709de96c17a533b12a2337c228552bb6a410001ee7c575326e5331443d1225c58f476
+
+COUNT = 197
+IKM = 00c58a4f14d99e6328edb2773c01c68b5015da9f6429eeb3783d02c78c5116db
+Salt = 78cec2bdcfe5aecd1d9523adfd8431af8e185e916fb269f6fcbe2f2df73657bb
+Info = 78cec2bdcf
+SK = 16d6d1d8e8feca15e4ba51edd23ee4e80c8c62e5e30faf487c78dff079af8087
+PK in G1 (serialized) = 05a4240a1b0b9b7722518621fe857377e2991a002640acb847ebc6f9bcf8d00cb710d53048c862ddb51255f7bd1c056e01649bfddeafca3144629c919e5aba943158ac4fa2b913823448e37a803e304d4d23929280a9aa42510dfb056cb17a11
+PK in G1 (compressed) = 85a4240a1b0b9b7722518621fe857377e2991a002640acb847ebc6f9bcf8d00cb710d53048c862ddb51255f7bd1c056e
+Signature in G2 (compressed) = 99ecacfceda60dabef7aec843c4af969cb6137cde3daaae8245728e76c5996c8f9709399677b12f8d3d7922314bf462515c247112a06003ae0d7a028d94613bfeda33c8ea37bcb72bb25175b31950e6af6926ba05ac92455b6bb73f83a85798c
+PK in G2 (serialized) = 0c5982463c33660502c2437d7aafd119d8e2a43613ffd131985eaa9b3250b4c5eeec136d6852c966b53b5b8900e607bc0b800b070d7625d1b7a444ab03e76e82e7649def437dd67f9adb21ca6de588589d3d20c1c275cb975cfa8e1a8ed88c050b662b213429c18e70274f7b44ea1c4d813fffa514b021690567f7bcc4a9f488cd8905b91ce018beeebb47289d58ae190f7fb4d6e1287dca6bb28699c7327ef3bf1c6068fc76286f64ee1bba3c131fabf84f995aa851bbc52dccdd1e433904cc
+PK in G2 (compressed) = 8c5982463c33660502c2437d7aafd119d8e2a43613ffd131985eaa9b3250b4c5eeec136d6852c966b53b5b8900e607bc0b800b070d7625d1b7a444ab03e76e82e7649def437dd67f9adb21ca6de588589d3d20c1c275cb975cfa8e1a8ed88c05
+Signature in G1 (compressed) = a64cd83bf89ceaa51cb63980ae2d0b529fde01a51ff1718df4fee0446ace073706f6ebf5ffec24b01f59111a3a3d9043
+
+COUNT = 198
+IKM = 00c68c5218dea46a30f6bc82480ed49a6026ecb2783e04ca90561ce2a86e34fa
+Salt = 0a7ace56095012e2918c87595369868979dd245a89cd13b656dfb50ec4c9029e
+Info = 
+SK = 37499dcb6827d79d08d6c9038e660493c5c8fe4491259fe804433d185867a067
+PK in G1 (serialized) = 1919a11e26a0cb6132ee0dc44323f8bc935bb5d5468cce2933d76b0dc442baa001a514f89288cf21feb9f8523e1a950c04e4c98a4c4b5c3379ace76d39c2de62cc070046fccc48db404575d303813550effbeecd6c80aee71c5f70d0e54bb304
+PK in G1 (compressed) = 9919a11e26a0cb6132ee0dc44323f8bc935bb5d5468cce2933d76b0dc442baa001a514f89288cf21feb9f8523e1a950c
+Signature in G2 (compressed) = b81d635a3a7d91fc863b7bca4995d6b689deb6ad127a7819ba529385c7d97738e31fc5cb41101db11d06b02c0c63772f17d2952c3bd0448aa1eb3aec23b2372729bad09a9d6e5e8b1b215e11f7597b3fa84be879486c595fe98904cf4bd4fcef
+PK in G2 (serialized) = 102f968f3a5a17727db4d75f95449d9560e7a1c4aad4490eab964db8cb9faf4506debe0ce98a625e4dc6e6628b97a4d6011a471fa485c000410c3d9722836af2188256e49bfc58fd0f3cfc0eea0f5775e858f7f11f51357338cd39f20203251a0dee60160ed65919ea3a3f48ea397c3d290ddc0a396e2c3fe9570b627047d8eec3b488c18a823efd8ffb8ed37c82b8c2113823944c499b973d278bca056a399a88a850852572c578ff58bdb7f6db00bcf92e9bdac929b4f4d11e7daaef5ff32c
+PK in G2 (compressed) = b02f968f3a5a17727db4d75f95449d9560e7a1c4aad4490eab964db8cb9faf4506debe0ce98a625e4dc6e6628b97a4d6011a471fa485c000410c3d9722836af2188256e49bfc58fd0f3cfc0eea0f5775e858f7f11f51357338cd39f20203251a
+Signature in G1 (compressed) = a66a9e76bb18a5969ebf4974fc9274ae4ebbe94623c37eba9b47e97cdff663cd26f5a0071d9f8e3e51fa5067c0297ea1
+
+COUNT = 199
+IKM = 00c78e551ce3aa7138ffc68d541be2a97037fec58c531ae1a86f36fdc48b5219
+Salt = 9c8ce9018f461c58a33e7d0f5bb9ec8025d74fa46694dacc3a98d44a79272248
+Info = 9c8ce9018f461c
+SK = 2b66473dd86dc755cf10ba5e282169dc996f0d335ea715424ee777b428203e25
+PK in G1 (serialized) = 13d699c4239cb4eaa65bb576747e85a340d38715a1dd829d5546a181b302c5be10bac74cc33f41d854511b0607d23f0e0e5391a5672b2d78a29bc4b084e2127441f39ef84096486c23fb296292b0872de263befff55c82b24290bb90df903cc0
+PK in G1 (compressed) = b3d699c4239cb4eaa65bb576747e85a340d38715a1dd829d5546a181b302c5be10bac74cc33f41d854511b0607d23f0e
+Signature in G2 (compressed) = ac761ed4fab96609f29d5efc839993d7f3f55c8076d1faef348b4fa12bf3f91c7ffa05090f35a242be38d540ccc3c71512695d9bcb6c2e24f6f0126554030993fa6c1effcc2788d98bf71253506871dbfa9813d72d010f9fd5e2a5125021a40e
+PK in G2 (serialized) = 197f4c299dc87a32fba0767318f7f8b910b63986a3a1bdc99410c30e09c7d1aa06e1177cf321d679b8839c09e92feb2f11476b59f3f9ef975bf609916b59619cf55dc140a86195ba35d32535d67899468df493cfc9842b6d0aa1c9572dc20b261535d65a3e931f086479f2a0688ceb452138f2466613524ebdec697a3122e9d6a25029614d6b21b110d2322a0f0b92d00b2b4a88e301dc05b52ac0d5be46eafcfc7a6a6a61f03242e22172ffe58ceb9b46df4a07a320eacc902b076dbe687639
+PK in G2 (compressed) = b97f4c299dc87a32fba0767318f7f8b910b63986a3a1bdc99410c30e09c7d1aa06e1177cf321d679b8839c09e92feb2f11476b59f3f9ef975bf609916b59619cf55dc140a86195ba35d32535d67899468df493cfc9842b6d0aa1c9572dc20b26
+Signature in G1 (compressed) = 81504d6df2055e8e128321ede9163f70b93c81b7a47ce9192ed91a97d2c6fc565e36b066fd3bf21204d01eabe8e073f5
+
+COUNT = 200
+IKM = 00c8905820e8b0784008d0986028f0b8804810d8a06830f8c0885018e0a87038
+Salt = 75e9ba52bdb0341ec9a93779c0a57a0ff9caae35bf40cbcabd828f2840946c95
+Info = 
+SK = 2a53d641b595c171ac2d3d7219b9e38a0d02b5793094601a25077312a911951f
+PK in G1 (serialized) = 0097909dac9aad4d6a475e83f3bcbdad79da6d76fe30245bf061cfefcdb1bb117ae723fda7dbed47e575806c3a1ea0a10985fb8df67e2d2eb6bb25a91c1a9adab09b23e4dc683134e1a3b59378f43d6572f6a6780392888e24f5008ce36c6c22
+PK in G1 (compressed) = 8097909dac9aad4d6a475e83f3bcbdad79da6d76fe30245bf061cfefcdb1bb117ae723fda7dbed47e575806c3a1ea0a1
+Signature in G2 (compressed) = 959926bd3d5e06a5b98e0f06269cc88ac78d861ad734cfbefff039212b8e4e6e87729ff95761ad067f7551170be0991e037b9de7e32357f93fc75541b9013216e36658eecc9dcd30509290bd2afd45f09123cc828c1bdabe0f637f707208dd55
+PK in G2 (serialized) = 10a14587d10a56c155636584efad15fb508bf684e8b00acc57af7194241faad969b0f8c0a4c49786cdb58d59841bf666052347794a4ca7a74f8a9232ad1582de70cd256c2e2c0810529935cde4bbe29068ccca575b6f58092b4d7905c07bfec30982edcc42b0786642b8ce4a128bfb726e082c4c0a88714db28147e8b54e24c24401e3eee121db0d54bfaf045a202e4a191feeda12d961a5e515949c9e9012c0e4a373108c0a39727f2d79d00d59ca3dcc49670df0e540c24364c652c2c289f4
+PK in G2 (compressed) = 90a14587d10a56c155636584efad15fb508bf684e8b00acc57af7194241faad969b0f8c0a4c49786cdb58d59841bf666052347794a4ca7a74f8a9232ad1582de70cd256c2e2c0810529935cde4bbe29068ccca575b6f58092b4d7905c07bfec3
+Signature in G1 (compressed) = b67a7d1cf90bcf9be0d2701531676a0e587594787a183adb0d0f6ae8483d1ddc6bb07f67240aedb32951157d64a38ff6
+
+COUNT = 201
+IKM = 00c9925b24edb67f4811daa36c35fec7905922ebb47d460fd8a16a33fcc58e57
+Salt = dc4973f7c52d66ea77f835a8285974f8309b7f74005f93cc2fe453c4a920d0a4
+Info = dc4973f7c52d66ea77
+SK = 5a53ad2aa1351abe526da6c20ff682de60cc54dff3e05b4aac93d90ffa86a050
+PK in G1 (serialized) = 19b27c8db52f158ba984eeebbbe358de3e2c97dbdf850e7f6b033f811c3104a58230c71b52e84bff1a8a24320636e36c12b82659c7ba21d4ec834065678f5ba2b15f1c1c43761ebbdf80c5da1d265a25ac1381a8423a45c768db31615f9437d9
+PK in G1 (compressed) = b9b27c8db52f158ba984eeebbbe358de3e2c97dbdf850e7f6b033f811c3104a58230c71b52e84bff1a8a24320636e36c
+Signature in G2 (compressed) = a679c1464c9173f9a53552b531e73e013dda9ebcae67c06798bd7bc90303444bff52fbdc0e68c601adf3648b5f7db2bf0eb8bf786695b35c94548200e37052087d77dae77074fe4bc856ccf6edfa44d08808ed143e6da5d937fbe62d746bfa47
+PK in G2 (serialized) = 03f3048745525e8ededc765664ed83290ca54ce7f5e5db9d63f4371021e94157c4c339cf5fa22ff723e4eacfcb6b621c1573030e729cbd3b04671e3eeaf50f60502736e5121e63036aac70fe5166aad1f47579175d86d64980acd3928a98cf4a155943beb3f1f12031502519f69d90586ac8dbb0ec01bbc31e177d1e2ece05b99d5d94479fcd1283aa6c18df2992810c17ad6f8e7a57daba28c08a666c37ee846c38069ea95241068ee15d06e2b91a0fc9b33df1f1b2db2206d3972652a36f83
+PK in G2 (compressed) = a3f3048745525e8ededc765664ed83290ca54ce7f5e5db9d63f4371021e94157c4c339cf5fa22ff723e4eacfcb6b621c1573030e729cbd3b04671e3eeaf50f60502736e5121e63036aac70fe5166aad1f47579175d86d64980acd3928a98cf4a
+Signature in G1 (compressed) = b319da34c34a161627f405296b407cb9328f4cf8663ce7426b690fc0451d70590bc457570641a76549ec80d078dac3e7
+
+COUNT = 202
+IKM = 00ca945e28f2bc86501ae4ae78420cd6a06a34fec8925c26f0ba844e18e2ac76
+Salt = 19f8e86091b9c9f39ca800d4a16b55d1e06807ad05c190e2d00383efa6783e3e
+Info = 
+SK = 1e0c5d4b5508b50a8dde2111f36ae2ca4c46ae42cbf92ff6dc0901628a6e922b
+PK in G1 (serialized) = 0875ff68986f66bd5347a8eee0fd40c2f1181b023309211ea8443de5bd5b8f93e73b4500b3cf4a6321fa01f3d92bc76a098fe0d5a125588506f9f0c4a70b270b96ce550409e2eafcdb4ce324df0f2ba1673edd8897728aadc0b6297c178c3869
+PK in G1 (compressed) = 8875ff68986f66bd5347a8eee0fd40c2f1181b023309211ea8443de5bd5b8f93e73b4500b3cf4a6321fa01f3d92bc76a
+Signature in G2 (compressed) = 81d7d8ede1f9a9e540fa59aacf4143bf404bd845c346917559679d77482bb6e60efb73072fc2ad93a6a573dca205b04406c3d625e1857668aded23fe508dc336c801f79c0aabbfd99d12858bdda1cfb58cd17be24d9fe0e52797f44cef731c82
+PK in G2 (serialized) = 149553440e61c21d8fca84da0cdd314fd6236e088d3046d8b80e2ff6039fcb66feb9c35a85bdd838be7e1134d30df43d04534ddd2c3614d88c049feb894c061f74dc76a3bb24ba9074cc7a296507d01580914d7998a9c0b92501856fa87feb9f0ad74d9798abd9cdc16684d45835f8172d3a8e48d671050c0389d4584ce6eee0f779213cca77248b9a376e2502f41c78131ae102e632065dfd7b2b8590cc2d68aa1485e8e5e2f10490c883fba30ce05259960712c69df271657168f2cfc5badc
+PK in G2 (compressed) = 949553440e61c21d8fca84da0cdd314fd6236e088d3046d8b80e2ff6039fcb66feb9c35a85bdd838be7e1134d30df43d04534ddd2c3614d88c049feb894c061f74dc76a3bb24ba9074cc7a296507d01580914d7998a9c0b92501856fa87feb9f
+Signature in G1 (compressed) = b6584b9cdf6872f207c4cc534009a68aea662503fad04cc7dfc2d8b7e82b758d458b96f370dd217a954a0ecff1cab4fa
+
+COUNT = 203
+IKM = 00cb96612cf7c28d5823eeb9844f1ae5b07b4611dca7723d08d39e6934ffca95
+Salt = 61991d0eb00a229dae1c0b59a1b925314ab4a0e46030a48f1230494ab072074d
+Info = 61991d0eb00a229dae1c0b
+SK = 0ff77a326bc399ac213d740d711b942ddfa95f72daf32b8510f652b3264a8d1e
+PK in G1 (serialized) = 1875e13854c43e6dd681ecd60cdf863b22207c742448a1975bb291624f6ef46ca60d31c9c8fbb43cdb4edd36c357ab0912f50755f8245b3c93b346f3c4406e5961788ae6e19ad66deb7ea3c7ab0ba06623f8ee070800792ebb32ad14cdd6322e
+PK in G1 (compressed) = b875e13854c43e6dd681ecd60cdf863b22207c742448a1975bb291624f6ef46ca60d31c9c8fbb43cdb4edd36c357ab09
+Signature in G2 (compressed) = 902026b0bb2ed1ad67bb3071d288de93bbfc10dec6fd250a603f63f146ea26c01c29af98af89dbac614df5945f4925a60084c12235572ceb022f169728e8f62af70a4c644e9dc1fe329bb60499548a17c1dea143af4b94a2e32a229772779158
+PK in G2 (serialized) = 09c4f2920994e98685e53c715dc8302f1fb6df5bf14eba975aa2abfa211ed48de6f1fff59eb5d167dd7a747220cdae08110ee9d4da37f51d67ab4d31bd200d585a69bac7ee7d5f6fceb036397d1ded0e760e99870586d3697ec17f025aef14780c357176a7d1473541719dc45d515a1822e57758eaa0b42909c597df26865a8cd5d4264208bb8c1fa8b4eb7865b724f60b4ab1791c64723b4e9ac3348410fe37a6ad5e7dcc908fc72754ba17b6f2f8efaca51d2ae6dfb4049bbf48a8efcf3e02
+PK in G2 (compressed) = 89c4f2920994e98685e53c715dc8302f1fb6df5bf14eba975aa2abfa211ed48de6f1fff59eb5d167dd7a747220cdae08110ee9d4da37f51d67ab4d31bd200d585a69bac7ee7d5f6fceb036397d1ded0e760e99870586d3697ec17f025aef1478
+Signature in G1 (compressed) = a7f42551b8c713010174a1c897a4813e32062072c658d5126a8e83c031ab830e33b30d2898cb628dc620b3cac982c704
+
+COUNT = 204
+IKM = 00cc986430fcc894602cf8c4905c28f4c08c5824f0bc885420ecb884501ce8b4
+Salt = f32d7ac93b9b6ac4560f09b09b6ca8bf0425e9b349dd165cd7cdc2cd77d2808e
+Info = 
+SK = 17b46a6ac89920b4b010e05e2b8f080d8762316b7cd43beea15380d52d10e60f
+PK in G1 (serialized) = 1655383fa7b1f9813f891523368309438b4016799de549ab0276e4d0489cd63db54df94da7abb97c85296ffa3d9bb0bb107e4e11271ca03807efbf6cf36e57eb935dffe63cef1c17404707a5e0c3f40650aca7c0d04c51ee23ba7d1d80fc76ec
+PK in G1 (compressed) = b655383fa7b1f9813f891523368309438b4016799de549ab0276e4d0489cd63db54df94da7abb97c85296ffa3d9bb0bb
+Signature in G2 (compressed) = b794fbb9915efa93e6e9e511eef3cafd27436fc5d0a83a8f0ecd4683589229ee993348ce9566f0c9cceaf34af4305cf403d173f1fe515362aefcd6988670ed34147d236ef18cddf2cf68dd21524f3e177c09199c88e3347abaaeecd28e00bfbd
+PK in G2 (serialized) = 0a8b1ed9cd7b48cdccd7aee7b1f751fbc50cd45941f47c34d9b8da0fcfdf1a88db595fb146b3969dbf4e37c439e0d22c0708baa12f92b319a20fee22c3dbc36242510851d903386862137d6e61247fdee0d202198804648201ff4f1b65f0b08813edaf96e4a15bf5470b8e99ec56b8c037bea73a79f79efc603cda6f3455db75c44e2cebfb02a35ed79dd6c7abbaa8280f3d9034ace0381efaacfabe117a440b3325f7a1bcfca861e05e92a6231717a41d7aaa781bc5b6ea6036478cdbb68d61
+PK in G2 (compressed) = aa8b1ed9cd7b48cdccd7aee7b1f751fbc50cd45941f47c34d9b8da0fcfdf1a88db595fb146b3969dbf4e37c439e0d22c0708baa12f92b319a20fee22c3dbc36242510851d903386862137d6e61247fdee0d202198804648201ff4f1b65f0b088
+Signature in G1 (compressed) = 8a15fc7376792f7245baa771e8e2a60168d31698a609ed34a60b7f70bd6f2fd417b3b52f6190a4388849bf6d87c3c29f
+
+COUNT = 205
+IKM = 00cd9a673401ce9b683502cf9c693603d09d6a3704d19e6b3805d29f6c3906d3
+Salt = 3b54007d0f7836c664ad5161e762710eda2a0c09a58089a1758c4fe6d1a68681
+Info = 3b54007d0f7836c664ad5161e7
+SK = 12fe85870cf564575f242ab610d852e126a31bf5fa1faa1eff5a031cfeece58f
+PK in G1 (serialized) = 1450c03fc1194b2424d3dccf43d6f535997144ba921e11993c7b3a925717df82f7b3e08057660d413871fc809030f102126cb049aef79859f3b349716907fc9e22a178128b7cd77ef9f67f6262fe492f4e67c2c906bb22ae34153bb4dbf9528f
+PK in G1 (compressed) = b450c03fc1194b2424d3dccf43d6f535997144ba921e11993c7b3a925717df82f7b3e08057660d413871fc809030f102
+Signature in G2 (compressed) = 80b2a811c822893fe9a954a7c3f02550480cfcb0db12b85864feabc0ab74a537b41afe2450014e99297021beb1318ca407f3d962e5f89c8c2bdd222fcda008fbcf247f5281ba3a05ac75f9c0cde97c422f7f2707a5e9c2541f3ddc1b9ecfe8e5
+PK in G2 (serialized) = 00a1819740a923abbbddb8812378d77c8f1190c6232775084d32085cd940aa9ab2eaefae0ffd41522c1d63792268ba6a1661c0c199f580383049fb769c0e58e6858f96ce0cbbbe705d58fe79316d5a4e2d4910d6ddf261e7f639813f7c8ce37715f1582a8f29c75b015ecc603aa6c1c2312627ee6e1104ce763371ff02276b12afdfec054e8081fe31239c0d9623427d0ee4f6971118da2ab79285a0eba5b834067313b77c432daf0e3f15bc1989941e35a5dd46b1f51c4a4c85acc4469c7179
+PK in G2 (compressed) = a0a1819740a923abbbddb8812378d77c8f1190c6232775084d32085cd940aa9ab2eaefae0ffd41522c1d63792268ba6a1661c0c199f580383049fb769c0e58e6858f96ce0cbbbe705d58fe79316d5a4e2d4910d6ddf261e7f639813f7c8ce377
+Signature in G1 (compressed) = 98b34f43aa4bdadddc14c86940956a3242c213fce560eeac660b6beb567df42ca13dfafe9bf1e3d5018158a08f6eca52
+
+COUNT = 206
+IKM = 00ce9c6a3806d4a2703e0cdaa8764412e0ae7c4a18e6b482501eecba885624f2
+Salt = c3896d0fb3e94f2bd54717285c888140afc2bcf18c708c25504011138e9922f1
+Info = 
+SK = 358ce7b6dc58e735e1fd0072c7950320cd25aa324f630c0b572e44144d9ca2fb
+PK in G1 (serialized) = 0f84f0d2c98c86831848b26b2771106687b61b8c7a214469445368b3a56b46774493faa0881d8e6a8904a00b774873d10c617933fb371dd1b65a700c137fbec22f7e29abbb2c160e248d5c15cbc5ed451695282fdb73811dfbe4ca0bdd887bb9
+PK in G1 (compressed) = 8f84f0d2c98c86831848b26b2771106687b61b8c7a214469445368b3a56b46774493faa0881d8e6a8904a00b774873d1
+Signature in G2 (compressed) = aec24cd1d5d6655c18bea6c9f2f6e22c065c8085da9443b020671c56aeee8c9e3b0e3412aa15824f20dec1c825c2253210e9de5fa84a820af747809fac773605e13cf5e30f1a1beceeb27c7fdfc20f4c052c022ff08e4e1647bfa2146ef87516
+PK in G2 (serialized) = 051c65e335b1b7b13acc3f2a19a9fe244ea147a1b6e88198a03e589aaeb6eed99615a193557fccd71d398b266c528e4009b69c968f4f511d743f48a56a12730fa553295543d54809a14ccf45d7c30abfe1d71b0de415fe6bda2684b81772357e146af69c5f9736dab8781ebb222287ae50984d79467b3eb0114602e3b9ebd9e0005b1b81779c3e02ea0024ce47a3fed10abb3e473a4a46eb6006bcf7f5de81ebaaa2743e13e3449929da963bb413b95f8a1d7242e035fbe5c01672fb288cdf96
+PK in G2 (compressed) = a51c65e335b1b7b13acc3f2a19a9fe244ea147a1b6e88198a03e589aaeb6eed99615a193557fccd71d398b266c528e4009b69c968f4f511d743f48a56a12730fa553295543d54809a14ccf45d7c30abfe1d71b0de415fe6bda2684b81772357e
+Signature in G1 (compressed) = 8463f415d0bac2a5e1a47c99a17c738daaf8094a1bb26ccd1cc6a2faf1bed631e61408b4e079af834d67e0b9e8d6cedb
+
+COUNT = 207
+IKM = 00cf9e6d3c0bdaa9784716e5b4835221f0bf8e5d2cfbca99683706d5a4734211
+Salt = fb6943d09989e4033ae0d6f353831735da4d99dfcacaeef2ba72e41e2f58a1f1
+Info = fb6943d09989e4033ae0d6f3538317
+SK = 676bb73d081628dd428b535d19ba9446217487767cd2689344b4b93c9b01a1b0
+PK in G1 (serialized) = 01404f98c2b9addb8b69a40aa90f0197f686ab0492412baf57ce31538db72e9623f79df09e646a5f8eb234ef16d4c129016518f7971bd8e5197d1ef380cf5fcda7e23bd48f1618dac15da3046845d8b0993dcd301ad86dc676f305e7b82c137e
+PK in G1 (compressed) = 81404f98c2b9addb8b69a40aa90f0197f686ab0492412baf57ce31538db72e9623f79df09e646a5f8eb234ef16d4c129
+Signature in G2 (compressed) = 9370fdb8458c5df886eeed4b694d95cd1d95a57c08376f15173fb1872480e90904a3069375011736ebc2182dc0a15e450605f4e1fe4a6fb12acbae94dff85986ebacfe0d39e3f92e630c09637a4034bf6b6b23830ff6507d5263300628b83649
+PK in G2 (serialized) = 0b211d7c1f4b851afa1c77fd2e78481ef97b923b95fdb70ae07ad801f1c70b484e6faddadcbb14f57a06968e43e74f4613f13dc27f906808ccf1f3b9082df2800f6667e2d71e70ec8d241e13b0ae609dd848f230dec823f77d8cd565a5265338160164d7be0d171daa8197404cd554139acb8e08f37b43f9e56445e30c52e78b873869c3a3f236deff6395296e8649bf08a0fa95287b8ee37c5f91980b20c975a05be135790b43be76929358955742c4452e0dbee7690180a26836c8172662d0
+PK in G2 (compressed) = ab211d7c1f4b851afa1c77fd2e78481ef97b923b95fdb70ae07ad801f1c70b484e6faddadcbb14f57a06968e43e74f4613f13dc27f906808ccf1f3b9082df2800f6667e2d71e70ec8d241e13b0ae609dd848f230dec823f77d8cd565a5265338
+Signature in G1 (compressed) = a5c547b7e87792649f1a3905f22ab99a616b4e3530a26c01b8900660014ee74a41a49a0f88bb11c0865175af48d4e354
+
+COUNT = 208
+IKM = 00d0a0704010e0b0805020f0c090603000d0a0704010e0b0805020f0c0906030
+Salt = 54e6a26078df2ee618d7635b823f4b3bbd8bc24750bd70c18ab3e5a8c4110d1c
+Info = 
+SK = 2f088cccb1283c48b6b81ee7f1537f644d0459b5d4795838b6d46aaabede526a
+PK in G1 (serialized) = 0eea61a2ed894f992a8fe1822b208e3c320bf6912711fe8d6d5b7a6659dd4dc870c8afe402103131a9d3af0b0a235a02004dc5cd7fc3e18434b47184a74ff72dcc1509437b182c392d4b69e9dfb6b52af1add0de16281d2403f89d8efa2cd0c5
+PK in G1 (compressed) = 8eea61a2ed894f992a8fe1822b208e3c320bf6912711fe8d6d5b7a6659dd4dc870c8afe402103131a9d3af0b0a235a02
+Signature in G2 (compressed) = 9439708b1e586090af279ea3af435019c64e9e6b7ce4313e67963ed5baaf1d382dc0afb5dfb5b0409fa5033f345ee831150b3a70a9a5610c65de4de0137f56c128858b32590c2dfb70905b28064cbe17f77e0237a67da2127d11ee92c2b3d0e9
+PK in G2 (serialized) = 0ac9985e57e1274c81e46401f2de91711b49b1e26daa753bf45d8f2a3dcd7327cbcc77fbb8a9f1795ca2705e942652a11190b22a73687a6360126db6f720baf3bbb2984e10d947242e45764873c895566b9222776509fd2ea8a2135b6e3cc14e0be097b1d7d0ffdfefa4965e2915aee18fbb5b134ca5ca9fc6cfa1cf9d6d9325b5b0e9b8bf3024ad2912ae82e49150fd190f9ef2be986b61da34d06d3bea1eb14c24ad88dc946e8ea3f93c36e9c4646d91ac2bfa53b0e01461bf533649706a04
+PK in G2 (compressed) = 8ac9985e57e1274c81e46401f2de91711b49b1e26daa753bf45d8f2a3dcd7327cbcc77fbb8a9f1795ca2705e942652a11190b22a73687a6360126db6f720baf3bbb2984e10d947242e45764873c895566b9222776509fd2ea8a2135b6e3cc14e
+Signature in G1 (compressed) = acaf271381585ae58c84cd2ddb27852972a7f570bfe6b69f9832ce33a6c339e8e51390f590092dee06daff0a27937b7a
+
+COUNT = 209
+IKM = 00d1a2734415e6b788592afbcc9d6e3f10e1b2835425f6c798693a0bdcad7e4f
+Salt = 380862b3f9556bbde9317f347764e20dc37a0e6be542993b3c64ccf91e854d75
+Info = 380862b3f9556bbde9317f347764e20dc3
+SK = 680824e7658bcd2a422d6c04d431bd47f694abd7dec6d525ebcef70ab85b2352
+PK in G1 (serialized) = 183b336d4cc9455922089d05b53ea4208d2e093cc7296fc66b8087f1f30d982576461578a9dcae3bc8510d92d80bfcce13bec07ea59218bfcc652629c797f91639b9a666d670e5a996faeb44266c3f24c7c40b9928b9da2f70415558136efc00
+PK in G1 (compressed) = b83b336d4cc9455922089d05b53ea4208d2e093cc7296fc66b8087f1f30d982576461578a9dcae3bc8510d92d80bfcce
+Signature in G2 (compressed) = a407ee4957b1315b7eb2577441b8589fd7c7666f7ad531078990803cded565a2b715083b4d91042e22d2a2ed2235a51c1461eba5db5488173d474633ee5d02bec1144bfdd5993400a068520bba04993c12c64a799cd4a33680318bdd9a3f63e8
+PK in G2 (serialized) = 17d437a6bd462f25b4f057f6392e860898f9fbd9f95680dcb3a70679708329d1495038d5ac64abe52627d7123e05c8cc134d3fbe72668f539b893741c5e250fffca1b2de7a6e88f4dc81063df0784552d8268e4c9abb72d38c4bb8e17e07e73104501a533845fb1fed602b38d38e0d41ae26cad275d9e480ac736b9b1b3b1d6cb9973d8fdc8166c5611c33a6f917e5ab15de2e5a6d68fdcdba0c8f1f42f18b6888e783e72194a67f88160419edc1d1e06bb1fe957d97facdd6f5da84778cdf12
+PK in G2 (compressed) = 97d437a6bd462f25b4f057f6392e860898f9fbd9f95680dcb3a70679708329d1495038d5ac64abe52627d7123e05c8cc134d3fbe72668f539b893741c5e250fffca1b2de7a6e88f4dc81063df0784552d8268e4c9abb72d38c4bb8e17e07e731
+Signature in G1 (compressed) = 857d476b0ba83dce4f2a1838573a262cda0bcf972f22fdbed5ba44f4630a6ae81a3da366b4dee9bd72e2e2adf107821f
+
+COUNT = 210
+IKM = 00d2a476481aecbe90623406d8aa7c4e20f2c496683a0cdeb0825426f8ca9c6e
+Salt = eddf0af2f782671ba9f5b43a818fba6619ae366829809c2490f11dceb46f5169
+Info = 
+SK = 529b995319a126226d63e53b6df20a4b21683c60ccae77770eb2407099b338d3
+PK in G1 (serialized) = 0f04f3885b967f14218a3d8e93d7f1d030b90b222be2cfed48632789a17c7840fe8d95706d9b8ef0de10ef689ffa405c01ad3a8bebbab09f1257bea0a22697b8f13cf5afd2ff9a2f7430fd18e12ac8311d35c3d87f79fce08e64941083875dc2
+PK in G1 (compressed) = 8f04f3885b967f14218a3d8e93d7f1d030b90b222be2cfed48632789a17c7840fe8d95706d9b8ef0de10ef689ffa405c
+Signature in G2 (compressed) = 90ef28605a51df315a6be6253379b03f9178419d2c5aa6cbac9e54a8add2c2676faae56eed87fac08bda81cd07a390440393c41af8aff36d90a55cbad71f6be9ae7be337186026751f53f5429f76f4cbe41934df3c6a61959b716d651e3ae086
+PK in G2 (serialized) = 11141d06af64fb836ba55650f3c4c3c177fb4cc8cef2f8d4891bbef7cac60eb309b340bded2f33bff965cf91596fbd4c0663f07cd165f7b8ae5cc6f5d9e0977b37e96800dc3dacda7c7cc4572e6a2d652fb34cd5bbd91f0cc10cc47a1a06e5690973f1a521356aebc6ce0ee1b86affa9ca687ac74b08d4af865fcc7d140051aceda104a5cf59f2f8750d92c7d0c9834e172e8401503af27936356d325c668520bc0bd5bc7f0a80b0e8892a50121ffd6dcdc612aaa60b5de3745c459d5b068fe4
+PK in G2 (compressed) = 91141d06af64fb836ba55650f3c4c3c177fb4cc8cef2f8d4891bbef7cac60eb309b340bded2f33bff965cf91596fbd4c0663f07cd165f7b8ae5cc6f5d9e0977b37e96800dc3dacda7c7cc4572e6a2d652fb34cd5bbd91f0cc10cc47a1a06e569
+Signature in G1 (compressed) = a7037995245f8946a1505bb1e0195eca0a23aeb2287415c24a351d8b77e0952997f43cd40e47aa5a72b34c0aecf621a7
+
+COUNT = 211
+IKM = 00d3a6794c1ff2c5986b3e11e4b78a5d3003d6a97c4f22f5c89b6e4114e7ba8d
+Salt = 16d083a28d1f0943f93ef347d1d5282c07ca101e3cc3d70ad0862d9a35351a60
+Info = 16d083a28d1f0943f93ef347d1d5282c07ca10
+SK = 0c9b3013fcd7fe9f3287162721e826450b20164ef4716d9c5d5e323c13df6d5f
+PK in G1 (serialized) = 14c9146e733f8c4baa51fffe963d8bc7d4a6f2700c138b5ca92e2051fcb4c4ba3650c4ad1c33e0ba6d3325489ac932cc15ced1132af6fbd538199fc4a2c33c4e1df4ae9d14e4889fdfd30a41ddfc747d5ce125178b2516f0921e88fc191030e1
+PK in G1 (compressed) = b4c9146e733f8c4baa51fffe963d8bc7d4a6f2700c138b5ca92e2051fcb4c4ba3650c4ad1c33e0ba6d3325489ac932cc
+Signature in G2 (compressed) = 8ec282dd927abd7acf6676758d4731f1acc4f6eee2c255926aad421801649c563f027b2f71a30a06d5b54daa8c75cb4912fae7dd680e5acb22c3b89d777bcf565b1652bf6c7c7bf54a6b332ed0ea5d99da917edd818133f5f0c7ea4d4f1a5a72
+PK in G2 (serialized) = 1188661b7b0c8bde6d1c100332d8fb1e981bd0f78e97b92402d90866ba07a8571eeb681d5ac15ea70c28b587c0e3801511c2bee74addcd6a12fbc8ace9134153e98fdadf6cfa48f59beb98edd0107633b14e6dd67ebe8e3ac4b3a9fefe64c57b00bdcf697600d6efda43d50e6518feff61627bb4d9b364db5ec15b0ab32438350804981c1d957424309bd1c26a44972800afbea311e579d771c9354c5e4cd5def5d2b83e3c693a5ce9f5e5438a13d20044509949b3d97d6e596ec1f29c6d8fa8
+PK in G2 (compressed) = 9188661b7b0c8bde6d1c100332d8fb1e981bd0f78e97b92402d90866ba07a8571eeb681d5ac15ea70c28b587c0e3801511c2bee74addcd6a12fbc8ace9134153e98fdadf6cfa48f59beb98edd0107633b14e6dd67ebe8e3ac4b3a9fefe64c57b
+Signature in G1 (compressed) = 9178636f344577e561ea845e8b8635302fdf0243dd6cdf6b60ebf15e2e7d975b109f2670c8521526f3abbc1c5d79d33c
+
+COUNT = 212
+IKM = 00d4a87c5024f8cca074481cf0c4986c4014e8bc9064380ce0b4885c3004d8ac
+Salt = 1f2a81d14969f9db61b2ea7e90ad66509f03d2a4442895d7a663985600248786
+Info = 
+SK = 60cddef553bddb96babfc3ee6959b44999555bca32c414e093042ff985bdcd2e
+PK in G1 (serialized) = 15d391c3b8ec87cc95b0930c774f91025b87d30f0ee8212b230a751a29535345cfeb4965b2367d8ca47ed1c2ca173e44174e742950f621cb751b6036714acb76289d65c397eecea0df62eb5c26bf2d7b4181cf0a88246347886dd36223b9a019
+PK in G1 (compressed) = b5d391c3b8ec87cc95b0930c774f91025b87d30f0ee8212b230a751a29535345cfeb4965b2367d8ca47ed1c2ca173e44
+Signature in G2 (compressed) = 8a0c7d837d5b8dc46ed4fa155b47c64dec83fb0d24259fc0665fedbbd840404caf04899acca7ecbcd82d6414e1613f8d13a10ef6e0fd100f38b769aedfe99be43c86a82b056d12605815e187de0c380b9f10f3b8763ae74ed40e64f7509162ad
+PK in G2 (serialized) = 125d9357591ddf50bfd81086da4ecfaccbe90e53840985b41c2c077884c8463b0837410f0219edcc4e9d141d16af20c20e8de3d22a2cb8523587817054d5f76161fa32e03ddd93e9493a2cf7228e6fd108e1b160414fdf693f1a11bfbdf83b0c0c18c5457105f9487bff0bab978cde09540fd92bf8e63389a2d0700491a7b7b44a797d540a445e4b8403f09788d7c0a4083c3147fe42ba4455fa08879e1abca149a63aae7d6226e89176ac4b745f4cd37cbb4a4fb19ab460c371a8a7ad597a97
+PK in G2 (compressed) = 925d9357591ddf50bfd81086da4ecfaccbe90e53840985b41c2c077884c8463b0837410f0219edcc4e9d141d16af20c20e8de3d22a2cb8523587817054d5f76161fa32e03ddd93e9493a2cf7228e6fd108e1b160414fdf693f1a11bfbdf83b0c
+Signature in G1 (compressed) = a324d4ab46d058bd3bfcdef4a60e8464ab30e26ab9cd4fa8ac52ee7f6a861627f892a5c6388b8fc26ef0b211e8b4e2d4
+
+COUNT = 213
+IKM = 00d5aa7f5429fed3a87d5227fcd1a67b5025facfa4794e23f8cda2774c21f6cb
+Salt = 2ea852620bb4c28bd7066a04af7542ca19ba58c858fb46e6e86a409585946800
+Info = 2ea852620bb4c28bd7066a04af7542ca19ba58c858
+SK = 43de848cfa03b55c65d48b5b9d97c7fad0545d242fe1235eab62c330fb7dc654
+PK in G1 (serialized) = 015474e0b74a2be219829adfa27a0dd78bc7010f39552652764ebf7e08aa2406f119399a3a52696e30235b3fe8f10678049783a755e2e24a5eec9c63063ebcfcb9e3f26a5c13953ece0b0575a77e55b3b7e1cb319555ec9f0548a539266a69e1
+PK in G1 (compressed) = 815474e0b74a2be219829adfa27a0dd78bc7010f39552652764ebf7e08aa2406f119399a3a52696e30235b3fe8f10678
+Signature in G2 (compressed) = a541dbfa4a44646545733e0c22553c03e44f3e83d5f0b296f93717b11f257c33ccb8c2dcf9cbd384f6808d5c1049708711c95f710cd21bd6fae07d21457d252cc6f9e5f5dbb62cb16edcb9c271e653f5aedb3758779fa855e32f6e796f83027c
+PK in G2 (serialized) = 17e8920c860e20452fbf4eacd7b072083370b4437abad781e917db2c436fe8f10422c66e8097290cea980f224250574611f8ae4de6c15600a5c50e79bcea2be68f1769b7ac2b882b21d308433ca3e3d43646342d55d3e4590526179a208e06970817a46a1ffd18a4ec8b998326a81c1811fbab7c1b0e904a01df4994fba57c16184ece533dd1d1da94546d0c5656bc7d144960f4a79adc09831bf242d2f6b1c13fd7547d4b635ac4dca477c3b4cc5780d78b1c37ee6d2b496b1bb95e5c967961
+PK in G2 (compressed) = 97e8920c860e20452fbf4eacd7b072083370b4437abad781e917db2c436fe8f10422c66e8097290cea980f224250574611f8ae4de6c15600a5c50e79bcea2be68f1769b7ac2b882b21d308433ca3e3d43646342d55d3e4590526179a208e0697
+Signature in G1 (compressed) = 93091e669e30e95563e414c4e005abf860c8bcd2e92c0f0da26218704d8291945964068896579b59d29c51fb9015f96e
+
+COUNT = 214
+IKM = 00d6ac82582e04dab0865c3208deb48a60360ce2b88e643a10e6bc92683e14ea
+Salt = 00cb5e29a4b036e061d56d6d3d72b7c007b9d722509b2ec59ccefb16ef2ad564
+Info = 
+SK = 4e1a9d834585de312cac89fb7121379131a51807290a39f442f4708bd808497d
+PK in G1 (serialized) = 145f91e6df7196ed017a1c42bfbcb1b0a2effa888e2b744af76803253ddf582641caed088c1111775242c681ff2e935d0713383ffba822b74169ce63ac6db91c0c1362635859ee978642ae64ec7b5c3be547a6c2ee712799c7ad34e8043fbd41
+PK in G1 (compressed) = 945f91e6df7196ed017a1c42bfbcb1b0a2effa888e2b744af76803253ddf582641caed088c1111775242c681ff2e935d
+Signature in G2 (compressed) = b371be44878ef86cead75a6dca9349fed46ded234413c39ad4c7903245fd351262bd4580fa00e93e75b0e7cae62269ea144e075e6cef1937f915f6903f068b887f313981f52a359ad823363006551bc0e0f27e1b32d9f1e9e6c20b09cdf7f3d2
+PK in G2 (serialized) = 0361ed6b39aa7ed608dd7c8473289b8e4d1bc0f0822939656e83fd1077075c5c95580054fa8e7f4ab33ac1970643b27f19d61c5fc0cd3dfc05c4bcadd51ed34336329d11298b99a146fd35d2fe88206441e752cb8d9f9e338b1eefc585127f84189d870153720766f4082185995f1ae3f8f478f646172b119b5dd6bc3d6ef9f6d62f4b8a958a656b478c353d56502afb067faeb2bda95de37a66c3f6f9907f0f1d680d4efb0abe05595283eb86f64de6ee3d59e154ae075cdfe34fd17b4d21fe
+PK in G2 (compressed) = a361ed6b39aa7ed608dd7c8473289b8e4d1bc0f0822939656e83fd1077075c5c95580054fa8e7f4ab33ac1970643b27f19d61c5fc0cd3dfc05c4bcadd51ed34336329d11298b99a146fd35d2fe88206441e752cb8d9f9e338b1eefc585127f84
+Signature in G1 (compressed) = 826e0d3bb722df2411c4c39d18af1a7286ccca5b96942555e80fa0291b8a73ff6850dbe1b902bc9dde91d39825f5e73a
+
+COUNT = 215
+IKM = 00d7ae855c330ae1b88f663d14ebc29970471ef5cca37a5128ffd6ad845b3209
+Salt = 59710bcfad2dad6a52543926c9d7af184eb6c74efaa33ca2d0c606f6badf815d
+Info = 59710bcfad2dad6a52543926c9d7af184eb6c74efaa33c
+SK = 0fd8280b7baf51577b0a30845adaa341592ccf547b7e0613073a705f05b2dcf5
+PK in G1 (serialized) = 097e77018927cdcfcd17d3301654993ba5200ef0a69b30ce103f8aad777b2db850bbf826b0c58b2ca822cf6a569b901400c04f9d7a8d7b041461cd00aa969c430b83cf763571acdb611e70b0ae9ce505e0faae907191ee971d0f2779e55bbea5
+PK in G1 (compressed) = 897e77018927cdcfcd17d3301654993ba5200ef0a69b30ce103f8aad777b2db850bbf826b0c58b2ca822cf6a569b9014
+Signature in G2 (compressed) = a91c297bbed7a93708bd6cc3d3fdf04292d007aa2bd57b07b62712ba88e7eaa3175ccae3a215f3eee5f812f2c64ad01b12558e7d4bb7ba39a862598be78b8313f32b31a591a07bce8f477090ace0a22092ef262b40a4e73f0bb313af543e007c
+PK in G2 (serialized) = 157d098274cacb2de5fa15f9465f0ec4515b3a654f067a46b016748a36f6728c87007d80869900481bba11ba59039ff40494e257d2cfd35d46a2dadd47ec5daa2fbe6e56a7bc60ac55835c0975761be59f9cdf7b0e753087dbceb46c6aab00e90417f7b732a8ef96c9ded7e7bed01ac1d2b9f8c745fe7b6ce67de833472e09e1c303f552ea1fbe2ff2c6e0d6f684a904060db8bf5fe2026c482fc1ef540236752951d533da2e6fd5bc77c78c390513411397f6b658f476d7ae8515f62ca67825
+PK in G2 (compressed) = 957d098274cacb2de5fa15f9465f0ec4515b3a654f067a46b016748a36f6728c87007d80869900481bba11ba59039ff40494e257d2cfd35d46a2dadd47ec5daa2fbe6e56a7bc60ac55835c0975761be59f9cdf7b0e753087dbceb46c6aab00e9
+Signature in G1 (compressed) = b48eadb56b058e71c1747f580e4d24a088264b2b7b1b4a152ac24dd0d7f2f787bae2f47667e3bf27132df22afdd240d8
+
+COUNT = 216
+IKM = 00d8b088603810e8c098704820f8d0a880583008e0b890684018f0c8a0785028
+Salt = 056e4a14c212e605461edfd3c69738772af7a4d79481d61ca680eb942499eb66
+Info = 
+SK = 562cb58c782e21cfc82547d817fc5884cd42efe49b01c90af8d4e1620a1f7d7d
+PK in G1 (serialized) = 0397c26315e2b087b141b12148e709eec8fc9f88517032cd1cc2fb549a861f36248d90d1adb3fc3a4bfa1af88a85763c175d4cec864ddb34eb391d2d357f11e7e0885f17c3a211ddde9a4882ba8fc874c4fe9b7b911646b0404a60ee7e7aa734
+PK in G1 (compressed) = a397c26315e2b087b141b12148e709eec8fc9f88517032cd1cc2fb549a861f36248d90d1adb3fc3a4bfa1af88a85763c
+Signature in G2 (compressed) = 81092a84fdc0f940b73a3318d272c1726280282c8a19a404b448620aeb4f199e72409385e26af07947bfd2ba57a1e17c02005dbd4ac738469c5fb3e9db5ae96d047ce1cdfe226aab2602c8b6590f97e8b13c786e191966754161d927d28dee47
+PK in G2 (serialized) = 0b36924e42f5a46712bfe7d67409704fd7ff06d24ec0f1f9062c9a43184f8e6aad42464dca844d3f43c07dcf75674e6102884aff00a9d9683469f5c6584f5c93c18815d26e3264aea77f8f9e45f13b3b1dbf4129cad8af85f6d082682b77360e0638afee64b52ccad8c8ed950d1cd29d84b819472621271afa6ef306a548b01d5cdf292256ca51063a0a4e88d62152da14ab236a8837d372a30e9dfe558b170b1251895e97eabfdae1b06889b2877f71a0bdad1ae39c4883c4f73ffdcaca9a61
+PK in G2 (compressed) = 8b36924e42f5a46712bfe7d67409704fd7ff06d24ec0f1f9062c9a43184f8e6aad42464dca844d3f43c07dcf75674e6102884aff00a9d9683469f5c6584f5c93c18815d26e3264aea77f8f9e45f13b3b1dbf4129cad8af85f6d082682b77360e
+Signature in G1 (compressed) = a427e201609428c523a693fd415dc8960270c6cd77c974a32be78efe95e70a9b7ced6377df5c1e6dcf54ed35498fc566
+
+COUNT = 217
+IKM = 00d9b28b643d16efc8a17a532c05deb79069421bf4cda67f58310ae3bc956e47
+Salt = 5f51e5463154dfc3d3c4b2ec7d63f6568f15ce2ad71a2b873a0a508e815e9b40
+Info = 5f51e5463154dfc3d3c4b2ec7d63f6568f15ce2ad71a2b873a
+SK = 041f2488427036903f1995de53af31c23c85fe510df00b43371dbc0ca6824768
+PK in G1 (serialized) = 0ff11ecb049dba5c88be8caf38685cd251ff2da0e0b0f7bfd0a667101803caabcb2c00f7ea5416ad728f1eb1a54f03c413a6b193a9ef4014d1fbfe5452bece5cf7b220919f060a9636daa5f4f7baba6b69c079a2cba7288e820342b5efed4297
+PK in G1 (compressed) = aff11ecb049dba5c88be8caf38685cd251ff2da0e0b0f7bfd0a667101803caabcb2c00f7ea5416ad728f1eb1a54f03c4
+Signature in G2 (compressed) = 926e8843b5fb187e7b0898ff61e3c8f7acab026c7207972b02435e90f8ef3f0815f88eb74af6daa05e24b4d7dba3b06f006f396de8e2e2610e0823da87c19fc23c4277395e38ef6086190a05f751a5110bcee030a40d54d5f6bf9b9553f7f3f1
+PK in G2 (serialized) = 16fad9680a69e2f0bdcce4e57cebad5b1764d095b1e17492903de9512f238b5f07f73ad5e198c1ae475caecec1c2d5d40d32ae97df0e812927568b8f194e93f4213c1c3160e0d4684dc57cbbb1f0c7c1ecb9e2e4df7877d8bd9b8b89f0f0fca105023a984d7eda73ac15aab0a89c272248bfc0d108d88ae9be48010b410d9feaa750c15043af4f3306d9738cf0cdfc4c0cbf6ddd4056738dfeaa49e535241bbbda00f7b98ffaafa801439f5405d6e6eea03f7f35079d954edb1e8157149bd2d4
+PK in G2 (compressed) = 96fad9680a69e2f0bdcce4e57cebad5b1764d095b1e17492903de9512f238b5f07f73ad5e198c1ae475caecec1c2d5d40d32ae97df0e812927568b8f194e93f4213c1c3160e0d4684dc57cbbb1f0c7c1ecb9e2e4df7877d8bd9b8b89f0f0fca1
+Signature in G1 (compressed) = 9905db12f3c97f64a2517952c23d15c6053f89d9682ca9e9601e4ffe6d2f1eb4f67ae275ee894ac60175b262ca371005
+
+COUNT = 218
+IKM = 00dab48e68421cf6d0aa845e3812ecc6a07a542e08e2bc96704a24fed8b28c66
+Salt = 595d586e80581bccbb8e97b6f938abe647e8ea62f6d480c03f157a131b430e4f
+Info = 
+SK = 56ecf19c9d954671158e50b48b300a9c813645b503b346ed68326bba57585b65
+PK in G1 (serialized) = 0c57add7f8d6808df14706a2e2686041c59f577f1840549b7266297e3f12cd2b83b8b3b552af55f8485abe04b4cbd7ba1306c3877b5dd6277aacaf63fafc023d30e8926dd141023ab1bd1ca6b0191f936bb549b4ac50956a39d40ad5bfe961ee
+PK in G1 (compressed) = ac57add7f8d6808df14706a2e2686041c59f577f1840549b7266297e3f12cd2b83b8b3b552af55f8485abe04b4cbd7ba
+Signature in G2 (compressed) = 84809ff90e23a928ebaf7a18c5305a25414407c86d0b60431aa5ba2f6595fabcc7042560c18b2ce8aaed6927451ca465118aad035b6894712e732fed9a9e1037952b42bbe18a323e92c40225ac126e154cd550bf2b32a516169dceaf34812cfb
+PK in G2 (serialized) = 02aa0d4a844b2ec03bbf66da5038e3463da46f772499c9aefbd74da6c69d3f4c31745e6ba601c5fcb7016b7d1ffef0630fb9d1dfda09b1e19ff2f2c8293139c96456077537a61f98e50fa0f08448bb88cc6799c11fafd428b45b7f53b0fd256902136071dd994089e2f33c8a952d583ca2b576c0c153a2c95f4a5b0c5695137d9deaa3e5d59185f01625d0850bccc6470dc424c291148724df681a9f8c6eb1b9c534781f5593e890c24f699520cbfbb5a1c45768d9fcb43c66a906c65b82be51
+PK in G2 (compressed) = 82aa0d4a844b2ec03bbf66da5038e3463da46f772499c9aefbd74da6c69d3f4c31745e6ba601c5fcb7016b7d1ffef0630fb9d1dfda09b1e19ff2f2c8293139c96456077537a61f98e50fa0f08448bb88cc6799c11fafd428b45b7f53b0fd2569
+Signature in G1 (compressed) = b42a9131f33339d3eeee46b21f90e172c13a4fd6c31abebd0593e23d9a10bbbed5767b1a03f6558cf137300e93e1280c
+
+COUNT = 219
+IKM = 00dbb6916c4722fdd8b38e69441ffad5b08b66411cf7d2ad88633e19f4cfaa85
+Salt = 4089f9febf7e4e5d489b243ec2aefea84a1ea63c638365db5e1e315b05490f1e
+Info = 4089f9febf7e4e5d489b243ec2aefea84a1ea63c638365db5e1e31
+SK = 397a89eac2cdc1ba5da6d14ebd9bebf2cf3d458b54cae3e09fb8bba3946a0b4f
+PK in G1 (serialized) = 19a808b42497a81ae3a079a789a8fdc585c17433a57f3669585139142b3d6de29b57bd8469cd319ae8b32c4e7b81910a0b9a6c47f65aece6adae036e79d130cfedf9b7e7d2a755679e39abb4fcba87ee0109ef0eee0368196fc67d9824a0e8fe
+PK in G1 (compressed) = 99a808b42497a81ae3a079a789a8fdc585c17433a57f3669585139142b3d6de29b57bd8469cd319ae8b32c4e7b81910a
+Signature in G2 (compressed) = b850674104549ffe137134609052ec2bd60f052958399c8b511c136ba6988ff20dabb900ceaedabbeb84d5c2ebe82eba04b22d59bb152d8b1393656d8fafd7547f3705c700b43ca4074462b502f777144134e3761789a4954bb83e7c8a1f600d
+PK in G2 (serialized) = 198dff5ec0d73762d0d338c020af389ae3dcfc596118ab02c495197dd6d501d0a1dd79bd5500efe145455d3632fc05ab04598de636c39c5aa6d6e487c2e5f1fb96c83c5e6fb88a43713df416f757dca696c5dd54ddfec12afbe5ef445e1382dd0c65180ce10262c365009b4fc4299790c3067561be20374a58afaf36f5b4e27a2420211d31b3174a5c0e95a6e11c53b80ed950252a772a125af92265ceb77c61cde5ec412c9860c2e4a1b1e10df0d68ea18635d3b15cc294ca566bf5f4d698df
+PK in G2 (compressed) = 998dff5ec0d73762d0d338c020af389ae3dcfc596118ab02c495197dd6d501d0a1dd79bd5500efe145455d3632fc05ab04598de636c39c5aa6d6e487c2e5f1fb96c83c5e6fb88a43713df416f757dca696c5dd54ddfec12afbe5ef445e1382dd
+Signature in G1 (compressed) = b642f7d08d156d9ddcb47f83ded249461b4518531daea5f0065919f73cbd5a313e433a9170aab76ba927659d9e90426c
+
+COUNT = 220
+IKM = 00dcb894704c2804e0bc9874502c08e4c09c7854300ce8c4a07c583410ecc8a4
+Salt = 471ea2464536b57434d98225e4524c112e0c5a276838a796097da65f494b7a21
+Info = 
+SK = 11851176f1bfdab0d85b6042628eab9e6373768273dd979f9163b3087b0e4f87
+PK in G1 (serialized) = 05234351a54c203ddcc64cb9e041fe9f9de485db5625573fa35e236f3b789df61f836a9c58d89aaa23dbb2ad9d3b241502faa2cd06acb4711e1c6378f8baaf21416c8b397243816f10ad5f5306ba4a992242ab04436de0b26ccf149eca62c247
+PK in G1 (compressed) = 85234351a54c203ddcc64cb9e041fe9f9de485db5625573fa35e236f3b789df61f836a9c58d89aaa23dbb2ad9d3b2415
+Signature in G2 (compressed) = a5ef167561c4472172245dff71c6eb60046a69d136e43ec4ea770a1c01bcd36c30614443740757a2561c7948c306199402f4555d2f2f253aa5b04a4b39e4c49eac7122158edb79a14e6a2c6c236eb46d421132a78860c3fd27d65d170662574f
+PK in G2 (serialized) = 14b215a03ea3e87edb1097508489ba7d9ddb1decabb04b7070300b842036117236e2194c6331f87eb690ffcd4b537f4c09d527f6ae3260d02c385cebb478e2f99046bc56f36e181fea42de9b5a74944f018d9a8a3db082bf4a0caf748d1a230b0ca9c54e6a63c92eb8f15ed6491dd5e501e85fa4ee1407b4c0accd78f138339c4bf580f8ab71f476aec5f4c2c6d1adaf083e617275c7f9c0375286567af3465de69d89213a01fe457705084119cd0289e78c39fc2191b48ee5ff3016dd8d572c
+PK in G2 (compressed) = 94b215a03ea3e87edb1097508489ba7d9ddb1decabb04b7070300b842036117236e2194c6331f87eb690ffcd4b537f4c09d527f6ae3260d02c385cebb478e2f99046bc56f36e181fea42de9b5a74944f018d9a8a3db082bf4a0caf748d1a230b
+Signature in G1 (compressed) = 9904253d55d501b9b8b8969c99dcea66e7460da634a81d933b4504e1b075d2765e1877e369424011312cca5e9df85d65
+
+COUNT = 221
+IKM = 00ddba9774512e0be8c5a27f5c3916f3d0ad8a674421fedbb895724f2c09e6c3
+Salt = 3a7ccc6b30188676dda8161f6757486460b36c382ae3885d56fc1e9eb605dbc0
+Info = 3a7ccc6b30188676dda8161f6757486460b36c382ae3885d56fc1e9eb6
+SK = 6b46c555fcec2c5097a72a138320474ddfb46eeccde75f0530491a354d028962
+PK in G1 (serialized) = 03615d8fa91e74a0c4254c7b93968e0a2075c346d8c19022d23e662062c078d7afdab3396edcc6ea6b01695c8bfc39860fba1e24912e3d5c938e55630c3958e1b4949101be6554a6901ca72ca7692d6c4ff9d16721926d396a857db4aafb062a
+PK in G1 (compressed) = a3615d8fa91e74a0c4254c7b93968e0a2075c346d8c19022d23e662062c078d7afdab3396edcc6ea6b01695c8bfc3986
+Signature in G2 (compressed) = 896d613386810ec6371e19a2db3d3d7eb6f6a7eca4f995a6c3c14b7c314b023efa710902bc98bc2cfb2dd00176f612b600a3558c7b3ffa3167f2e458f858aacc327248b3a17d5abd7962261eb48a7217e3cbebaeb5166996736a277856b5b1f3
+PK in G2 (serialized) = 13a8f1d1ea233eac99f13f9a02be83427940af8d1dcadbcf081f14164467961ea83e3545d109f0971eb2081810715db40f572ed22d8f67676e50f1d993b616eedc37b3cd562cf930818d57717d089308fa008b08dec7dd3fd73eadb6157fbfb003fe247a74391eed12c031b18b857ef6bbabcc5dfa10f1884563ed6748d9178442579a319d8187beb33bfb90683b7ab40b84ff0bd011497c4fde6adc2a135850ff220d9bd870719748f7608172f2723def26e6e4ffee59315a6c58e035aa3a64
+PK in G2 (compressed) = 93a8f1d1ea233eac99f13f9a02be83427940af8d1dcadbcf081f14164467961ea83e3545d109f0971eb2081810715db40f572ed22d8f67676e50f1d993b616eedc37b3cd562cf930818d57717d089308fa008b08dec7dd3fd73eadb6157fbfb0
+Signature in G1 (compressed) = ae4bffef3281fd4c7270628080e75d164bd523a882764f854087cd836baaa4e31a0b911004dfefada08193d02ec9b373
+
+COUNT = 222
+IKM = 00debc9a78563412f0ceac8a68462402e0be9c7a583614f2d0ae8c6a482604e2
+Salt = 77b754aa44d378fdffdd4dd40680ad43fd3795c4150075ea0be9d7b4a4742982
+Info = 
+SK = 5bcff0b05b333b98da73e6414b48c0390a528de17b0c9181003fbe834079f0da
+PK in G1 (serialized) = 0c5217deecee95131aac465257119ba0176b42fae86f4b2ad3ac23afa2b1b6f03eea39c7865a0cb426d4213ebb3517d402f87edae317ba8d531d4d582f3ce0421104da9e6efca27c75d965b841788327d0f13bd1bcd41535686031303e1e7b39
+PK in G1 (compressed) = 8c5217deecee95131aac465257119ba0176b42fae86f4b2ad3ac23afa2b1b6f03eea39c7865a0cb426d4213ebb3517d4
+Signature in G2 (compressed) = 82ce616a49e7f07afee574c21305a029d86ca3a2c0f477b7bd5aee3cbd7274d4b9a60b4e716e2a159a2874d556599b610e8361a073d2c1b85c111391001cae6e3c88a254fdec5655b4e1090f42897fe17c4f4648dbea5ca5323dfa9108cffccb
+PK in G2 (serialized) = 082bf4d6fb692ce9c1513bff5987aff9a91de445f9c4e131b2fb12a5988ff170abf2118c1cd53a489455eb979687a6c0135d3367ad4bdf35862a15a5b78cdd247cb485cc1aa0c00ee8988e8494adc940400feca7d6850cb79edf6a6866b504c916a3a0de48e5d34cb7340648ff14a48565bbe11d302716b753e0dab58da2cdfa157ff92c531691ba24fd4d5932cb0b3d05f333aa3c029b0e56c5883d41769e5b079118e5bf13ce41a8c963e888d3d5df0db383c9466296399f32a3937ddc9c3c
+PK in G2 (compressed) = a82bf4d6fb692ce9c1513bff5987aff9a91de445f9c4e131b2fb12a5988ff170abf2118c1cd53a489455eb979687a6c0135d3367ad4bdf35862a15a5b78cdd247cb485cc1aa0c00ee8988e8494adc940400feca7d6850cb79edf6a6866b504c9
+Signature in G1 (compressed) = 9561f910df63818f519d6b88dc3a5b0022d3b90eed0a05987d14f20cffffb8f46aea5cca2dc07134a2f9e2227d12c041
+
+COUNT = 223
+IKM = 00dfbe9d7c5b3a19f8d7b69574533211f0cfae8d6c4b2a09e8c7a68564432201
+Salt = 35b3951856ed021bba315bbdcc7a70b97e981e73b97c6650b83fe92ee8c038a7
+Info = 35b3951856ed021bba315bbdcc7a70b97e981e73b97c6650b83fe92ee8c038
+SK = 4465553b99b80c933aa7bab568a43baf3bc3385d50faf617323f63b160e0e0c8
+PK in G1 (serialized) = 0797ba69ebaa8cddcd40706f4e8dc1fa0cfb40f381f0d384a8c6115964760bbebfe606b6563da86700cc2999ed285e4007bc470d33a70703776ed674f007b7189d99ad52c3756e9d00187f10ed3431c8fb0ae2f73d284423ec336bca1ecda6bb
+PK in G1 (compressed) = 8797ba69ebaa8cddcd40706f4e8dc1fa0cfb40f381f0d384a8c6115964760bbebfe606b6563da86700cc2999ed285e40
+Signature in G2 (compressed) = 8862c73070073aa7cff106960aad76908f84bbc2b985f2bd81746a2e7119d84f29c4f4f8e98113e6b0bb8a84f016b3be01f653d008f760276b3917f3dd31982a7534806c2db1ce635e6847e052a185b0dee407dbe0d4296ee917e76eb2d5002d
+PK in G2 (serialized) = 1379a5e9007ef2302132c63282e5600e7608e3e59e92ef2e7e985ddb96ee51a87b803595c20fb862a3fd93f31986b3120cea4c8f9aab9d1c1e424a9ee25979ac251d9a3004cc803648ad297f739fd0f41969d8d3d9a4b1c0a89c3998fb5ae02b068fd7fccc4b34e620547e7c5b38b9fed877f188332e50237afdb0f4f885325ae625a4c6610bd13411cc80893dbf562e0f4103ca522ec04282c8bd918de000a9917929638702241dbacfe57e3ff8fbc05b7e3d9cd4c48ecdd09195dd755116d1
+PK in G2 (compressed) = 9379a5e9007ef2302132c63282e5600e7608e3e59e92ef2e7e985ddb96ee51a87b803595c20fb862a3fd93f31986b3120cea4c8f9aab9d1c1e424a9ee25979ac251d9a3004cc803648ad297f739fd0f41969d8d3d9a4b1c0a89c3998fb5ae02b
+Signature in G1 (compressed) = a9fc87966f6f02bbfb3a960c99472328c31cdfefe89b20c8fd5ed41589f890672dd8d73b38de7fc0aacb460b495c774c
+
+COUNT = 224
+IKM = 00e0c0a08060402000e0c0a08060402000e0c0a08060402000e0c0a080604020
+Salt = a312e19254dea234d53532815062b8e7441eabff24b4e38549be847acb036b8e
+Info = 
+SK = 0ec605723fa543301ed4a6cade376c11843a159bc8a3b82cfcd2ce44d38ec267
+PK in G1 (serialized) = 13778feddb4e189f0419b61d49078c01ace1c21b1823ad0bb8e59e660bee53ba9bb96dcd637cd06d18e4ef766934396300ef5022e760446c869082dfcb83583dfd47fb8b567f94a4e727000a5c03e5c3925ac49448842cbf1c3d16b0e48d7eac
+PK in G1 (compressed) = 93778feddb4e189f0419b61d49078c01ace1c21b1823ad0bb8e59e660bee53ba9bb96dcd637cd06d18e4ef7669343963
+Signature in G2 (compressed) = a6a4c60d671bbf10e5f2a3c35c7fc2c9401051c91a7394fbe91bdceba91d0892db11271158fbe2e43d2e36e86bf280b516204c47d8d5ab0480720166f8b39ea31443dd31bb598df5c3f50836100b178d7ddccc187546d4d6d7b25dcf3bb37815
+PK in G2 (serialized) = 02e259c2eaccaa002a53ec3a4a63f7eac90bae4a145ed7f9d715d02cd11bfb7239c3bdf132f8b9bcfafb551555ff260b12e5126d7abccce3e65f7f21240158d7fd7ac852de0ae389462262660e8296b37ad2706ef4355c86339675e613ff7f4b17d360ca4da037a323ae10aa5ecd768beb502311d42cc3aa626dcd826f52b5d81fcf8e5ab1dbe41383656a129b3d45fb09c9eff26519e18c822e544103fcbdabc8cb4a6a2fcbada8f100f1ea704ca15ca5cd72235e6619b030d021e236f0f00b
+PK in G2 (compressed) = a2e259c2eaccaa002a53ec3a4a63f7eac90bae4a145ed7f9d715d02cd11bfb7239c3bdf132f8b9bcfafb551555ff260b12e5126d7abccce3e65f7f21240158d7fd7ac852de0ae389462262660e8296b37ad2706ef4355c86339675e613ff7f4b
+Signature in G1 (compressed) = 989b2e571858e3b17d51e6196a78c06edf366be908a00860454a7afe842ad6faf33818b08bf7a34b21e12823743bae02
+
+COUNT = 225
+IKM = 00e1c2a38465462708e9caab8c6d4e2f10f1d2b39475563718f9dabb9c7d5e3f
+Salt = 8c22a0c6c2b47721e1ffe069370725bcace99d6b1540173de505e3f1b9ef5d43
+Info = 8c
+SK = 4d617d14790842f906b3369e6362afb34e438fb67131f7e54ecc119c2cfb959d
+PK in G1 (serialized) = 020d467ce2dacdb626a53282205f0b1903a38757d3cb2a6f6abc74e3b28527e4a80b646ace08824d0ccff1a9bc172dc5151079175d62bc03d692ab398bad1d9be673f0ea4e0a24bcb655ea86e4afa68cfad4b1170fb0d563cb9ab5227e9aa975
+PK in G1 (compressed) = a20d467ce2dacdb626a53282205f0b1903a38757d3cb2a6f6abc74e3b28527e4a80b646ace08824d0ccff1a9bc172dc5
+Signature in G2 (compressed) = 98f3ed62c3d6eda350be388480f78d6239b79006423edec0a4227623b8dbf1a5b9236b985415bc8869952ed94fedad570d807d91b24fe5ced8c8f57bf51cac943eb82709098c9e1cf886e4804eeab06c6cb34f278c88b10551b273c0e8d4468d
+PK in G2 (serialized) = 0550ac2eee45a8d26654809492624debaaad535fd2c2c7ba1c721b2bd7319f85a7fa221724649a0ac45a8b95fe97f2d70377496a491522b5e7e773cb9611542472e79feadb47c24fcffbce2baa23aef7bfc9b5936e821929af6c9241ec1794ff12403476a653173d455d71a762909b90c6471f7c1462424bead4c3578867e88fe6e85dac1d7ca269e4926673574640d500e40b1269875f9dc4687bc042f9c4774156c4d2fc90fdd17a2017bc8128b975c7760defe745ddc0d3ccf8f21f90f314
+PK in G2 (compressed) = a550ac2eee45a8d26654809492624debaaad535fd2c2c7ba1c721b2bd7319f85a7fa221724649a0ac45a8b95fe97f2d70377496a491522b5e7e773cb9611542472e79feadb47c24fcffbce2baa23aef7bfc9b5936e821929af6c9241ec1794ff
+Signature in G1 (compressed) = 8969bea45a6d11c2e47f7a041b2e607e1401ff6382cdac00537de36da927096da9e5cd88846445c16e06e4f3fa3c63bb
+
+COUNT = 226
+IKM = 00e2c4a6886a4c2e10f2d4b6987a5c3e2002e4c6a88a6c4e3012f4d6b89a7c5e
+Salt = bacb0ea714bb830bda88f8d1748513fa680f016d2125a36a4ef918473d9aaf70
+Info = 
+SK = 0ba00b89b8ae840fc46ad148aeb0709313b1ba75e1d10491f69aabdfb4a42bd5
+PK in G1 (serialized) = 18abac4147660d7e88fd6abb47f38854b6ad33454346567605b5dbd11ffe76e226bbb484cbfb0b78cd622ba1f10b1dce19c18c5ad438456fb364591cb9dfe980ce3bb97d08f0e1e1ee64f660a70e625bd9522db128a7ec59748fa4f86e9ab9a6
+PK in G1 (compressed) = b8abac4147660d7e88fd6abb47f38854b6ad33454346567605b5dbd11ffe76e226bbb484cbfb0b78cd622ba1f10b1dce
+Signature in G2 (compressed) = 97db36bf5758f4bb440ac2ea10bbe777140d873ff4b8fd367f98f5767215f8180cab609ff8ca4775db90b6a5ac535871075cb8a4d0122bdb7370b5b92ec9a442acdc075c284733cf9ad5130555eb56ed20232ff059058ebeeb720f9ba73ec31f
+PK in G2 (serialized) = 07d72a667955db7da81ef226fe91f181d7c8368dd559edcc0494d52fd534179af6872860e65410b34599c4334400a1040ba8488edff8f3e545475438bffdb018d2d5ba3f7b2f54e74665c29d55c4125e482178e7d181facece1c0900d0b7856b19f8a1f311206461d64caeb0c8f43fe17f374635104aa331ddc0fb85f3aa75e9fc408e203fa0363619db07f67a936e981281e5b3acbd7489eac039744912b39b17c7847f5652ab8d8baac1651e45bf37bc27d6985faaa9a601df7f36bcc16fd0
+PK in G2 (compressed) = a7d72a667955db7da81ef226fe91f181d7c8368dd559edcc0494d52fd534179af6872860e65410b34599c4334400a1040ba8488edff8f3e545475438bffdb018d2d5ba3f7b2f54e74665c29d55c4125e482178e7d181facece1c0900d0b7856b
+Signature in G1 (compressed) = b152154fae379ad9020bf00e69fbf56a8484415a6590b6eeef7e0900eb216b144e1ca9f7ee99fc6a6bcfcc538ec1ecba
+
+COUNT = 227
+IKM = 00e3c6a98c6f523518fbdec1a4876a4d3013f6d9bc9f8265482b0ef1d4b79a7d
+Salt = dbf5617b963ebb17fe76673ebb08b94ea6cb36e27d77f37900a3bf25b3bcee8e
+Info = dbf561
+SK = 5b1b21d50d1eb533dfa49d52332b6f4a93b2fca2a4a7cbd81f75ee79179c1493
+PK in G1 (serialized) = 0f90c6cf834503f783b0389ed236f461ea6ea136503ab11d5076109d115b13d5e0bef396c12c1226ff639e4d5ba821ed0992906020e26e4d6c578ce57da6b95bd5c5e875d0ac7290112b90a61848171425140b3b1750d930837b6a14205d6078
+PK in G1 (compressed) = 8f90c6cf834503f783b0389ed236f461ea6ea136503ab11d5076109d115b13d5e0bef396c12c1226ff639e4d5ba821ed
+Signature in G2 (compressed) = 91c563104e9849780b983e44e38391db71ea4d887ab9bc7663da52b1327a47414c76fc3a2949ed671451f129d6ca6f6902bad227abacc0a6079bc6c082201bc55595767a25c98b52aa10db44f92782d96b41537fce0e8f2827a206ba62fb5620
+PK in G2 (serialized) = 07ae47bbac3a1ae7b52d6d24ab69d984ab0e57fef97d0ff161d2782eba6d665179cb17ae1eeea6e567472e85f63e21140ba94fa4eec6d67bb0142a58f6cc0d88aa4ec22cf71b67c61a93c8094365fbd9550038adfcfeacee6998a45b7d39b89203be4bd4ac8381a7af7736e10b1f98830216a9fdc6b5df6a073607ff5076af04c65f745c123ee18d906a1d489530b861040eb3ef877ac6e5864d08adc5ad4ad3696526a652cbcd283810fdadf6d67d2589eda11541851743d5a9724033b84fc1
+PK in G2 (compressed) = 87ae47bbac3a1ae7b52d6d24ab69d984ab0e57fef97d0ff161d2782eba6d665179cb17ae1eeea6e567472e85f63e21140ba94fa4eec6d67bb0142a58f6cc0d88aa4ec22cf71b67c61a93c8094365fbd9550038adfcfeacee6998a45b7d39b892
+Signature in G1 (compressed) = b51b412ef646c2f1dfa2d20ce1bac87dc2f2858a2842821f98c559bc82b5d8c76834c982be540a092b6165c3796c5f3e
+
+COUNT = 228
+IKM = 00e4c8ac9074583c2004e8ccb094785c402408ecd0b4987c6044280cf0d4b89c
+Salt = 96ebdaf227fe115079196272fe3ea111da81421cd7226b974c52701401b2d650
+Info = 
+SK = 6e4df99c0791576b7c1f2e59b6611cf846ffc5f31517d3d062827d352124ebdf
+PK in G1 (serialized) = 11f3e7119b15301156e5324bf890cfd8cbc7a6c264b511ad288f585fe1a03ccefe70581ca9140dac04bc020cb869316c0dc54bd0cda262c81eaae659c635d9729fefd2f4ed78b533b048a653645e5526e325df3cd31cdf38abcfa0b077133a51
+PK in G1 (compressed) = b1f3e7119b15301156e5324bf890cfd8cbc7a6c264b511ad288f585fe1a03ccefe70581ca9140dac04bc020cb869316c
+Signature in G2 (compressed) = b6dbc5e285e18dbec3361bbea7717073da960e16d7db209e26394f02ac47662cccea7139f9f38b18af50930a99dad12d1566da8b496204cf50709b31683c04a78085a3b10051964081d78d5d5b38d62cbb4f7035cdea0e4a7633ce81c45121fc
+PK in G2 (serialized) = 07608c6b82bf53d1ee830c5573a570615e5bfab499dcfa9530514975741fcb96edcb632818fde8b08242ec137602d639197e3ab315479f6360e5c1a1d05c53dbd1ea60c1dc75bdee49a303cb6e71bb883d673ae19fa2d3ead6861d1342c0f35f155b2705ebac9befc30ff907387e269d3ff1ecb3f424a9c94e77da6028834d1db9fb1aceceeaf54324ac5a6f08b83f1e0477d667faf6fc438ecb2403934817d70f3c31be057bbd8411034d249b2245849318d6fbd903d48febf76d8fb25b0e72
+PK in G2 (compressed) = a7608c6b82bf53d1ee830c5573a570615e5bfab499dcfa9530514975741fcb96edcb632818fde8b08242ec137602d639197e3ab315479f6360e5c1a1d05c53dbd1ea60c1dc75bdee49a303cb6e71bb883d673ae19fa2d3ead6861d1342c0f35f
+Signature in G1 (compressed) = 94440410cb957ecac4122d95c65a69b5d121df34bdb34957704e4d2c31d6fd663cdbbf36da779ead18978bc9ed778cea
+
+COUNT = 229
+IKM = 00e5caaf94795e43280df2d7bca1866b50351affe4c9ae93785d42270cf1d6bb
+Salt = 668565d71b1700ad10090e4526d772735f3be8bf77352b98fc031bcb129dfc35
+Info = 668565d71b
+SK = 208c297d9befc605c1586353352ebb56a9860dc188b3c25e653134a1bcc626ec
+PK in G1 (serialized) = 0e3ccfd0df90df4341bece4d3526d3223a1ba38255cf1d40662da27741b2f47ca72d5c8e04c2ac284a353f45a54e9ecf0790a2bdd949351cbc0a4d4a254991d3334fd3f7dc8dead2e3fed585796cf2aa2f6585dd39a82b26648a22c884534968
+PK in G1 (compressed) = 8e3ccfd0df90df4341bece4d3526d3223a1ba38255cf1d40662da27741b2f47ca72d5c8e04c2ac284a353f45a54e9ecf
+Signature in G2 (compressed) = b89ac89f20cfc47ef9dac6b1109605c554e1d1041756319924c2621de2e33e960951083ac13b6e667995ac7a35aa7ea40a7c213271ed057605dc5919791514c17e2f3144aaedd57cbf459a030d49a5ed68a8a9cc5ba8c5cc715a7f9c05f1d98f
+PK in G2 (serialized) = 06953dcf5b39d9d2cd2c1ec2a896e509c61ab04cb4a6088d262423387c2203681492322029ea6c6e6bf94b82062da50113898e22ce18ca9732f4fdb8228db538fc0b159a8ba7e0596ec9144b192aa4edea9fb2fd06291feb74277a47f4a7326b0fb5c565de3d420572c962fd9d6120a2c730865b39c97cfa17b2a54b66e56142dfc4e0772ce42c74b1d2ddd06bfa0dee15f55307afc22866e89575104fbce815b8b0f1111ebecf77a1513accf43b96395e194de7bc7c85707f3de5236c9f23cc
+PK in G2 (compressed) = a6953dcf5b39d9d2cd2c1ec2a896e509c61ab04cb4a6088d262423387c2203681492322029ea6c6e6bf94b82062da50113898e22ce18ca9732f4fdb8228db538fc0b159a8ba7e0596ec9144b192aa4edea9fb2fd06291feb74277a47f4a7326b
+Signature in G1 (compressed) = 9734fd076adbb1c890ebe32de41c8ef1cd3eaea82906b636aa2df949f1696ff9c96bff85646fa5f9f7f95b72463a26c0
+
+COUNT = 230
+IKM = 00e6ccb2987e644a3016fce2c8ae947a60462c12f8dec4aa90765c42280ef4da
+Salt = 346795cd9f54f4e019c20796f8cad12713b9f82110f69c68ac804d3b3fa9441f
+Info = 
+SK = 304ded6c8edbf9113ea4fb76734ad147b5067a002f7cbb952361efb00bfbe527
+PK in G1 (serialized) = 156928046f51d18f398d58e7e62e377baab59439f8ba238c6ecd9d290a9a09f7fd5a04cce6958e4756a2137111d890ec0f141fc5dd6679d009a4f5337b4f7d8ca9c3202b0b1b1fef37101f7af67855c901d95735200c20f10957ea8dcb18da70
+PK in G1 (compressed) = b56928046f51d18f398d58e7e62e377baab59439f8ba238c6ecd9d290a9a09f7fd5a04cce6958e4756a2137111d890ec
+Signature in G2 (compressed) = 93668f2e9624388c2854d544fde251d3c5d5c0495a12f928827b868103cd2b0f4879bd38ccca9615fcc479e42edf8bcf0876ec8bca48ad749598d5807498f8fc30759c34d5eaa098a730364ac55d6b3a9e960b6e1ee2ca0193a1619d15cd97e7
+PK in G2 (serialized) = 0b3bcbd4211d42b14ffc708dbaacff3105026ada170143f7d69481312f0d6fd3c6cc2034df550d1289cec8d8ac3e347d19b16464bd08df68f386e195a093677961a6b174d4e738276584220159b8043c29e8ba26ea6691305fbdb6cbb971cf2115270ed9f1db8dfe6e2a34e9fe1de735e8fec4293f6977102988dc2ae1a099d30b6c2f4b3efaae4990c59b38d0d84ae5018faf94b6620d6d90da78c2ccefc6645baf660a0ec974990b2edd03fff1dd8f7559807e05032c988203a3d2b5b185e6
+PK in G2 (compressed) = ab3bcbd4211d42b14ffc708dbaacff3105026ada170143f7d69481312f0d6fd3c6cc2034df550d1289cec8d8ac3e347d19b16464bd08df68f386e195a093677961a6b174d4e738276584220159b8043c29e8ba26ea6691305fbdb6cbb971cf21
+Signature in G1 (compressed) = ad832fdd8a01c1d5d3c27c5170531088547146bd53bbd75f9fa114a49f4d0344bfee497889ed9688557e4ff8ca6634e0
+
+COUNT = 231
+IKM = 00e7ceb59c836a51381f06edd4bba28970573e250cf3dac1a88f765d442b12f9
+Salt = 27b600a5a73be9eaa404192c2d84708fe1e3633022a839251073b7abc718865e
+Info = 27b600a5a73be9
+SK = 6436f1336106445f7effe08201b6e05584aacd81176c310e1b5db1f7d51e211c
+PK in G1 (serialized) = 0f3df19f3f1c8b07a871b7df6f41816aab3297a5b0d09951c35a006e3acaf447eb0038b7839e039338422582d2ef6c2e0245b4b3b1d4c2b967b940f6f937e69621c38fb0c14e93f3266ed01584884581f9539827a3347f08814863a02214e6bb
+PK in G1 (compressed) = 8f3df19f3f1c8b07a871b7df6f41816aab3297a5b0d09951c35a006e3acaf447eb0038b7839e039338422582d2ef6c2e
+Signature in G2 (compressed) = 93d3f68bdbcc5737badc1f1c3d0f485ab09e507f71c627f9972c8516e16a88c830b8d2b9427b1bdb18d05890b7479bc1126f0ce43aa01164fd58ed0eda059d9fec3fad8ba74f5e0c57fd023a8ad2f2b7a009d9789e6d5598953cce35fa394e21
+PK in G2 (serialized) = 02357e771a1505c28b8869f026f9a230c4368258f1b380f2c91e40a54dfa0210e1e91b681da17b565825475aff837b490b902b3b9e19b291a1d56d1c90c55bf1d2ab7a42f8c2ca80bb38f0330a2c9f32f4ffa9d4672e89b96879e87660f51f630f20cf0b358d7bcf38d456dd2ffbaaa922ac9d12092e96a3a3ddcaa010b7e334dfd3f50a71bc23ca03e954ac52c3f357180a1558b4e57953c4016465a72c3e69a97c404f8f154d2686bf0d695d00cb2cd8cda675f30f0da7905cd70252cd3f6e
+PK in G2 (compressed) = a2357e771a1505c28b8869f026f9a230c4368258f1b380f2c91e40a54dfa0210e1e91b681da17b565825475aff837b490b902b3b9e19b291a1d56d1c90c55bf1d2ab7a42f8c2ca80bb38f0330a2c9f32f4ffa9d4672e89b96879e87660f51f63
+Signature in G1 (compressed) = 814ab3dfe20676797004463e023fb618eca2f299bf2fe53d2cf0a3bb247c3454aae987b83798c452a0afe723df1fa614
+
+COUNT = 232
+IKM = 00e8d0b8a0887058402810f8e0c8b098806850382008f0d8c0a8907860483018
+Salt = 85d1b754267ea81bf5f9dfd0ffddda071d81a660c7b37bfa005da7300fe327ff
+Info = 
+SK = 227ad3eed9cac91271eec45901b7c8228833e807f9d4789e11f85b78c5c1d405
+PK in G1 (serialized) = 15ddca7a9bc5df9c4818267a491a87fd3fb993b97fda88d7029fa1b0f5df1ebc6913ba27aaf6705b0cb5171215a9fd60094bc79aa82a71c255bda568341c2c4b495880489d78e0ce64d1488e60e06f839c7c1cf3bf0ab552e08763b203b1a399
+PK in G1 (compressed) = 95ddca7a9bc5df9c4818267a491a87fd3fb993b97fda88d7029fa1b0f5df1ebc6913ba27aaf6705b0cb5171215a9fd60
+Signature in G2 (compressed) = 8d4a6fd97d8e7049eade26250508ef6d1c002455da1043678fb8bd9be368b9dae65e04d3c8b21961105c1b57c88afe47113b232eb9d140916e652dcd2227532bfead38bcfa7bb0bf2537a122b621943409077c42884d68553ff220332a5ec8c3
+PK in G2 (serialized) = 03d9bb2a6a00c2a6d86f2f1a1416c670a22e26d02cb9de2ad5f48374da59c67e884fb989d7a322b942c36ba78797b26300ba5b1e5a39c9341ecf741fd33a3d48678c69087199be51549888b7925dfcb4cada7bd20d2854fd3c846cc68fc2b6990867346c6c9aff6de071f24240867d0b6d5ae6fcfde6b05b78ea7db812941c2886cb47a5aeaa345c1545de6740125e5512c95653400f4cefbf25810be8a636653fa8ecf67c4c1b90fb9051d5de855c1ea32ac27ca6f94b972be65ccd8aca05ca
+PK in G2 (compressed) = 83d9bb2a6a00c2a6d86f2f1a1416c670a22e26d02cb9de2ad5f48374da59c67e884fb989d7a322b942c36ba78797b26300ba5b1e5a39c9341ecf741fd33a3d48678c69087199be51549888b7925dfcb4cada7bd20d2854fd3c846cc68fc2b699
+Signature in G1 (compressed) = b43863e170584ff4f9e250e7cf24fae76c0f64196c189ada9171c11cf1fcca7db7b07c6ea8f896907a888b79ce606d5f
+
+COUNT = 233
+IKM = 00e9d2bba48d765f48311a03ecd5bea79079624b341d06efd8c1aa937c654e37
+Salt = 22ed8fc71a3d6bc7ed92b9b485086ca0b681b90a21934f098524465b91a47716
+Info = 22ed8fc71a3d6bc7ed
+SK = 3b5a32e27e22cca1fbcc00253d2c6296c3edbe92a0eaa1e6a3e59957edd71a74
+PK in G1 (serialized) = 07e5a0edf56c179e57fbbeaccc527babce2c431e043547fbefab7c7a6015b4caa8d9d1c5eba663765fad675d02d0eada139bf91c36f1bf4acd0eafb5eb4aae89fde4a6266daf666eb2e1984acdc3dc67a004778edb3cebfbafaf8e1ef70e5b31
+PK in G1 (compressed) = a7e5a0edf56c179e57fbbeaccc527babce2c431e043547fbefab7c7a6015b4caa8d9d1c5eba663765fad675d02d0eada
+Signature in G2 (compressed) = 8bdc9f6f25e02aefeeedec2a408593efdf954aca2683bd1d4cef65d529ae1729ba46f13758805713ba4d5c17f1bac21d00f629ccc67ad1a0598283e73560b994ae2f6f30d3a1e79859f288e0c7df31bf450e838cc3cfaced68a6eda84bb72b95
+PK in G2 (serialized) = 05e9d2e23b18bd441379301e668d99c1f459ccfb52396a7b2b3999b81173f51faa7f139701e28d3362ea9f5c99e3a33c02af1557a647ee4aa8e62df22ac5fbd104119204c8e3157362f2c68966b131bba0dd4cc33dc1136cf29781d70cc43a2a197a1f6d9aff773903f677f85518f3b2cac6bc4648da07d5ec2d61f7af1c392637a15c89dfdb42586e3311224e2d348702356eb95eaada4c43aa4800f7f84e59f2a54052321896233e0dcbe65aea8f48d3f1b920c35f7f8b13650b54a923f087
+PK in G2 (compressed) = a5e9d2e23b18bd441379301e668d99c1f459ccfb52396a7b2b3999b81173f51faa7f139701e28d3362ea9f5c99e3a33c02af1557a647ee4aa8e62df22ac5fbd104119204c8e3157362f2c68966b131bba0dd4cc33dc1136cf29781d70cc43a2a
+Signature in G1 (compressed) = a056d64b92ba15b8167822cb5116794ccd4fbeb0b1f59cdb043de019b327aff3ba6568a3956d252f962d40ac34b3f3df
+
+COUNT = 234
+IKM = 00ead4bea8927c66503a240ef8e2ccb6a08a745e48321c06f0dac4ae98826c56
+Salt = 76d8dcfae1b4b6a5c4af20651f3ac1aca10691d999c3ecdcc1e16aa0756c0e90
+Info = 
+SK = 6a18ea75906869264ce2712a55c95a12a22a6dbc197852854a36e6b502dce654
+PK in G1 (serialized) = 010192b4d72ffa71ed65873abaee8fef9180c85b1dd630cfe7fc496a132f5362179a3d11710898fb3ad8a3d3aa9033d719deea789afd1115d8e203eed3b636e94744e45d9b0128e35b8ce9c1dd3d7cf066d8d5bbe184209ca443895c4cef3ae4
+PK in G1 (compressed) = a10192b4d72ffa71ed65873abaee8fef9180c85b1dd630cfe7fc496a132f5362179a3d11710898fb3ad8a3d3aa9033d7
+Signature in G2 (compressed) = aab159737eb4c69b47d4feee3072e7389b1c4db0c5705029a41963e6ef39f73398f7f8a441695283de98b67e6117123b0c7003532200e3254ebe2da1253900874b5c7a3a5b112603bdf7948de8f322b196ba3676494ba072820ebe58927c8d96
+PK in G2 (serialized) = 160f994405147b4918fd1ba264f565148e7c307970b507d3972da833cb04348b83b3d46ae02887a18f63b30d50a7f01d039ef27d7e61188f45664d1dcad0bb88702c4344c2440cb7734036dd62b98fa4d8eaef8cd6137c0f0ddc81eca9e9416316d85dbddd2eaf7e3534f6b3cd4843ab96074757b96788613872381b8477601434772f45765f9d6077ea2a25c0fbf32e0cd4097eff62f1905129dd5b78146b6ade5e8020ac7f86c268a4df4ed48794f96727437334586f6e0a53e5653f2fa1e5
+PK in G2 (compressed) = b60f994405147b4918fd1ba264f565148e7c307970b507d3972da833cb04348b83b3d46ae02887a18f63b30d50a7f01d039ef27d7e61188f45664d1dcad0bb88702c4344c2440cb7734036dd62b98fa4d8eaef8cd6137c0f0ddc81eca9e94163
+Signature in G1 (compressed) = 888fb6e6318840306d0674c8e5b84506b7735498550eb397dd102ba22246e583e4961e41de7d1f5c8197269da54ec27b
+
+COUNT = 235
+IKM = 00ebd6c1ac97826d58432e1904efdac5b09b86715c47321d08f3dec9b49f8a75
+Salt = df4bd0cf16b1d738f223b1563b07fd1efcf967efeb8af87c332559eeb05b2654
+Info = df4bd0cf16b1d738f223b1
+SK = 274e36f3644788b7a641b68a74593dc38f9029780ba40b30a8135e69be404737
+PK in G1 (serialized) = 1479e69154b3059ee21ff383e628b38f498602cc5e9022c0dc317c264b59fb7f11ff37e1a2d8d14c6f29d914fae952390069d20aba0394089f9c3f80a1ca889f8c657e058c056a21d2b716dc124ee570e78e7aa8f66d9c6fa463c66f59a48b0f
+PK in G1 (compressed) = 9479e69154b3059ee21ff383e628b38f498602cc5e9022c0dc317c264b59fb7f11ff37e1a2d8d14c6f29d914fae95239
+Signature in G2 (compressed) = 8674f5d0006ffd81dfc6280b92a8cef4a417c118c079a5ccefb9c3cb44c33680c5eb80378bde66e9ee5a25f2d75620670fe4abb2e22b3190c64bbb71e8653e29961400c765bf2d0c9843e125bf2eec56033d56660ca4b83fd6a8b0b01c9bebad
+PK in G2 (serialized) = 080d404655c414ed9ad840e682bcd8dbdad1a2692fc0bc3df28f4c44d02b454e048346b5d9dff0fd453026fbfda0bd1510572a8ecd2057a0d1a5796df32fb7f520071a42a689ecca3a6925ca5d2badbc5a13b8acf261de28059d63214afe772c02e7aecbb7e9b664187209ef4549f29df3a28dcf2eb9233b8c31a9474050ff26e6ad12daebf87bc199221b683642e248070dc90d3a6d59c77d477d3a52e614a00fd20ec89a7193c1ba04e3e08c47f23b6c1f163dd97d7fdfeb82dbcb3434b054
+PK in G2 (compressed) = 880d404655c414ed9ad840e682bcd8dbdad1a2692fc0bc3df28f4c44d02b454e048346b5d9dff0fd453026fbfda0bd1510572a8ecd2057a0d1a5796df32fb7f520071a42a689ecca3a6925ca5d2badbc5a13b8acf261de28059d63214afe772c
+Signature in G1 (compressed) = a26637b490c8041fdf8dde1c59fe023cb756c353f4b50ff45b2464a136ca27c6fe358b6388cfa3155fe15258306662d6
+
+COUNT = 236
+IKM = 00ecd8c4b09c8874604c382410fce8d4c0ac9884705c4834200cf8e4d0bca894
+Salt = de196690767602167f34d070a22152f4ae9bc2084983d614c780e4a186af5441
+Info = 
+SK = 26b79e5d9623e3e64a1e2f387a38711af22b6e70d8e10ea026ed8647e7debf79
+PK in G1 (serialized) = 05c1db5ebd33b4bfd3b9d2f0a535c375ad11c41ec30caafa9e4b6fcd38e5fcb779de8c80467b1c88c9f9e48b5e5a85a315e98afba2829663a80c972e8d177d657eed4984dacc7af6be869b23eece694acbd6498c2b3da686ae11c04e55aeca56
+PK in G1 (compressed) = a5c1db5ebd33b4bfd3b9d2f0a535c375ad11c41ec30caafa9e4b6fcd38e5fcb779de8c80467b1c88c9f9e48b5e5a85a3
+Signature in G2 (compressed) = 92127d6c1ce48528d27d8741970c21ab4db6ea908be5e016f12527ba50c858f9547ce05c96f1191486954d7b5f11fa4b062d79672a40a9ed7f3965a627c56ca9890e2abde25d5606044ff70682a3edfecedef42e7a7d50b2faf618b58dcfe679
+PK in G2 (serialized) = 18d59430fdb0548c4fb2c19092ae76f5844eb0fbff852c3d1a8ba59b4b12644dbf6be6de046ff78e294c1837363e06a9032a9093f34b601490a8b1bbdc3fb59bdc84312bd3671a3dcf4ad4787a382cd113fdf1f1caba627549f4675c7e711f94016ae829416d11f3698dc23f3ff33fa1575e0338f392687205fb9c2bed68a440153d4f2b690721a93c0f8e8828e61dd318017afdd0165f6a718e4774718c0ba8e706fe6977b830f869ba11644c4975546d1b17259dd834ac0454a86b1ca89f74
+PK in G2 (compressed) = 98d59430fdb0548c4fb2c19092ae76f5844eb0fbff852c3d1a8ba59b4b12644dbf6be6de046ff78e294c1837363e06a9032a9093f34b601490a8b1bbdc3fb59bdc84312bd3671a3dcf4ad4787a382cd113fdf1f1caba627549f4675c7e711f94
+Signature in G1 (compressed) = a33ff882d19a773cbe40e6f242e87841fb67b5cb2f1ffa795346aa7b4ec5011387dabd59ba4303041139aff358e060b0
+
+COUNT = 237
+IKM = 00eddac7b4a18e7b6855422f1c09f6e3d0bdaa9784715e4b382512ffecd9c6b3
+Salt = 0e3d24ece1660efb686f4733a83466fe04794476b12636c99cc71496e0efcca4
+Info = 0e3d24ece1660efb686f4733a8
+SK = 2fabe49811fefdc6c77596771f29cc7734b9c9b6de72bbd1f41a1b91e83af0ae
+PK in G1 (serialized) = 0b38b0d048a460e6fca96e515d823d606bb470587cf84d283873f0987855fce3eb7edfe890c94d38d4a881e92637da6a16b5b131f39144bcdb2c9becc10389e994846320abc50c987de15f7f63a4cfa3e4053b341dfd70c42d9fd445796d1cb3
+PK in G1 (compressed) = ab38b0d048a460e6fca96e515d823d606bb470587cf84d283873f0987855fce3eb7edfe890c94d38d4a881e92637da6a
+Signature in G2 (compressed) = 8f27f3a9eec4492dcc1cd70874eb6b3f90bdac038c8f1e4971f58d4a69e1bb3a8dd6aeb9882a3cce744cdf3f50c9e4a715a862bf79b4ab5435c6725c5ee1215a78451911afbad6c65f795194773497dfa3bda5fe570a0bbc3aabefa7aaeab802
+PK in G2 (serialized) = 07933156a18297c2f7dfe00bbe0a3812dd4ceb6e4b39c9b2053e5482ae57c0b7e1fdde11bb2f1887fc2af810a50365cd03a3d10ab3b5417bb08173d81f31e18220c2c0d847393e85cbaba6c27633f9e1e91ca04e32c4baf76fb6b3f63704d280121793ab7862ff21f145308f2c756bf17704bb7accb28db620135177ff314a147167b0c912650ae3b2208308b5b1fd800d04b5325880132090871a33b9082af0e3d4f36a88a8d8d736b6449ccbbdf91459fd4199f9371334e49c2d979de9761d
+PK in G2 (compressed) = a7933156a18297c2f7dfe00bbe0a3812dd4ceb6e4b39c9b2053e5482ae57c0b7e1fdde11bb2f1887fc2af810a50365cd03a3d10ab3b5417bb08173d81f31e18220c2c0d847393e85cbaba6c27633f9e1e91ca04e32c4baf76fb6b3f63704d280
+Signature in G1 (compressed) = 92d3215dcc1d1d8635048c8ead242e30eb07bca920fc58e4e73fdfb9913b81f1c39841d08bfb184516220d6aaf36b633
+
+COUNT = 238
+IKM = 00eedccab8a69482705e4c3a281604f2e0cebcaa98867462503e2c1a08f6e4d2
+Salt = 03691d8a981f08c4a544025df8f1f96eb9ae9ef4ceee07ae811305e54a47b0f3
+Info = 
+SK = 3136c41088804bc373ce068ddadb59805b413fa328421f73744e7dadc29a9062
+PK in G1 (serialized) = 126e6ca0436e3435eb5208822ac91c0d40fa4955d1bbc2b6250e90ecf2d4045a5f5b67d560a8af23044fc0b4abe7b6f6032994124eb5c0983e2642751e56eaec6945f36a0e7272fbb5036b6dc422a7b9a1f60db342517367e914271a98e32e82
+PK in G1 (compressed) = 926e6ca0436e3435eb5208822ac91c0d40fa4955d1bbc2b6250e90ecf2d4045a5f5b67d560a8af23044fc0b4abe7b6f6
+Signature in G2 (compressed) = 84565a1ad84f30a4a065b4142194714ae3f65ba4d67da41bac9f0f0b559998e604dc84698bde45faa12d9e9ba6c6f50913d46626468339b4bf3c6d45bb134eee7601049c309ce37a4bdf4ba2e0e464de9df39983e484afbfbd14ec4896491361
+PK in G2 (serialized) = 0270c7352382e5dc8780c565121f2a6d576cfcf43f8543d658281ac3fb32f46010f9c7e66e86b31f8106ed2f76111ded04522eab54ec063575a93587271aa9d7bd5211ce47e57f73963215e62cca73035d560cba2851e9dc658491aa16a61a4f04a4e61c6f3a498144621f1b172da2706261bb8079868bcf4ca83a00bb94aadc7b07d357593d1bd11eebe74c26a2d2280e196032ad1a3f2dfb85c7db92bbe2d49fa578de3a6a59b480e20ee8d86213d28014b5569771d16223d2891d3af3b1f6
+PK in G2 (compressed) = 8270c7352382e5dc8780c565121f2a6d576cfcf43f8543d658281ac3fb32f46010f9c7e66e86b31f8106ed2f76111ded04522eab54ec063575a93587271aa9d7bd5211ce47e57f73963215e62cca73035d560cba2851e9dc658491aa16a61a4f
+Signature in G1 (compressed) = b1f1f0f6435c78e88543bbfe021127c3d6838b51bf3929f504bba056a2f81fcbdf7af8bebd9efdd6214758761df2d60e
+
+COUNT = 239
+IKM = 00efdecdbcab9a897867564534231201f0dfcebdac9b8a7968574635241302f1
+Salt = be2184ec7740b4d0e8ae2ed6cced15fe014208f10ae6700e7362f485db8fd786
+Info = be2184ec7740b4d0e8ae2ed6cced15
+SK = 3ebad1750f8969822b9d7eb3aa566f81d4ac46cf62e3dfc419c4792b588e7c4a
+PK in G1 (serialized) = 0e8e58319410de85ed6d3a6cdfbac5d389f149dc81191e4a2a0f60500dfa2ea5e53fc2b549af3eb322a305bd12510adb1647285bc66668357e696e7d7c7ff9c76ada799e82158d08bd79ca421ce5f72f1f72867ac7c62bd1f7e7b417d7b2fa0e
+PK in G1 (compressed) = ae8e58319410de85ed6d3a6cdfbac5d389f149dc81191e4a2a0f60500dfa2ea5e53fc2b549af3eb322a305bd12510adb
+Signature in G2 (compressed) = a45cc161b43b0c1ad0b3adbfd562582b54bd9087b92ab8c18cc05b7084eed2d9b88f2e99dc197087862d411d92e310ae0bdbc480ed9239f7f7bafd9e7c30e518f4c1316059bf114a24d18905ec6a91b36f051fd06d56e71902524a87121b1114
+PK in G2 (serialized) = 11869eb4b978d5aa34cf29d22ba23402bb8d2b5b1540c53ca0153a07eea4f99e942c0a5be18fe38415ef111abd71d02e01297d44433fe4b0ea37150e7f9ca388cdc193d6403565dab4bbdf0fd77d9b7398fa76506d4b6cb2c9c6ea3d285fb6b21446b132f0da6faeee2c45860546f81cb92cc67028173d8b3d71124185801f3b4958c0234a44f1e558c31414f44f0752135834bc74a5eac04a0df7e02c10ea13c547d9483946708ea1260ddf9827b0d31992c10fc99f9d842abff422cc056563
+PK in G2 (compressed) = b1869eb4b978d5aa34cf29d22ba23402bb8d2b5b1540c53ca0153a07eea4f99e942c0a5be18fe38415ef111abd71d02e01297d44433fe4b0ea37150e7f9ca388cdc193d6403565dab4bbdf0fd77d9b7398fa76506d4b6cb2c9c6ea3d285fb6b2
+Signature in G1 (compressed) = afe0b1f3847877b079b69b94407ac89515ad4e00f63846579cb074f4d5df7554ccdb3985d31abbfd2956db334b6be785
+
+COUNT = 240
+IKM = 00f0e0d0c0b0a090807060504030201000f0e0d0c0b0a0908070605040302010
+Salt = 48f8df81c0b82215c4f1f48289de80591a5135e698c15a4ca716033a9074d1e9
+Info = 
+SK = 5d7b493ce2f2893ea3020a427278afc48ae9560d85a082987176a22d826d1dcc
+PK in G1 (serialized) = 17dca2e9b19d77eb4633f73e10e103a162dc5cecf5750adda67b5801cb40c3051f917c7570a185b9ff40253234640ee30a03273c59df67451d0bf479a7a3c388fb8b7601882f95ad273a4513f9b12779c2d4e0664babdcf59d3f7953cdbe569f
+PK in G1 (compressed) = 97dca2e9b19d77eb4633f73e10e103a162dc5cecf5750adda67b5801cb40c3051f917c7570a185b9ff40253234640ee3
+Signature in G2 (compressed) = aaaa6eabddf9c0adba5877634c8e2e10c1b89ad84e22ab1898812e9d651a2ca973a10ddd2c2e472cfde00836bb02165716f5bd84c4c8efa0f2fbcd91e6cf210f54ae4f11249c654a158efa82e0e6486b2d07e3463f49d08f2a4a2d6ccf9ba1d4
+PK in G2 (serialized) = 043164e9510ac0de59ad9d2414f69310ec83d5be13183ece238e79684abb1e2c1b536fe4e908e86862ad7c4d5adbd6c008ee707562e9d9ce6896a19a4f029889bd6cecd756459754313a6a0293addbd444df20d6286249e1eca34308499dffa9063ca300d253a61982b1576d75322da15274e0f128d09b920907a5641cc50cf49691c29ced13c585d788e814d869766f0fa5c8cd491eab32d42408079a31907ba8031d0c094349b20c83c9f82292dd0aeb94a6eb6f1f18c271cc5a7e8adf3815
+PK in G2 (compressed) = 843164e9510ac0de59ad9d2414f69310ec83d5be13183ece238e79684abb1e2c1b536fe4e908e86862ad7c4d5adbd6c008ee707562e9d9ce6896a19a4f029889bd6cecd756459754313a6a0293addbd444df20d6286249e1eca34308499dffa9
+Signature in G1 (compressed) = aeb0cb9d9b7d16a7736e7a51a8522aa1b3679d5344dbbbe0b571512ac144d4f58befa35d95b3ac898d461e08c0a31dbd
+
+COUNT = 241
+IKM = 00f1e2d3c4b5a69788796a5b4c3d2e1f1001f2e3d4c5b6a798897a6b5c4d3e2f
+Salt = 70d435d5947301c45926321890d041c02452015d17c307913152e673d2da4333
+Info = 70d435d5947301c45926321890d041c024
+SK = 506a060fb310a41233d002b6c924f04737919c6e3b180534ec3179b19dc6acb9
+PK in G1 (serialized) = 16841eb551245353923766f19437a527017b0d2a9b6abb51082f378f04ab6df5de9199ddf23e2b78ecade046e5bbd1e303ddb22cffd00bd1ce502fb112b11995a1cc5fee18d86f22af4237c7f867471fe29bdcbf6d4b591dffbc936ef916746e
+PK in G1 (compressed) = 96841eb551245353923766f19437a527017b0d2a9b6abb51082f378f04ab6df5de9199ddf23e2b78ecade046e5bbd1e3
+Signature in G2 (compressed) = 82426964bb0c8cd6f2e57853bef8c2a769c9b0602841a84c2ed291408ca9ee4d04ceb6073b226f03213d7b905611ad0c0d93ba2aeffca84a97e89bcfd68959f9aa416eb28a7651a19b106f8ab85d1e3e37e739d52f770c0c35af3c5d3fbe6a70
+PK in G2 (serialized) = 0782b55a5c3cf934a40c48aa3c87193b6d8669c654956c3f852f209042114fd8b897139074949a40c701f877e72cf8d719176b3f8f2a61238950f40511a0f254a9cfa9d656ff9a7a634778fe5e475f86e315c28d059d2ea8de2b877ba8a12abf0f6eeef0f4226429495d8c303ac924dbbee0698b0e6d915323566bda5ea50b09d18888addcc0ab97b8fb639709d644ab18c98b620fbf0cf1fe0cab1b49c90b2f1a056c4bb5a076550b0536560c5309740a5deee32c8fe2747551b7ff2de74a65
+PK in G2 (compressed) = a782b55a5c3cf934a40c48aa3c87193b6d8669c654956c3f852f209042114fd8b897139074949a40c701f877e72cf8d719176b3f8f2a61238950f40511a0f254a9cfa9d656ff9a7a634778fe5e475f86e315c28d059d2ea8de2b877ba8a12abf
+Signature in G1 (compressed) = ab492912c7cc3ca4885978c9c3708d8a412b6b289c3e75354745386fc1991d67e6f7115066a31943d5aade5525bfc59e
+
+COUNT = 242
+IKM = 00f2e4d6c8baac9e90827466584a3c2e201204f6e8daccbeb0a29486786a5c4e
+Salt = 6b1b6ed3740b154f72501a01e5961956e6ca0cfb41625c2d06ac751fe62edb27
+Info = 
+SK = 5f52f59f1bfcbdd93eb395a09ccd87e9dfa6a77c3956d3a9c458e7a1eadbdf92
+PK in G1 (serialized) = 18b0c6c1aad198965a208a5a3e88cfcf2918cf399b440bbe845304830c7bcfaf0b54e9816afaf4f0335faf6d3a8399cd12cc55f9274512d9cd2107636073167f7e08ffd89256270b9365ee513112540e11386f5a37fb84525f796fc4705d9c8e
+PK in G1 (compressed) = b8b0c6c1aad198965a208a5a3e88cfcf2918cf399b440bbe845304830c7bcfaf0b54e9816afaf4f0335faf6d3a8399cd
+Signature in G2 (compressed) = 8a76c13915168e2d54512e54cd31756e8bc755ab0d759f629e731c450bb6ba18965aab567a3d9add7e94f35c5751392e04b736cea9664951335baf1491418bc09effbcc5db2b4eed5764dc5712ea6a04e2474eff4657f46777b804a1f1a77435
+PK in G2 (serialized) = 0dbd6a411681d99b56b45322f737ca0b91142bb4cb52ab3ad3544ba9a320fe53f4a1f15b797e10a88e5618708f9a73f4030e37f4820b5fdfe2ba98d926ae2bc3c409a296a7942c9a0cc6c93bc782d27d0b5fba3e428b8e38503eba66d8aed781172a7fc9f08afcd825ffea92c68fa41336e3d6b3b15f37f86df99960a2f7c3c907c09aa2c15c1eefbc8b3ac4df52f1740987f422ab2ec32b4e725fdb43a5ff15a0b53b29e8d374cfdee7ff7bd7b40d14e0cd67c2b8a0c1307e0fe72128ae65db
+PK in G2 (compressed) = adbd6a411681d99b56b45322f737ca0b91142bb4cb52ab3ad3544ba9a320fe53f4a1f15b797e10a88e5618708f9a73f4030e37f4820b5fdfe2ba98d926ae2bc3c409a296a7942c9a0cc6c93bc782d27d0b5fba3e428b8e38503eba66d8aed781
+Signature in G1 (compressed) = 98ddb419a908150b08b360bcfb139a7f8c231c918da624db55e745109a68fa1a6466cb0d80bb4f1fc8cba3cc7b6d8eb2
+
+COUNT = 243
+IKM = 00f3e6d9ccbfb2a5988b7e7164574a3d30231609fcefe2d5c8bbaea194877a6d
+Salt = 5cca48b2a927918e7e29d0fef87967840db08b8bf098ea71c98ad4803dde3600
+Info = 5cca48b2a927918e7e29d0fef87967840db08b
+SK = 524433065c1675de8bc639423a9f2149986a3efc7c7b489895f752c11da07bc6
+PK in G1 (serialized) = 13e2129e6dddf9ae180a00ff9836e4e721e13ff3e4ee713ac3df6e02d901d2907b205b17c176b0e2ddac4398f130180b13809e98609a4499df4e9b27c8ca7dc9b416d786067549ce985c53b7c81cb783098ea4e9fb29530cfe155c872355ff7d
+PK in G1 (compressed) = b3e2129e6dddf9ae180a00ff9836e4e721e13ff3e4ee713ac3df6e02d901d2907b205b17c176b0e2ddac4398f130180b
+Signature in G2 (compressed) = a7cba2eecb17cdf37ab7dae3074b56843c8f185e97e1a0d34508f0da2ba0dd5849d24d9b84d31b23b9524531fd7aea2817b254bbf0c79478cf8ef698bc63a07dbd91779ec0e7c757218819689ca24e39f1de6edf82ca5309bc5477940d5780b4
+PK in G2 (serialized) = 183f417d72a2736b460588aa4c98230b402b1cbde8d1ba82af1d3f58b819391f67c7df53924d23e3aab34a4fc1d07ee70d354a6863a306440461e0d0f1d8323c8d9c254fed69b6d972b1cf26affa8e04eeb592063b4299b733ba97f04b50087a174cd8359bc23e947cfdf331577692acceebd220f25685e573758c543b0ad904fad39a5783e0f46dc205b473d6de133a04346ec70facc8cb5c69c1f9636cf85139c61d8b1825e191f2ee0e37d0df4ad3249834186baa7fae1b874044af58bc12
+PK in G2 (compressed) = b83f417d72a2736b460588aa4c98230b402b1cbde8d1ba82af1d3f58b819391f67c7df53924d23e3aab34a4fc1d07ee70d354a6863a306440461e0d0f1d8323c8d9c254fed69b6d972b1cf26affa8e04eeb592063b4299b733ba97f04b50087a
+Signature in G1 (compressed) = 9188ea1d4172a3d82945b40e235243b76f6c6b2b3e7d9dfab866fc0aac1f01dfc4e6b3eb8a6ca0c943c409812b8e735a
+
+COUNT = 244
+IKM = 00f4e8dcd0c4b8aca094887c7064584c4034281c1004f8ece0d4c8bcb0a4988c
+Salt = 631add4d151f8d24b414dfa36da889b9b69860f888dcd5460442d76bc009d5e9
+Info = 
+SK = 18c2cc3449c0617a9be75f935324003549a75ca9c37bf1c2bc02987bea0d82ef
+PK in G1 (serialized) = 0beb233a2672e0014bebe537036f234df4f4e8eca8f37ce32b8aae13793e262380ccf968d78cdf6a66416ac03c1cd32810a2a970169b5875784c2db4cac5675db31acb20467d428d16886feb99284bafb580a3876481dc1e0d6bc7b19c8078a9
+PK in G1 (compressed) = abeb233a2672e0014bebe537036f234df4f4e8eca8f37ce32b8aae13793e262380ccf968d78cdf6a66416ac03c1cd328
+Signature in G2 (compressed) = 943a012d0c842fa760001c06d4b2445e12b9c1340556a8a7160724c339d524ff320ab35dace7f5ff837a23e18246541103a091f6326430d312cc6ee9f5472bebd80ef3569b3789041d53e54bcf7fd18f473d9c43099c2af4c426912a28e6149a
+PK in G2 (serialized) = 1377766a0438a8ba6c342d6f637e27e0b229159d576ab91acd1251c5b6bb283058e6a3790593eba6052bea7033dce49310be7551f9fc293b0240346976d756c6b26169a3d9e2a97a144009b3150ee4619f44d534a490d8f13f7732ee79cc9d370c68ff0b36f6efad423ec8314895013f847c422500389d7ac0310e8f0b853b565508e838c089484a81cec04b587ee2910d162f77b55467bd29ce8aadf81bf2e931f02af5a18b11274dae05e67dc7886ebef0aeb7e70a67d31507694304744c80
+PK in G2 (compressed) = 9377766a0438a8ba6c342d6f637e27e0b229159d576ab91acd1251c5b6bb283058e6a3790593eba6052bea7033dce49310be7551f9fc293b0240346976d756c6b26169a3d9e2a97a144009b3150ee4619f44d534a490d8f13f7732ee79cc9d37
+Signature in G1 (compressed) = b44c0aebe5d1f7daeedb8dd445ab58bccc50e71401def568d75659ebabc7471bca7bdac6bcdbcdab549cd3d6ac4c876b
+
+COUNT = 245
+IKM = 00f5eadfd4c9beb3a89d92877c71665b50453a2f24190e03f8ede2d7ccc1b6ab
+Salt = bc633e259e65dc83cfeea01ff78f2e2d608ed2a4f00327d030181ca5187502bc
+Info = bc633e259e65dc83cfeea01ff78f2e2d608ed2a4f0
+SK = 682c89872dc987fde9e065b53d188262c178a57c124e5c09ddf336520423f5c6
+PK in G1 (serialized) = 0d6367efb11aeff8b1857d7c008a2eae64c9813773f25ef91fc40b710df66c0bb00aceb6a160b3e9fa947070f66c32a0001785ea801b3070f591b1a479397ac30958247adf1eb1e6b79dcebe135cf84e9304552670ba0a3379edce7426e902cd
+PK in G1 (compressed) = 8d6367efb11aeff8b1857d7c008a2eae64c9813773f25ef91fc40b710df66c0bb00aceb6a160b3e9fa947070f66c32a0
+Signature in G2 (compressed) = a8b35f8f9a01136490a2e984fd2f32e6fb863d249c4fc655b14503608bffb26bc0d825f4aa1703eb1f9a7f25cf92c7f907a2b20f91caec254ac30333959705d227df5960b31f35ea8033798e4b0f08f5a9624c0e98cbc8e21d44a25134a88c1a
+PK in G2 (serialized) = 0a91ea3953a8de558248137314f90281ad4fb129d08b1537be70938036c549f8a75486160d824296e648505c70246b5c168fe1690e2a27efad6b6c2b983b1f8e3f8c112b0d8843983a9d75a70e9d1dcabd4a43663d559c5734a531038e54a8870aaf954c906bdf16f5179731457869a365da03876e5fa4959c68ae4a6752b5f48029e7e2f3402f89e83490ee560d680e099ab2b21df66f831d91887c566e0f26f462f0276be2fb7bb88934a0d39055848f02388b75ca5ed8e9307207e1e927e5
+PK in G2 (compressed) = 8a91ea3953a8de558248137314f90281ad4fb129d08b1537be70938036c549f8a75486160d824296e648505c70246b5c168fe1690e2a27efad6b6c2b983b1f8e3f8c112b0d8843983a9d75a70e9d1dcabd4a43663d559c5734a531038e54a887
+Signature in G1 (compressed) = 97e252c4b2e2edf02a646e85eb6ac7463021010d624757ea2bbc0088907cb671500f59c13599ae6d26f77222348c7a56
+
+COUNT = 246
+IKM = 00f6ece2d8cec4bab0a69c92887e746a60564c42382e241a1006fcf2e8ded4ca
+Salt = f5c14481af6fd68cdda4c859f8a6be12381350ddd96c3a79a20a3cf464440d27
+Info = 
+SK = 2fec416a762bc0190d111b0318402b3eaff7e5381914d157d51b10d554cd2f51
+PK in G1 (serialized) = 0d338322d2d9d26dae22d4b0894bd1267f638cc5b3a86eccc792e0a8a9767a28b7f83ee959920584af9839f722fb71a2016fe5390f316e9366435a3e07e0af0b0575d7543881ce8f41ded5b5ba0b874dd52ef81149c0f2f7d5ee37760d4d31ab
+PK in G1 (compressed) = 8d338322d2d9d26dae22d4b0894bd1267f638cc5b3a86eccc792e0a8a9767a28b7f83ee959920584af9839f722fb71a2
+Signature in G2 (compressed) = ab05c84b93442a7805761f782999324aafe7254d141aace4071707fd0ed27add4bc5fd378ef4e2b6a20269a8050b221e092865b3a96f981560084f6eaa80c42411b9d78faf2c82a434e37e44c40bbfb1711e1c57a0adfee71a4b3e81870c02d6
+PK in G2 (serialized) = 0d5a71bc0b06783c2d83ea87899889bb9959ed6d690fe1158ec7e04ee1d8b173c7d9e8928abd806259a95034b8a5418d046d2a0a1e8949c223e71ce2653c067d6ff6c82a3f49b8cf27ee6d775c7307424e266f5b13aa9b2d6fb054c8bd9c92cc051032ff4b66eeb0275fa28c292a071604100c2099d9565e71d1a3cdb4024a1836fc903ee89103d862e2d90ee5d3a20910265a9db566c4253b0247788ee27a4c7a04fb6ceb79a5e8b47d063c18505a60d8cfc5ce26c32200fa83e24762cf9753
+PK in G2 (compressed) = 8d5a71bc0b06783c2d83ea87899889bb9959ed6d690fe1158ec7e04ee1d8b173c7d9e8928abd806259a95034b8a5418d046d2a0a1e8949c223e71ce2653c067d6ff6c82a3f49b8cf27ee6d775c7307424e266f5b13aa9b2d6fb054c8bd9c92cc
+Signature in G1 (compressed) = 95b83ae9b1be763c1de75ddbe3b006b6b153f707187a849099ebd2e7162e822b6c7c6b407a05262c873ffa7eda35769f
+
+COUNT = 247
+IKM = 00f7eee5dcd3cac1b8afa69d948b827970675e554c433a31281f160d04fbf2e9
+Salt = ebdb7fe29061cbf9c36ef139245af037f22a7815e40f690956a46c1b24dc76c0
+Info = ebdb7fe29061cbf9c36ef139245af037f22a7815e40f69
+SK = 4b8b066cf6cfc54ceb861f9cbaa4328a22d70b30dead7f7aa51188ffc581a67e
+PK in G1 (serialized) = 012aaa38a4480d9e7e6cb21eca42bb523e4e0c0e8cecc9d17325a1fb79858d066c4b5b1a712bfc4e0be1409fa9084b8908a434906ffe4bd0c8fab22d46b2098cfa109eb2336c7a99559e60439d1cef67c868b895f8a2269d03d3cd95b75fe29b
+PK in G1 (compressed) = 812aaa38a4480d9e7e6cb21eca42bb523e4e0c0e8cecc9d17325a1fb79858d066c4b5b1a712bfc4e0be1409fa9084b89
+Signature in G2 (compressed) = a6844f5691c134b1d547ca493835fc09fba19127afdd9f83b0b9dc6df07633295cce556bb4973a37c4a09a18d13d97b3149da454f36606db7d0a076aee6eb8927ae54ffccea108a007afb52325014fe32cb4290ee16d0f2ff760640cf1f7bb5d
+PK in G2 (serialized) = 0743dad5f16fbc0d239a8f26605cf5d288e0e77c35ca0773edeefeff2cc49b95e646cb92bf6e7d7fd87e40b3882c736112257472f879d6c366895d7e2aa0bfa1be471801822e36ecb592fc10486f7aa51594dd9d736b0c89ff2c80f4c7f8c6b30827dc6589802fe3e17b385c6df97626cc2a9250180f46e6f7aeecccbbc6099860055e6f2f101211a7aff875af193e5b0823f419009eee3de94ee8aaab5dddd53c3702de4ecb3fbbadef99ecd839b2d67c0c05fba0ea313f01349be33ac7d548
+PK in G2 (compressed) = 8743dad5f16fbc0d239a8f26605cf5d288e0e77c35ca0773edeefeff2cc49b95e646cb92bf6e7d7fd87e40b3882c736112257472f879d6c366895d7e2aa0bfa1be471801822e36ecb592fc10486f7aa51594dd9d736b0c89ff2c80f4c7f8c6b3
+Signature in G1 (compressed) = 91b112f63dbd8cb1fd297e51f1552b65d4a118390e0d8ce143cc541710bb71c54d363d51c257c9ab0bac2421630e0b11
+
+COUNT = 248
+IKM = 00f8f0e8e0d8d0c8c0b8b0a8a098908880787068605850484038302820181008
+Salt = 9c2978ca2df3f53dc2a182fca30694c9693c05ac5459179a0264fc4db02f19ba
+Info = 
+SK = 31f213766ba0147dc1c2654c0209c68f1e219a07bb7e7ac42073740fc8712580
+PK in G1 (serialized) = 150ed5e0f3a028b8bfc3ca72581158b59ca94beb0665d2e0b082693a920c6967c83586d362c151672843e7fbe558c9f712c63737a2f6c7e5e4ddda57f975579c66c1d5be6299f6e1d981a9b0078e99267b649d2c6c92fc98162be0d9dc3945a1
+PK in G1 (compressed) = b50ed5e0f3a028b8bfc3ca72581158b59ca94beb0665d2e0b082693a920c6967c83586d362c151672843e7fbe558c9f7
+Signature in G2 (compressed) = 80efcd842588d5deb10a25375ebfa26b73200b0ac576b2319a91b644a059707657045907e12be11880d81fccb5fe5577136ba5c8125c57c51f7c472c3bc12dd79e43dc6479655eb49a0f05e1dd1664413b826908e57428d85d800257978a60c0
+PK in G2 (serialized) = 1490b6f5fe0fc48404a114d6dcf7e67dac29d982cfe4364ec0b22328b97e9256aaf922dd100861910c309c47073ad2cd12a35595274aa5d2b3d3885254cb1948781d3a1ecfa02d588541de87f2230f1f34b81203e4190dc3e35e1738764a8f560b1f1dc327050a10a7b9d4b094289e4dba8b039614665b33cb86c10911f1f2b6e7728aca55b6f6a58e1444bff59e53d007596f4feaf25db644151ceec048ad37186d344eca1e59c602d28f141f62c9a48e3f350fba034e16c06135188d9161c0
+PK in G2 (compressed) = 9490b6f5fe0fc48404a114d6dcf7e67dac29d982cfe4364ec0b22328b97e9256aaf922dd100861910c309c47073ad2cd12a35595274aa5d2b3d3885254cb1948781d3a1ecfa02d588541de87f2230f1f34b81203e4190dc3e35e1738764a8f56
+Signature in G1 (compressed) = aec38dca84dbcfe3fa0804010762ffdeec0e20226f30b67ab495a0175a55921cf652c6b065ef28e176397bdd48f46a35
+
+COUNT = 249
+IKM = 00f9f2ebe4ddd6cfc8c1bab3aca59e979089827b746d665f58514a433c352e27
+Salt = ab0fcf56b5b67ee32e1467850f97e7ca0d564e54c46ae8cd620decd4b02b588a
+Info = ab0fcf56b5b67ee32e1467850f97e7ca0d564e54c46ae8cd62
+SK = 616fef40a23a79bfc93de160292a116aad41e8520b5afeecc5cb688cbde6e9a2
+PK in G1 (serialized) = 12c743dd11e0fa885a228b40e23b1f2cff776170ee67629771a849b549d7b0aa70af0ccfea01fb544be3f284b9d5e15f05620b04ab80914c88ae75fab91303e45eab3338d7b69b1eb37f59a642d9640a1b36ccc8b5556c918997fa4c19107910
+PK in G1 (compressed) = 92c743dd11e0fa885a228b40e23b1f2cff776170ee67629771a849b549d7b0aa70af0ccfea01fb544be3f284b9d5e15f
+Signature in G2 (compressed) = acb3ce7c3d14f26065cb3c7bb721e05070f8a0c10778f1c19b3ce3df87c4b1079f4e7d0d8fa313c572a1cc420a0075180ebf1331f2ef90f5d509b0789f58eadaf4b8a3c6a18b169a79e9782ea9f23883d5343b43d4013088c7a48da98fe16259
+PK in G2 (serialized) = 02fc34f507692c0d06b266fec3bf18a82903e9c347f9689de86bfd2fa396c13f0969c33a47d08785627c120a6f39b168043703dfede7646edda006d4f15befd888188f9eab93d892fb3481f41fcd0763945ea5da4a16224d24cf69ec89b6abf71279e5dcac29c39ff56cfc8e2d531428a50b83c148c5532a332e40f462b27d200720e1e3e155e83e6f818bc24c99487e02e8043deccfdd100c6bd6aabcafd92f428d2fd4fced60d645ab81a5659a009c03f0c3da8db35f4b9e38b39c502dba98
+PK in G2 (compressed) = a2fc34f507692c0d06b266fec3bf18a82903e9c347f9689de86bfd2fa396c13f0969c33a47d08785627c120a6f39b168043703dfede7646edda006d4f15befd888188f9eab93d892fb3481f41fcd0763945ea5da4a16224d24cf69ec89b6abf7
+Signature in G1 (compressed) = aebd245b20d832e9e11a4ac96cdbb1bdd178689637fd78d33728d5d992495e1afb3aae5bae77f420c59d789d8d46c4a6
+
+COUNT = 250
+IKM = 00faf4eee8e2dcd6d0cac4beb8b2aca6a09a948e88827c76706a645e58524c46
+Salt = 87781d1a902c0821c0d0baed53a93a9d504915b3f158ccf632a441037d079353
+Info = 
+SK = 2027cebc348bdcb8f3777392f7e214a629a0fbcefa3d0cce78a521cca5b821ab
+PK in G1 (serialized) = 10e615edfa591c03a6a7fea1895c7a8a58273587ff4a9bc1fe30fd8996fb7146fa83e2186d2420ee10f2f4ab86e8fe7e1603edebdb32fdfca938c542a7e2fac0baf042a91083362a98749edad6dbea16bb2c95da3933bb987dc16ad71264ba2d
+PK in G1 (compressed) = b0e615edfa591c03a6a7fea1895c7a8a58273587ff4a9bc1fe30fd8996fb7146fa83e2186d2420ee10f2f4ab86e8fe7e
+Signature in G2 (compressed) = 970426328c8cb22ddae666d289dbe21c6193389127554ca89122bcf8ce892d5a2b5f1474cf765f41de40d4b3c8c7dcd90d84a06a3ee0656ffa4813fe66aef03b91bec60ef24543bb14e2f8042ed359040fc48fb6cd08d081ba4a48a456cf7c55
+PK in G2 (serialized) = 15436ee1e5478374eac3d36109533ba6c8c2b244545fd84559067f160bb3c1f3396e841915dc5635914b83bc939cd9c8040b7552336d52281ccbfa9b177be2af2a68856ce840adf7fec1a9407abe5cd16a04d71cdb1757b1106305bf6f75c29b1225d9232e9030da9d32a2b8ecc60e10f11364518a2c39f5e154cafe59c9f7d96470d5cc87c01f89951faedbe2250963084c95accd6a915a46d497e95c4528007b881a82495121f7aa883dc21309ac868f6b85291d24e21fbc584a9352935967
+PK in G2 (compressed) = b5436ee1e5478374eac3d36109533ba6c8c2b244545fd84559067f160bb3c1f3396e841915dc5635914b83bc939cd9c8040b7552336d52281ccbfa9b177be2af2a68856ce840adf7fec1a9407abe5cd16a04d71cdb1757b1106305bf6f75c29b
+Signature in G1 (compressed) = a460ae5b421ca27a0dde22c10f049879e1a92608137bbf774c18d1bcf52fe21ce7e58d1daf441a23fa2a544d04170664
+
+COUNT = 251
+IKM = 00fbf6f1ece7e2ddd8d3cec9c4bfbab5b0aba6a19c97928d88837e79746f6a65
+Salt = 336a0e2051b7c7d47b90809fc4459e5ac923dabd95242ae330e42fe81825c93d
+Info = 336a0e2051b7c7d47b90809fc4459e5ac923dabd95242ae330e42f
+SK = 3264690105473e59902ff29e3ee6a795683b9eda3ba9aa8c3f79ad7e99e68360
+PK in G1 (serialized) = 17657fdd76c92ea5b1e35e72f284f492d97159c8e72722ce7e29cf668603dd380e1ae27c946cf7efa155a7a61239452817119855f0dcf0f916b06b23d6eb908949783933e85b7a7d02a9fd84a2401c0a11b5c5a62b93744fed048654f1c57e33
+PK in G1 (compressed) = b7657fdd76c92ea5b1e35e72f284f492d97159c8e72722ce7e29cf668603dd380e1ae27c946cf7efa155a7a612394528
+Signature in G2 (compressed) = b89dcb573264d4c2632fb4f1b0548a4ecd3d6258f428d281f32172ab57dce852ae688bd6564823e13369fcdc0264aee8003f4d91bc5d29aae5db0c973440bd9569cfb489224ee0d6532bdfd483f0918c9701fddeab02379db01ea46e1eac2073
+PK in G2 (serialized) = 07dfbc05fa33a7f266e1397f18d5559363ec1a4a3de94c44c2489dce6d6643fa626f28c4efceee44ad77a3c6a27f211e0c7c1d07b22d04855e147dc3f138c35d9bf1dbdec0021d6502f12fee3409ee0fe4dd34218f867e161399f43628104feb10268cf514313b238dadfd61ae0115bfb36f3e82cd48b21ff06eb9622d422e462b38f4e01e9d3ec6ba63f07b6f7706e713662d3ee03f3efa42eef7af18c1a8068003c166b364036f9a5c83d72e3205ca6b4ddf5ccac79e13bebc8a7ecb9f0aa4
+PK in G2 (compressed) = a7dfbc05fa33a7f266e1397f18d5559363ec1a4a3de94c44c2489dce6d6643fa626f28c4efceee44ad77a3c6a27f211e0c7c1d07b22d04855e147dc3f138c35d9bf1dbdec0021d6502f12fee3409ee0fe4dd34218f867e161399f43628104feb
+Signature in G1 (compressed) = 8fa1c18fc700ef688b14b9bef826773ec956bc141c95cebb0ea4711e495cc7d09774006a5b4ebccb73e477c1c2af0eca
+
+COUNT = 252
+IKM = 00fcf8f4f0ece8e4e0dcd8d4d0ccc8c4c0bcb8b4b0aca8a4a09c9894908c8884
+Salt = 00e5828c25c35be6d2ca6e2bcd9081d8973861c6caf57864f5568c753b70b1d1
+Info = 
+SK = 6994e03c6e8733b09662f8cd81580069dfa45eeba32d76f8acfb0ed98e2c58a2
+PK in G1 (serialized) = 03cc58214f5099c9bf760603ed88a2fc30c50d53ebaa8422dd91ec1e3ced655d9a8220f58cd431ff22b8aace0445d60406ad68ca1182c0207135224683de41b29b98ff3797d1a142bee6a5e731a88846a5d6dd8e3aa59cf52557c02412d8c4e4
+PK in G1 (compressed) = 83cc58214f5099c9bf760603ed88a2fc30c50d53ebaa8422dd91ec1e3ced655d9a8220f58cd431ff22b8aace0445d604
+Signature in G2 (compressed) = 808c42c8ed0d5a64811e6c8b6e66dffdac4c667732c28185072e8a71664d33accdcdcdc2a5e364e1b82b4f2a5189b13c0994b74bc8c8ac93af52ab5c5d2c4644d596101894d11b89a1bb136e46ed2ea51ce446930fbb3edd895a93dd95075d06
+PK in G2 (serialized) = 111648bf7b9f376a3605063cb143f5a3179b3e85a0e502d0ece60c69c6df71e027c83ed18c3ddc292d89558b11a68e04068e8f7365987b74e8cfa7f6da2a1e8f1d235a56bc5221370814b30822426c898b0c501b575478fe6ab18db0128c2f630174a241e744f9746f78cfa87a8b5b4c25a0735183772683c1d16b30770b72ed65c74bfcf7e697dcae81d7eb871fb37107dacac785b8e9eafe85368f88d2efb5540ae1aaae4a72f383f66f25cbbf22f093be55bcf340ac7b03a28ef652c63ae8
+PK in G2 (compressed) = 911648bf7b9f376a3605063cb143f5a3179b3e85a0e502d0ece60c69c6df71e027c83ed18c3ddc292d89558b11a68e04068e8f7365987b74e8cfa7f6da2a1e8f1d235a56bc5221370814b30822426c898b0c501b575478fe6ab18db0128c2f63
+Signature in G1 (compressed) = a39f139fee72ea6519e3d49c7450d94c28ad8604df8203f326b580cba73e2b29177a32248503a3b02b9456c4c073ecc8
+
+COUNT = 253
+IKM = 00fdfaf7f4f1eeebe8e5e2dfdcd9d6d3d0cdcac7c4c1bebbb8b5b2afaca9a6a3
+Salt = 685864d33600f3faec7530901b43ccd48a850d4c6069a5b873ec7a3cc846b3db
+Info = 685864d33600f3faec7530901b43ccd48a850d4c6069a5b873ec7a3cc8
+SK = 2ce12351910e37d3c1fced72442f0feea7e39b2a66cf84f815bdf065db989f78
+PK in G1 (serialized) = 130071f2100ef3e6c56353ef9bb7ca2ef0e9a4c7f5e426e15e72838aa57f62808a891c60d9a2a6a8fd45ecef0499e5690381d044210eda27c03096c0ff71ee44a7c99d3345e6b33e30f4baaa8fe3409454488a11716dc8aaabd46cd83bca7d7a
+PK in G1 (compressed) = 930071f2100ef3e6c56353ef9bb7ca2ef0e9a4c7f5e426e15e72838aa57f62808a891c60d9a2a6a8fd45ecef0499e569
+Signature in G2 (compressed) = b0105981f4f106f23b76ac8c7025029337eb724f005f6e706940189c1512460b529aaa07c8433a68847243aada99fe5817558309d2a775caa409925bc90666950153768eed67cee5f4a39baaaca8282f2be4c5364fcd794006486b3d13d70574
+PK in G2 (serialized) = 027e62d2f8eeb8c2304980dabaa45f3b8c1b9377430ef7026c4df3d5f62f765cdf7121bed1b82fd64c30838253f05473154e501d9aeee0e23c446e19a024bf1ce64d46c880de05d6327cfb4ffa415caced3cbd5c73cfc8ae0da2923c70f8e7120eb4b3656873e1d5e702a52c9f4415121b93ff1932c0425e79b50c07c3e53a680bd24f3cd71609c6ea90d750e8be1966084cf48bbda6130d31c3b47a7e23d5d2dc2a284e5c064f91b194704a22ab009956efd2047132f11844920f625af0e33b
+PK in G2 (compressed) = a27e62d2f8eeb8c2304980dabaa45f3b8c1b9377430ef7026c4df3d5f62f765cdf7121bed1b82fd64c30838253f05473154e501d9aeee0e23c446e19a024bf1ce64d46c880de05d6327cfb4ffa415caced3cbd5c73cfc8ae0da2923c70f8e712
+Signature in G1 (compressed) = 91342efa6eb3d95c02e80533fef758c89de552a8690424cab9d4438bfdc7426b1b74d31e5bc9a0dbeed5b2c9588cd06c
+
+COUNT = 254
+IKM = 00fefcfaf8f6f4f2f0eeeceae8e6e4e2e0dedcdad8d6d4d2d0cecccac8c6c4c2
+Salt = 8688403996238623795262bef47de59071de3be0e2df78c7a0977747f618e1b9
+Info = 
+SK = 22479b5974b9d37e3252696111abc1352c37d8e811001829bb6b170261cc9e3b
+PK in G1 (serialized) = 0cabeaa3ca82e05f0f4107f0685e4b01612dfed9ed1ab9b1f235bfe7b196f71fa2b6ddb2885d55643d67761a3593858c023e515a1a5a09d1cf2a55562de39880fa6b0397e49e540a7c1c43782e0ed1d862c31bec4fae7b1b2dca32ac5ab921f3
+PK in G1 (compressed) = 8cabeaa3ca82e05f0f4107f0685e4b01612dfed9ed1ab9b1f235bfe7b196f71fa2b6ddb2885d55643d67761a3593858c
+Signature in G2 (compressed) = 8d256d37bed5e72b543257850c9c8c8930d3b0e1790105ce070334e4f222c1388e2ed8d0a09164cfe7e602da696440860e8b578594ecbf8125a9e40afdc8a76f853b499d86f50d73cc60add460f4185bc5b4244db4f27cd1414b555993eec3c9
+PK in G2 (serialized) = 102de45c1d6e81b364e4410a77723eb78382ebca90ba3b0af3048179beb123d3187f827774d28842cec1adff56fe2c33121fdd388f3a23f8190fbf9358889424d16f0720d8af5ceb38865959fdda74c91a42fd4f87e134210d6ac03017bd5b4410c420943e1607bc5af51630124db214f57d008ddeba32e6bf2aa5fcc50f06cdb49087675db2cd8bd140b1878a72ac4b07a2dc561cb7a82514ac4b3b2253c85fe12299fc6bb6ed86617c6cf33048bd8678789a8ce14361b0f25584c2daeaedda
+PK in G2 (compressed) = b02de45c1d6e81b364e4410a77723eb78382ebca90ba3b0af3048179beb123d3187f827774d28842cec1adff56fe2c33121fdd388f3a23f8190fbf9358889424d16f0720d8af5ceb38865959fdda74c91a42fd4f87e134210d6ac03017bd5b44
+Signature in G1 (compressed) = 8591483c13f9cc23a79b8cd4547dfdfc474138f3e99af1a6e5da487bbcb7f31ed29e5506d0c7312891c414f90a69744f
+
+COUNT = 255
+IKM = 00fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1
+Salt = 94251893155e58353a6e1872dee0033f55c1472fbf8511e8eee5c42e59d7fe6e
+Info = 94251893155e58353a6e1872dee0033f55c1472fbf8511e8eee5c42e59d7fe
+SK = 6e8a6004677710f9f9e713bb8fa848ef3be09e553901e9bfce02ddb83c989d24
+PK in G1 (serialized) = 17640add6c34f9eba47cb6e14dff7b58a093c0feac335a527f5ae5680e5293ccebc0aa1fa5c303858c4f15f7bee9e9c7031110295f94e4c9b572ef9fb8807719594c869d62b1ecedf816ac66984e1a589152a92b2ea9de0ecdeb752564200cd6
+PK in G1 (compressed) = 97640add6c34f9eba47cb6e14dff7b58a093c0feac335a527f5ae5680e5293ccebc0aa1fa5c303858c4f15f7bee9e9c7
+Signature in G2 (compressed) = 9963e2253c5c3a64f9b9fb617051eeca8f4848532d5594b7abf7f5a23f26d3c6c515fb7ad741a40084d536bacd04e1fa125c38521313aa73f897dd0e6820b5d89ee98c7da5125709d6656401ff5aed859cf820a20cdfad4e711877588ee6f8eb
+PK in G2 (serialized) = 172e5eff977b69157f0e5922225406ca6ac1ca3eacd78cccc725ec2753d7dd150ac4ad1058cb1ef78c427308a03883ce02c40576695de12830e43493f52d19d3b43d056a6dbf393cb44d86020109a6bfbef88cc2606cdeac86ffbb63e6c788b11621b53876288ea5129273606f05de304c17f1b0ae2f1f45dad86d7084bd11de54f1263a588e19cd787b8c018cc31aaa0b06c9dc6011a5ee59f013261e534fb8d2b60c7c08303c95bdf17abbe5c259f2083b3685a6d5d5aa0644e0f98e750b0f
+PK in G2 (compressed) = b72e5eff977b69157f0e5922225406ca6ac1ca3eacd78cccc725ec2753d7dd150ac4ad1058cb1ef78c427308a03883ce02c40576695de12830e43493f52d19d3b43d056a6dbf393cb44d86020109a6bfbef88cc2606cdeac86ffbb63e6c788b1
+Signature in G1 (compressed) = ae42905e3617af26e55097879d30897f63a0660bdcfd380082c3f870731e1b3b2900bdaf66478fd66dcc3f7f5531f5de
+
+Point in G1 (serialized) = 184bb665c37ff561a89ec2122dd343f20e0f4cbcaec84e3c3052ea81d1834e192c426074b02ed3dca4e7676ce4ce48ba04407b8d35af4dacc809927071fc0405218f1401a6d15af775810e4e460064bcc9468beeba82fdc751be70476c888bf3
\ No newline at end of file
diff --git a/testVectors/bls/bls12-381/hash2curve_G1.rsp b/testVectors/bls/bls12-381/hash2curve_G1.rsp
new file mode 100644
index 0000000..5cf56f4
--- /dev/null
+++ b/testVectors/bls/bls12-381/hash2curve_G1.rsp
@@ -0,0 +1,140 @@
+# BLS12-381 G1
+# BLS12381G1_XMD:SHA-256_SSWU_RO_
+
+suite   = BLS12381G1_XMD:SHA-256_SSWU_RO_
+dst     = QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_RO_
+
+msg     = 
+P.x     = 052926add2207b76ca4fa57a8734416c8dc95e24501772c814278700eed6d1e4e8cf62d9c09db0fac349612b759e79a1
+P.y     = 08ba738453bfed09cb546dbb0783dbb3a5f1f566ed67bb6be0e8c67e2e81a4cc68ee29813bb7994998f3eae0c9c6a265
+u[0]    = 0ba14bd907ad64a016293ee7c2d276b8eae71f25a4b941eece7b0d
+          89f17f75cb3ae5438a614fb61d6835ad59f29c564f
+u[1]    = 019b9bd7979f12657976de2884c7cce192b82c177c80e0ec604436
+          a7f538d231552f0d96d9f7babe5fa3b19b3ff25ac9
+Q0.x    = 11a3cce7e1d90975990066b2f2643b9540fa40d6137780df4e753a
+          8054d07580db3b7f1f03396333d4a359d1fe3766fe
+Q0.y    = 0eeaf6d794e479e270da10fdaf768db4c96b650a74518fc67b04b0
+          3927754bac66f3ac720404f339ecdcc028afa091b7
+Q1.x    = 160003aaf1632b13396dbad518effa00fff532f604de1a7fc2082f
+          f4cb0afa2d63b2c32da1bef2bf6c5ca62dc6b72f9c
+Q1.y    = 0d8bb2d14e20cf9f6036152ed386d79189415b6d015a20133acb4e
+          019139b94e9c146aaad5817f866c95d609a361735e
+
+msg     = abc
+P.x     = 03567bc5ef9c690c2ab2ecdf6a96ef1c139cc0b2f284dca0a9a7943388a49a3aee664ba5379a7655d3c68900be2f6903
+P.y     = 0b9c15f3fe6e5cf4211f346271d7b01c8f3b28be689c8429c85b67af215533311f0b8dfaaa154fa6b88176c229f2885d
+u[0]    = 0d921c33f2bad966478a03ca35d05719bdf92d347557ea166e5bba
+          579eea9b83e9afa5c088573c2281410369fbd32951
+u[1]    = 003574a00b109ada2f26a37a91f9d1e740dffd8d69ec0c35e1e9f4
+          652c7dba61123e9dd2e76c655d956e2b3462611139
+Q0.x    = 125435adce8e1cbd1c803e7123f45392dc6e326d292499c2c45c58
+          65985fd74fe8f042ecdeeec5ecac80680d04317d80
+Q0.y    = 0e8828948c989126595ee30e4f7c931cbd6f4570735624fd25aef2
+          fa41d3f79cfb4b4ee7b7e55a8ce013af2a5ba20bf2
+Q1.x    = 11def93719829ecda3b46aa8c31fc3ac9c34b428982b898369608e
+          4f042babee6c77ab9218aad5c87ba785481eff8ae4
+Q1.y    = 0007c9cef122ccf2efd233d6eb9bfc680aa276652b0661f4f820a6
+          53cec1db7ff69899f8e52b8e92b025a12c822a6ce6
+
+msg     = abcdef0123456789
+P.x     = 11e0b079dea29a68f0383ee94fed1b940995272407e3bb916bbf268c263ddd57a6a27200a784cbc248e84f357ce82d98
+P.y     = 03a87ae2caf14e8ee52e51fa2ed8eefe80f02457004ba4d486d6aa1f517c0889501dc7413753f9599b099ebcbbd2d709
+u[0]    = 062d1865eb80ebfa73dcfc45db1ad4266b9f3a93219976a3790ab8
+          d52d3e5f1e62f3b01795e36834b17b70e7b76246d4
+u[1]    = 0cdc3e2f271f29c4ff75020857ce6c5d36008c9b48385ea2f2bf6f
+          96f428a3deb798aa033cd482d1cdc8b30178b08e3a
+Q0.x    = 08834484878c217682f6d09a4b51444802fdba3d7f2df9903a0dda
+          db92130ebbfa807fffa0eabf257d7b48272410afff
+Q0.y    = 0b318f7ecf77f45a0f038e62d7098221d2dbbca2a394164e2e3fe9
+          53dc714ac2cde412d8f2d7f0c03b259e6795a2508e
+Q1.x    = 158418ed6b27e2549f05531a8281b5822b31c3bf3144277fbb977f
+          8d6e2694fedceb7011b3c2b192f23e2a44b2bd106e
+Q1.y    = 1879074f344471fac5f839e2b4920789643c075792bec5af4282c7
+          3f7941cda5aa77b00085eb10e206171b9787c4169f
+
+msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
+P.x     = 15f68eaa693b95ccb85215dc65fa81038d69629f70aeee0d0f677cf22285e7bf58d7cb86eefe8f2e9bc3f8cb84fac488
+P.y     = 1807a1d50c29f430b8cafc4f8638dfeeadf51211e1602a5f184443076715f91bb90a48ba1e370edce6ae1062f5e6dd38
+u[0]    = 010476f6a060453c0b1ad0b628f3e57c23039ee16eea5e71bb87c3
+          b5419b1255dc0e5883322e563b84a29543823c0e86
+u[1]    = 0b1a912064fb0554b180e07af7e787f1f883a0470759c03c1b6509
+          eb8ce980d1670305ae7b928226bb58fdc0a419f46e
+Q0.x    = 0cbd7f84ad2c99643fea7a7ac8f52d63d66cefa06d9a56148e58b9
+          84b3dd25e1f41ff47154543343949c64f88d48a710
+Q0.y    = 052c00e4ed52d000d94881a5638ae9274d3efc8bc77bc0e5c650de
+          04a000b2c334a9e80b85282a00f3148dfdface0865
+Q1.x    = 06493fb68f0d513af08be0372f849436a787e7b701ae31cb964d96
+          8021d6ba6bd7d26a38aaa5a68e8c21a6b17dc8b579
+Q1.y    = 02e98f2ccf5802b05ffaac7c20018bc0c0b2fd580216c4aa2275d2
+          909dc0c92d0d0bdc979226adeb57a29933536b6bb4
+
+msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+P.x     = 082aabae8b7dedb0e78aeb619ad3bfd9277a2f77ba7fad20ef6aabdc6c31d19ba5a6d12283553294c1825c4b3ca2dcfe
+P.y     = 05b84ae5a942248eea39e1d91030458c40153f3b654ab7872d779ad1e942856a20c438e8d99bc8abfbf74729ce1f7ac8
+u[0]    = 0a8ffa7447f6be1c5a2ea4b959c9454b431e29ccc0802bc052413a
+          9c5b4f9aac67a93431bd480d15be1e057c8a08e8c6
+u[1]    = 05d487032f602c90fa7625dbafe0f4a49ef4a6b0b33d7bb349ff4c
+          f5410d297fd6241876e3e77b651cfc8191e40a68b7
+Q0.x    = 0cf97e6dbd0947857f3e578231d07b309c622ade08f2c08b32ff37
+          2bd90db19467b2563cc997d4407968d4ac80e154f8
+Q0.y    = 127f0cddf2613058101a5701f4cb9d0861fd6c2a1b8e0afe194fcc
+          f586a3201a53874a2761a9ab6d7220c68661a35ab3
+Q1.x    = 092f1acfa62b05f95884c6791fba989bbe58044ee6355d100973bf
+          9553ade52b47929264e6ae770fb264582d8dce512a
+Q1.y    = 028e6d0169a72cfedb737be45db6c401d3adfb12c58c619c82b93a
+          5dfcccef12290de530b0480575ddc8397cda0bbebf
+
+# BLS12381G1_XMD:SHA-256_SSWU_NU_
+
+suite   = BLS12381G1_XMD:SHA-256_SSWU_NU_
+dst     = QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_NU_
+
+msg     = 
+P.x     = 184bb665c37ff561a89ec2122dd343f20e0f4cbcaec84e3c3052ea81d1834e192c426074b02ed3dca4e7676ce4ce48ba
+P.y     = 04407b8d35af4dacc809927071fc0405218f1401a6d15af775810e4e460064bcc9468beeba82fdc751be70476c888bf3
+u[0]    = 156c8a6a2c184569d69a76be144b5cdc5141d2d2ca4fe341f011e2
+          5e3969c55ad9e9b9ce2eb833c81a908e5fa4ac5f03
+Q.x     = 11398d3b324810a1b093f8e35aa8571cced95858207e7f49c4fd74
+          656096d61d8a2f9a23cdb18a4dd11cd1d66f41f709
+Q.y     = 19316b6fb2ba7717355d5d66a361899057e1e84a6823039efc7bec
+          cefe09d023fb2713b1c415fcf278eb0c39a89b4f72
+
+msg     = abc
+P.x     = 009769f3ab59bfd551d53a5f846b9984c59b97d6842b20a2c565baa167945e3d026a3755b6345df8ec7e6acb6868ae6d
+P.y     = 1532c00cf61aa3d0ce3e5aa20c3b531a2abd2c770a790a2613818303c6b830ffc0ecf6c357af3317b9575c567f11cd2c
+u[0]    = 147e1ed29f06e4c5079b9d14fc89d2820d32419b990c1c7bb7dbea
+          2a36a045124b31ffbde7c99329c05c559af1c6cc82
+Q.x     = 1998321bc27ff6d71df3051b5aec12ff47363d81a5e9d2dff55f44
+          4f6ca7e7d6af45c56fd029c58237c266ef5cda5254
+Q.y     = 034d274476c6307ae584f951c82e7ea85b84f72d28f4d647173235
+          6121af8d62a49bc263e8eb913a6cf6f125995514ee
+
+msg     = abcdef0123456789
+P.x     = 1974dbb8e6b5d20b84df7e625e2fbfecb2cdb5f77d5eae5fb2955e5ce7313cae8364bc2fff520a6c25619739c6bdcb6a
+P.y     = 15f9897e11c6441eaa676de141c8d83c37aab8667173cbe1dfd6de74d11861b961dccebcd9d289ac633455dfcc7013a3
+u[0]    = 04090815ad598a06897dd89bcda860f25837d54e897298ce31e694
+          7378134d3761dc59a572154963e8c954919ecfa82d
+Q.x     = 17d502fa43bd6a4cad2859049a0c3ecefd60240d129be65da271a4
+          c03a9c38fa78163b9d2a919d2beb57df7d609b4919
+Q.y     = 109019902ae93a8732abecf2ff7fecd2e4e305eb91f41c9c3267f1
+          6b6c19de138c7272947f25512745da6c466cdfd1ac
+
+msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
+P.x     = 0a7a047c4a8397b3446450642c2ac64d7239b61872c9ae7a59707a8f4f950f101e766afe58223b3bff3a19a7f754027c
+P.y     = 1383aebba1e4327ccff7cf9912bda0dbc77de048b71ef8c8a81111d71dc33c5e3aa6edee9cf6f5fe525d50cc50b77cc9
+u[0]    = 08dccd088ca55b8bfbc96fb50bb25c592faa867a8bb78d4e94a8cc
+          2c92306190244532e91feba2b7fed977e3c3bb5a1f
+Q.x     = 112eb92dd2b3aa9cd38b08de4bef603f2f9fb0ca226030626a9a2e
+          47ad1e9847fe0a5ed13766c339e38f514bba143b21
+Q.y     = 17542ce2f8d0a54f2c5ba8c4b14e10b22d5bcd7bae2af3c965c8c8
+          72b571058c720eac448276c99967ded2bf124490e1
+
+msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+P.x     = 0e7a16a975904f131682edbb03d9560d3e48214c9986bd50417a77108d13dc957500edf96462a3d01e62dc6cd468ef11
+P.y     = 0ae89e677711d05c30a48d6d75e76ca9fb70fe06c6dd6ff988683d89ccde29ac7d46c53bb97a59b1901abf1db66052db
+u[0]    = 0dd824886d2123a96447f6c56e3a3fa992fbfefdba17b6673f9f63
+          0ff19e4d326529db37e1c1be43f905bf9202e0278d
+Q.x     = 1775d400a1bacc1c39c355da7e96d2d1c97baa9430c4a3476881f8
+          521c09a01f921f592607961efc99c4cd46bd78ca19
+Q.y     = 1109b5d59f65964315de65a7a143e86eabc053104ed289cf480949
+          317a5685fad7254ff8e7fe6d24d3104e5d55ad6370
diff --git a/testVectors/bls/bls12-381/hash2curve_G2.rsp b/testVectors/bls/bls12-381/hash2curve_G2.rsp
new file mode 100644
index 0000000..8f147ce
--- /dev/null
+++ b/testVectors/bls/bls12-381/hash2curve_G2.rsp
@@ -0,0 +1,250 @@
+# BLS12-381 G2
+# BLS12381G2_XMD:SHA-256_SSWU_RO_
+
+suite   = BLS12381G2_XMD:SHA-256_SSWU_RO_
+dst     = QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_RO_
+
+msg     = 
+P.x_re  = 0141ebfbdca40eb85b87142e130ab689c673cf60f1a3e98d69335266f30d9b8d4ac44c1038e9dcdd5393faf5c41fb78a
+P.x_im  = 05cb8437535e20ecffaef7752baddf98034139c38452458baeefab379ba13dff5bf5dd71b72418717047f5b0f37da03d
+P.y_re  = 0503921d7f6a12805e72940b963c0cf3471c7b2a524950ca195d11062ee75ec076daf2d4bc358c4b190c0c98064fdd92
+P.y_im  = 12424ac32561493f3fe3c260708a12b7c620e7be00099a974e259ddc7d1f6395c3c811cdd19f1e8dbf3e9ecfdcbab8d6
+u[0]    = 03dbc2cce174e91ba93cbb08f26b917f98194a2ea08d1cce75b2b9
+          cc9f21689d80bd79b594a613d0a68eb807dfdc1cf8
+    + I * 05a2acec64114845711a54199ea339abd125ba38253b70a92c876d
+          f10598bd1986b739cad67961eb94f7076511b3b39a
+u[1]    = 02f99798e8a5acdeed60d7e18e9120521ba1f47ec090984662846b
+          c825de191b5b7641148c0dbc237726a334473eee94
+    + I * 145a81e418d4010cc027a68f14391b30074e89e60ee7a22f87217b
+          2f6eb0c4b94c9115b436e6fa4607e95a98de30a435
+Q0.x    = 019ad3fc9c72425a998d7ab1ea0e646a1f6093444fc6965f1cad5a
+          3195a7b1e099c050d57f45e3fa191cc6d75ed7458c
+    + I * 171c88b0b0efb5eb2b88913a9e74fe111a4f68867b59db252ce586
+          8af4d1254bfab77ebde5d61cd1a86fb2fe4a5a1c1d
+Q0.y    = 0ba10604e62bdd9eeeb4156652066167b72c8d743b050fb4c1016c
+          31b505129374f76e03fa127d6a156213576910fef3
+    + I * 0eb22c7a543d3d376e9716a49b72e79a89c9bfe9feee8533ed931c
+          bb5373dde1fbcd7411d8052e02693654f71e15410a
+Q1.x    = 113d2b9cd4bd98aee53470b27abc658d91b47a78a51584f3d4b950
+          677cfb8a3e99c24222c406128c91296ef6b45608be
+    + I * 13855912321c5cb793e9d1e88f6f8d342d49c0b0dbac613ee9e17e
+          3c0b3c97dfbb5a49cc3fb45102fdbaf65e0efe2632
+Q1.y    = 0fd3def0b7574a1d801be44fde617162aa2e89da47f464317d9bb5
+          abc3a7071763ce74180883ad7ad9a723a9afafcdca
+    + I * 056f617902b3c0d0f78a9a8cbda43a26b65f602f8786540b9469b0
+          60db7b38417915b413ca65f875c130bebfaa59790c
+
+msg     = abc
+P.x_re  = 02c2d18e033b960562aae3cab37a27ce00d80ccd5ba4b7fe0e7a210245129dbec7780ccc7954725f4168aff2787776e6
+P.x_im  = 139cddbccdc5e91b9623efd38c49f81a6f83f175e80b06fc374de9eb4b41dfe4ca3a230ed250fbe3a2acf73a41177fd8
+P.y_re  = 1787327b68159716a37440985269cf584bcb1e621d3a7202be6ea05c4cfe244aeb197642555a0645fb87bf7466b2ba48
+P.y_im  = 00aa65dae3c8d732d10ecd2c50f8a1baf3001578f71c694e03866e9f3d49ac1e1ce70dd94a733534f106d4cec0eddd16
+u[0]    = 15f7c0aa8f6b296ab5ff9c2c7581ade64f4ee6f1bf18f55179ff44
+          a2cf355fa53dd2a2158c5ecb17d7c52f63e7195771
+    + I * 01c8067bf4c0ba709aa8b9abc3d1cef589a4758e09ef53732d670f
+          d8739a7274e111ba2fcaa71b3d33df2a3a0c8529dd
+u[1]    = 187111d5e088b6b9acfdfad078c4dacf72dcd17ca17c82be35e79f
+          8c372a693f60a033b461d81b025864a0ad051a06e4
+    + I * 08b852331c96ed983e497ebc6dee9b75e373d923b729194af8e72a
+          051ea586f3538a6ebb1e80881a082fa2b24df9f566
+Q0.x    = 12b2e525281b5f4d2276954e84ac4f42cf4e13b6ac4228624e1776
+          0faf94ce5706d53f0ca1952f1c5ef75239aeed55ad
+    + I * 05d8a724db78e570e34100c0bc4a5fa84ad5839359b40398151f37
+          cff5a51de945c563463c9efbdda569850ee5a53e77
+Q0.y    = 02eacdc556d0bdb5d18d22f23dcb086dd106cad713777c7e640794
+          3edbe0b3d1efe391eedf11e977fac55f9b94f2489c
+    + I * 04bbe48bfd5814648d0b9e30f0717b34015d45a861425fabc1ee06
+          fdfce36384ae2c808185e693ae97dcde118f34de41
+Q1.x    = 19f18cc5ec0c2f055e47c802acc3b0e40c337256a208001dde14b2
+          5afced146f37ea3d3ce16834c78175b3ed61f3c537
+    + I * 15b0dadc256a258b4c68ea43605dffa6d312eef215c19e6474b3e1
+          01d33b661dfee43b51abbf96fee68fc6043ac56a58
+Q1.y    = 05e47c1781286e61c7ade887512bd9c2cb9f640d3be9cf87ea0bad
+          24bd0ebfe946497b48a581ab6c7d4ca74b5147287f
+    + I * 19f98db2f4a1fcdf56a9ced7b320ea9deecf57c8e59236b0dc21f6
+          ee7229aa9705ce9ac7fe7a31c72edca0d92370c096
+
+msg     = abcdef0123456789
+P.x_re  = 121982811d2491fde9ba7ed31ef9ca474f0e1501297f68c298e9f4c0028add35aea8bb83d53c08cfc007c1e005723cd0
+P.x_im  = 190d119345b94fbd15497bcba94ecf7db2cbfd1e1fe7da034d26cbba169fb3968288b3fafb265f9ebd380512a71c3f2c
+P.y_re  = 05571a0f8d3c08d094576981f4a3b8eda0a8e771fcdcc8ecceaf1356a6acf17574518acb506e435b639353c2e14827c8
+P.y_im  = 0bb5e7572275c567462d91807de765611490205a941a5a6af3b1691bfe596c31225d3aabdf15faff860cb4ef17c7c3be
+u[0]    = 0313d9325081b415bfd4e5364efaef392ecf69b087496973b22930
+          3e1816d2080971470f7da112c4eb43053130b785e1
+    + I * 062f84cb21ed89406890c051a0e8b9cf6c575cf6e8e18ecf63ba86
+          826b0ae02548d83b483b79e48512b82a6c0686df8f
+u[1]    = 1739123845406baa7be5c5dc74492051b6d42504de008c635f3535
+          bb831d478a341420e67dcc7b46b2e8cba5379cca97
+    + I * 01897665d9cb5db16a27657760bbea7951f67ad68f8d55f7113f24
+          ba6ddd82caef240a9bfa627972279974894701d975
+Q0.x    = 0f48f1ea1318ddb713697708f7327781fb39718971d72a9245b973
+          1faaca4dbaa7cca433d6c434a820c28b18e20ea208
+    + I * 06051467c8f85da5ba2540974758f7a1e0239a5981de441fdd8768
+          0a995649c211054869c50edbac1f3a86c561ba3162
+Q0.y    = 168b3d6df80069dbbedb714d41b32961ad064c227355e1ce5fac8e
+          105de5e49d77f0c64867f3834848f152497eb76333
+    + I * 134e0e8331cee8cb12f9c2d0742714ed9eee78a84d634c9a95f6a7
+          391b37125ed48bfc6e90bf3546e99930ff67cc97bc
+Q1.x    = 004fd03968cd1c99a0dd84551f44c206c84dcbdb78076c5bfee24e
+          89a92c8508b52b88b68a92258403cbe1ea2da3495f
+    + I * 1674338ea298281b636b2eb0fe593008d03171195fd6dcd4531e8a
+          1ed1f02a72da238a17a635de307d7d24aa2d969a47
+Q1.y    = 0dc7fa13fff6b12558419e0a1e94bfc3cfaf67238009991c5f24ee
+          94b632c3d09e27eca329989aee348a67b50d5e236c
+    + I * 169585e164c131103d85324f2d7747b23b91d66ae5d947c449c819
+          4a347969fc6bbd967729768da485ba71868df8aed2
+
+msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
+P.x_re  = 19a84dd7248a1066f737cc34502ee5555bd3c19f2ecdb3c7d9e24dc65d4e25e50d83f0f77105e955d78f4762d33c17da
+P.x_im  = 0934aba516a52d8ae479939a91998299c76d39cc0c035cd18813bec433f587e2d7a4fef038260eef0cef4d02aae3eb91
+P.y_re  = 14f81cd421617428bc3b9fe25afbb751d934a00493524bc4e065635b0555084dd54679df1536101b2c979c0152d09192
+P.y_im  = 09bcccfa036b4847c9950780733633f13619994394c23ff0b32fa6b795844f4a0673e20282d07bc69641cee04f5e5662
+u[0]    = 025820cefc7d06fd38de7d8e370e0da8a52498be9b53cba9927b2e
+          f5c6de1e12e12f188bbc7bc923864883c57e49e253
+    + I * 034147b77ce337a52e5948f66db0bab47a8d038e712123bb381899
+          b6ab5ad20f02805601e6104c29df18c254b8618c7b
+u[1]    = 0930315cae1f9a6017c3f0c8f2314baa130e1cf13f6532bff0a8a1
+          790cd70af918088c3db94bda214e896e1543629795
+    + I * 10c4df2cacf67ea3cb3108b00d4cbd0b3968031ebc8eac4b1ebcef
+          e84d6b715fde66bef0219951ece29d1facc8a520ef
+Q0.x    = 09eccbc53df677f0e5814e3f86e41e146422834854a224bf5a83a5
+          0e4cc0a77bfc56718e8166ad180f53526ea9194b57
+    + I * 0c3633943f91daee715277bd644fba585168a72f96ded64fc5a384
+          cce4ec884a4c3c30f08e09cd2129335dc8f67840ec
+Q0.y    = 0eb6186a0457d5b12d132902d4468bfeb7315d83320b6c32f1c875
+          f344efcba979952b4aa418589cb01af712f98cc555
+    + I * 119e3cf167e69eb16c1c7830e8df88856d48be12e3ff0a40791a5c
+          d2f7221311d4bf13b1847f371f467357b3f3c0b4c7
+Q1.x    = 0eb3aabc1ddfce17ff18455fcc7167d15ce6b60ddc9eb9b59f8d40
+          ab49420d35558686293d046fc1e42f864b7f60e381
+    + I * 198bdfb19d7441ebcca61e8ff774b29d17da16547d2c10c273227a
+          635cacea3f16826322ae85717630f0867539b5ed8b
+Q1.y    = 0aaf1dee3adf3ed4c80e481c09b57ea4c705e1b8d25b897f0ceeec
+          3990748716575f92abff22a1c8f4582aff7b872d52
+    + I * 0d058d9061ed27d4259848a06c96c5ca68921a5d269b078650c882
+          cb3c2bd424a8702b7a6ee4e0ead9982baf6843e924
+
+msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+P.x_re  = 01a6ba2f9a11fa5598b2d8ace0fbe0a0eacb65deceb476fbbcb64fd24557c2f4b18ecfc5663e54ae16a84f5ab7f62534
+P.x_im  = 11fca2ff525572795a801eed17eb12785887c7b63fb77a42be46ce4a34131d71f7a73e95fee3f812aea3de78b4d01569
+P.y_re  = 0b6798718c8aed24bc19cb27f866f1c9effcdbf92397ad6448b5c9db90d2b9da6cbabf48adc1adf59a1a28344e79d57e
+P.y_im  = 03a47f8e6d1763ba0cad63d6114c0accbef65707825a511b251a660a9b3994249ae4e63fac38b23da0c398689ee2ab52
+u[0]    = 190b513da3e66fc9a3587b78c76d1d132b1152174d0b83e3c11140
+          66392579a45824c5fa17649ab89299ddd4bda54935
+    + I * 12ab625b0fe0ebd1367fe9fac57bb1168891846039b4216b9d9400
+          7b674de2d79126870e88aeef54b2ec717a887dcf39
+u[1]    = 0e6a42010cf435fb5bacc156a585e1ea3294cc81d0ceb81924d950
+          40298380b164f702275892cedd81b62de3aba3f6b5
+    + I * 117d9a0defc57a33ed208428cb84e54c85a6840e7648480ae42883
+          8989d25d97a0af8e3255be62b25c2a85630d2dddd8
+Q0.x    = 17cadf8d04a1a170f8347d42856526a24cc466cb2ddfd506cff011
+          91666b7f944e31244d662c904de5440516a2b09004
+    + I * 0d13ba91f2a8b0051cf3279ea0ee63a9f19bc9cb8bfcc7d78b3cbd
+          8cc4fc43ba726774b28038213acf2b0095391c523e
+Q0.y    = 17ef19497d6d9246fa94d35575c0f8d06ee02f21a284dbeaa78768
+          cb1e25abd564e3381de87bda26acd04f41181610c5
+    + I * 12c3c913ba4ed03c24f0721a81a6be7430f2971ffca8fd1729aafe
+          496bb725807531b44b34b59b3ae5495e5a2dcbd5c8
+Q1.x    = 16ec57b7fe04c71dfe34fb5ad84dbce5a2dbbd6ee085f1d8cd17f4
+          5e8868976fc3c51ad9eeda682c7869024d24579bfd
+    + I * 13103f7aace1ae1420d208a537f7d3a9679c287208026e4e3439ab
+          8cd534c12856284d95e27f5e1f33eec2ce656533b0
+Q1.y    = 0958b2c4c2c10fcef5a6c59b9e92c4a67b0fae3e2e0f1b6b5edad9
+          c940b8f3524ba9ebbc3f2ceb3cfe377655b3163bd7
+    + I * 0ccb594ed8bd14ca64ed9cb4e0aba221be540f25dd0d6ba15a4a4b
+          e5d67bcf35df7853b2d8dad3ba245f1ea3697f66aa
+
+# BLS12381G2_XMD:SHA-256_SSWU_NU_
+
+suite   = BLS12381G2_XMD:SHA-256_SSWU_NU_
+dst     = QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_NU_
+
+msg     = 
+P.x_re  = 00e7f4568a82b4b7dc1f14c6aaa055edf51502319c723c4dc2688c7fe5944c213f510328082396515734b6612c4e7bb7
+P.x_im  = 126b855e9e69b1f691f816e48ac6977664d24d99f8724868a184186469ddfd4617367e94527d4b74fc86413483afb35b
+P.y_re  = 0caead0fd7b6176c01436833c79d305c78be307da5f6af6c133c47311def6ff1e0babf57a0fb5539fce7ee12407b0a42
+P.y_im  = 1498aadcf7ae2b345243e281ae076df6de84455d766ab6fcdaad71fab60abb2e8b980a440043cd305db09d283c895e3d
+u[0]    = 07355d25caf6e7f2f0cb2812ca0e513bd026ed09dda65b177500fa
+          31714e09ea0ded3a078b526bed3307f804d4b93b04
+    + I * 02829ce3c021339ccb5caf3e187f6370e1e2a311dec9b753631170
+          63ab2015603ff52c3d3b98f19c2f65575e99e8b78c
+Q.x     = 18ed3794ad43c781816c523776188deafba67ab773189b8f18c49b
+          c7aa841cd81525171f7a5203b2a340579192403bef
+    + I * 0727d90785d179e7b5732c8a34b660335fed03b913710b60903cf4
+          954b651ed3466dc3728e21855ae822d4a0f1d06587
+Q.y     = 00764a5cf6c5f61c52c838523460eb2168b5a5b43705e19cb612e0
+          06f29b717897facfd15dd1c8874c915f6d53d0342d
+    + I * 19290bb9797c12c1d275817aa2605ebe42275b66860f0e4d04487e
+          bc2e47c50b36edd86c685a60c20a2bd584a82b011a
+
+msg     = abc
+P.x_re  = 108ed59fd9fae381abfd1d6bce2fd2fa220990f0f837fa30e0f27914ed6e1454db0d1ee957b219f61da6ff8be0d6441f
+P.x_im  = 0296238ea82c6d4adb3c838ee3cb2346049c90b96d602d7bb1b469b905c9228be25c627bffee872def773d5b2a2eb57d
+P.y_re  = 033f90f6057aadacae7963b0a0b379dd46750c1c94a6357c99b65f63b79e321ff50fe3053330911c56b6ceea08fee656
+P.y_im  = 153606c417e59fb331b7ae6bce4fbf7c5190c33ce9402b5ebe2b70e44fca614f3f1382a3625ed5493843d0b0a652fc3f
+u[0]    = 138879a9559e24cecee8697b8b4ad32cced053138ab913b9987277
+          2dc753a2967ed50aabc907937aefb2439ba06cc50c
+    + I * 0a1ae7999ea9bab1dcc9ef8887a6cb6e8f1e22566015428d220b7e
+          ec90ffa70ad1f624018a9ad11e78d588bd3617f9f2
+Q.x     = 0f40e1d5025ecef0d850aa0bb7bbeceab21a3d4e85e6bee857805b
+          09693051f5b25428c6be343edba5f14317fcc30143
+    + I * 02e0d261f2b9fee88b82804ec83db330caa75fbb12719cfa71ccce
+          1c532dc4e1e79b0a6a281ed8d3817524286c8bc04c
+Q.y     = 0cf4a4adc5c66da0bca4caddc6a57ecd97c8252d7526a8ff478e0d
+          fed816c4d321b5c3039c6683ae9b1e6a3a38c9c0ae
+    + I * 11cad1646bb3768c04be2ab2bbe1f80263b7ff6f8f9488f5bc3b68
+          50e5a3e97e20acc583613c69cf3d2bfe8489744ebb
+
+msg     = abcdef0123456789
+P.x_re  = 038af300ef34c7759a6caaa4e69363cafeed218a1f207e93b2c70d91a1263d375d6730bd6b6509dcac3ba5b567e85bf3
+P.x_im  = 0da75be60fb6aa0e9e3143e40c42796edf15685cafe0279afd2a67c3dff1c82341f17effd402e4f1af240ea90f4b659b
+P.y_re  = 19b148cbdf163cf0894f29660d2e7bfb2b68e37d54cc83fd4e6e62c020eaa48709302ef8e746736c0e19342cc1ce3df4
+P.y_im  = 0492f4fed741b073e5a82580f7c663f9b79e036b70ab3e51162359cec4e77c78086fe879b65ca7a47d34374c8315ac5e
+u[0]    = 18c16fe362b7dbdfa102e42bdfd3e2f4e6191d479437a59db4eb71
+          6986bf08ee1f42634db66bde97d6c16bbfd342b3b8
+    + I * 0e37812ce1b146d998d5f92bdd5ada2a31bfd63dfe18311aa91637
+          b5f279dd045763166aa1615e46a50d8d8f475f184e
+Q.x     = 13a9d4a738a85c9f917c7be36b240915434b58679980010499b9ae
+          8d7a1bf7fbe617a15b3cd6060093f40d18e0f19456
+    + I * 16fa88754e7670366a859d6f6899ad765bf5a177abedb2740aacc9
+          252c43f90cd0421373fbd5b2b76bb8f5c4886b5d37
+Q.y     = 0a7fa7d82c46797039398253e8765a4194100b330dfed6d7fbb46d
+          6fbf01e222088779ac336e3675c7a7a0ee05bbb6e3
+    + I * 0c6ee170ab766d11fa9457cef53253f2628010b2cffc102b3b2835
+          1eb9df6c281d3cfc78e9934769d661b72a5265338d
+
+msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
+P.x_re  = 0c5ae723be00e6c3f0efe184fdc0702b64588fe77dda152ab13099a3bacd3876767fa7bbad6d6fd90b3642e902b208f9
+P.x_im  = 12c8c05c1d5fc7bfa847f4d7d81e294e66b9a78bc9953990c358945e1f042eedafce608b67fdd3ab0cb2e6e263b9b1ad
+P.y_re  = 04e77ddb3ede41b5ec4396b7421dd916efc68a358a0d7425bddd253547f2fb4830522358491827265dfc5bcc1928a569
+P.y_im  = 11c624c56dbe154d759d021eec60fab3d8b852395a89de497e48504366feedd4662d023af447d66926a28076813dd646
+u[0]    = 08d4a0997b9d52fecf99427abb721f0fa779479963315fe21c6445
+          250de7183e3f63bfdf86570da8929489e421d4ee95
+    + I * 16cb4ccad91ec95aab070f22043916cd6a59c4ca94097f7f510043
+          d48515526dc8eaaea27e586f09151ae613688d5a89
+Q.x     = 0a08b2f639855dfdeaaed972702b109e2241a54de198b2b4cd12ad
+          9f88fa419a6086a58d91fc805de812ea29bee427c2
+    + I * 04a7442e4cb8b42ef0f41dac9ee74e65ecad3ce0851f0746dc4756
+          8b0e7a8134121ed09ba054509232c49148aef62cda
+Q.y     = 05d60b1f04212b2c87607458f71d770f43973511c260f0540eef3a
+          565f42c7ce59aa1cea684bb2a7bcab84acd2f36c8c
+    + I * 1017aa5747ba15505ece266a86b0ca9c712f41a254b76ca04094ca
+          442ce45ecd224bd5544cd16685d0d1b9d156dd0531
+
+msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+P.x_re  = 0ea4e7c33d43e17cc516a72f76437c4bf81d8f4eac69ac355d3bf9b71b8138d55dc10fd458be115afa798b55dac34be1
+P.x_im  = 1565c2f625032d232f13121d3cfb476f45275c303a037faa255f9da62000c2c864ea881e2bcddd111edc4a3c0da3e88d
+P.y_re  = 043b6f5fe4e52c839148dc66f2b3751e69a0f6ebb3d056d6465d50d4108543ecd956e10fa1640dfd9bc0030cc2558d28
+P.y_im  = 0f8991d2a1ad662e7b6f58ab787947f1fa607fce12dde171bc17903b012091b657e15333e11701edcf5b63ba2a561247
+u[0]    = 03f80ce4ff0ca2f576d797a3660e3f65b274285c054feccc3215c8
+          79e2c0589d376e83ede13f93c32f05da0f68fd6a10
+    + I * 006488a837c5413746d868d1efb7232724da10eca410b07d8b505b
+          9363bdccf0a1fc0029bad07d65b15ccfe6dd25e20d
+Q.x     = 19592c812d5a50c5601062faba14c7d670711745311c879de1235a
+          0a11c75aab61327bf2d1725db07ec4d6996a682886
+    + I * 0eef4fa41ddc17ed47baf447a2c498548f3c72a02381313d13bef9
+          16e240b61ce125539090d62d9fbb14a900bf1b8e90
+Q.y     = 1260d6e0987eae96af9ebe551e08de22b37791d53f4db9e0d59da7
+          36e66699735793e853e26362531fe4adf99c1883e3
+    + I * 0dbace5df0a4ac4ac2f45d8fdf8aee45484576fdd6efc4f98ab9b9
+          f4112309e628255e183022d98ea5ed6e47ca00306c
diff --git a/testVectors/hkdf/HKDF_SHA256.rsp b/testVectors/hkdf/HKDF_SHA256.rsp
new file mode 100644
index 0000000..ed69a69
--- /dev/null
+++ b/testVectors/hkdf/HKDF_SHA256.rsp
@@ -0,0 +1,42 @@
+# Test vectors taken from RFC 5869.
+# Note that test case #1 is not taken into account since it uses a salt
+# whose length isn't 0 and smaller than 32 bytes, which we do not allow in the library
+
+# A.1.  Test Case 1
+# Basic test case with SHA-256
+
+# COUNT = 1
+
+# Hash = SHA-256
+# IKM = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+# salt = 000102030405060708090a0b0c
+# info = f0f1f2f3f4f5f6f7f8f9
+# L = 42
+# PRK = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5
+# OKM = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865
+
+# A.2.  Test Case 2
+# Test with SHA-256 and longer inputs/outputs
+
+COUNT = 2
+
+Hash = SHA-256
+IKM = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+salt = 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+info = b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+L = 82
+PRK = 06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244
+OKM = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87
+
+# A.3.  Test Case 3
+# Test with SHA-256 and zero-length salt/info
+
+COUNT = 3
+
+Hash = SHA-256
+IKM = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+salt = 
+info = 
+L = 42
+PRK = 19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04
+OKM = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8
diff --git a/testVectors/hmac/HMAC_SHA256.rsp b/testVectors/hmac/HMAC_SHA256.rsp
new file mode 100644
index 0000000..d461b8a
--- /dev/null
+++ b/testVectors/hmac/HMAC_SHA256.rsp
@@ -0,0 +1,1581 @@
+#  CAVS 11.0

+#  HMAC information 

+#  Hash sizes tested: 20 28 32 48 64

+#  Generated on Mon Feb 28 20:38:43 2011

+

+[L=32]

+

+Count = 0

+Klen = 40

+Tlen = 16

+Key = 6f35628d65813435534b5d67fbdb54cb33403d04e843103e6399f806cb5df95febbdd61236f33245

+Msg = 752cff52e4b90768558e5369e75d97c69643509a5e5904e0a386cbe4d0970ef73f918f675945a9aefe26daea27587e8dc909dd56fd0468805f834039b345f855cfe19c44b55af241fff3ffcd8045cd5c288e6c4e284c3720570b58e4d47b8feeedc52fd1401f698a209fccfa3b4c0d9a797b046a2759f82a54c41ccd7b5f592b

+Mac = 05d1243e6465ed9620c9aec1c351a186

+

+Count = 1

+Klen = 40

+Tlen = 16

+Key = 17b52858e3e135be4440d7df0ca996f41ccb78b7d8cc1924d830fe81e0fd279c131ce3546303e95a

+Msg = e0eff00f3c46e96c8d5bd181283e4605348e3fa10b47945de3dcc159ae86e7bd3fdb13f2ada2c313fce6a69efa49a470689b1ef05aab778ae15dd35fe6fd1e3a59d351c68cf8f0ffd968d7e78b57377afcc9dce3fa5db1f06f6985c4414c0fcc780030f49fef791a6c08edc2a311080c373f00e4b2044a79d82860f0871bc259

+Mac = c4061427764f979468ac422891dea9ca

+

+Count = 2

+Klen = 40

+Tlen = 16

+Key = 7c67410e0a9e3d7ae4f3d04eff1c2716891e821c6ec1dc822142ce8d9949b1449a1a033a350f0ba8

+Msg = bfd166793abdcffbbd56df769150d1466c18a67af452c7e67f86ed741d163ebbd874b9d33a91d3671099620b6eddbbd0f31117164eb73ca201db59f1650131cbef5c7b1bb14089fd24da2919241fc9303c02def424ea861d88636bb90b13ebc38cf177f8a8b139e68082fa46bcfc428bd054c1bb7dd3ed7e9b86ed751736b6cc

+Mac = 1a0d427e79a7bdca7b11579339d0ff77

+

+Count = 3

+Klen = 40

+Tlen = 16

+Key = b2c450128d0744421c3f31fab37bbcdfb5a2ff2fb706d1f7e23c4886992c7d215c648ff8edb2eb59

+Msg = f6989ebb07aadaeef970f0b5ceb806ecffe77cc20f3c221a6659a9315dff5881961900e68efc320075edafd83de320c6f18f0892489af6d97a2effb252b76b9284ebaf6d42089c1e0a5cd509c20b86ff060d5362c1768f89fafaaf65f1b0fe656b1692984a567e1260c7499085b79f5fe7684779a25855f291c5a192637177c4

+Mac = f0d7c63677033ada0b502a4e95b20e43

+

+Count = 4

+Klen = 40

+Tlen = 16

+Key = a7744321d73938b8eea13754909029881bbd727439fe2731b1c67b7083eb7b5d33adfcca65f5d189

+Msg = 71299ca3daff2331082db370bdf8ceec227b71bdc49c3b14dc3fd213d3ba83e2058828ffc6414fd5a2c99891e9c85f316c5b9bdd810a067b4df97f7e4262acfee642e30ed6534b4a0b3b3eaf5d03f2b045ca5985e7bb45c7503cd03afc68fbea9bc09579141d5fb7cbea6d73208fcf913830715dff98401f6d708ef009b5b8cb

+Mac = f6302c5fd7c8495e233b5d6129f361da

+

+Count = 5

+Klen = 40

+Tlen = 16

+Key = 795a0ba9b02984cfce5e7395fb94d98fcf12ae5db8a06e239c9ad439bf42e523e65a31c3bdf356cd

+Msg = 8b4aa20de6c1f051d11ad50ba2e4fc4ff1ec478455f9b5b96fb9893d2afca969402044c101ccb73c50e2b2dfeeae9690fb64222ab9c94fcd943078785fa8bed9e174ab6390bb16a29c8146cb2fd65a98f44de752d6b0e42f0af2c3df4f65e162742d201c1bf5d22bbee1daf8efc30d0ce491df2632173b8ad9e9b29b819cd8ac

+Mac = fbecae19c2ce766d286c8ce70133b669

+

+Count = 6

+Klen = 40

+Tlen = 16

+Key = aa41b5222efdea882cbebd11d343000ec2ff6b2f7bbfa746158ea54f32d534ae31c7d3b7a5fcc373

+Msg = 3274a0326682ba59d6c47db4164e3e9937bfad4199c6507101e5305aeb75d2bf22eb68558d59496f4c389fda04645f0676687f6757fc631b5bcc98cd947bc4d9fae8ddb14bb09a7f15f4270c105c1de0b25bb1abfeb52ce39d3f9baf2fe6c704e3f3670d458e95d158807f10e53d5f6d1221add336fa9211ecc7a1c767bfc286

+Mac = cec1ed7aa0f1cbd6b7f667a079a88577

+

+Count = 7

+Klen = 40

+Tlen = 16

+Key = aaa449923f0cd3e6a7e74d9c56a7eb6a3b4c3dea97e6a8400e5517fcff54ee4211b640280eee415f

+Msg = 0486d2647e2cdf7bba36c8f3ff9e2941001c706eb1a44cbd582f638ee7be4482899c9ce07be4ac381d44fa4649004718e33ac273b1707b746d461a731986d12c93658f216908773aee4690af8eb0be275ecef122f7ac9c94859569d21b1f2bb24a6813eef19e28ca56c5f1f776b474b69a6165412b5f9766c7a5b6759491385c

+Mac = ae73b3740a7a8a07223635faaef0ba71

+

+Count = 8

+Klen = 40

+Tlen = 16

+Key = 6c13d74ed004ee92adb44b755be92e8440434704a1c22790b788f50406e0629aea80de53730b0d99

+Msg = fd5cf72ee0779aab7daa27d5c8a8d31f4082ba47741e7e73c6e631806fbd7597c337e101b609a73ca0be744e3dac9859f827677069f4dfa91c008b739452a62a8f3f84e98cdd2ea08bba4d6614cd49107aacb1026100de457e36d3da9e78684eeadca88f69db77fec60478c554f12d6b4f7b60a6652ac27074efd35c9616012b

+Mac = 4304f9864598f801c6aa1a692aabb8be

+

+Count = 9

+Klen = 40

+Tlen = 16

+Key = 12541d81c6958221c44a958ecd7f48c08a89a8687d306c2f3814c93ecd498e0485456c33d5fc950c

+Msg = 31f51d395a06885efc34032349bc635cd4b1004ceafcb1c426a2f88b4045790226eeb1084e09e41c4ab157c19d2ec027cdbcfb07b98efecf2d130fffb47835d3ad6eec22a12d1c86d4b94cbd1a64134fec94d071bbc69b2a84d37cb4a572da25efff364ffc7b19e4c3d34ade6965451d5bc0e95299ab711d556aa572bc3c5141

+Mac = edad94e7c30813be7c5ac58df418d8a8

+

+Count = 10

+Klen = 40

+Tlen = 16

+Key = a1e8cf95c6d729507661fcc687156922c8975645e5f36eba8a3069eccb298e96c498767c7c741259

+Msg = 48bdae9d81f1beaccfd00374f522f90cfedd8e3dd93be13947104a89f75b9a48ee1ba48f2d64fc308eb1fea7f07c124d930c2fcfc58f9edfbf680129caca9389a686b17b2b219ad3312a73aeaeca8ea81e9deb4f28c0ffd87e2cb5110542b39736a6de49c45120fc7ee269717835f3846537cba548f98d8c4c036e29efea80da

+Mac = d78d7d266cf83add4355e7395b63adfd

+

+Count = 11

+Klen = 40

+Tlen = 16

+Key = c7e5ede152c50a935e76b59979e08638a09cfffd01ac7008056a18ab8ebf8d347e955e06788ff6ef

+Msg = 1e1bdaa984ca68730faf61c697d5fb15955b28992d69bae86c68cbc9ce735c4703083c04f2042cd0ffce407a89d288e6b731f06075b66530b90d396f0b2fc91944215d6396de4f4ecc92707cd308a7427a66db00761813ada90adcb6a41aec096acd046c76401b140062b8737d61a0516562b11e38750e87c3c87c47a01b0c40

+Mac = b7de3be2fae6ab41aa6386b8460223c6

+

+Count = 12

+Klen = 40

+Tlen = 16

+Key = 6ab37be64f4b1e032c5a43dc03e4afb65c6ab1329fbca9c4c10fc766224f158eb6b7b85d649e7319

+Msg = 490700ea587a001c7162f0946f7ca6a5e3655c6e09ba4c13fa7e7d4e22bcdc27f56d8effde9b85d378c751bf018939c10c768bc0754630cd9a3783a8c8ac6486f41a8711ac2412b14d05680a752f3fc6bb31f9949ede3170bcac9426455af211aed69429aa5dd13d56e4dc7cb3b7e03a5a604ff16bca7786c7a656ce7f0eaf51

+Mac = 380eaf65a9be83322508498748504b50

+

+Count = 13

+Klen = 40

+Tlen = 16

+Key = 785a1189381824a8131e885ba4b23c2e94e3dfdc03652cc32a9cc1963ff72452997f077315b0cb67

+Msg = 5bc93a655f35d346f9e96e96e9bb560178dad04ea46259917d2d30a2cfed14cd01774fcb3d62f3f1d2d164a8d68d161d0f57983a147cd2d4afa98b2686012e7efa6dcd36503366e60ecb65d8a8ee6bbc5cef4e9d5b4e6114298bf5bc46381fe50e52bc8dded1b38c787e7a0ea905dc46294bf961c2018eb9b47a764c59b9716c

+Mac = b452d180b9cacc10cb012f48dd19e4cd

+

+Count = 14

+Klen = 40

+Tlen = 16

+Key = 394575dded531000e776ae4adc64c4affb5b220ac5a96ebf1f72d19fa6aef00c42711e5dfe6fcf84

+Msg = b733d51a7eaa4b6bb0e378a218caa6ae7475a3f32909184d34d7165264cbf2d8c60753b861cb89d12498204f1d95b52dec3109f8760a54d6de0edcc8b1dfc52c607c2b86f41f6e7ffd61cd2ecba43797e1b25d71a7a20c2d5ffcba335a1d5f6f6cdc860c9d6da37f2186a7c88bc1d2f43d42c8e72399e858a1e9d91dc94a65a9

+Mac = 3f6417a99d7186bc36e6d0d61467360d

+

+Count = 15

+Klen = 40

+Tlen = 24

+Key = 14d45ca2a3d4977dab2b7d442c6f9e57ce348e0a6a808bb3cc7f6002b87789912afd98bce26ad8b3

+Msg = 0c294a318b7c1e884649fe54e4a87285e42f868e3d0a8519414e05f9c78b236089a11052cbd4cd593e22327b23d33569b35369f9bf3dc5d694b8a7762106184d5c5a5241e1ea805ddc46c4c92ae87efabb0ccc263bc24dfbf1412b90e77e589c4bfd17e615e7bffcea5ebb28400dd6a0c403b6fdf8c1a5ee2191982e601a69b3

+Mac = 28f1b663213043c4d4fb312bd36d85fbe62c8008ce82aabc

+

+Count = 16

+Klen = 40

+Tlen = 24

+Key = 2a0466dd515d2f48fec5e78e22bb22c606b09e8184691c5177a46e8c70fed24dab147ebc41e97c8f

+Msg = d60812433098c44623159153de7cd2721b349f685c43388a74c2a3d04a8e972ada4199177c61657369d78f907ba26a8934cc29d3029d4415c1101e3a8283e4c48bb2b8639fe60fc67f6a57b1b03fde507f10efcb43683e1ae223851b962370e1f144b74f1f9189e66cb831dc05bbf46e03e93877a50dec40dde5239a0fd5022a

+Mac = 7c2e5f1fdbda3c153536ec7136091eba0ba525b950bfc84f

+

+Count = 17

+Klen = 40

+Tlen = 24

+Key = 3a4182af8c3914d1df57b6321fa5dec68748ad746e0369bb64fc2d9b7dc3dfb3ed9063a7d5cc0ec4

+Msg = 3db052695a599813309fae5cf5b19690d3e1e63b3caac1487ef10766978bc9b04a00008c728e7ed397712433bf6256d2865eac3471a8ea5f8011333d02777941ad8c384deed864d47e02a03c364bb086245b3130de40875a16b418296f9eb8698fdc63767640325c0ed8883d03738cf3d460ddf72b7981816a611ef186096c6e

+Mac = dd3334fabe8d0d51084c1e99a2a7fa8548c4cbbeec854fb4

+

+Count = 18

+Klen = 40

+Tlen = 24

+Key = 56e8ada1ebc8706b94f99bf2290365222f6619a7fc3161151cd0c566f4266faaa5dc31fa34f8c9ae

+Msg = 9ae4b799989bc132e5a50c4fce6d6e44e2940c6ba7dbb8248b447d191d7477c77d5ce83a111889177a171ee0c77d4d74e8c5b0d565ab292e504976157880050ddf99094f6e2ccdcae84148681db6f39360e1d7f83a75ea8a60aa9bcae398ac46a7e44060169f3551156bb36e37e005a9312ea85a8f03a240a5af15c2c786147b

+Mac = bddd77019ee3e2a16e65713089b23f0ef13e5f3ae6da5052

+

+Count = 19

+Klen = 40

+Tlen = 24

+Key = 1e6d00b386bbbfb7f44001c5915448a516954d7a2ae8f4e9eaba807dc98c034a9aae19d1eb4ad624

+Msg = 009f5e399430038250721be1796535ff21a609fdf9f0f61266e3af75d704317d5506f8065c487218e99eb4c3d4546c4d607016901138739dbdf437a5e6f5021a47d69211ad0237eb08768734c2c952cb4f69d94306273a8a2ff62fc85deff88afe99962030683a43d683fdfcebcad1c11718b8e080c53421e370fea6e3fbfa17

+Mac = 7794f8fe7ace77512eb98a5459aaebe28ae1e8c62832b5d2

+

+Count = 20

+Klen = 40

+Tlen = 24

+Key = e2127a48f615eeafb927ee53222f5004d11dd2d3a22e5377826b43f08174586a297b82630e932210

+Msg = 1dd28756d292e5a4f3537e88777933335a64f79a4d50257aac791799b083f450e61ac946dfd6dc7e29613d947fdb9d433d7d632b177dfdd1093274e8917944cf1d576a5abfe0bed528578346d4963df382b0c224e7d6942aa3776ea074ab1df1aad2911bdb7834b2d77d7b27de72ba4a11453c0e2721938c61902d4bc0e328bf

+Mac = d0119cf3ad1dd9e917ab325c0b85927819ed606084542944

+

+Count = 21

+Klen = 40

+Tlen = 24

+Key = ee0a81a8bd52c9b1422083522d37f8071896ba625ffa22ad32a4fdd1e85c837796b6896ce194f74a

+Msg = 0c245de3b250c33282ea1a02d007f03b34ed427631283eb614db4d521f555136e7e42b4cfbee8134c63dbe3bb79b5a8b9f9f5b9f5ac61cfab1c54d197f1e3ba613f251eed616df952d691b88a16466343ef2d0f63882ddd2d55b8a6786308b2257f5d7b38af166bd7f1339d2d8899c9eda8fa86215850ba547450c267eb3c914

+Mac = 335ee9a4c96bfcfc38c76f7ace6c84adfd0a57a94efc23b2

+

+Count = 22

+Klen = 40

+Tlen = 24

+Key = d4254694ca38676404cc2cd6a444f61e230c188a9f92d4ad769287bc1397203808bfd6cd5dbe1b7b

+Msg = d106a9aec442fed61629e77566f789b28c2c2c3ec628878a12f73d37da6ea7ced677d4b12fa9ce51e01c1fa2627b94cc885a4124a8cac55afb2bd0f34642e2faba8c55f319d19d111bfbcfa9102960e5c6002fbdad41c62339a1dd7e88d5205a45ec335ecce1f27e8f71fd72b82a746610c5fff31fb5124e95006fbfe84eec55

+Mac = 5adf1391c94a60602cefe1bcc610060de90a4b7b8822db1b

+

+Count = 23

+Klen = 40

+Tlen = 24

+Key = 61b83d7ff9b82b32a89225eacd7c9c25807c8dbac8cf56610e88c875d2797df99d566bda3718ba73

+Msg = 96560a07f7e398fc739648ce9a924350fbf9b45239ae7c7f626026867dc41d7862211c71cf12e77bb78839afdd0efd9ea251c0ef1bdf6749672f1d7340e290b9cf485d92c526c881a7b6b13969f0c4043f08ef65b03819fcecbf11ab5f2ac4f786d2b4b102a6a5d5eb2a99b266c0ff4b7a2728fe1f41fa639819e877032422fa

+Mac = 312cd3f6c27e3ece5ed08f1020c815277f7e98bc3bcd0248

+

+Count = 24

+Klen = 40

+Tlen = 24

+Key = adf13d80eef135f3cbfe63ac19e8679b98c01dfd263d72db335e76d47551b31ddd94bec6c95a0b3f

+Msg = 81b8de7e17cc5ffdce4f2213b561d67d244ea591aab5c37f47e946d7db97384bdfa9eab7536b8c5ef7ecfb76bea8dae88063e451ef58804ccc9396f35b9ca2a3145507009b25a539f256ad8eeebcb40fe79807a6b4bb3f57d6ef15c7f49277fb8884db63d744d3172655e1602be78d7ac2b3b698e1272629cec3695a8fc3dedc

+Mac = a80b1a06ed13f5579a785f7965ab180908a07f152ea81e2e

+

+Count = 25

+Klen = 40

+Tlen = 24

+Key = f870e26dd47b20d386f63d12458c46d795fe0790bdc81d2e7c025329f8842bc5f74dba955126b93d

+Msg = f4d6aedd9a34e0a1822362714d4e81794b53b266417678c16a97887bbb612cc96bc5e532b3a654e5d3d65a5155427ff09569906381138cc49e3fc2384c5d33c34abd3d617c487b52ec6ee7b5105f41584b7eb5cfb512b8c31f3f338d5236e30398a8ff927e801c8ed7d14fc5040d915a737967d166ddc266f68023a357530431

+Mac = 68934f2d0de64c4e4eede0b1d867630da790c111371458d5

+

+Count = 26

+Klen = 40

+Tlen = 24

+Key = cd4f85a044eaf7c5a9850d0d708f0905049dc27718679a8f3713af3ca3b756d95c19c50d7fb90ff0

+Msg = bbf96d794a6a062fed76429a8b395e5664c6b1b0a26bdf083137507ad1bae0bd6a0cd84a9f111ec1a5faa889560f36b781ac4132858a2e141e40c8537e0aeda0a0c8878fd94abff9b0ca6d9fefbad20ffac189cc6000bba9b09993768e72f1de053663901f9d519db3ee77217fc29826760a71c55b53ed8e8f49972b287a543f

+Mac = de9a7e21d30725d253fc4d09a3fd21530d788795d672c057

+

+Count = 27

+Klen = 40

+Tlen = 24

+Key = e6e97a286f575855cec8a0f4d06327929d41f81d3fdaf9f65ebdcc474d85f4974b08399c02d14d50

+Msg = 99140d978b2e37f32684f3bf075c4678fe4b3a95fc93df7532af9096772b7707eab95420d9827970e2ba19f75877c395e9c32ac37def2781602b018fa454ebe0c10dce4c7f11498516c8f74c9318f0e57d7d92c8b95c8199ab94ec5a9e5712e0663805834384ae1a09d612277ee6d34e04a2fa0c7880f3a55912d95e2ddbf5ed

+Mac = 61a0693f740c3b121238cc904e98c671563d506780960a00

+

+Count = 28

+Klen = 40

+Tlen = 24

+Key = d763c6360763561ed2bf47749080549b6e2db87514e1ee1c85a0bbd346eb6e3cc29267cbedcad67a

+Msg = 41677677d9b19e249d4488c3eb18153d5b705002ea6aae4258d59560ce421aa4c45e0f30227f3d35a57cee6685c2afad55a4531d2af33b29ffcfd51358bc63a726f9fe28eb0dda8b1ea2cbe3d196081d915030ed8e508a08fc0a9194b8f5b0dc2fdf4a497c83fd8ed05d282217bdaaf3d81bed595daa2448152fd0cb361489ad

+Mac = 014d599f9490a22b69824f8cce92f30c0542cea92b621a10

+

+Count = 29

+Klen = 40

+Tlen = 24

+Key = a4b540971d9bdb20b47e8282cac841a86fd94fff27b4eecfeef893cb7b1347e7c2b24d69bc7b0543

+Msg = 50ee2389b8b70182548ccd7e82de8496c6b3602bc99efc7ca2efba77552762d099af0b51dfc93f718fc65a27957a33001cedfe70995371650c3e26228313414bdfba523cda9a7d9f49c5d83e9f6f1415b3a560acc33c8aa4b807678fab4d7605a979c0f4b314023709f10e6aa9a76ffd12444c884d408f5e2eb04565d8bc4825

+Mac = 431d287099550ba9e523dd1308b0514cdc5faddb04ebc4c1

+

+Count = 30

+Klen = 40

+Tlen = 32

+Key = 9779d9120642797f1747025d5b22b7ac607cab08e1758f2f3a46c8be1e25c53b8c6a8f58ffefa176

+Msg = b1689c2591eaf3c9e66070f8a77954ffb81749f1b00346f9dfe0b2ee905dcc288baf4a92de3f4001dd9f44c468c3d07d6c6ee82faceafc97c2fc0fc0601719d2dcd0aa2aec92d1b0ae933c65eb06a03c9c935c2bad0459810241347ab87e9f11adb30415424c6c7f5f22a003b8ab8de54f6ded0e3ab9245fa79568451dfa258e

+Mac = 769f00d3e6a6cc1fb426a14a4f76c6462e6149726e0dee0ec0cf97a16605ac8b

+

+Count = 31

+Klen = 40

+Tlen = 32

+Key = 09675f2dcc4783b599f18fb765583668a0fd8ae4096f6fcdc60d4f35b4130fbefcd542ffe7459d2a

+Msg = 0cf2198c31376f5c8915660137725f2bbc180a986e5a7bda27fa81593a4a339bab92cbc39fb2b8581108ee48c794812d845a72ce8008c9e915d9e330bbb90e9136aa53ba0e6693dd4046d6b03362dfb9edfa04c887153cc5de677aab8c7839d517035879679c29727e96c5426324a2575fbe678d6cc7fef5eb6cebd595cfddef

+Mac = 6b142d4dfe217f1881aa0e6483b271dd5d43f70b85605953a0fef272ddde46ca

+

+Count = 32

+Klen = 40

+Tlen = 32

+Key = cfd4a44910c9e567507abb6cede4fe601a7a2765c9755aa2cf6ba4814223811a26a8a1ef499cebd9

+Msg = 3fb301cb4092f9623aa5ffd690d22d65d56e5a1c330b9c4a0d910c34e391c90a76d5401a2d3caa44b8c5d5aef3e928b90d2ee233e9f9a2cec4a32cd019d06a0dc1fcb1125f5746a4fbd32169ed7bf0e4fd065fa7c8ac97c366380484495f5c5b6850dd1c9d8cd6694cf8686e46308ed0ed1f5bdf98cd831339771db63de5a7de

+Mac = 20153bf8ea2953c48251ebcc4161f8b6e28499e5c76c24014cff4a9e2f62d25c

+

+Count = 33

+Klen = 40

+Tlen = 32

+Key = 5448998f9d8f98534addf0c8ba631c496bf8a8006cbb46ad15fa1fa2f55367120c19348c3afa90c3

+Msg = 1c4396f7b7f9228e832a13692002ba2aff439dcb7fddbfd456c022d133ee8903a2d482562fdaa493ce3916d77a0c51441dab26f6b0340238a36a71f87fc3e179cabca9482b704971ce69f3f20ab64b70413d6c2908532b2a888a9fc224cae1365da410b6f2e298904b63b4a41726321835a4774dd063c211cfc8b5166c2d11a2

+Mac = 7e8cba9dd9f06ebdd7f92e0f1a67c7f4df52693c212bdd84f67370b351533c6c

+

+Count = 34

+Klen = 40

+Tlen = 32

+Key = 9da0c114682f82c1d1e9b54430580b9c569489ca16b92ee10498d55d7cad5db5e652063439311e04

+Msg = 4953408be3ddde42521eb625a37af0d2cf9ed184f5b627e5e7e0e824e8e11648b418e5c4c1b0204bc519c9e578b800439bdd254f39f641082d03a28de44ac677644c7b6c8df743f29f1dfd80fd25c2db31010ea02f60201cde24a364d4168da261d848aed01c10dee9149c1ebb29004398f0d29c605a8bca032b31d241ad3371

+Mac = cdeacfcebf46cc9d7e4d4175e5d8d267c23a64cde83e867e5001ecf26fbd30d2

+

+Count = 35

+Klen = 40

+Tlen = 32

+Key = aaafd08fd89bebe239ab65bb190b86d49c5d39faa50b1109f7dc8b179bc693f0810449c36a68041a

+Msg = 44131187c07a8e3979254b0c1d1cfa8081f0beb8890633744932af3f6987c7eace6e153876f639dba46b1e9f3e2a7fe673b3a954a00082cb7516ca9a54d9a1f1f924499960192ee1e3b623dca4a9efc92a6608d34f769efb5912db5267f06a6b0f5d3610458c74347e2ee32916425213ef2f649d5c1090ea3d4f6bcf6b752a3f

+Mac = 0c19ab5d4ee7b64396eff7b2ca9efa5ca7369c1a1ed14952445d2fb5ece9473a

+

+Count = 36

+Klen = 40

+Tlen = 32

+Key = b06f7ca7a5dd8baf2ca940811edad87a33da666dc427bcf4d54a8e03520dd5c399e9729d39be1494

+Msg = 32b45fbcbaf262bbe347360bd6076c43dc26ba9573fcabaea14595de886ccc793b09157dd0a85d74b6ccab9c49335446a45c6e7cb64786e6997c96ef1e4e3123ad6101db4c6a731dfd36b1be4deed1c92a994b25f5e2b171d81b9a335a83e03230c40b2056c00c7c5f8d2fb70abe4b9615e53bd756569217072d8bf362923f6e

+Mac = a9c9d3993fe7ec4c2033ccf3b73b3407cd999d67455b43a75d6ba97efda3be63

+

+Count = 37

+Klen = 40

+Tlen = 32

+Key = 2dff35c2fe5039123d4c5d9feb7d5167e3e959b31841abec1e5b18b0ece2ef25e04d1f8d030d9b1b

+Msg = 14890f3b2ee63746c8249909013571a403eb54273760090db5959b06ff59acfaee6d0c4aece58b5964d10b4b771dd90cf1b63d947bee4f6a12220d67b79aabbd68b02a3850352cc33b10072d4c28182df2855aa418b236239c659dad036155be6b9c908bc09dc38c3329b538e81ed710ef9fd3de7671673f3da5745f4a785204

+Mac = 468d8498d46afe74a0ffb541b847bac724faeabd48c41322bf534b284c4e9fe0

+

+Count = 38

+Klen = 40

+Tlen = 32

+Key = 9794cf76aeef22963fa40a09a86bf0e2ba9f54f30f43bff09d44f9d28cfd7b7a45002797cc1437c9

+Msg = 3e8a9030eae1bb6084cffdb577623c4cf94b7aee3d3ca994ea94c12acd3e1194cad6d2ef190e0219af517073f9a613e5d0d69f23aad15a2f0d4e2c204ab2f621673325bc5d3d875984145d014bbcb1682c16ea2bdf4b9d56ce6da629ca5c781cfce7b1201e34f228eb62ede8d36cbfdcf451818d46721910153b56cfb5053d8c

+Mac = 29973999c4ec891154b83ebe5b0201cf29205d68e7be2c1d59bbc81658d6668e

+

+Count = 39

+Klen = 40

+Tlen = 32

+Key = c1d60814376aae39c4111246353485958f95558fa38ffc14e4a0981d76249b9f8763c4b3e2ce4ef5

+Msg = 97d29ac5ede94c0a5071e0095e6102123d1726132f9dc102672ab87b1cec18abdb04096c21d3fdb129742d250389460fe63b5f79c77c2f912a8f7d4f39cbd758139c872366cac35a40fe248322825adf57481d92832e66057f80e08964be993de6a0fe31e45806cb3c17ad6ae4d2a44a374647a88c3acf260d04c970c74ec720

+Mac = 50db0ecb5b31524a6914264930abccae0da07f01a2bbb9408207156f8e8a340c

+

+Count = 40

+Klen = 40

+Tlen = 32

+Key = ca5f3eb9308604f9fcc2af1c6a3175cd8a75045593b473bd7ae37933c345ddb0982e2dd7180db31f

+Msg = 8734e49e3e629deb352c77f58ff4dcce2af3b1182e7d896ae68619f6cf66ed69efd95913684ab1484d51bc06b47a67d70d48b7f9b27901bdbf8c5d2d238158f1f7e0e9740ffca742cf7938b5400c0dd063824c6bc6040e905499cb2671ec12cc47507e085a01e5a163acd2495b32367fd6aa5ab492a518ad50b54b28e23084c2

+Mac = a5772a3da86365b46638f1e97037fc0d8351d2e19ed929f85448ebf4e8379a8e

+

+Count = 41

+Klen = 40

+Tlen = 32

+Key = 808d7aa9aba6a40d1bc43e9b932ec8e9273b892ffc0a769e4f7255f3b83c224bb090b23952ae9616

+Msg = 61c5be972faa61f67bcb332542c0b8a7c74ef67cdb95d6f65c8acec8fca8bd6043e31677d8de41e6fc5d3ebb57fd8c8cf723490b96329adb1b014da2648cbd6043e9f6ffc67e1a2bbc72046374612a50c854c8565af03b6a1eedaa2319caec1368bfa65783f4b46dc3f0cb4622545c9c43c9bb86b237804a6c382e72a2cc1222

+Mac = 5f1b8de0e3b07da6f9ce1a494be5712e54ac16080bb4f6d5373620d86d5ea5c7

+

+Count = 42

+Klen = 40

+Tlen = 32

+Key = d8b994bb8df02d7803ca2e09d601b918d6b5bde90b611bebf70e078d1ac7b152bc4c2528e60b70f6

+Msg = b31d11cb4f5c572ccf3405c65cbd218ee8abdc08b6c82e5d1da2baaf8980f7a9c29b915a718b0d43e000adae01b29342b29b28d53f63bf81281c76fa252f5d1e6896dbce224c4dfd4802ef0697140043d6bb21db5b84ffdbd001318937be64f52c76b5d06a875e8191a4957627cab1b8dc758fc3121334949cb9b303c6155153

+Mac = 8e44d685fa79395b4761cab89688e37509e69ad007a2794c8c0b4152b67036ea

+

+Count = 43

+Klen = 40

+Tlen = 32

+Key = a89bbaa86a339951ddcd37799e21b5d1688e4abedbc72daf7cc9b5adfe10be34c00a504196cc7bac

+Msg = 3ad17308cd259688d5b52c32d01a3b868bfaa4758bdaa5ceac34a1f908ca24e71a39224924d17f00cda4d4d50fdd716b50549e71cf5f271c42ea17d5becac32fd64e0a1b0717dc5f542af9442d44fb8f956e97b384d020458aca4cb0b6413b2ab637b5e73f9fb48cb06f22e6f2f6e3dca27016a272d89830ccfdcaf3b9d895c2

+Mac = 905d55da5d290d023f6940fcb904c50e70181c95000eb1e6a33aa01077692736

+

+Count = 44

+Klen = 40

+Tlen = 32

+Key = a9560fd61746d7f986b691f070c920256a535c21a64ab5a2bd771aeeab7119681bcc4761e68ee230

+Msg = 46eb5059055d3345c1ea84a4ebd2d7cc53361707eccd70e7cfd86bda83585bfe7c7ef937e1634b7e93f9ca7c6a42c357c2bffecc362c9e7eab6a488d91bd876b65376feb7a74819bfa88cf542736610fe763d6fa80c94ecca0f08855a05a485909fefc9e58f99e44fe7fdc55ab17779dcc08e9bc530e4a79b65274593a996671

+Mac = 9045dd3fa6e8f2ef7c57b03932d244186caa1bc1d4b694c47e1f2901d9eba193

+

+Count = 45

+Klen = 45

+Tlen = 16

+Key = f987eb83a3fd6d94ebf3626b7d34fec23ee06c63dfb4078cb38bcc97bd250fda0e286ecd4e64046a985bdfda8b

+Msg = 390a9dc2ea20221c5993c581892eb4b04364294fad919c451e83376531398a4c18ea808c334a910ae1083aa4979baa172f3ebf20823930e238630c88dfe5632b3b4042f6dd92e588f71529996fe840e13212a835cbc45ef434de4fa1ecb50fd14913cd481080875f43c07aa93a9dddd5f5e7ced6b1b88d42b9fce8f87f31f606

+Mac = 0b3b220ee7a4fdcb0d17a5c8b595b981

+

+Count = 46

+Klen = 45

+Tlen = 16

+Key = ef257132b7be124ea0886d587765e8e70357959cf39ebf621420c3f3c70e219fb3c5d349b7f2deb222fa26fa27

+Msg = f90768954cdcbd5705f9d318fca6591787af840a921fbd06f24b979ef612034f3f64c71cd2012c756c83f75d169f9bccf8a8ad52725498fe69c3927edfbdcf87c73cf478172ace3a1e6b446a181e8aba00209894a5d2db01001d2acac5b3fbdd3897d7f142df0b6dc4b9a1862bac8ea845202d185321ecd75f6046c9cf7af116

+Mac = a17d0e0f021184a3937222de81be627c

+

+Count = 47

+Klen = 45

+Tlen = 16

+Key = 2cb8e269726b75e3a6258541251f6e3c5184c5e6878decea51eae315dc656115acc224818ee9851ace474f51ab

+Msg = c1d80128fa208ba18bbb13424012ea651ee75e73f796e94c3b9aa9e911521040a605dd67c5254bfda9d088c60f9c68958f945b6f2b7e9ded2960ace21e42ff3e4c34f5322d930c955089538764d3225493c7089b119505aff4cdf93d46215d2f586d31d15af4353229ec5cce683e7e69d2874d3ece628a5944e97942b07992db

+Mac = da4571749322008e73dd436a13c5f11d

+

+Count = 48

+Klen = 45

+Tlen = 16

+Key = 1eea906ca11432655750a4e1af21eb1e03465c6d6f3b0fd8e20391077525d965fcf57d7edb1426ab1c3a42f2be

+Msg = f57ea84caaa2af18dd7efdca356b9625f9e70d3a803a9d31e95976460c0a5512af49570cfeea0f4f3581d69ea07f62a5c59d9b81e07ea9838f8f5231cf33838e271d2c9c23fc511e045e5fa2b6cebcbf0240a19c05b02cb1e105b1d2b23b5269c4c1cf0303209f0eb2de3fe060a2cafc1898ca91d9174d4445823c2f9d6ce92a

+Mac = 20cccc1ea0a8a89b3bc5fe3d5a9c2b24

+

+Count = 49

+Klen = 45

+Tlen = 16

+Key = b2f1adfbbde4dd9a9674166ee08c2f4341072475b9b80b1032ad4a3658b408c1aa1fe12ad1c5deaa3149a49ebf

+Msg = 33ca6eb7ec1091b406cf64495ccfa2169f47b3b590477d4073537c14c05015d51ba527b3869ae4ebd603df906323658b04cb11e13bc29b34ac69f18dd49f8958f7e3f5b05ab8b8ddb34e581bde5eb49dd15698d2d2b68fe7e8baf88d8f395cfcafcdff38cf34b59386f6f77333483655ee316f12bfeb00610d8cba9e59e637ca

+Mac = 5eeec5bd9583ce715d613d4c04a702f9

+

+Count = 50

+Klen = 45

+Tlen = 16

+Key = a2617206e2b382078fddb0af3743a69a5a7484eecfff6cd96288443bc21ab79f9bbf7d70ff4edd6a0a85704ec6

+Msg = 74c4ca4db1aa812b4d75852c6717146351e83299448ff84d52262ff99d991d97c74f9f64a90d78e44817e926049882491343373f2e3bb6d18a30f8e30acb16fab34d5ffb6073a736b79ce1a25b2df16a6335bba90c4d8072aac36a14e5f7659c2104319b3ea3b529824d9729d3a009cf2a04e660448efd399b25ad1394e3b285

+Mac = 64d5ad7697a29529ca3ca4ff65e7d735

+

+Count = 51

+Klen = 45

+Tlen = 16

+Key = 7af197b78a27038b0cec128001ce6bb7dc02c0258956f62ead678676301423f4f9329d48f881054e6adf12f358

+Msg = 68bb5b6289907589f8d91e46d44417ea80bf6be10245f52ba9f82211f371f810ad54571a5c277ffedc64d32447ccdd7d19ff91ba914ad6bc5ac0424c6a8c250d2b85caaed803f9642af1c098352474dd8cebf224ace82a33981edf53c04aa84927773b88c5cdeaa52baa6e0b65f4e4f024ad15881dc7fa78ac3a808dbd5588ae

+Mac = c4fdcba979357f639cc6d89e7970943a

+

+Count = 52

+Klen = 45

+Tlen = 16

+Key = 96ab1d64acad8cf69651c13e4eb42d7382e38019f3a927771ba6134c12a1bdbeb2206793fa35a4a3b09a1a8d4a

+Msg = 900e4152131d8c4dcc38a9e8647234dffc7ce88ecbbb65a8089d302c0a2efc95aee62852f9c58875fea368af02c1ce7cdfa3009ba62246c188bdf18ef7309cc00848b2a71cf531d9bfa1ad26d0c097cee3a8bff2e3a31849fc43bb14b7f62f5467dae83ac5d30ddfd7da7f351698163ecf332e7bca6862a82ada97a694a93db9

+Mac = ea411f749902bb0d2fa36e07e694da8c

+

+Count = 53

+Klen = 45

+Tlen = 16

+Key = 582c13a6c4d497e4edf69bde35beaababa1b068ed168af20b04cc2f06adf0478210ebfb27640cddb453af27790

+Msg = 7159ecc145a3f919044c851a4eca428279626e68cd8fa4c5f4a7f932acbc44f3bfc0bd3535edca94c86415e09815e22120dea0d869f7bd887d8dbf751fad91acb9641a43962514e2516a1c838e9e0575e73b72a72a30a423c18590d97141359e488c2c74d011810c89a6c189962f5487b7bf0d5c7701009da7d794e50a40d9d1

+Mac = 7a699c1ce4e323fe1b9ff6dea2038aa8

+

+Count = 54

+Klen = 45

+Tlen = 16

+Key = baf1d8aa12f5ea6264d122938593a8d677c82a37ebed7b43042680625e334c674f9f8a666c3a1bc54fca019698

+Msg = 939bfaab9f60369542928b1490894259c22706747f0c48215b08e1e59ed6f95a460728c74f3cdcf43198fb3dab75c9e4bf560bacfe1d6da3057f213f48b4c9ac0e739765bd1db2025839dc50462053a755f9f478fee8a626eb83f617b686ff0af4c78dab726c8264be5b7877e9f2a74a8cf9090109d4bd5213fdaa9571b2641b

+Mac = e2a380effe8de7d29948c5d9d7bb39a9

+

+Count = 55

+Klen = 45

+Tlen = 16

+Key = 735d943cc93f783050c7ccb09acc5a6f60af4efbc8919793e7c39038857ee00621d59fc535e7babcbc5998c5f0

+Msg = 29ba205089b12e8be5b422faf99c3d69aaca324eeb732db8e13c148245070dcc0b0c40ab412bde2039806247ea3917d194a4dab4a38c2121d6c63cb7a007dbf6cff9d1f66b8d1759e192147e60871bf784ad363e326122a3c3a99a89640dd9d2bca85a98d07ee21e2410c006232e53c4c10dce525f993825ef0cb76158c00d49

+Mac = 54e871ae687626fee5669ce20cc48041

+

+Count = 56

+Klen = 45

+Tlen = 16

+Key = c782597141b52135e34d240df67b9bdc274f2d41e6866e0f0da3a6fec241d3a09ea7f1960f9d7803fa7e2741a5

+Msg = f7321718bbd3b401fb5d72f2e8931a5ebb18d2a1ecd4f189a59912157607687c4aad51719a702da6e031708f4faaf668c1999779f121fc99ea6db0f1bf967a027dc7ebea5e9f33e23fd6390c5424ea6c1b5ed0338ee3e7449d36adf1dbec790578c90d086f266ebe0095f4f161c89d70b1afa6582de15d92a63d319d33d10b8e

+Mac = eb5b96d2f51d56464b95da4927ec5a64

+

+Count = 57

+Klen = 45

+Tlen = 16

+Key = 498584e364f632184bf26a253d0e81e146730963b785eac1d5c2b51dceec34e3f16a464c1dece9277a4e99d868

+Msg = cf25d619fb46bfbc39557914dda02d767ac511120d173b787743b35b3134cb943b33b36955534810720c2d6f6a261d26efd87fcfc2323b8426b8cda2965098cdb35e7c35802daa17d191b78601caf06be4aceecbfcfd6a48f01f52eb39ee1b201fec5a02e49c8ed93f2b40e10c554f4e4187858c24416dcbbbbf69bb84d8ff94

+Mac = 020d5aca34d8c7066ef5d8c9b3429669

+

+Count = 58

+Klen = 45

+Tlen = 16

+Key = e4298464a0457dcf98ef09cc00d92238d06d9a7574b46769c5773ec939a4639756f2bfe96dc833ed845c2c2a94

+Msg = e2a26ca137027066af856453d2a4adc4d5d0c9d5bf068f8acaa4b74d0c7b9c9e562541065d98924c17fcedec68bae1c5fed636127a7e2d9bd0e3082df047cd47a6574816bebc4fa36ded4a4cec47f271665f586f149729d2a7ef31c6e61e1fcf98e288baa4942ed477ff8159a672662fd41438d4d7780c9616713a023528199e

+Mac = 0d700ca9ffc418b29fc8e316acbc1abb

+

+Count = 59

+Klen = 45

+Tlen = 16

+Key = 28ae9e327911b76898af1fa0de56069e0d8b67bd2813828f87b88dc42a49a74d4ee30dc13e6f90ff6c6c4715c0

+Msg = 3b9a4948d67dc894d70c9ec37104a7147e22bcccb98983c22d648b21edcc986a06ec3bb8b263a648cee9bf388e36738f70204d7e6e0347e67865e01921da6ee59926b6cfdba2ba9c27e1d216b392fe0c9ea87b9b25b994ac19a4bbbe9077d8e6dc90e113b902ab97ca3a00e347e2f192f0056daa4574131ef8694597a36b7e73

+Mac = 6696e3812da4807f05b84a29ad9143ae

+

+Count = 60

+Klen = 45

+Tlen = 24

+Key = 9117cf3ce9f5c6e19752bf0b1cf86a78ce3adbba87dae1399a2a937b0b722ba3ff92183871e84e282774e10de4

+Msg = 935a3c27249dcf92aedac8dc76d22ff7742e5cee57711778c92afdcdf36e26b8448504ee6ee48e9eb25b9e495e9098d494ac4ddc4c541f499cdb652638b611b0353090ac125ff1fef8564a78419c57f038dd65951fe06e8377b986947b407579eec1a60a16f540db0931921027deb472e8296bc2d8fb4e4ddf2c27c0c6f49c3e

+Mac = 4cd095ce641f217f8b5f355152eed00b1d9fd721a08dc5a0

+

+Count = 61

+Klen = 45

+Tlen = 24

+Key = 363b32accfa593e454cc3ec83b9d775a0dd027b017ca2ff863c1fcb9e6215b5cfb2e8fea10eba2179f3bf88061

+Msg = 548564e5b7370426d575bbe8175b48c244dedcef3daf7252ec625fb777d02a5cb9ba9db0f2af1c5abd2f367d43107a3aaf218c77e20e78df6783452aa994ce9f635dcdd759e539c34649d2f11516fa0a53f6c6a0e58f5526f6a86040348d133e3cb51be252a3016a560ab6caf3346f3a1aa4b2f0affbb12f8218d8808083a240

+Mac = 646abbd426255d2e369b7ac9eb3c3af19c7185ecd28bd82c

+

+Count = 62

+Klen = 45

+Tlen = 24

+Key = 134a50abffc94d8540d7ec939b7a28b10916e505ad90843d08b4b51770d48c27beb2d8d548a1b0a50fe64ebb39

+Msg = dd802635f714060381d2ee1dfb50f2daacc637598965fa7158ead3eb15723bef95904dbd699dc99e054f5e19228d29696082792f30f1d565f1c8409359f7bb4517820cbcb6d5bee4c5596986354433bf02b597b1160065786a460a5f6e4a1254ab7feb9aa666ecbe081695ccfd1c19c2da861945023bb3930a8ebbb91b124806

+Mac = 3d731839c004ecef8ab60fafd811d0bbe6e306f7cc802bdd

+

+Count = 63

+Klen = 45

+Tlen = 24

+Key = c83ead9a131a1d7d126b88642221ece7d3a6ddd6016ecc6f40d089d47e1407bce3cd6068fc6918d91906a640f3

+Msg = e80a112713b2e0aafddfdb71c091141719e1501c1ce55ee526d4a804146a08bab28eddba76335d306f7c2d0278232f56b11b9b543074512df3806d5c19341c2c52d0af7a95c3eebc11c8af426556a7bc13377ffd32762afe647f77260882e2c8b118b0eed6293b55cb0d8ab8eff12451287d269e8cb49461611bedea481d0298

+Mac = 0a4f17a280f9017f1435cb8a11738fda4f14e3f222f06b86

+

+Count = 64

+Klen = 45

+Tlen = 24

+Key = 430a7dbd62b3b3cb6a4b2024bd796048ea60990d8222f94228a26093e88f59acca9e4fa2a616fe8e3992277b79

+Msg = 7e5d6e5e9491a965968a08adcbfbbdb19949f00903f7618270624e74aeae975036002079b2ed7755bc33b7a3e9a7ac0f066f3703a171f4c1cc0b1baf1d05a4f1f9c4af3d12c022eb2f38944c2c246a3d416b3ffc87568a3ab7447a7135a025774e11e254bef0f35176ff68519c583f64d2a3d09abb8c6915bb753562ff67620a

+Mac = 5007afb09312d144091f2b35618c26714bab8784d8be35b8

+

+Count = 65

+Klen = 45

+Tlen = 24

+Key = 4953408be3ddde42521eb625a37af0d2cf9ed184f5b627e5e7e0e824e8e11648b418e5c4c1b0204bc519c9e578

+Msg = fc0624c9d2fb237707df2c7bd9090b031329835432d99304c575f8691a2df35116584cf3650b9726d4ebb6d1fa3f9fa31e4a600455d7604beb15e73104a5e08583f2de222bc15e1f04094c450104c8c6df86292b508e428f591ae50bf940a6710b7be13d6d43ffc862e0f4bf357f0cd42086e8b36b25c338d82dfbdf3f26cc7c

+Mac = 08c4699d15dcaef9e99556ece73793e006c86d25c8be3fc7

+

+Count = 66

+Klen = 45

+Tlen = 24

+Key = da6d09682610d23a666ab7f63147a1f05db8b3cfc2c12de3415290b9067803ec09d5f53ddb4e04e69f031d2c56

+Msg = e35dc1d0e414ae0e586ebec9a44c1918d795db378a89177d0b521c8ebadcf6d2b2e73826ac5bf9d121db1db9af9cd6d7be7869e8633e3665854df3b63e6138a383ac400b0829eed85e2d0e325e3fdef3cb29cc5b334f82061640201a4b8bc8c59ed460e7be26930b578b199c7bda395646d18cfac263034608532b24a802b022

+Mac = 66a57a169d8d0ba263dd954b342919f4622592eed20c1981

+

+Count = 67

+Klen = 45

+Tlen = 24

+Key = 22f6c7ddb0e46ecf627aebd9ffad6f36682ef5c98791d25e82af8d333449f0b7ddee5f91181e69e40eaf9dd1ea

+Msg = dc4354ff557dfa58b17a0e38f63a61c20e0fd1eb6cac102cf37fa77913413a7735cb0dea592bc76cfdf7766541e1d4374a8cc9b9e49e30e76b17ded8ebe1e0f086a7055616eb9da814537feeb94451cd62b203fe39379dfe12623b069351553d9882442dd5e60273be3732bba38c60ec202b89a0b49eded7b009c5ec53ba21c8

+Mac = 7959e5367720f3af55ae91843397134032ee73de6a8db8ac

+

+Count = 68

+Klen = 45

+Tlen = 24

+Key = 2e2b999290c9b4a3760c4bf767ae44b28a8d12461552cd39095088291dafdf0df7c9cfbda2d4cbb53dc20b15f0

+Msg = 36581b498cc8b9ea79de28ca91a9cd0a87e30bcefe73b9e59c37d3a860016f2436dff37bc9a086879993c4c14d92b6614a3f01c7848e5d1a9484492f0c3efeac0734a16d04bfbc26f4d9ef4a9124e32cf22f80655cf460755ca583ad12a8444cd0e08be8e42e450fb137112f05683cb3a638f06f2eada83e1922e7e91d472a4b

+Mac = d39eefe024ce0b545d77ce327f0731c5581095ca734c21fb

+

+Count = 69

+Klen = 45

+Tlen = 24

+Key = 089aa37f72b2962c18fa4e9858ebac2fc1655ff41ba30715a76d9ac3a88f0740218b1a3ae18ba057bd99cb111d

+Msg = 45ae84fe11078713bc87c465e8d88f0b23e2804a6a3e19afebeeaa5a0f4c729db84107c6c8b7f838e251b0c174599d27f5fa92046baf6ad431fbef4df75bfaef0a79dbdbd6a2fae8a97abff4b9eeb078696bd95fc84d71195a9bbaeb1cf12989c2bdc7e643aed74b976ab9a7bf800e26079d1d04880276a4f035d4dc86f74893

+Mac = 3accf0eec5b26ea6c936323b42636e5899f4bfe7e7cbdf3a

+

+Count = 70

+Klen = 45

+Tlen = 24

+Key = 4e1ad1054c00b6cdd0267739c8c92994a4af4bf373ba066c48bcb483e38da0e58d5b0c59444279f3181c228ad5

+Msg = f6f83ff6ddf386bdf3af9409ef5cef16acb376182322f57b9729f76f0f04dba4098a2a526d55287dc023a9779a7c26a65a951087187564f3db5680a20c4e35ed2b2e1dd8c1ab2f4f96bb90b02342ac8a4aee86a5455f4c42dd8c2fa3dc6272cec4aec08fc13cc2bcdd40f1bc73f6a94ae6867f77922ad5ee0392ac7c6588b9d0

+Mac = 55adbc7d757e6904448ebdbae5a8773a1781f952f5bdeec0

+

+Count = 71

+Klen = 45

+Tlen = 24

+Key = 36e8128355a3dc7ab3fcb28fe93c8e695066334f6610b398737233626cbdf28717ae88cd70626c5d4c6cb9773c

+Msg = 25c04b857a224389e8a2a304e1bb8ee1b352e4cf5c3cb6e99f01fd9557df8bac0c1241dcc453834b1b9fe97d9639377835f2902647a8e6fa820db5d653a9f12d73233d65bbbc5d7f391ceef9835154f34b15f592344fa5a2e4dd607f5b913f358379a5e60864b96c69a11a40500ace9a1f427bdacb3ad927edfa6756169e5d0d

+Mac = 22950977bf0f3fb8f4fc53ad2ea2c91d936aa98d06ce067e

+

+Count = 72

+Klen = 45

+Tlen = 24

+Key = ff469d80d2dbef999d7d4815d123cf50ee9c2c23fa2e9aab2c7e3d4ce8afb7f5f0cef6a5d86e4f2eba8fd1392c

+Msg = 6c15d1686e680c5aee2941900dc9af9d2503b3b6a5623f5c1c04873c939dfd5320be8055b858d050457c468cf864c2b7e1b7e43ebd097ffe0fa14a1c7280d9312d9fccab087747705ec6a2c47491616c096566132ee365ee587c999cb478b550ba3d1e3105ce57016292bcfd27577405c696a1fda1f8d973201ada82018d79f6

+Mac = 646031963fc8bf827a30924763dca11b589358e7029daf1b

+

+Count = 73

+Klen = 45

+Tlen = 24

+Key = 93fd8e208a1d6052388611beb9f047fe91e33afd4bcd74ae6152d5fe5ce3d9073c921e861a24208f0c68477f49

+Msg = b99a110bee03f440f15145e28d32c340297fb810efcc36a82e3da171fc9b6d981fa629062eadbd93f35df07614d72d00f205868bd22df9ad3bc6f2b19e8b12473dcf2f7a45109ce33dceaa1ca49d6e78d67ac5f1305b9662740a57f76f32d3e1d9ba2a4e7c531998994d7bbc87af100f9d867e2c527d9531a3aed72bb5b838ce

+Mac = 00aafb9109999ccf61f6689b7405ad2fa54129c3bc4e67b8

+

+Count = 74

+Klen = 45

+Tlen = 24

+Key = f189baeeec507e945f0c4d628a0d0548eedfd254b11faf25458e29a3456466ed9fe76793f83b8a064c7c534cd5

+Msg = c821be1cce09579ea899899d24f8329994c2c839cf0084e27857c688837fb5c4f4f72527eaf7bfcfdda75b37248eb153ba4d31dd418d2fea473643c0c9e1f0ebf591838e349d3ef868f1b67772777a71f8cff5b0654696fe31062ef2628a99095355a0f8b4e41e41d2e162051899d519d6b0dc5c42130047bd2f4dc55761f745

+Mac = 1c8b29577349cf99f80ca11477f401f61e0b1a4d6974fc61

+

+Count = 75

+Klen = 45

+Tlen = 32

+Key = b763263dc4fc62b227cd3f6b4e9e358c21ca036ce396ab9259c1bedd2f5cd90297dc703c336eca3e358a4d6dc5

+Msg = 53cb09d0a788e4466d01588df6945d8728d9363f76cd012a10308dad562b6be093364892e8397a8d86f1d81a2096cfc8a1bbb26a1a75525ffebfcf16911dadd09e802aa8686acfd1e4524620254a6bca18dfa56e71417756e5a452fa9ae5aec5dc71591c11630e9defec49a4ecf85a14f60eb854657899972ea5bf6159cb9547

+Mac = 737301dea93db6bcbadd7bf796693961317ca680b380416f12f466f06526b36b

+

+Count = 76

+Klen = 45

+Tlen = 32

+Key = 9fe42dfac92a4a136fa7c9f6e331b5d3a61aa73035b53a8d2517be43721b31b215a96b9bd43798cb5e8febfa97

+Msg = f9660fb784c14b5fbec280526a69c2294fba12aea163789bbe9f52a51b5aebb97d964f866c0d5e3be41820924fcf580db0725c7f210823cf7f45a0f964b14e5555070d1c3ddb2c281a80c7fbf72953031a4e771d7e521d578462cafae5a02ac8eb81f082e173ddadc8c41d964bbfda94f5180c8da28a8ebb33be77b0866fa798

+Mac = 7786c155d10c741b63ec650b7b1aa3bfd71ac71881ad06ae98fb082f17e0caa0

+

+Count = 77

+Klen = 45

+Tlen = 32

+Key = 98fff7b5f77326c24471bb9c317490be1febad28e2e825afc41c3b97cc03c963405ce3ec68dcb7b19523b76e62

+Msg = 64a78a4d6fb8ff3813df8dc022faaf4415e4df2949e16467683c6c47242e5a6b2c02610e5877528d2766b2266ca41000442a956c4b73dd6b10260570c6f506673cc541f50f0f5b021e864a753efab03e2f7c689acfc35f928ecea6c522cbc5687c38518bfa48c19ede887d33ffc23806be21803a3c9793e5ca7c75cfa1783f77

+Mac = c02c6022ee0de099e3027850be95a29ce800118ed3a97757dd8ab9e60f69a005

+

+Count = 78

+Klen = 45

+Tlen = 32

+Key = 8d649e5ccbb8bb0032cdddbbe44ed0b5bbbde78a30c0f8437bbca985fca5ea08da15c34bea9b5086d2550ae16e

+Msg = a7734a0739d51af0ac2c4039dfafa86f36fc06c2355d0f654d4ae938f52fe0a5fd6f5ac71fa80dd2d8396faf76016ee6716a62c1fea640afe23910e684b8a14c47d07b98168915b441cc48668724043074c14275edc239dc09b4d5fa2255652b2c9e94c046019a608ff0b3a83b9ed015e6098d24273864b769c120bbf68f9408

+Mac = 13e0834e4dd72a2ef7872249bf895da4432329c6e8ade8665d702ba33bb677b0

+

+Count = 79

+Klen = 45

+Tlen = 32

+Key = 57958d7e4c73fa606ef405d77ea4977ac96b8813fc1210483a037e7b6c502ceed8f7b22bf6655aa37e38d495c6

+Msg = 0b9a58cd96351a135c559d17e82ede3434a0caf0befef5dfdf138ec5586793fb2ebe4114b9e2cfbff7a25bef261b253a9136fb7faa72f4cc59e4617f947c01ab308974bdf67ff25ffaf83d9c28fad44520786a94441b96100e42ccb0a8478c43b604d90f7695edb90c602b651753551d886dff77b4804472a835b7a2bc509c8d

+Mac = cd251e66c421bad1b37cfebfa3c04ef30b8be4e5526b10fc48fd5bc5d6f04bb4

+

+Count = 80

+Klen = 45

+Tlen = 32

+Key = 6d32ba0c063774bf8d0621b208d72095f684faa33ca6f3dc62fbdf95ff0c3733720c6c34d3027b6f2a2bc29cde

+Msg = e5804b099ee4b351843adb9c9e3c231773256e6a2070d697a9e29e258dca677f9d88a7970d4c58cecc20ed1811298a5b37297419ca49c74fe216679dafc938a656cb92bafb78efb31f24e71c2d5b5f994f6dfd82862adfd2faeb8c408fd22aabb852f2bb90f1e2c6274cb1f0195c089766f9efee7d9c86e79a69f557526da555

+Mac = 9d283d8e8e473a16162d186e96355b1885370e83954dbd08622dbe64f0aac695

+

+Count = 81

+Klen = 45

+Tlen = 32

+Key = 6b97478fdafd3a85d0d9b339971a70c2fd24d542abd3e20eb2bd630f67b86668719df258204bf66201ee80acaf

+Msg = 8b1d4523b6e457f856e5f09875d389eb6587223e53477ba01f49878c6c731ec9f365f28f1cb9c4ebcf89d8648732a6dfa958d2c0152b5e52fae81f69eea26d463e421fba82cdb78f75e5d92304930256a54376a6ea107a995642c45c6f1530a914bdb4ed11a696abf100dc1b147b0518014ff639fc80373ddc605fac1755cdbb

+Mac = 6ab8f69868b4c87fdec9a031045b34b66660212f687a83d561bc4f9caad59fff

+

+Count = 82

+Klen = 45

+Tlen = 32

+Key = 89c77d79de98df18f0cf29a9316d6dc46b61eb7af7f1e2de2f5ca6c525bef3c996338194193fd85b9c6e66a811

+Msg = ff8662e9af3a38d3efc0143138fa619a57d569f61e29b3895ae08f2d055befdebc11787c7379d9cd672b5cc25442bafbe804348c78c5df02f30840a114e818f0dbb681783de43ac81b2140bc71c69effd07185cf0eef9f003c60a144d89520a944bda563774103ccf3ece8a9f64fb3aff564854646719b8c1d2fdb9db92cac12

+Mac = 4746e6f151caf29b3534b2f493f7cc1308fa119116d251481572a1b53a8a1b3a

+

+Count = 83

+Klen = 45

+Tlen = 32

+Key = 08cce7d7f3ccea0212cf0299f27f3d3f393a97d3dd71caf1954e67bc8d9a26db5edd7ac23dc7693372ce9b040d

+Msg = 33ab861f089bac0e5c886f66adc568ae7ba331655a371de7475e269138ff2725f7904c702fdcc62ac703c31d70c29d8a7af451c8ec59342ed397e133da7e76d41b90003635c1338d9f7b5f3c3ce59f3e2f6554c4f064d11f9f5158e199e8463f4ab48aba42d25bff8af92b0b38b7d69241fd20a28fde5e84539473e39dc4fe2f

+Mac = 2c723282159ceabc5b367b95cd807f249f1dff7f9ebf5ba179a43081454e1b05

+

+Count = 84

+Klen = 45

+Tlen = 32

+Key = 1a2e86f6ab2db235e5d7f00cf438680fe5b442dcb1f8c3ae7730b92f097a1a8eaa9be8d216f2576ec3aa321567

+Msg = 5a2240f64fc704ce9f8ed33d019e4155cb46747a659e3421fe6b42d67f44eb84bdf3dcf1f31e38886f27e85b8b503368df238e1bb511b515bd59fa2c032bddb31d0ddefba97f8f19f7daedea027ef055a52c61d00bb1ec2668c57677e632b180e339ed1c5931310b9d718af34d70a3a4832b96a04fc702db65785ebf12a18c73

+Mac = 22de07c3055a8935b52bb2c85a9a6b7ffd4038b5db4069c07e9e86ee1b171d25

+

+Count = 85

+Klen = 45

+Tlen = 32

+Key = 3270b4e48d575f0312659a6202adbc4e877d69298de4090ed47278b4433fff95802e844fbd73fd4ad5532b9b97

+Msg = f407f815a33cd450c0b72a378f00762788f91bc44f09f93de67a41d2222088935b3c1b6a689f935bca13a90b28f64b7ffc28ef278b28271b1a7975a45f4b61fe3657ca5c950b7a2dc2e7fd9ec327b26017a222aba3f29183efd5d33a92d36136eb21acf412c6b14d0efccef849d9d451412e5d587fb060fdcd55029ba401afc2

+Mac = dd1a8105ab753d83d90ab39adbc748940fefda05bedea7eeebdbdf54b02d9ae1

+

+Count = 86

+Klen = 45

+Tlen = 32

+Key = c704d5793539ef3909bdaa7c29e9c0a0c441814c37bcd062325f6e2e16107be4a2aa3949cf4d14b0f8f8df283e

+Msg = dbb84fef130f929805b0876cb4646a046330bc33ab1cf1e9ca3869573ee1a1549341ab007915dba719b3c4e8a94b62163e6d99dee2cbde2ae74135467b125b417c7544978d50c80c694399db77e878109f59a8335df3a326135a0d50a4bde6fc3e5c03fb7747bf919c68ee8f45c312bc2dfdd279411ba7a5f78dd9bfe16baa4a

+Mac = 441c7fdaa40e50bf1eba073509769b1c0942f3a16e1e183435819d3b5f8538cd

+

+Count = 87

+Klen = 45

+Tlen = 32

+Key = 5b2cced47045bca47512fe226c1f415ef127a209bf885b8a76f5a24f9c6bce61e166bc3ca75471ddc14a001c7b

+Msg = 1de00288a6e93930070183de9d9ed0ce86f6cc0f64b7bedb5df8af24676fd06fc2e516e5c5e827a7dec07963d5a4b825502d696f9c0ace8baaf6092058e78304f2888f51f9ea4bbb2376c720a2276a61a9f691712d9578abe95f5e69a490e4d2b6b1b7f3c9576e12dd0db63e8f8fac2b9a398a3d9ebe86e3201df726d2d1ba82

+Mac = 15c62ce7a3bfd5b3b3856d6f47cb19bb7030dc469e35a27807511f81ea83091c

+

+Count = 88

+Klen = 45

+Tlen = 32

+Key = 0d4dd35f90f0a10d7d8030e9919446f3d5e2532472bcef0cc5db84bab65c48dc46086f2768d89ef912b8a23d93

+Msg = 2937aa2ff7c942bf7dcfa670154e988c28177391969db4995804ba1a647acacfd0ca56f63b2e7fbc6965d8f62d066d118c14044c1fd2a224b9d951104a67216f03fa6dbfbb1e5f0f9283b6b7d452c74620c1c2bcc9e637fa7cc8d97623bc81330aef76f1403feba1414fc91bd1daaf132b4737495b7e7c01e9fbd9b3b720f303

+Mac = d5596bcc39af2782df1cd9fc8c37a8f96789275422f511280971d8429a8cb661

+

+Count = 89

+Klen = 45

+Tlen = 32

+Key = 5ef946b64ff80e4df8ee98a357f07c825c3acc434d0f994069c0b88ccc0ac5e192a469d93f19d9615fd49f6b69

+Msg = dfa3b06eb1e30b47ad9f0bf0f441fcd94856ca8b1f4cb88cf6795582e860ad9c7f30bc2eca8e289bb0942f78831addeed934836097fb664e4e91b47acb5fbc49e9a15d6baa25bfbe864f42700361b46586f9c7d869dcc2444df17685b291743ac5fe7d6f78303a79d8d82d209c9fe804f9ae7d39be7435359ca385ecc57c3d39

+Mac = 223dfaf583140a769c805c33f1f30bfb2f0926b088f55439dfeb4f5a9ceeedf1

+

+Count = 90

+Klen = 64

+Tlen = 16

+Key = 79f87734c46c5a11d86aedead22ed3ea01577ad4ecdf42969650e12000350676f0cf3c04f10a11339baf783914db6d35d7b0d77bb44ab22c18f56d0b8f9d918b

+Msg = 509a0a45a1512b5072474b297f9c1a8c24890016144468504e245fe94d065d437fef6232f9f34500695549b44ceff29361d417e85d353701e081117aa8d06ebe058242ca8c23f3341092f96cce63a743e88148a915186ebb96b287fd6ca0b1e3c89bd097c3abddf64f4881db6dbfe2a1a1d8bde3a3b6b58658feeafa003ccebc

+Mac = b5b0c43028e81628dce82517fa36aa29

+

+Count = 91

+Klen = 64

+Tlen = 16

+Key = eae255d9e083268f896429ce36645502aff9dbeaca7159f93c7d51fdaeefdbfe14c396693a5ce46e9f1157a687e866f94ca165bff5f7b425092236d2a6a004cb

+Msg = c28f6a09ce076ef270458967fe19d46e6f6b2cbeb6362bdc4fd55684177e984a600cf0814501665c3bcb4353e94681c83a8381ebb0c8fcdbfbd73c0eca738cf2e121edd46b2c0a0292eb6e2c4e46f5107a7780572d0eedb9473847684a4039ac6c56c9caea90432b9e2e72bad422168e5ad093c9d612e7c05c7fde5c40ed89c0

+Mac = b84003c417a472fd2935341962744330

+

+Count = 92

+Klen = 64

+Tlen = 16

+Key = 42521bc3f168b2b3434cb4e44d92f526b41c5f10bfe0a0e6b0eb20c055a636e9da599b86e1ed1f78d4f69a837af126afc9c98beefca1fb00e5cd00948321b2b0

+Msg = 5a600c468ec22e42af5ba93eb79452864ebe469a86f83632c85201800f3288b553f7bec649ddfe704920a27a8f65d13aa755985a238b3cdc8fb0cf5ca7e40295c7603a27a25ae69837290f9801aa30896ee2493e93e52f031ef626de8cefb1159ce4a9f003038dc061be1920742d1a7b8bad80cf3eceb5b05d6c2d8f261b3f3c

+Mac = e1c3c6d90820511c8d685c73bb757ee2

+

+Count = 93

+Klen = 64

+Tlen = 16

+Key = 81b5f12a64f3c347902549a1fabd39ea1d9efeabed3851880df40dc541d23f0926507d62218f7a8a95b1d76959853bda6966a5b2db6001ff1595fa8d3edf10af

+Msg = 04369f9592b00626d15b0a4b0ee2f92ba0d086c16d016ce7b05654b4f9adf90875118a656f2d50011707901982ebb387f3a4a49759f37a17183957ad0c778f6ecb780dab2b4df30e05fa81e6386f38c0f0ba3f37287a050d6d97287ae53096c391d5f20fcff73977239ca55c3657d1fd1f781f48e28057f136d890c28cc25432

+Mac = 5f840796e0d35c807b3d715727432e68

+

+Count = 94

+Klen = 64

+Tlen = 16

+Key = 34f5d28d58364da4b95a48c07e01b0a99c5ace173ff2c9216bc96df8e3ab2ad54abd60308857da336f11986e9f21d1cca6e438c66cba7fd6cf17192f8ad745ab

+Msg = 59a6b0317f130f6248e746e396cc684b32b9a0eabf15c50bec1f2f76ee8dc9392e7368a83e675ba312e344176deb26c799efbe4d5bf2175b26ec59478f6de1c7018497f9b2df7ca6d53383c712dfa24833cc280d209751330df21898f2474c9d3b9fe62ac1c39af3faa0acfa6cf0055568178632f44b9c1809f81570ff633243

+Mac = 5a33b8f7cdba999ed61fab3869b8f1e9

+

+Count = 95

+Klen = 64

+Tlen = 16

+Key = cec8280c87170f1d4836cdd77abb2a34410b8d5351d96d1a03e90920a71a59ca1ca344b49f9d1352e1c226d75c74e555e601fa268725be8c88d0f094cc2aad40

+Msg = 952e93853e9579c2fe353dc83203d34f04963fd64880a095a4de6eb4f42e00baec615148ff31030780b5a4df0833316a1735d8a8fedf02f4fc7f9136a766665b8df727021cfd3f78bf4226e74a5de2ca98cbcea472419af2b341935eaaec2435c0179d1b5ba034fe02024a48c128ef59cf7fa7346e4f6e78134bfb93c7674232

+Mac = aedb7ea80734d1a65723da4f3ba18f86

+

+Count = 96

+Klen = 64

+Tlen = 16

+Key = 9f65a426106db99dcb2130be14839241d4a92c8becc108d2c9521b8238c5c0df7c2365ec9f20848c0559d6e847dac3103ee31ce55dec0c3644e64c2993c497dd

+Msg = 7d3d9286c1fa057175c33c556d2c4b87fe46d1b764727d6b6172d1ac27c626fe7835f1960caa44c8334198bfbba2c970148e62d0b2b71b45b3d5a05bc2f694b93b15d6538fef03e1eb123c8f143729f696d13d4b1de63cd6231efba6cb1a68840d06c925147249a4e45db02f40937200cb3aeb8e6da7e905f8766bf40cd9a846

+Mac = 9f19ab5e517e884cc1b1d3124ec9ca50

+

+Count = 97

+Klen = 64

+Tlen = 16

+Key = 2edc66bcca9f99ee1366992fd0f0f954d3d4c5ca2115c2d053f6f8e33c0f6e7acca135f43427a7cf4b2df11a3165cf2d32f89797ed1a7958b5e105513757edf8

+Msg = 188a7fb0222c9d8e19d057ab22d71e0356c4f8d1184179aea663eefcef2edb85a55ca860925a97152f94f90073f2a2fbe9a29a370519156bb854a5314264afac48291c6f265e509a86d5604632047f2426c1ba60ea4ae6cc1e88d63a5695d129297b42a5853fb268451ef44506169fc736a8c2156dddd2180187e7e0d5c92844

+Mac = 03243d10c48609e8f4182638c23516a2

+

+Count = 98

+Klen = 64

+Tlen = 16

+Key = f987eb83a3fd6d94ebf3626b7d34fec23ee06c63dfb4078cb38bcc97bd250fda0e286ecd4e64046a985bdfda8b01b34d9dc0cf2ab3bf5168ef64963bc918f5f4

+Msg = e105ff11481159c52baef5de550898214e1d9a90da2d9083c36b29fad8f956323613ae76c68b103807758a600e2379e4cb54f2998da86149c857700517232bbc7d8b610df0424d5a18df751e54d6d380fea73328f055dc51461a721f66591b333ed4e17ecd1f5852e55580bf2f09ec1c6f7f24e4091c49c4c51cf7f1cf836fbf

+Mac = 03364863690c439b306a2967daa2418c

+

+Count = 99

+Klen = 64

+Tlen = 16

+Key = 5a35a2909aadd278b810b101ed44e1548ddaf9ba8c882bb142d9243f6b23348672baaf99ef63938e6e0b6ad472b972c7b9c2fc82c23c12f48db45c37a224451c

+Msg = ba527305604ef5581850b222fd192e6260c3f20eb30d8f04a5f4e1438f83915b0febdd22f2d69ca958f97c6e12e88fd34f2f06cf789e3ce458e4f6518060e988ea337ce2dc9ad0920f7bfdd8113d9f77e8dd9268f83ef9d027c185303e16f4db9252d7aee54199fb87fdbdc6c0bf673473f61e40fb96d0b059b31647914eba3d

+Mac = d360c381d230d21cf828782ae5e389f1

+

+Count = 100

+Klen = 64

+Tlen = 16

+Key = 96da746779ee441651fb9ccd2da621eff4091111f8fb795cce92a8335ee7e31636195ac724955bab0394c672d5e5c1fb12ecac7140eb58bbc4807313f86f47f4

+Msg = 198b79d09a3dfdb5d41043e679baba6592f3c751cd7cbb0d1860029f6e7a9c56f137d2b03a9d217aed8c7b399044afc99d282544d5c2ce26d8065baef3dbad8739d78da7d54a9e789e7f8f35ec3e9597aa9519b2add9ae1944e7454911afa44517f4147d134d5af41070e9a236af5618e3c30c62fdc94131868a293a70ff69d9

+Mac = 3df86c710d782309023d65fccdb91db4

+

+Count = 101

+Klen = 64

+Tlen = 16

+Key = 43aae2621459a8d5b5cc919445f3dabc0165d136ba01e58187d5ffb2b73f15b90951fce5207a7dab3163aca3ff1875d309687830018e17628111ccc8fae8c0bc

+Msg = bac0889281fe55dae17c45079bc44f8976508f5a92953c26f940daae77bfb16eac037d7d5f8467b615863415e29bbd63806a9f169eae33737a82c1f5b2dbf0f25856817c44343d86aea22c47fc3e08e4d8d8f14986756257749a644513c70240e641fc55d914c091d35995678eb51a51a722efbaf1f2b21c0f112d66428acda0

+Mac = 83467cdf51f59916b492c5aba554c606

+

+Count = 102

+Klen = 64

+Tlen = 16

+Key = fa235ef9f48a666e2e55dbc448ef934de0d22ef5c0ecedc75548c8b364eaba8ef8fb605a9f26c2c8d54171fbc130d28f1f06b9da7e6e3971ab4abbee6d994ef1

+Msg = da32314c22dde556d886ce2dde1291f1a4c1ba14aaa95b694063f57e91049c2cdf4e576c1028c66c6a4c07e39b40d9a1fc87026a1618ef04660f9b8f5da3b215ab58f562bd75e01684b98af8794ace8ddeeea8ea467de1c65797efd3cf92174fc5b6d4d532ad7c7aaf3521158018b5ded25e723b41c179d69d61baf3eeb91301

+Mac = 0d88a7f3a8369888b4c3223499412256

+

+Count = 103

+Klen = 64

+Tlen = 16

+Key = bf248c7c6101e6e0281c8955e5cc028d98e5688d3f36d754f05620bd26a1bfa6597d0e52d1e2b80cbb196f0d7dc3e2a0471ee984ea840392ee34039fde5506a4

+Msg = 557f845dc8962ae11561f63ff9f7a9fd73ad5da479f1d1c3e9760236c292fba894e4ed5735398217b6b06f9a951d49ee34ac99478ac732ff1939c2db2093a89011ce0586453316dbef78c1ab4f2c6d8f285517637357a24d55176ffa4f612e2bb587f471614b8d34a8ff13fa8debbfe635ef007f9b6acab4855a311cb7c43682

+Mac = 84ac389ad6e42798a97784941bb76fa4

+

+Count = 104

+Klen = 64

+Tlen = 16

+Key = 8b4c9c2783240e19128fcc2754c47d68d6acb3365999cd85d3351c74b7b94422765fe5c346197bf3228383491216e030ac9f7cf2dbf03216dfd6ecec954b0866

+Msg = dac416df793ee5fbca992682974a0c2cca63eb49805df0a75e1410b628133eea8f12e1614bbd85c66ab7d075e8dfb8df7fd2f430c0b1b03063248567dc9ea8852fe3620104c8c0fffe3a8b7749827a9472c7a75a7cd5408c301d7fcdb4fcdc055f408106cce8fe702d2b3ed1e2bcb9114b4dec0eda5206836c07e52ed9b44032

+Mac = fc38c3bddbc320bf7373834f3c83ac67

+

+Count = 105

+Klen = 64

+Tlen = 24

+Key = a5fd99ca57c1fec8159a798792426d296fa1b17d539241de3dea335819b7ed0d92c596d72867ca2f8273924e058f9391a5ab8522fbcfe7d59817f1509afccb6f

+Msg = 5cf3a5202df8706f6bff5bf2590de37c902c7ffd4e6c8ea611288e4e658a8e15fa51e647f9d22583983d4b1ced2239bfff346556234cd22d86b140530696a04446e4cac4013a720e9e32582e05e7c0acb2b4226a073e22cfe7b4c2258055d7406833ba61ec373f5aa566ebf24c62618ace341e01a34866d65cb97e8c7cd01c53

+Mac = 2c2bc8c87017f204c958abd9aab2beb6ac67781d8d9d804c

+

+Count = 106

+Klen = 64

+Tlen = 24

+Key = 30bc3e321a8978e235fa1b550064b82eaa0c107525eacc827cad6f1d66ff88e31b092cec663aa3aafc4462140c68390417f4cede020a4a736aa2522537d2394b

+Msg = c1263be423e7888eaceccfef26f0b5aaefe03f3ce732dde98c78a7f66435e6199cefd62eee85aa2bc8c3d156aa3478b6cf3750c71155917207d23f3b7082acbdd4de3e536857721933eb21136ff502ab324971614d806ebe7491e989a0a23d3eb21dfabc5905e73e358b478c3ddc5c735e3e2a72645b7db61edc2d49bd3aa186

+Mac = d722b57c48128b37ba38770cbf4660697757bab95c00c484

+

+Count = 107

+Klen = 64

+Tlen = 24

+Key = c189ce5334f670ed2815607ba9549f07682e11f70259dee3854019a431b3a0ad7bdd439f58772817b73c6dca4f9d10d59cb50c4e247fc51fff47a614965e0932

+Msg = a5deb712fc3bb9fbaf1398698b5696600fcd61ac68489f26a0f8ca32121a3e8c21d5904529662208b67af4a2f4dbbdc1674f3bfcdcbec714a0922c7aef63b911afd495345fb853fb4a7ac6ba00bb17cb063c148ecdffcbade1a958a5632bfb82b9a16ee9847a755cd2dab6ba963ccb05555c96682154d479cb05f5bb55b82c67

+Mac = 3d6305ad9dcb3a50105b92f331009a3cb03ca7ec36882fcc

+

+Count = 108

+Klen = 64

+Tlen = 24

+Key = 085ecb69492deaa704e25aeeabb7b7795fdcc807b3255f2fb30081f425a9c7990ea104b7785c288c733965965ab8906057e8c99d291e5e7325eced197b51c9a4

+Msg = 2dac1599844d82a79c7cd1669a1c6976267f655167872f8b2e0c5059717e8651fccc1770638466613b3bc4fc892f880e7b2b625856abecdab0418251df3754feb176b9a95ea6c7e6ba972097afe00eb2ebc6d344d65f3ab6c7f7724f77b21cfbb673a34b5cfdccbc83588e3cf37723eade175f1eceea41a9dbf5c85e213607d1

+Mac = 35fa859b3e4a793b2329652cc61f9f68816fed67fa402e1b

+

+Count = 109

+Klen = 64

+Tlen = 24

+Key = f5a07e3741f03174c6efcb1f9f186d1f233b367073c56e814f4204db2e203b048db6a0a387853fe4a6bd161ef903cab46671993942de90d71f60fef1e5102807

+Msg = 067ef2ee1e95ca546882e2a9d441dc563235198efeb52be97dc7894f092b8718a89c8571e4526602d7cb44ce86cb615a70a2611166adb7e79c1f5e3d0101c904cc781c2657479c21319464f56fef5b41429062a9cfe0d27a3a3c259104f5f379989b21d3207b55fb9d66ace837b4b054d189841de15762ec7fa44814bc0eedbd

+Mac = aaed7dbe184423f0b4c9ff72dcf4557ec123b49682fc24c3

+

+Count = 110

+Klen = 64

+Tlen = 24

+Key = 887c37f1f09920ba51885934af50a4b065e9e2160e971ed8a676cd26ed5554610cc7cbd17b78019a22bec0ecbf70527b87fb432f10b2691c6e6622b49d37dd3b

+Msg = d6fc8b4b72b7eea80b1c6f53c11a52510f920527feb8f95598bdb120a0ab1994809018ca83de68674412a6656794a51686de08656ee110608ca4b2f3a22fedf6bea75a6b6dba05002c3e7bdc1f1424970653d38a6ca29c4a21e6e66feb1ec09a798a79b698136a7daae7173e536477de75378f1e5fc5461b41ca741be33f3c86

+Mac = 51ac4d2b5923a5df8ec48c14ec514a0629f8e385a9ea4985

+

+Count = 111

+Klen = 64

+Tlen = 24

+Key = e9061ef9b298e47af4bfe35903d22e2ea4cedb85c53e5ae16b5e0501eb7ff7615dad22044e909c71b5903afc283c604650ed17079ba6600b303fc97b28c33d5e

+Msg = 5e873df5f280723dadd718875684592a7b2c56916646bd874d7c99b1c9546f5c890f867a48d286e6fc0345f051f6dd1555c9020e758c920da8a56e43ea7389a5ec323ef00a1fe7ea7ddcabebd215979d9a64f0006472c8b1e860d06b85656dceeeb80e5f20b0bcd19729f383c12bb049b3c6cb6f1b4087fb757368338270445f

+Mac = 20dc2be5c7f0b2fa8eaf026c152a09cadbdb82e52538b393

+

+Count = 112

+Klen = 64

+Tlen = 24

+Key = 78bab2c40d60d0770c5d2bafc455265942b0d932174afe255b6c0ed4f1fca7750df031dff408c1e403bd3de2f375c2955bf8422f762772ab27ece35e3a6d6ecf

+Msg = c2925d3d09cfab81f32f769d61dad5a03aec0423be785a7417cd7bf331f7cfbbcc893385d09aeecae00ee628311714079dfa357cf317c26e922423f736b9200c111198611e0f7587b27fdf57549fb094cedd28cc84e3e37f05d10784e0c9c2a7b9b1f4979b342800900ac9f46f7a938ff61d47db18e4a3f1985c9161d7319fd4

+Mac = da713e318a9e5b4b4f1dfe0a2af0837d70fde54442f264ff

+

+Count = 113

+Klen = 64

+Tlen = 24

+Key = a2f1635f239f03be853b26aee7b8035a5f267bf0ebd7a8ebabc0b8984d21fcd3c8693c124d544ea67a56e63dd23cb0aa6a119ce9e43e7a5da1f6c65d33d1c5ef

+Msg = 5c32698a0a56b9aabd41270ec1e475c5f965bdd07366a7843f8adf2f8235c7fec694691e94deaf2245d9d6a5159f203079a2c95eb3ee3d3da3ae88f8e0f20eb307af7cb75307fecf6ecbb3f1873f5e21a51d5e933bdce010fc31539af0d71c53c88c8b9b6f5c0e79e121a53c404b966225dd62b834b8f7c3f31c275fdc6c59a6

+Mac = 5ebf7b7d25b0ff498322e4264bda56f7512e9d4ce3c9d51e

+

+Count = 114

+Klen = 64

+Tlen = 24

+Key = 69f533836771a3cc0087fc2fce7c42318f24c76acbf8f139b8693db65a7484e8ee777e3989438426fd729a3bfcfbac3f800318ac69f66d6268d7729b1dd46b22

+Msg = 70901c61c43a67e647b5274e55fd3a934b0b8790eba58470027afc67476e0fa087337a76ff1918e60a27a944fc6ad32e4d8d66bffaaae404286041b40a26e71b06defd5813aee9c8660b13c24d16ec855b2c306ec5b8686f0c4cb2bcdcf1c4c735bb2f6fc8a0e174a489ee2f11aa9080bc0f6c0715781697f667d8e78577af8b

+Mac = 4f0a78dbbe767218eaeac0400656c4b4b23f908a9e7f4708

+

+Count = 115

+Klen = 64

+Tlen = 24

+Key = 2daf08cdc015bf361f66be9cfcdd6aa7f1003db66fc95e23f70475c88cf8bdc268495b74ee1deecfe07e67d1d2001b4cdea316e99afab26c478d693a4b7de818

+Msg = a85ee973c99d8da60d745894990b24b9cad7e450be0e4369175e883bfbdebdbb5f45106e865a797bc4ab9d048882f3b69a15259fa0fdb940e7e9f0e46094ee30e9f41cfaceb5cb5f90e51a0fe5f119ecffd02ed4117eb8ba10acf3fcb7b61cf0cdd5d5c0aa96ca79f88a955eb73fdf828370c8961a7989ff190d582c062b8d26

+Mac = e6e7baded94fd4042c2d3ccb586d8ca983e8033e4ccffc68

+

+Count = 116

+Klen = 64

+Tlen = 24

+Key = 65e35c88ebfc4c425d0362c5cd125ba40a0aa76516347840da281a2419ee82fba364292fcbdf1b6d1a154aa9453b29625d6a76274647575a6ae3a934aee09509

+Msg = 7ba8ff928460a47c78aa938519d33978d7172ba2975c0d2bb421b2a643b184e69c9c2713166759fe11831db23a7c184c0a733b0c90cea2ab712ebcef2da1ad7ea31af0f0d81e4127f4bfbae38dce3c91284d1064fd23cea7fb137e520ceffedb9a09a44e52eb23a02848b3419b326cf03a8cf3d367c359c75bb940f56a0240a6

+Mac = d9eafa06a75b5b671be1b1f1e6296f17f71ff467417b7837

+

+Count = 117

+Klen = 64

+Tlen = 24

+Key = 84d5824f5b0deb22f4476578e8d0dd192bdb87f93019236a54897e9079923b15f14fd31f9f2adb7f58ac862c8f936aef3225875fcfc58510fbc43d08f4797b72

+Msg = 20dfbdc107b5e0af83b2d16021039d0269de2d27b40bbe6c3ea492597c19e589b076230bbae95807317fe8a5b22e802a78184c652d0e6b490053a0dbf8a34a4f8874966d637cf33a9173c6d5c31a5f9fe47c2c9ef0742d24096fa8abc8731e04d1617db1aa77978fcd18d3b8fbd023a7d493369da545ee448180149293914bf1

+Mac = e7928a55a3e4274394d81988a08196e07d5a5df047140690

+

+Count = 118

+Klen = 64

+Tlen = 24

+Key = 833b09f3a7e41110f35ae33acef5c9a76ea93119548154fb154815ac60892c1b3dbb839493b5e0d9ed68c5757dcc954d621bf778263e7f508b848cc9879a6c02

+Msg = 62d432e97b1214a94ab922b6bfc7f0a32f0e9973a737b0b67f067af532e05a506d8a8c66653316756eb5fcc2ca18b43cbe57d95ceb67244fdc769757dc71fb6f0ac88d2eaf75f5edce3b772cfd2b6d32746df5f4643de7388a340afa03c9870f62179d0800e1975993d3fbbb020a05ce78d75303b8c0e2b9b0c839a650f1e479

+Mac = b4c5612cb1c1dc4333450daae500cdbcfe3ee1e3ef7a0d61

+

+Count = 119

+Klen = 64

+Tlen = 24

+Key = 5efd2d24a034c9cb778e6730c3739a2e48abdfdb0e2c2203073083d5f38b59db813c7730b742afed93b195e4f3048591b2b5e84d140bb2c564342fabdb9300ab

+Msg = b08f5e5926b68f1c18652c7f7fc593fb3c3f5370fed6331965bb77be681b5e2bf43cefe2d5c8f50dda6949b634954f3a20acc3fbc640b65660b3d3d59e08e7a549f3a14a28329691202087c69e88e7283ab7989a94d5f69b827516786e6a4fc0f9dcfaf9e49c779131b57118854462acd18959b4313dfbd11526c7119eea9f66

+Mac = 3d0a38dfe4a8801ab9f9dc1446c535d792393ea8d763db4d

+

+Count = 120

+Klen = 64

+Tlen = 32

+Key = 992868504d2564c4fb47bcbd4ae482d8fb0e8e56d7b81864e61986a0e25682daeb5b50177c095edc9e971da95c3210c376e723365ac33d1b4f391817f4c35124

+Msg = ed4f269a8851eb3154771516b27228155200778049b2dc1963f3ac32ba46ea1387cfbb9c39151a2cc406cdc13c3c9860a27eb0b7fe8a7201ad11552afd041e33f70e53d97c62f17194b66117028fa9071cc0e04bd92de4972cd54f719010a694e414d4977abed7ca6b90ba612df6c3d467cded85032598a48546804f9cf2ecfe

+Mac = 2f8321f416b9bb249f113b13fc12d70e1668dc332839c10daa5717896cb70ddf

+

+Count = 121

+Klen = 64

+Tlen = 32

+Key = ceab398e4107483ede64ce107c9270e6022778b61f6a258d3b7045d4ad8506d32ece0a738d2cb948a562dbce8d7b66f30e6694d65ae439cffaa454af09abe449

+Msg = 6dde9ae867e2feb367008a975d7853ed8f89690f3c87a1107f2e98aa7736f477a527ed64956f0d64c1b23361b261de78688ea865fcff113c84817e5b377e829cd2d25bcf3adbc06762cfda736f5390d01a49079d56e969f03313e6c703e3f942bb87ed0f9c4d9f25120085b5dc75ef5d6d618da0926d3293568dd7d8238de3d0

+Mac = 2d3a760595f3fb19293cc6d23651222a9f5a4f02284457a9c1ed4c43ac993ca5

+

+Count = 122

+Klen = 64

+Tlen = 32

+Key = 6a6155dc4d59c6bf46caa3de09666326da308c51a23e6ec342bd12b227376e8a1f11da906b58c8c515bdaf0d84dd48904dc6fd614cb79f5ef4285757e30adf72

+Msg = 107bdfb55c601e74f6505015a5cb87bc0eb0b2e7cb04594fbeef8e0fa5072007eed21183cc854a188a128ecf2062ad8604dffa924236fea9cf5b6e001acd5bb0e51ba95e53a7c21b42aa8b89da78983f66069c6f63a923c6d7208394e5d50f2d9d608f8f194ded45c51f318bfe94afb2df2b7fc657e42e6f7f47b3152ba7a547

+Mac = 6dc2b05619ad5458ee3de70b0c1649b3788e1a5312e8924b5486905506970881

+

+Count = 123

+Klen = 64

+Tlen = 32

+Key = ce97ded47e101a6d0aa1041138093586046524f54345ec9e860550c9415bfc002d2c0d7beaa4d4dce985d71d89bf19c680429c637d1023350c963c28b93c7e05

+Msg = f62796faaa333dddae596f98cd4de3931ed90710287446604a158b575b4901fd8d841e8697b4df85131c555c246060f75ddcbbbade3a38b7c0444d25b4f6d00de6d8ff47288bc3a54ca1366ed1b2620ec3ab4c0bdc6a313bef880f3587766705cbcc4124a4dd72a7228f1ab61c6a704017eec2ed692ab7549f8ad86f1bf14e4b

+Mac = 837ecd647e03fe8df9a92c32dcbc87d0734851ffbc17376e03218cce9cbe974f

+

+Count = 124

+Klen = 64

+Tlen = 32

+Key = 554e344537a09659920c19b40f2850b07235c3c7209993a6de905c82db1e5faff148e16f2883ce087c6da219e0bb892d8272c591515b5163bdb0c4ecbd1c7730

+Msg = 44e9a1f1437791963c1a3e0aaaae24affc3b405844d16a5233b6e5a145c4358b390c305bc4bf585f864f68333dd12d4139a69789105a109e92cc0cf1ff8fe2527891dab4b4fa8731f457574e39f8687fb4969dee7e3af27889590cf8d74415c9e9c0c6867bf0c5146e7c32e306ec7c7055557a0ff738b7e700a70d3e33a975f7

+Mac = 9cd24a0efa26c107738f5335526b57d8c93e54fef8c1babbbbb2d42f3a1d03c6

+

+Count = 125

+Klen = 64

+Tlen = 32

+Key = 76d8e0342011d2bca953b26ee200e56685b721d50ed4dda7cd3a05633a50f153884998e67da901528004fb7df4090e1ec4c0b11f3f10bd4727842215044fd9ef

+Msg = 0ebaefd2153de2c70537ceb27e5ee70105ae85bd4da38462b4abebed11dbcd36ade16d808f3aa54ffda5897a3fd74780a670521fcd2ebf231f60ef7d999e6e94d1b81be038ec89b49c5ca65bf1bf9a675056f2464021fe16355477ba5605652e8327401797bb569fea456c7f1b7da85d0c48af592de60ae3fe6dcecfcf767cab

+Mac = 1cbd4f923d683ca38aca6cd0ad81151062fd642b155b2a950eb551ca8216b0ca

+

+Count = 126

+Klen = 64

+Tlen = 32

+Key = 731ec9f365f28f1cb9c4ebcf89d8648732a6dfa958d2c0152b5e52fae81f69eea26d463e421fba82cdb78f75e5d92304930256a54376a6ea107a995642c45c6f

+Msg = d98557504a21fc3a434c780c328ec239cf8d7c26f58d6ad7b23329c79a8e1e176058aceba778aa1215cc14e5a92600714f94d4d8b2e5b7f45268453ed6f787eea3342264ad13cec78d990aecd5e30f79a069024a6d846d132d2ef0479a093439cba4218205f951a2d53ac4ea5bcdd599e9956c45cd73767c6a0c92ac8ecd0d40

+Mac = 4f2501d2a88cb13046a6549f90e4ea924773408bb684025b5126a8fc21f48670

+

+Count = 127

+Klen = 64

+Tlen = 32

+Key = cc38826523a9097e0f7d075a3a039a70ca1e2b5590a6443e820ba1c16c3b89dbe2c65f37794074ad37e81f0a4786100ff19ae1bccab2eece281c6786d9bda3ac

+Msg = 6e09febed308baa41a8b6e0f7fab61808c9c8471ea32eef178a4888e9a910a77d44026e2972c02ac5ac0ec3fed5f4ab90aa7cf4b2ef7f5dea62ea7fdedb63def35c2ae2344d301d2818105df4f78420299c12f25ae43a60e5089943f07c5f51abc15004982069e5db75721b54cff33a261700cc8151ee9c89c3bb91c92c51942

+Mac = 83b1403389173568588e5b6b8cf9da180408c79f91d054ac5cd99de0b728ff66

+

+Count = 128

+Klen = 64

+Tlen = 32

+Key = 62c1d149567f05a0b76c4fd32d1f365d170cb165cfb38f922f1716225472eb36a127327007f8f5c08479ca7beac4b0aee26f3bb130bbf1ff390ef344c2a4e0b8

+Msg = 7af390cc4edde0f3d496137d0cacd0876b54c909dc5ce36705619742cb42989418d4b6fcdbd80256512a338f843b48b711c06f582dac2607ea5ca038b7126a5726a54e14f37778fe41a6d7532687c6166a50ec638c14600006f51134d29566dc2dcd21bb9ba289122b74c870fc7992cc006a07d1007cdb79e192b4dd25b1d34c

+Mac = 2f1a4c2bde7c8bdd7d8a9b6315b19ac654266120c652fc24ab19e00ac11c5461

+

+Count = 129

+Klen = 64

+Tlen = 32

+Key = af81e327525f3a9104b7282959a0f6600fad7efae7709bb8b33cde34b12f830c1770a342efb6abe3250a0ce7dfcd34590cfcbeb840b3e59cbff03f9cd89aa870

+Msg = 75ed3ae9085bbf2d034b864d7f87057c2d0b12c7395feb0375237903b3ebd60e724e0c8fbe3a200f518a4f61fedb971c509b794f6e62fe6f4186f894d9ea8ae50d16ea51628d66812f5aa50afeed30e634253025f5ae7ae0428dc86f64f949db8e6d5d96befb996ae4e312b04664d8c223d2c0b396e9673dbe6173fa1cc21cd7

+Mac = 579d35cef5b6f8468c8285829861e93587c8dee5791208406a7f4bfafb70abfd

+

+Count = 130

+Klen = 64

+Tlen = 32

+Key = 17a5baecf916634433dcf133ddc2dcdfcf4a680e088928985138c01d1d09eef3b437cc6290614f14079814c72bb75c45eff255968bb29b7421a1feffa00086b2

+Msg = 7809e59ad48aeb2c6f03de775b1371b7f86926ae0b87098e10c69e19d29b18073818cba862b6e4caf45158ddb2741a554ed791507d2649795004e92cc25065db8ea774b0432a457399816daf062025108dc8b210d75124d284a8434ec314c7af20bdc7f99e6e74ef069a07347e9df8b05d4571353e91026354b896c9fd6da64c

+Mac = 810d7bda3421589a7dd60597447edf2b987f1e7283f3c65890248712c80969c1

+

+Count = 131

+Klen = 64

+Tlen = 32

+Key = e09ad7d2ff8d559a26e0454bcbfff844e8d2415b07872bc59c93e73698f308483bb8f3212ac29050c1cc46f9aaa92732afcc67accc0e139689acffbe878f01fa

+Msg = 4745100cec0406cffa146350ee12213330d192123af4a1bafdbc5c98801eaf6ecb19724a0346a7b9d6b1fc381ae798ebb0501392afbfc6b8be48462dc2522bb7baec1605e665f2e42f1679b6c383fa1f00a35a01937b5aabe1f2174da6e0d7afdb680223de886fb9cdeee1b1320dd236e6716f492f4fe3fb2c61d8df73f03bbf

+Mac = 055ee0ade716231bcaa0a7d18161004127a37e7aa12773433a376073474d3d58

+

+Count = 132

+Klen = 64

+Tlen = 32

+Key = fd013d615c6ca959030a520e148808a07e27d38a215634d53486ae8be43a856f3e5dc6eb4fd9874a8a6570276a9e7b25585af7e1ce39d325bd7d195f2c1bb951

+Msg = 91ea78334108ce6261ddee5d98045bb307a6e8f3d0ee65c1d9bc7d28cd9edf3264fc9cb6e592d072e9238559616cd42eda584d5200729adb619f5ee5740d632dda67f5dce34b89a054fda301685df6f31416cca78f19a8a7124a2a22dd7834847a934b4a451940152cd20ffdb4bd07273c4a2b9a86c9d94e7323a9860ec89860

+Mac = eb5aaa4ee702ff7b5324bc72c98fe87df6d9cc342b053ebce6cbf27fdea0eabf

+

+Count = 133

+Klen = 64

+Tlen = 32

+Key = 62e3a735edcd87fca0dd1d2797cc0e574160da9ac23f60e39501a5b77688d1287f947a0791922556f5b50afc434818bc83433968931cd752c9df9f04d8818531

+Msg = ec638734d336b8da6dfaf3da9e18c7131494fcc0709cd3a9a6618e9ba62533153c958e44345a7531c3eb503a22a5d8bf7c1d1e1d0ab5cfe07d6db7349cfc859d2e20cee81a325462cdfd8747dcd04c7dead2fe82cd96b2a4ecefc070eb067f6c8ba94f09cbe6ddd354d9a2eb13c2adb7285aa3d8ff68045cbc8faf35dd6aa9ea

+Mac = 26db47a48a10b9b0b697b793f5c0231aa35fe192c9d063d7b03a55e3c302850a

+

+Count = 134

+Klen = 64

+Tlen = 32

+Key = abc9ccdfbd92b6919a5d6c6b5a765a39662ed90080d3549204dfaa5f6d70d48e1af8c84d53369d658765ef11d7b38510d9f431f99598f8cfd4da73d59b3b75a3

+Msg = ac4756b851fc8866b9adfac2d02599148e0db7757a62b1e06d26cf8c99556b79c91a5649ea437752cbf3b5f121961821ce1a2a4c635da461e3e14626cac707d04dfb6ed1e4ac40f106ff5ba03304e28a38e99a6daf6d9427c5980d1440a99296c05168f5441e2a6af13ab4760f55407855e0cf7f667ccb5d9bb2eafd03e455f6

+Mac = 0e445d77789a6947da70848dc4da5dc9c125869bb6945b04304bde93829a75d9

+

+Count = 135

+Klen = 70

+Tlen = 16

+Key = 07c358ed1df3b06d47b5ec763afa07a6677ca3a722524e6103c1056d8c56f6cd0d318adbc5a4a3804afd23a62b9fadf0d358afa8b0eea0f995fb865e5dfbbc5ad2a4f26acd76

+Msg = 2aa1d94ec83ce7c3c75c6bc847759b085234fd44b407d8f80ddfe93c243556e87e4be8fb30b4743ef1169a24732fb2f5f416042b10c3371dd9d20dda29844d58370700ce69f7df5e69240df77b96027a0ecec71b904f690b875da854de05ef047c5d898d1c0d116c580e2a0906b271dec8e5b0dcdfb2550a40092270eabf2533

+Mac = b3a189a17e8d9e986cd31bbe01b49fb3

+

+Count = 136

+Klen = 70

+Tlen = 16

+Key = ab8dfba4414e6986513a9767af5eaed9720811c4b38040b991f3fd8278b0adfea497002ce0cdd48594b5578ffe1c6cafc0b4513e9bc47ee07a1dd011b250e601881ecca2f430

+Msg = d1a7086d134c11a8a3204e019f52843e89f2d01a02a88a94d4a66e8d36dbfe924c6922f7ee5a1225aa8e75340cf8cbbd1c0b08e9296e81cec5f70cfc11d763523b12ca174433f246073d1c2877e4812828fdf2e41134bc8090fdce3faecd1e54a58948f59f3f78b2c1148b05687d712ab2b2d630416001513b9efc7f9523f53f

+Mac = 7aea0e2d93e9a6a3004117ad4a4a72a3

+

+Count = 137

+Klen = 70

+Tlen = 16

+Key = fc68be1e46a7ed0d4293c6ebab8d7546a7b6e95d495f7d315ac1d8df59ee112cc008176289b1515bf1c281db7c40ee23398cc2c247d9b1af98e3db95f5dff46e42ada2530455

+Msg = eefa0d62254597bd67c87e00fb35f69c5cb2dc09f58d9d14292b547b964232b79b482319172cae1874431deae585df51ebf92ab81e6ee57e2a6cc492186ab540cf417b4adae1983b6b4371f8a09fad9806dede755c52638399a58de1300f00ae92cc5c1ef4ce1dcd53afc053b6e92818b4493f6a35a1e0cc7dbef5916699dcaa

+Mac = 04c8f6ebcbf13fdd2ab1e5c5c25bc7ec

+

+Count = 138

+Klen = 70

+Tlen = 16

+Key = 6e9ce34b4fbc78ea92d3d14592e1c0725bd053d70f4c599b89d4215a3f11851d6d67278970cbfb566fd40603411465c88ba890cd290ee099d0374fcdf1dd8012e017ff50352b

+Msg = 56dc2b84da28f94847f598980ebc2d5892274e1639d0b7ecc24c3ea8d968092be8b2fe0f313c7b8d1a9c479dc737c95eeec078b9e7fb934103c7125e1f5bdcab79d03a9cc2e08c6474ed3b166544ee0a9da4018264fa338da06f9e2c5ea4edb4af3cc973b59c9496fdee5a4a0f6c042244dbcfb9d855fd98404ccb5abecca20e

+Mac = c7e82b7b2478c319194fed944fb7c772

+

+Count = 139

+Klen = 70

+Tlen = 16

+Key = 91e87e19a4a4af9b2068f842e624da9a21e57c40cc4d4df57541ebf140e144792ebdfbb49f450dbb1682b4ef3d048b8f291cf38ade4bb69116f9eb713e6a1aa0c2efa0158a59

+Msg = 3a51f6fbfef38724347ab1a4f7aafb7a999aee9b890a19e87af6585dc16c568bff9a5148012b1da5e4d46c207d294c1bf8b6f18dbe4bb5f89d975d9b23f89ee84a92e0385b9f41be0c05ddb9eb2e4dee00146d56ae9b6214db24dca9515f996b63602b34d3f6fa57f3388cd80b6004dcfbdde95e21a329247dc65ef113474ffd

+Mac = 589afd7086a58d77f046c59a419504a1

+

+Count = 140

+Klen = 70

+Tlen = 16

+Key = 1abf71698a7d52b41caa5c26558d46e8cf27a490d270168c23e4c0c4213efa7b0d844876aa438c61061c7a6e977f4d3f89b7b806572720eb99d308ae1d22cd8d38e293685e8c

+Msg = aa02f0b377f161ee60b0fbd6c56a537c0358cb8da62b63d5daaad203239cd6ac4ee8c892a8fb73256d6a264a83d8085c681bac706a9ae5de16f9dcfdf2f95f2d6f997c1b19824f4011a118abbd169001be4d7ec2226a85cddbeb4027708891f8f35e35d6334d9c46329ff880daea9573eb3768093863eaac13c6270906131114

+Mac = 8cbd8f921c55d36e5b7db27f7891def1

+

+Count = 141

+Klen = 70

+Tlen = 16

+Key = f8dff7f41b7e3ef6d558dcd83d344db5551d410eecb5a0bcc2cccb29ee3125c07dc8d2a25cddbe9b78b8e1542372c2caba073afe84ab7befde6250c595cba74f943c4cafbf14

+Msg = 72d18951da90b1f6d908253e55da1b5b476d6a936cd6e4433efce72422f92fcde3c3ee795f0b1f0b8065174f6eaa5d83039abb1680c695af7eae7a712726f97ea5feb6b9dbe1bdd1537e157b78e699fe063503f5be754a505ebf2e9dd0a31086a2cb089ab6da32503b9a4848db5776d5368669b990abaa2fc6792a2f873a1eed

+Mac = 1c649a21afe336c72c4593cb3d3c9462

+

+Count = 142

+Klen = 70

+Tlen = 16

+Key = 9fb4d6fcd697d4522dc7e386ab41dd9f8a637906e0fe123b7facabc719643172a84bffb50ccda872f6edf0e306d91bd130c26b0664eae4046eff52f71ba78de99d5cfc35307a

+Msg = eb6b60d0858d6f87f5b9ba7fc75acba8751784ef886061700047fde7f692d868800e5751d5260c7cb1b338b9fb168e7ba6853ad1d5a2229842526cf0e0cc40ecbff0cf8e30db94f22bb8d9c9edd87e09e506f6e3d11492f625ba02c2aca1195f71bad06ee0d48e51296ea697e5c921bafc42bf0dc6df38f07028c746a238e929

+Mac = 9ca6f24c476e59b5b068c37b0383ff4b

+

+Count = 143

+Klen = 70

+Tlen = 16

+Key = ce3a2bec5ca00b544e8d392ed309e9ee5d48d185eddd8b33902a3b9d291b711f721451633e27f133018b028b9149b3f32e39d20bc12d3468616c589e1b62479ef395be4326db

+Msg = 36b5cf31af37c90334f2f4adf6a918a22eff5e3e54dc1a4f9212e8d47841fa05f1f8b093761c6930818e9a5245081d349c48cb1e41714ce73fae2eb8a91835128cdaf213229297f548fb0ad732ca38c05ed5ace1c67a601a5a3fd3c0adb65b9eefa4bd391b61fb5971826dc427b6134d5cee2a0d4dc1fdf1cb0efe75ede315ae

+Mac = 48fc1d0123e5c7f686d74f5903323f9b

+

+Count = 144

+Klen = 70

+Tlen = 16

+Key = b127e4819e172ca09868c28636dfa63b2eefd1ead22dd3f0db04bb3366aa37b53c52fc6956a46845a16a6698fe8c939e8d3e9f512b78f58339a69e2aa0a262fb11df313a92e7

+Msg = f1ab8fda839d00f0477d1ab6f3badd421834fa89a4ab8075ab77b738677a4cdf7d54af2a81d5ba9bbdb893cd2e8ed307d0f8e8111c19b846ce4b86ebeb111abf034e1cd3b3b4c29c6f7eab477e620a4c46c10646ca22610271de58d6091ccb340b009e7e21205f1ce53829cdec1ec83a03f81dd1b8acc4d01d98f5a0c884a865

+Mac = 41fe6d923bfb13fcec839d3c272383a6

+

+Count = 145

+Klen = 70

+Tlen = 16

+Key = a04b6205d7e712aff28a8d520a79547e41e42800001970b383f8dc9998a7482aa387e3ece6669044fff68c8cb27d5165e9cfbb4ff97a6a77274067cf6bca0a64749a1bedeb42

+Msg = 6bfdc8539fe6bf99892c1c36d521f7b17c224ee3837755fee57a0dcecefb183e09e4cc1dbc19862253a2412eba0c67d2cf0ce61117668767af0d7c0a868c376fcaa48310a037cd6d1865c25060f4205638f5c5aba5a40d15ea915a34b4fdf408958714b3b3083b80c2bbc8252fa1ca459e23133997fa8e107c4cd2d4bf17f60f

+Mac = b6aa4e0beccfdd37588699435e2d40de

+

+Count = 146

+Klen = 70

+Tlen = 16

+Key = beeba7959995358a1c238dc2f457f3c0aa6f47372f5f3471b85fabf1cba590589a74b385915501002ba5fc99094f684c45db476804a808f14a75fc42132609f69fc5a2090dc8

+Msg = b551096a194aee8992991325de92c9597c4d1c156c57b47036a7f93f2dd47be6f585906e43283fd8e4e75cb101d7f5e7a173eddb6f4ae7b7bef46502ca4a317240d7fd010189464223ac7ef6391969dbd5abc8c44bf335eeb72d4e92417215b79f2f974adcd5cc7058d2bf1b11c1eedc20ddf4f887bc65bd293afa161ab3ee5e

+Mac = 98323e25ea0635d6abe384e8960f373c

+

+Count = 147

+Klen = 70

+Tlen = 16

+Key = e7747f39b1c6c0157a9128c012391e5148200ed5006a193986040a6a22e48cbaed929b86e2e73915381462c4f0e74160aa4aa4d4bc0dae0485e5cbf8ffb4e93d940ae68833ec

+Msg = 868bf010b6e26e4c1f91f0614ff42bc1403087c33b7e229af6c718880072024f5e7abce977c36c782daebf804deb7654298e22ce83652b43ad8917b6ef34094c29d28800b95b82989fdf91d8df637cf527eb014db2d8d2546c74ddd257ccd04c2dbeddbf4752bb95bd4eedd1cf04468d846fada6907e1eb67bb0f14200e15f35

+Mac = 591d11b2bd18f982bccb6b3a44f760a3

+

+Count = 148

+Klen = 70

+Tlen = 16

+Key = 2f95c1d1d94db8ce7bdafc8af1b7e48fefd96b7ae8f733f72f29caed5db42df6f2248a123f9c4a9c836b4f7d54df7a9f405e71a5b5b29fd91ea57c654fce0ec723aab07f63ef

+Msg = 852f420342b4bead2e714424eb0f287f077602047f40553d816d6e4e76588f8540e94d33c00d37ba9c63b8e83f393f8321b69c254858ae4a0fa23ba8260e1fbfda49a9b0969f4252aab44f834c7659bcdc4f6be96d9fbc7780698eae124d5641dab61d23cc54269de1cdd19e1aafbf52c3aa37f5f5fcc9ea5e2c310744fb7e34

+Mac = 3d4a25554afa0abd26f72377c7180e19

+

+Count = 149

+Klen = 70

+Tlen = 16

+Key = addfd600416f8511f3f07b03df2248b6bcec047003f49317546c26a4172f05d45f0c8d20136174f04fec550c08df6853ef3290af983d9c48dc86c6f87cd88000069571f9fd4c

+Msg = 01c6d5c0272b631c3f9d1c0687f7c1496e77e1479bb9fc8f31e6e8b252297453e2624c7e8d1f1c3b0bc8f862a219fcb0edd52f1bddb9ad63fdaf06eafa45e1c5625de513ac26d98d794b095f196aec3751c7059b5b42077f2f863c17018427ea0b2069288c29e13d118f17a6f3d0db0321b4296e1f3a500c4fd253e170cc90e9

+Mac = 2d2ac1291e545de46a42ce6c435518f8

+

+Count = 150

+Klen = 70

+Tlen = 24

+Key = 058f604e53051a0f8550de16b7245fdad3da639a6cc3c84eeabcc5dde8027390da488cc7f30772eb461673a32b7a4b4be47feaa2800878c200239756b9e0e807f964d037ed39

+Msg = a74100cf30cd26416e9878739dfdb3c1fa569d6427ca8ee9d06630e18f6f83db0df7248f6bafce5ce0fc21f5a34da2570bab04fef492a65866ff5c7a71ca72125b36ee9cfec716d96b53327dd35c9328a89dd498ffe3601d391e344de2b8e7f8d925e75fb1bc05a058c53475f6d38d1e1854979c0e66c62091ec41c3aae1e877

+Mac = 08e3a1718c6d1cdef2c0c67660f7c1e8a45963e5ffed54a7

+

+Count = 151

+Klen = 70

+Tlen = 24

+Key = 986e0d3c3e7645e493d35962291d979ddf09e8a610d5a73d0ae7b397c2b1c35ec6d7fafa7294bc0f675abf4639b8655168814929922b179ae675a202dc4c305623f01865db53

+Msg = 72c21be6f0c4df7cc8a53f9226f36146f9ec5bea9c94f3b7b604a8bf5f05f72484ddd7888c6986c43b6c87ddd727ec348a2ad1fc086929f17192bd47799e71e1c6a7c9c49af9adcbb16b699c6df0f8da3069829d09bd231f942ceeb81be0320c01c5fb83619bdcf9f24aecb72e750fa2b35177b3e9b86aa7e57945f88df3c10b

+Mac = b579eaf7706976152b1622c17fc47c5db3802aa3f46f6a3e

+

+Count = 152

+Klen = 70

+Tlen = 24

+Key = 7a41ca8776a3dde0f5c7d029f28a9bcd3c4daad2ccf9d604563f95501e256d6e0dbeafc304386185701d7c201fd258d8526464b013831a8bc8cf3292095316d5af4f97352d3b

+Msg = c7627c9a6d1e7c41c18657b598ac29b28c4d0ef047008af7feb329353b58624ee0dcc1b369594676718c085d77891d35e3adbe6844d5a7d2dccdbdd15e0cf39bf69e6ed58a61e8614074527740edbdf7bbca7afd2c2b80b6ddbe0f73ad7a93fc1290cb275a9e2aa936267e2b7840cfa11c8b8ad78569df4c0a6c6744b10b0a19

+Mac = 53f3436a128fd497c5cd1a534558d6a6bdb5f086efabc6fc

+

+Count = 153

+Klen = 70

+Tlen = 24

+Key = ee36e5784fcb43427be072aaa968ea52bf3b73f55d0b45fb1d996d4a1928725eae32399c805b26e3bea38465a8df27b54e6a4f209a18d041906b70d0d50a91bb6e6e1078cbdf

+Msg = 8419330710968fb40ae915e66548f1ac445509e361f583abaf5f87173e7346295f4e3bfd0a1bb0447c2b85f424492d3ec047f9c1c4dd99fdfbb4e00a70bdc7898fc7b5dc8851fd92f49ca825bb0576e835921f3b8fcbde0171cb3054dd96da775bad290b53e07d86ba6409e2f025d492e95d03ba8c665b9f58cd025d4da785d8

+Mac = 5a841e55fb2250c431fa397f1d0ec858b2c4a08e40dc897c

+

+Count = 154

+Klen = 70

+Tlen = 24

+Key = 27e1dca4978d2a05d3f9cabc29cb18c76a210b4eee825d37d915ecf59d1061a0c0740f4be0f81e92f442e872d45da35efc68418e8c8b949b9430b6498f6fa8a32dc9394e561a

+Msg = 57d73f3bdcaadf51fd61aa65a01dc75638546dccdd899a1da25a086d23c05d1a5d93a157c34cf6168e0f832c54e9b2afdc569ba33106c0d6f5e0fa09f848b350099d56bc0c0604364d6f89ae14ce8e767aab0fe87adf104f4b9c8c05edadafd803ff45b2e061717ae488a2350956c371b95cb2e3e39df44f4d94a7a82c79b779

+Mac = dbeefbe2f550671d7fcd3d5bd66d19ce9faf5e6b29308ef8

+

+Count = 155

+Klen = 70

+Tlen = 24

+Key = b415314e151701a503b62a5c8b5dba5ac357235a533fe2f634b85f04b85f1426cbfef29d7803005eaf3046684593e9543cb9972e451f258383e977bb92d6a1a9c8744b61ba90

+Msg = 0c8404fe10870fdac0e8d21c99c73d04a78b6d4c8fd3cfb8d3ae87ee520e13880e7a2b683204ec4b547b36a1f7e1539d541fd9885af8d15af33c188b893e0627c9874e21a6cc25e9a11ea7404861764cfdffa4e7f9ded33d918f9a96b7c82b70c31433d174c902db313aeca1952fef392b929613766b1c88350fd5b6e493ca8c

+Mac = 95beb7fcb2b8d049adef7e0f33a7792c8d71e10b71ad3efa

+

+Count = 156

+Klen = 70

+Tlen = 24

+Key = e04e9731742a767445247fba9701ae17fc9acc451b8c4ff3af307c5fd3cece277c0d9b5d47aef5d9757acfd3337960b11f65cd1d095e025bf6dfe0d96bf19e08e89f696bb2a9

+Msg = fe1c33cadec693cfa53250d906d35d1e2db8df4300be8f2aa505600b44a063c60e91e7777ef4e44bde7a9a930e197517810234ad88d44a0ad30f84d734cbed08a7aaef69900bba794380ea7cc98363cce264807046866eef30cbd2661d4db2d9d14f92c79c73dd01db2d87bcc177f1e458c60db3c23dc283c52192e0878e7ae2

+Mac = 2f8d11fe7f6c07bdd0d33dfcb3fc7dec51fe2048d1e8db44

+

+Count = 157

+Klen = 70

+Tlen = 24

+Key = bc3732e901768fc9b98303d599110be8236c5151780022796d1b22c6e0f43fbe4debe3709c126e0f3dede3e17776e157fd64d67ec3ad6f960f4a53ffd33a105d3ac955f48112

+Msg = 023004dff89f0820892be15fb91dc4c498936bfab92320eee6c117d412e3006c8fe3dd8382a411bc9378ba90e941419455d730facdaa435b1da9c1b4d9620cae966a772259ff59dc50ec609fc0ad276a3fd40afa23ab39903a1b0bf4bccc95ba7d8e7cc467f80708284e789328a89dcebe51a201a36e2915a7e09c9ea26bc219

+Mac = f51032cef423d7846270d8bb43f7d8426e392fd92b753a57

+

+Count = 158

+Klen = 70

+Tlen = 24

+Key = d2229832e4000614fac6db5c0a235e49217fa4a9a831f9aae7f282eec79120dddce9963fa211ef0a07d21a782a5ed85d633ed8b8838d1f885d64aee185955f3e579c11193bd2

+Msg = 0d612e1953e7cfde5242fae7d51c8152d2a4a7e44de128fb7a467ac4228653ae47aa6b1f0b608365ce96a6ef9747afbdb5950b15a619c0783777aed4ed3515fba4cd5854760001d0de6e04201d644826ddf563a9154ca64c2c4059c16129473a6af27e205b705008caf29de3311a557493eb38086322e061a1ca02f3460bf153

+Mac = a87d01c705415dea8cb9f0e2b6663b629f88a5ce793ea8a3

+

+Count = 159

+Klen = 70

+Tlen = 24

+Key = 043899af301424ed13d00066c0c37a448591f27371a284b314d2e7ec866a94c1ab502b67b47a13b8e9a86183a653fc27a4e0fe607a1a5d6064dfca224219d9fbe4f16372843f

+Msg = 62908131c688711835177348434fdd1016941788765b50752430716e6dfe4f3dfe8b2588fa4241b14a35fdfa3562f1ed303567fbf74f0f63dc86f5555f2daf570095dbe951d3c9644fc47428f24fb7f603eabd9b2e60bacf58d1d85c33fa75830fb68b9bf3c56ffbeccdbf1aa59e95f538ba01b14415b782401904cb0eed0787

+Mac = 97f3b4e61b5885dc4c7f69f79a07d7a40c2d1d2e3936b91b

+

+Count = 160

+Klen = 70

+Tlen = 24

+Key = b5fee466f106d7a526d468468a16981251815a022073a402c4d7c5f6244af9fb747b3befacd85a3339674faff2f1ce174d661b6dd37d1fc8d19bbb5351f65c9848fad0ff11ec

+Msg = 4745100cec0406cffa146350ee12213330d192123af4a1bafdbc5c98801eaf6ecb19724a0346a7b9d6b1fc381ae798ebb0501392afbfc6b8be48462dc2522bb7baec1605e665f2e42f1679b6c383fa1f00a35a01937b5aabe1f2174da6e0d7afdb680223de886fb9cdeee1b1320dd236e6716f492f4fe3fb2c61d8df73f03bbf

+Mac = 1fc68ed1bad0898d691970b530b54cef7c2733a7f1ffd276

+

+Count = 161

+Klen = 70

+Tlen = 24

+Key = fd013d615c6ca959030a520e148808a07e27d38a215634d53486ae8be43a856f3e5dc6eb4fd9874a8a6570276a9e7b25585af7e1ce39d325bd7d195f2c1bb95122118809c7fb

+Msg = fc0723c3f84de1178d14375c3307f0babdbb2086813f6970b8f477fe289ecd3900bcc4a60315d077e89406030155db741c002fbfa7568ada1709a5298ad12c39aabcc2b0d5c646847ca9546cc9f60f9485651e953869f5a49208560909ea17d4c4b025cbb887c9a611fc2a7fd3121484c191f7ef7ea23338f2999288ef121672

+Mac = 10ab06d732cdf46a1711dfab98e136c4e6ed856ea0678efd

+

+Count = 162

+Klen = 70

+Tlen = 24

+Key = 05915a68f16938d7c6c5d4326904e0f3b89acf4d7063e01a4e38581575bf0e4910872dc9385436a218b7440e4fe294ea95bb446aa22f5b0c4cc90acaef83329411dc25fd462a

+Msg = 5a40298e323ce97549d4c820b0a77cbdefeaf6ca9bad947a2b60985a0795d934e208b8334adc56497d2704ce7fb1fb6a69f94e3404791c1b962b0a86fc4cf037f960d375ce76146a0bade6caa4f705b5471da6dfed04a9eeb02e1623dc83c73d4852629ae7938ba09a6f575b48020367315fe6117fd4a4b91e70a57bcec3c50e

+Mac = aaf4fc8d00177a99d1c895d72b3a63e7ce15f1bc3946f338

+

+Count = 163

+Klen = 70

+Tlen = 24

+Key = b05f0e3bbb12b9351c465ad5eff31e65e55956c5f4e4ca684d53509f8f199d1a3a035aab661c7b4eb5cecc678649cc4a6b29bf00de52ff492f1f93ddc1bd02f776d169146861

+Msg = 99958aa459604657c7bf6e4cdfcc8785f0abf06ffe636b5b64ecd931bd8a456305592421fc28dbcccb8a82acea2be8e54161d7a78e0399a6067ebaca3f2510274dc9f92f2c8ae4265eec13d7d42e9f8612d7bc258f913ecb5a3a5c610339b49fb90e9037b02d684fc60da835657cb24eab352750c8b463b1a8494660d36c3ab2

+Mac = edfc7a2815d6779681590f3855e668f2c2d44e64c773e711

+

+Count = 164

+Klen = 70

+Tlen = 24

+Key = 3714707839daf79122c782416351385e88a81d31c9f641d8dce538e90e63c95892a2ea9b1962ed0ba372f48e9474aa730ae2359d6e4e66e449ee33b859576807e58999614d2c

+Msg = aac4256339f6377a4fe225d50e74424c80e0f96d85d162c410c3135a93ad397bb8e4e7bc523cad3d93706d2c7fc46a8aa0e8a232fc205e1744a207cd4e3f3b4bc54620ef20a6f8c2d052f6febeea50cdf49796549a3742f025ba90bfcbcb90633ab37902897b40916f516953b32e1e9ce3b57edb495d37d71bd25739f2995f4b

+Mac = ac38d22527983468cc48efbf64cbe1307022327207fb7f94

+

+Count = 165

+Klen = 70

+Tlen = 32

+Key = c09e29071c405d5e820d345a46dbbf1e0f8202e92de3ed3e2d298e43aa4f846866e3b748990946d488c2c1ae5a6e99d32790d47d53d205481a497c936bf9ba29fa9c2821919f

+Msg = ea7240529980076d3b028a083ebc4e24efdaa06c9c84d76bf5b2d9fdb842e1038e487f5b30a5e010cddb4fcdb01ffc981eb0fcbc7d689207bc90ad36eef9b1ae38487a6dee929f3ff929f3357cb55253b7869a892b28f7e5fe386406a2776ed4b21d3b6e1c70cc6485947f27e9a5d8bd820380b9eced8e6b865206541be39fdc

+Mac = 49ae1c4a7a570fde47f7517ab18898b1b991d03cfcf8c45bb3615b5f755da682

+

+Count = 166

+Klen = 70

+Tlen = 32

+Key = bce50cdfff843885d4f364d69f93bf58a2322c707b82e878eec96d11e5db97bbb54606a3a3ccc3bba716261070a6f759a70ed3cb785fd1354fe56648df11863669b70c803b7a

+Msg = 93b7ef0e470ddfac6aef93c0dcd37b8f1c4baf5eadd978e3bf0512fa0baeb099ff9ec1061b6172479b5674db5606ffa7e6b5173309370e1647054aafd5904816bad5e1523032cccd4d786505e241ac83a484911189666f287553d6a8164e8dcb0c85d75c4e29f624c97ceea64a2c8b0c9ddfa560f70fa3ff91183e4b968f88a1

+Mac = 37f9f32918308210849dfebf8dd456804babd6845af07218f9d9be9df9743d55

+

+Count = 167

+Klen = 70

+Tlen = 32

+Key = 0cb35a02ddc8c7fb7c93aeab77b9318118b0fd449524209d879a1cd69d5439e192741f9c5c64a353a774e28681c58ced576783ba20bea51ed82ae50e30e6a147843130900dac

+Msg = 21063443bf02ffe9f813dc6688920d036041a2a3a63a9956fc254a2c05ae03472537ef3489c93c7c68517c7588094c5e033434ab4b0ecf9e6c032c17911f73adcac6ccfd0ca57c427ae85127e2ad41d98bb94e5f2e6aad2e42ed26f87cb1bec6971c9446517c0966b6402321a06834997f3ab66756377a2f064d0277cf4e2bb9

+Mac = 5c258ba6241f65c2ee5356bb47332236baea227857e29506165861a4c7379c51

+

+Count = 168

+Klen = 70

+Tlen = 32

+Key = cddf76f985d6797c9fe3830c210567c5094fb979343fd5a1804c239a2ebe9a0e8ac283b0cdbe802c42e2cc5da800c4c1d89da72ba7489ab80e2aef0488dfa69ebc8434b95c11

+Msg = 9724c0d5c989e5adafcd7527fee269ea14c0aec3ddb62596f3fdee9b0993e6c689466e877c0f6fb4aba29bc40343f53d3edb936fc04ba263bf00ac0fa7c816cbbde4ed09025ee2405a9d9229ed360b2ece058c20db7d8d28e43cff000fe2d5627a24c3c1231c463805e3e4c08462b5a50b65223bf4f1edcda8d872d6078a2c73

+Mac = 3c5a9ac2a0fa2f58825233ff676bedf93d8845a409a42a05a9ae5218cea14680

+

+Count = 169

+Klen = 70

+Tlen = 32

+Key = 731bdc9fb219f3667c9a135ecf34c7f52cf638c39c554f1ef1691ae84e5a71ace915d9e91043a8ae6a7b6a6780b684f77b0417072f7e279d597cfdf02508c97bf4928c505be5

+Msg = 12353bca6b0f3d545ec4b470c69272f72bb5589793e6ca769a226018c5acde83145567a1d6fbede5c150ec3142dc58f81246d4a00acf242a381fe51432447b7eaaf84c8d43222c0da3a0175aca442680a21cbca1d7f70097e82491db7f7d75a5fea552555a8de0122c3d9eb105d1c4d802c17963a1664706d3bacc345360b240

+Mac = f15a210fca2cefc4d92bf14ff572d021463bcc28f60d034e87222dc6076eaffe

+

+Count = 170

+Klen = 70

+Tlen = 32

+Key = 85806ff2a642f729d28ded0734aef4f6a3f0bb32771e77729b4391cae4b49bd0a15089fe74071e576099a44d22a0e0e3c5d1450f717f68628460b4eae3945f5893e39c5e8347

+Msg = df073817d8687293257d7ed1816803afe292d779f34e14b0c5ba6e0ac1e6c3b9e239f4f02110f4a430a71e906a3dcc7b0b7325bd9cf63600b25d4544d8556126cafb3e61e4894095d935d647a8560929ccc9559cb393b77472c707fbb7ab8838ff16be71091c7fee8aed4d0022fbe3428f5b0e1f216ebe946dc05d3746305f79

+Mac = 6c63bed6c6082bfb085cf2426ef3d0dea97acd717a57ff0aa624d0b803f2ea14

+

+Count = 171

+Klen = 70

+Tlen = 32

+Key = f13794e5ea5e27507a7bad638f8eb8b86ca5ad73b5a17424c63c74ef494bbfea084189c6fff5dfb2b6a5967cce3a81f9d9cde7a86f6b33927e15ee74e10beb20344bc121e754

+Msg = cd3f17355a1e254b9821276141a850f0b71cb3cf4824a803b01c71d8dfc31d31fd33ad1cac1776a98d18c6fd0598caa241a3af21772208d36f5270f4437570f963c8a323dbb41755d948f72369e7672b843eb0a849799d448ab7252e8abb496d05e44074715fd2f6849b02fbf6fdef3488d6fc8b45922fff0832d7af3efc7234

+Mac = d08563dad7c32c02b305b87fad504918fd566c433e98a1367a3dbbadb26e9b64

+

+Count = 172

+Klen = 70

+Tlen = 32

+Key = e3d0c3abdef069e6e4fa35015797bd8a9d64bc9b75f20b028b12cca04a4fe80ff1bbbd88e9ef1003564d499fec88df4503671188eec5d7d089dd18b812c41db43a3746f77b97

+Msg = 934dc1ef76993aa82061cf67aaac7714f12e25aa8f6f54840a2ae3d84af32481511d300126db7dc612a5b2ac0fdeb9c47eb316541846781e270c8ee5f6731c2e86c94e4482594c7e75d70ec43bfe7250b6778cb2c2fd3d176abf07ca5c051ffb9a17c4c0735bd059b2bd8db81553c94100412dce73dbcaf63a0af58f63f15571

+Mac = 5717fc337916d66b4e292e69d507b1c81663d8140536670f3e70e33b04c83ac3

+

+Count = 173

+Klen = 70

+Tlen = 32

+Key = 51bbdf37124cee0cd5830e9d8f4b0ecfa44c8b1bb86a6433c18f6ee961ab694d74f93316e5833c44c5e83a039e5d1ed104f246e36e17f4c5445eff423982c883dba9707b68e6

+Msg = c84394086457d8fa900a57f18ea50a93be16f06fc28b5532de40541da5959bb6d2646ebe7491ef644ee39cb87d1219625b213094a4ed163dd707ef80dfbf9564f38195cdbb657babb4015071d58260c973fb418562fc10d95d67fec8a77f0bddf342121b82f906368b0d7b04df1c682ecd4c2b2b43dfcd6f370888df45fd8689

+Mac = 3e0212e7982f43fc303d5e8457d2ab630aa257302ac489c74976cc5678823931

+

+Count = 174

+Klen = 70

+Tlen = 32

+Key = e95751c99e14bed0dd9ba102f48e5e440519c53208e03ab7133613dad99042db7239347f5a47f9a8bbcda428ef52f5d7408235e4f3246268864c8c4135d27f1dc302a2d57695

+Msg = 36bda8d33b3bc10f367caf71c5ed387fe5f1493c1d3bd2aaf97ad78cba3cc5704c0c02ed78dec72a5bae329f17639720c8f91817badf7511d99e257c68bca5aef6e0102a8e36f01f2f1553327be0227db32aafd8e31d8d575a1ca4145da7842e1d7ffa11e60be1f898fb3bb15b2b81a08fca370702bbc285663b7edc02c50cf7

+Mac = d965907e6d0f926a7ea719464b1034a5879c865a00d4df0342b2d4f4bde0976c

+

+Count = 175

+Klen = 70

+Tlen = 32

+Key = 9dd10a4c713776700f7e7e0a710a014b923bf228234daf5e807c8eb3e26cb97fd6c93d6cee2a5d7ab63c2c46e91c5b8be5044fe95d2a76e54ee5dc323412f92f7db6ceb03ee5

+Msg = 3722eaa433830abdbcaa9177e373bab05fcb8fd82fc3afa581e34f08d3c07f5f58d0aeec9d7e71866c7a808ef15301251b470a9c455a612c16a586e8a5f1f3efe184a2e6313bd0a657d901319a9f44eb241db807a9474f3f49cbd2c8b8a225859ce5cd7b36e3af8545701a482780086a42f4a1ffa2b30144e3fd3b9052fc9e87

+Mac = 9c22961d48d0651bd592fd369129e44822ee22d35c142dcb6b60a725bf177c85

+

+Count = 176

+Klen = 70

+Tlen = 32

+Key = 36bbb59925c6432139c7cd1bbc2b1b05c4010e09645f797e230131b2ad3468e7c9f2369b8b4f790dcb14dffcd6a941b262383341c80fd90d6d46fc8a81a25c47edba482c8658

+Msg = 03074e714d5eefdf5b714381d80e694ef37c2647b374d8a38a6dac2a2e1d11dfa43c6de19d8b0e93061563fbdbb46c683cd86f58c284ed981399d4adb457f6731f21ba04168011db366bac3acfc66dc8f3281b7fcde159c5343cd9d98001cd719d3e9ea25e47e1ff13fc87055d4a53b741f592857c94067216dd23763a227e21

+Mac = a6109ba372c4564f4ed8c875619ff5bb64d503225197ee9259dd50264eb1f4ea

+

+Count = 177

+Klen = 70

+Tlen = 32

+Key = ffa63ebba8239b6896bbec6af1c7b87b9c69257a0d146c0d5c4e8b8a99b43a18633f1f11b6c745ab05c5cbd8895dd96ad89cd87bb9fee30c373378ecf42274dcc02f3ef06ab9

+Msg = 739f460034249e805aff665d6248a594250695835aa24cfa5d9c9b962f7d374abd0d163f65c51cdeb687f72b778d4854eba00389548a180fb6cd5390dd9580b6a1ecd4f8692d88b3eebbc77c42f2cab5105e425e252bf62e2fddade2c5424ed6a8a446d249422a268b029df9c96075de1baa19a8d56f2d8051357234ef6ae7d2

+Mac = c580c8e0f6a1f36403322f7b0ae3d06dd2dfd16ebc6dddd205704e97dc2998e2

+

+Count = 178

+Klen = 70

+Tlen = 32

+Key = 30be326c2ffff6d031affdab0a27d5a8cbfc4ba9dec626ad522615f77307e56d9e23f73e53c9f2c78cdeb5b84d2390727db5b3b4f4dae677d5fa7b161eec81b27d743bd56609

+Msg = 082e7b4cde8914bf07c288441be643e408f6cb5ca932f67e9b975bd54ca706885468708009afaecd4d9ee846ab6c0d70a364c5a24131a766f558ad219e06e4f7e80c68e9d8289040a586662fca865ab459c037bf92465596b4281178133e7a806b214dcd747b24e0b681ea459fbd9276d31108fcc3f968d781106f20d3d62fed

+Mac = a51f5988a8f0f3992f549ea7f8c370a06d5ae8d65880067997536385d632b206

+

+Count = 179

+Klen = 70

+Tlen = 32

+Key = 19fb88775a517bfedeb2cde7c9455ca58d40d150b0a47ffbd0288e42e4725822c48d130eec98b13e7cbb044b846026f97f9f18531df9a9fe464a99c75bf9ff7ebf72e80796d6

+Msg = 892525a0f02aae7f2264cb024632f11e8adbdbecb7d0c7080832e2373c94014cea02914c1542d1d000593fab43524fcd1f3a63670f6ff8509f1b1da881fb2abbde65ae27ea89a942bbf7fcb65b611d6e1ca20fb62b00929d68ae979e7595f6800d55637b98869f9cfc43eb6bb5e9c2ca281cc720340bfdb70bf5366340edce65

+Mac = 974752b18d0dcbf29cc6104295e041259622cb7733cff63dbcf6808b15a5ad45

+

+Count = 180

+Klen = 74

+Tlen = 16

+Key = 815c2a911aaf0f8498706110a95e6f9c26c3ef52a3b13781448cb03fd2c887520df4a55144f8e206249b7517ce48afe52c11eab584f4bc0e4d5d706142edb6f0b67a99e82757b2d015d5

+Msg = 8b7fdf792a90218f91998b084756f32ff81488466bcd66ceb4956702ab343ca59c15bdfd405f7e20ec61a36e0933f55fc49a357f062db0b6a7b613cddfdb812efdfee3eb5b617f02918ecde0e9f6852313d8fda41a64b2b5972124a7258ce8901402f84a62df4dbfe6e8b064cfe6cd044d9489bf8ebb9552ec9c4399658e9952

+Mac = 7966440df79b13e95c41346eb792f3ec

+

+Count = 181

+Klen = 74

+Tlen = 16

+Key = 4809f31e93423cabf44cddcad23da7d7aee734d311fc7babc276a1bd3d35139861ead10369350d421d0af4944959cc006fee3f51b996f66031836a9134f1f7a0240a339e5e077d366c99

+Msg = 6e4abd414dca21a6ad433146986273e2da952ef613cd1f9a0a836ca644f9de19d6c24abc77845002d9fd48333a447ac936518d1bdfc043380fd26316fdb5f6ec0f05b5dcef92c3d5e16498b854fc3db9b6ddbf098d4bdeb2c45305c2420b7fabc21be7eade7ce0e76c80071c0e13267a0540ab0846f758ced00d3bf13c84e11f

+Mac = d7baa0117d008af786c2bacb38b9d386

+

+Count = 182

+Klen = 74

+Tlen = 16

+Key = 1ce3f5bce2b176bf89eb7015005ed1ff5177a4746cf8ed7226efd49381e906e02e6359e95081af1683031c381d744b63b4a41d00e059941e4142f009c42c171e23783addabcdb640420a

+Msg = b6acbe5df01480614143c94790974c82d046352124f56a0246861042293152f7ddd65d22b491afdfa39092dfea21e318f70f18bb882f82671136ce9c5dcdd27277e8878bcb535146898d87354ada2fd2f694096de5c2d06944ecbca8bb2d4b444c8941807f81edfebce5af32f8eab716947c0f1f81d5dc70a94fe14f8a7644d5

+Mac = 7588b290c3adf86198354e3eee4fc06f

+

+Count = 183

+Klen = 74

+Tlen = 16

+Key = c8fcf6fcfbf498b33d3ecf12588a596d9fecc79ed43384fa4976138446ef9861ab0c9a8cd6c407cbc72878e2823ab706b5017f949bdd82032019b01846bfb758c7b0c6c3fcf397bffd4e

+Msg = dc058f909e7170bee56c4dfde862b4314f68314a9717ccbbb79bd42d0407db7552eb02c45c29771e66043b0e207a2997ced4346da67bf066790d542b96b0be33eca737f26e23f84dbc5b2e52ffdefb261428bd3eee7492d235d21c8f3379818df15eb6809d06fe322f98ad314d3632c46b8d542436abbce93311b4c3a30a2e6a

+Mac = 99066156163139a8735711534c022937

+

+Count = 184

+Klen = 74

+Tlen = 16

+Key = 8985c5dbc6725a4e1ca26f5667d6da4938a8d542cab69a6938023075ee99846f5d73bbb8f49bc74d4b8f384aa1ea55ad88406c5ddf4a666b01439e973c91f41685a81d92692c3d734755

+Msg = 48ca2fb5b7e4f471a20911af6a66158e45aef700ec0262ce941350dc208adaaf95a84e2cce2983a2716f690b21dce48ff580db4a29f48c4f148522ed5a958931633f81ab0c3af1759c007e72f92f5dd41c2f65e1c21569f664c7c4cc6a6135fa9cd8eebbd9dee7f20b05786b5a262764a004bf4c1d2da2ca6d215f01b6b68713

+Mac = 0bfa572019e6d0f987f79b03ad67ad09

+

+Count = 185

+Klen = 74

+Tlen = 16

+Key = e243c480ff1de35ff7bbb71963e145b20dc43b31afc1d4f4fe4ffc46e733b53419f3b99cc38c60869f67c5b72f8a2484470c87e5cbcba2caba61fbb26b534e79178c2f71980af1b570d8

+Msg = 7e8bcb42e9c0015e96f4f802520a15cccf3fb280540e7108b251cfb97aa8fcd86d1eea5d340aa3f65234e14f5639d89155315729978e0fca914732b513374138c3c01f74cab36964cd740a1b1f59094d3554a6115ad2a6e5a3e2ebf3269a479367b692101383faaff1fc9bed1532500957f1c8c203a0dc62d2691ffb199ab7f1

+Mac = ec8356beca9d87dce7d010de113b9fd5

+

+Count = 186

+Klen = 74

+Tlen = 16

+Key = 2293336d9fd48570e6515a4d7c4985daf0e1230d6b6bd06589e71b8567ca3723fefff320af2cebf81e36005d4407071fc08fbe4f6e0804a43b7f491d389043e8ed71e283ef328721b542

+Msg = 7d70d5d8676518e8f4ccfb3660bfc14e20aea6c775a616b342d21d3a1b421f819eebc9d106ef47f5fd1fb7e3b2bede9f2c881a5ddef398e67bb5c73c0b860d813f27b81501a337ff50d58a8e4b2af73f8ba9ffe2b63090f951007c61d67b2a34072d8ced810a50cd94f65b7e528b73f7e6163b9f28e265b56eba23efa4a9de61

+Mac = b7a1d83414cbbde7a7738c7e77cbfe3b

+

+Count = 187

+Klen = 74

+Tlen = 16

+Key = d30c4a44e6429bb5a319252763da22b8593b7884c4ca9124698f677441edde996fca574374f08230a6b273f2dfd2f9f172a22bb3636a435bd70ab070c9e066e0ffec79453c32ea66b860

+Msg = 20a0f85250a95615b7a40f25132af070aa388d86df777bfb03c0bf0d6ddf8787cd9718e6bde708b9998cad4e91c7d58afc60b719efeb2ac80f4a152ea3732792ee74c809bbb44fdf397b753809b409f796f2e6dfa5b223f82de08935689c4a532a3def047296934d3e794f2da47af57f1ff501212753cc5604880369e3e05894

+Mac = 495f4ccb0530c7b1f03f3285faaae818

+

+Count = 188

+Klen = 74

+Tlen = 16

+Key = cff586fb91a1e9d43c36a76a4dceb9e123df15670324d1c75fdb8c3b58310a8281fb1e33e6a6cd514d71b01fbbd99a363a557bd4da448477f6248cabb804b320df3c45ffc05be17e8b61

+Msg = e37e9da1ddfe11a2ff6a95025d1970fa1c2997bb7974d0010cc017ec4e36410c5a16dfbaf0a865afbf768ccfe4b8f446ae100ed6a477396fc9772b011e9c938e6925fc8335fef5481af36f163e1e66091ca1c476849b827ee35410e3c5bbf71b9813bda3b3e908969749077e74310e6aef46804122c6f255e4be8d3b4b7db4db

+Mac = 836034775fc41e033c56ecf21d1874aa

+

+Count = 189

+Klen = 74

+Tlen = 16

+Key = ece40441a168c83e0e356e687788081f07f4b299726c5f8fd89fd836ed84017157355e455700d78dacbbb8efb459fc0ed5bbcb011bc8410522c0716e37cdaae4badcf9cbc6aaee031522

+Msg = 4b7ab71376d83edc4149b74ab10b7c1b1b6fa9ce977f2d63b2e321626306591e4174393bf287ca6ee7420d84467d90a628423edb05787bce6cbe71d2f89aa4237fd3cd6e8c1be59410f180ac54c65c47325f3af7857aec12deb4b0b379aabc026f5f1ab52cdeb6d72420b6c8c22f0986a18c432affcea8b66f8d860dcd7ec943

+Mac = 43385c80a077720fbb417848e4fa0138

+

+Count = 190

+Klen = 74

+Tlen = 16

+Key = a3a9c55995ea04d6ac3a93ee579f6e7c966ab5edaf1801472377f86ae00a1f97b8adf02e127c2dbcdff27334d04e127dc63b1c2d8bafbc95bf14c9fd15a69b30bf1c1e3c268a2473df86

+Msg = 806e9111c731be67707d49b9e4248e82039608dfc6fa1645227eff6f30eb349b8c7cd6f6fbf0785550de26259049a6a55474fd536ff736a3d1135ef7ab43d3ccd413bf316c35df7ebfd289426b1eed7dc62f9b107a0f45717210c6a3fa5f646621dc52ab6229794a840179f7bfccea732070e7ff2f69cd16ce1c405b64686fd1

+Mac = 9014a5bb17057eb39ab9fe59436e6c9f

+

+Count = 191

+Klen = 74

+Tlen = 16

+Key = ccf7c4e2a8e7a27c7bc54422214c880e7c2582d0680b1395f02dbda8c2d3b539e0453a5e99e92657b8abc316fba1dfffc6ef23ec19e9a074c078ab6dc9bfebaf3bfeb01b05b686dc350e

+Msg = 85a438185205f773b7b39db2a71ee86aee341f9b2285a2edd7a5c53913d2de4b02d79de7ea309c09606f3771bddf9e5fcc66289cc5b0ebb97f89899be18b4c389afa769b11ecd22e9fad8f38fd614ea5f8eb7a066c0ed8d86fd25f09cd2a49b8b5d36a3db17fc169db334d0e4fee21c2dc8bbbe1ffe892d11148ee8abff6fc55

+Mac = e4c09bb7f5ee13351baf8f4fe7386711

+

+Count = 192

+Klen = 74

+Tlen = 16

+Key = 8a81d2ad65585e1e1383783faa17f460c39560ab730f95657d8c8c71c5ae731608920002cbf8068e91a446435104879d2712e9104a7c76493e02fab64b2014482dee8e780d44ea88b021

+Msg = 18915f3811cc77d3d9e41d543f3bbdc827f5781cddff193da94f4b7da46d0a39c93258b84fcf31573712c0e321e5d34763188d675c605a4b069f2880cb65d5bb9ab7e3c039107382dda6718cf8ee0c9f5262699d5b8298a5c019c7803cc1b53cb1a96a167796269ef32897156c5f4e1a1b5d7486816eb994fe458e459e899402

+Mac = a43a35e87ddb24ac3420c60c99090ba8

+

+Count = 193

+Klen = 74

+Tlen = 16

+Key = 8281addf9835f1308be680dfae2dde6c52a58b698c9ee3d3391643a240e56d9f17372e76893f3e0cb62a67125b52e9db53b51e6a5ea55ad022c115b56f234c34c7db24ec1e9cd153deb6

+Msg = 48dd9054dc7703793557e492fc0fd0d45db0de0ec48683f1e402b3affef849c9600ba9212c65a4575aab9c52002fe81dd16879f5e4a0bea0b8edc6007462a5e77386182dff056c005da69b7c0b7db97b45628eafcda285eeecf4c5ccb4ae9d6f8938259fe0c1221d45322b36a3600a97c086656307f29e838afef73e4742fa09

+Mac = d02c59ac11fc434a37eded33245701bb

+

+Count = 194

+Klen = 74

+Tlen = 16

+Key = 183b4cda5c0282dab62aa4e48a19d3a5a00aab5524046e45f1085eb70f8f6af379340d9724ad742f3effdf05b3f2493bf6c34b16fe1a3e9d8f3ba063ba80b8a1a7077d8792a8b5d4142a

+Msg = 3978b24f0bd0829e22c0596627d9d6d858f1c69b8c19486771cf30d01975aa5fb50220e7a0f85d169f96f24b674ed8a75f795867a84a28715b00d72c11606a95a9634890452c537b963c58095ae9a94e220c081659fbc77b82b72eb7c1661d369d03f2f00454adf58f1c5349089390f32a139f51a7146fae705afe16306d0969

+Mac = c6d5ed018b85568d03fce635a1332e1b

+

+Count = 195

+Klen = 74

+Tlen = 24

+Key = fee603258582e3a3e8feb886599d4ac405a1634c320e85ea8ab0dc6bb65f72012f82a2e951d2cf4ab2615661b1dac0db520a3d82499f4e1c5430c190ce7ee24b82faf0e2bd87cef9a780

+Msg = 67541f77f4e40d143035462505de14a02124b992ec1d0064bd15185d4d30a2696c510919f23b12eaf9f6b4ca497529d81475456ce4a80757d1136e6cf7b48d3f2769e22cdd0de49b72e4db839339f42df245953b3b53eee84a22d1919b8bc375026353b99ca3aaaf05c66457cb739e26235c5007db66dea0900ae9d621fb6b93

+Mac = f914c842b78c3b91fe6626272c04f6bfa39c586d4823ce0e

+

+Count = 196

+Klen = 74

+Tlen = 24

+Key = 832f87d596449aeca656e0e0b4ae92dcd16a66889020a9d2bbc48eee45ccc69b809150a990f993b82053aa425382ffdcfd5e1bb81457bc6f615c28fd7bfbc20df6c9db78d804ca084c77

+Msg = 782ac16bcd744ec016ffb6b014e0c8983dfde231fa72c31212349a7766f46240e047723da60350a893ecc7f3e79039c53d6f363fbe5f4c83952f2177a28bc0c6731f312870004ce45547ce93e6ffad26de41a92a289d244b51bc33173e44f5051afc24b69331e97a4658f51677f4cdc506ba657c9ef3f1723023f8e0a0e8aa05

+Mac = c68f215b059881c9f97117b3c6d9d6deea2e0945e3e1972d

+

+Count = 197

+Klen = 74

+Tlen = 24

+Key = 92a0e01315efb0b347666581560b44bc582ab63e8f8ea651ecf72bc3d3c9673d1e02afd0646eebd17b1e40e73b16ed62854673ce84bcf9c83317ee11203ff0e16f53ed7e21e3880c9760

+Msg = 7b2f5c2741338d25d8f9d4bb0fa718499ba960c65eeb399fe94b59c23f4e81f5db11a86df583559c02d24d4a7a236ee7dd86db20f82959b065ccf9795174f8d38164e3249749feb192b5e7b395ce77aee948e9fe44903eb24c4adf9e57fe85ac750e5673b0ec510b9289eb1fe811fa43c6d5d388cb89af4ea6af545ad953f129

+Mac = 3d516a213a6b8c7e3434138238ca5e339fc21038fb7bfd21

+

+Count = 198

+Klen = 74

+Tlen = 24

+Key = ce4c926c0922ba36269a20d60dcf08d43a1cea120f266af76f1c8acd883d1f68f09b8209f41f87822dceb39a544aa9b2569ce6a9ab30aefee421463484b8647b112fe48c6bbabcd55cc8

+Msg = 8917aa6e1cd35af30eb5c7ac200e54835d4a0777a06a2fa756b44aac85a8252c0e3745ac2f3086a64bfb02dcee8934eb0c8b5e2389e22796fe57896fbb8dea8608338931b17e1c5cc1d7b8dc8dd1f000f45d4169e641ae1c23c6a7d645b12fa001753ea2aaa7643cf6b2b05305ccd0e99f2979f1be6e0a614c686c882dfe3ca2

+Mac = 94c47b509bd0c9b7aa95289a00a8a54efd425481307e9ebc

+

+Count = 199

+Klen = 74

+Tlen = 24

+Key = 0649b582dbc59816a8042cac30cee6772a0ed8cbe8e07bd538ecab8a88f3f3dd4da70b35a5c09f1e3a4c523e6a46038ca66b4fbc184957fd8999c3e781ce07afb0eee49e8ca132c13c88

+Msg = 1c685e17890ee079ee85cef5ed709356f4199e657aaac0bc85a1d5d5707ea666ebbe0ef1430d5c96e4b8f92d1c614b9121f6d83e56e4af1fca8704a101e51a0cf89d6613631af1aa390cfe177219ed4c10cf5f745cde9bcc728430b4ff48dc064aebada6719c665af56b24dc7900412ec78d792e14014b6a857fa235f20eb5fb

+Mac = 9bd70f0386405c04d1bfcaa538b4099abea343c5c4379482

+

+Count = 200

+Klen = 74

+Tlen = 24

+Key = 3d7094e005eaf0b1231cf60536f768e62f79dae86374660bde91a2e2fa94cff531e2536530406ace2cdd187179936293596abd20125ec7944362351b77a40cf7fb131523ed1f8a3696bf

+Msg = 9706d7370b66bfa78abb8b25a9d6143a9aadcaa4f60c9baab98717ac8fb3d2fe4e960af7c35b8a44b14ace8217f8680db2bba312c36165ec12225aad33d24efa085cdb1d876b4555bd6aa27013af3e9cd1f33d7be0068275d4c0d0522a3b2f08cd3f92d1dffeb681b7024d1726635c92ff3de206d661baee074bc2c4fb553dcf

+Mac = 59526ab645c2c0f464a48e411d111abe9aea19edced55383

+

+Count = 201

+Klen = 74

+Tlen = 24

+Key = 74d72be7fc8f4fd566f863ef53bdb361137cb6d96b79efdd95941161897866997b16710ca552d3ea46fb6b9feb01c1a8ede2a5a53b6613b0598c5aeea9c47d63ea5eda0bfe430926f0e3

+Msg = ff8468cf11d6190cae4a1e16871ae0817214fd441a889bbdf564fdf5779e542686d2d77a2d2d151694898a5730d9715b37c8dac4579dfcb8a762cc2cde45cf63c33e2cb1e4f205858bd807a7ee9a40bda6be31146285259ddd13c1360dd1db2b9e1090fd9eef90627a7ebd8c2923f5aea73d2bbda508bd747fc1019a6e0a2187

+Mac = 8ce0b5dde0328c9de6d4acf84ff61b3f7d01f9e9e8e36b91

+

+Count = 202

+Klen = 74

+Tlen = 24

+Key = 94869ff7b6164a24e89ab734f20322421bd31581548139c6b41f6d46243a15a05c02b41e0eaabe376012a759a0a440e6337c437dcfcb2c7aeb7d4bc0731918b6bfe9c68fc65c1bcf8fa8

+Msg = 32e5a9f3c3f9576a21dbfed017b961f118cd23f3808f2c2b1d294e35ee2b28432a804bb584a19ceaae08fa561ce820d50a1bcc3fc05b213d15b6495b323c605e98fb8dd7652d72f8d2afc7a701b541d1f6bdb901e3c18a31a8b13be09a205e64833eb782eb06a13c96b8aeea4e8a8e8ce39a325f6f2830aede026aebae3febfe

+Mac = 549afd1666a491b7ee9ccf6db2a33b2e3c2a21cfa69a1b17

+

+Count = 203

+Klen = 74

+Tlen = 24

+Key = fbca586edfa57645037b6b3cd70fc341e4d4ec97af4b3dcbe18b36e9a6210aef531b5a824b6044e023439c16045779735184f43c8a5a2ca171a68ef06b4353092833491286eed76cb3fa

+Msg = 4bf841ec0a4211b05f9a45a127bbbbf6434e8642910e8ab11b2a468e8feaf009f096c7388a94a55b2bd0d364906122b71e69372ed33c27607bc544232726364fdb9f4dc587b115b038832b0b908450647452bcdf04dbb47dd0c25f9e4804d6c575db7a9ce7e28a38ef7af59d0e6d6c85acd2bc5d0d315b9182e74009dccbf8f4

+Mac = 0cbfe6e817d297b69d5bd7740bb0e5172d86cf870a9c4da4

+

+Count = 204

+Klen = 74

+Tlen = 24

+Key = 624248769dc2742a13e6b69b5e7212ca459b36bf86be5dd8d35273601a1c7a6309a12cc1d2e1e2822b42b46999cbe2ccef9273a311781bdefe1362fc0eec03d978eb92c7160f62e16d62

+Msg = 633974ba735a5e57d1e804bcdd4d72d4a9e9df0fb9bf8db2076ef1714a64143f784e39658ad2c0d17f814ab1a3071e4111a5cce177e2106b197df8c319a549b0f56c20ea517ad574f7fe242b1ceb8fa0e560fe232967a92079e337af5dc42766e17d707150b864e54048da52ce5f8c982b01befb58b821792d8af65aa028760a

+Mac = ed1fb08b8473af53d2fe4c607e5ab9639cdd11f728462294

+

+Count = 205

+Klen = 74

+Tlen = 24

+Key = 25cdcc9cb014784dbbdbb13f56ffaa63fa234c916f02367dec0303e8810fcb13b29fec7965190abdfe5c54e2c89909ba97663ba1ab0dd46bd82ad69ae475e7d431dc0c959bd5b522a4f2

+Msg = ea526480a096a4d89306b3cf86eff742ab46e4e9ad991ee7f344dd9f24e896cae619d8c6ec5774312f40e0b77b03dd282e1858ce3d2f8efd776674eb0ebe56c253d0bef4c1bc97cf3d6392519cd6c93d660da36ed9ddf76c3124743d2747407eb8dedfb227ad57d945d79145f04e03a9da8e8c738c8b9f5baae7a43c78699b23

+Mac = 4cb070e34b3a2ecb460670ffdd457f23c9a1174bccd35f25

+

+Count = 206

+Klen = 74

+Tlen = 24

+Key = 3ac105a2bd07056d3e1c3ba547359dba94e8f79a6c32ddd532bee4ff37641257d2f192a5b326ac697403f5317145c34bda2de49c068390d00adb9bb48b17efdfd02d3a981b2ae4f43a77

+Msg = f6eac4c4099c3232df018fb3c837527b8021a1a20cbb5d1be5aa5ee5581800852dbedeb38742dd540bc46da844b40bc546e60a4492e8943a3a93ec6a46e0f5b855fdf8e188a0a26a9b9c4cd655b2801c23a9b85800a068c197a43fdbac7eaaeeb8ce9bb6d35e885cd7b0b6a5c3d9b76a5d9232481c8de2984405e1a15399270d

+Mac = e5d5cd2e163ec1c883388f5f01980d3bbee914586ddd5b0e

+

+Count = 207

+Klen = 74

+Tlen = 24

+Key = b8d9d674cb623d7a449411fef509558992b7f6e314c64f855c9ff2511946a681ebe9acdec9b94732a0f87bff3c5314716c73ea9261cf64bd58c43b5579e780b6fe9ae16c97dd28a40d67

+Msg = c9f902c8c02c5b24bb54e2dbf5c9573bd46bef39ccf15462817eee152b7561f03f8f57884c2b7f5d22e5d60d3a6925c7528aca03588ebc7089ccca2eda7a233e97c01b374a102c3adeba3b2704bb1d11d6d65af0bae731968a73dce5f283153e19b3d83c83866ba336fc9c931b674a02a87a2669bca3bbbcca9baca03a3b3dd9

+Mac = 64ae3ccfaa118acc556ac50e53cd9fdf7d7e3f4b785b2e20

+

+Count = 208

+Klen = 74

+Tlen = 24

+Key = c39ce5407c0c03ddfebe82dcca408c52f26b64027e38edd00dd57079c0f89a825374c46e8d0a7834db8130f038f860d94f7cb773e4d6a20670a6134e0bb680748f882e3dfb31af82156a

+Msg = c1490ae9579828b2d6d2935f417e0dbdfff5d424de5ec50557ddc7c3140867c4af9bc0c7bd6c9e780ba1e341272029642247a84795de5a0ee2495e6fbc029bc2ea47a5584710e40e0e44f322542c4645d62810f1f5a163fcff3e996eb05bf490f9b78145ff6c429d67258ba8d18bad88a200d2ca079028f737244265f8f9bb53

+Mac = 0d2e37440adeb6836d7f47d9c516124ebbd64abd435d4c98

+

+Count = 209

+Klen = 74

+Tlen = 24

+Key = 318608b213046a3badd1655c51135c7e1492c6cebc0f2f36e0d77f8b4a987f08a07299fb4451e0be787b50e9c66556c69fcb930542ffddb1df828663fcd1e1b6198103fa8f8ec72dbef1

+Msg = 45fcbdb93acd8300ddb88012ceb55950f4da61145adb0d4c3dcda868632f4777ae2a008cf01857670144f9510ff0ad48369d875c50865e590f6e81a6499ba66d922323fc1066616c8bdc8d80c41190cf08ed42260439da28db5faa37767109981c6d90d142c08956a408a465941eec2f9254fa381efb6800ca2989e393b9573e

+Mac = 95b0a9f0ed9fc80581407664300488f5223720148618b1b9

+

+Count = 210

+Klen = 74

+Tlen = 32

+Key = 81574323c973540719d192833ddb51f13a52dcbae294aebea51be5f6aa47f3571f5d97facdcf0c7befbe809f44bdc73963d8514e4fd559774bb96087ef8eda6e7c64275d6d96c42b4e4e

+Msg = b9e944e0b42d0ff454f7f8aa24f00e9ee039058ce4094111e39731b6dc3ade2a4acec4cf9c5be078e4f10a72d3d685c1e5e4d5abd92cd07b64dff87f266f0853ddf1cd61d9c637a9b07ab0be32ecac119faf827218b17ad4541a27519477f76ed918089f54b63d0e1e5a92982979ac187764b5e989e066a61b1065340e9cd203

+Mac = 514bd18495f6de0e237054b8e3ba1a74c3fada4279ad6b8550f3a14712c528df

+

+Count = 211

+Klen = 74

+Tlen = 32

+Key = 44f71c2317cde52151c84260d1d3c04a28cc15ce5b3802b2e5357e2bfcaf10ab15d77dfaaad1a3883bada502939948234c559dcd95e7e158338fa12ac6fd21874ec2ffabed051416ef77

+Msg = 2ac0bb0524c22b902de34ce64e6172d1b2074e159f517ab1abd152622cd10669f03aed8e2eb51c65bd0f38d084e288c532724e512fd558ddd257d2b1d41c5eb6040767803ddbb18b95a035c5d8492d4d35936b7b3630ee20f625b70f8e71d9dcd0efd0e3387d138c1f5eedce32dd88f223334b9a9eab65017f04aa8442179f62

+Mac = ca0053d51f6cf6f9998ff1e0db00b90e82c7b18cb5377acc8ebe9afe20da1c3d

+

+Count = 212

+Klen = 74

+Tlen = 32

+Key = 7edeeb6b63c3b9c836c4843ba46bfebd8ca9a6e205c7ed68a29f9710f50c65ac519ff17ad494d9b0a5041f587b5cd05e5f0de4e8b28566e5715fd5e9b8d6c9388580d921bf39bd8d775c

+Msg = f5aff283b3aaa4c71b13c590771d8bd3358d76988ecd1eae653c2f9d72c9b2dc9fc08e44b2e34ec52dbd245872332e342b5cf945e99344da0bca069ee221b2c913b7b9973cbf50fadad7758b6a962cc7ce640f78f38f0571b19b527ef2d9d09b173b7b64976633cde909be13a56d0df3e64ec019f2eaecdb1d571b27ea1994ba

+Mac = 5131ce486de164491b4bbc84e7e461a874a2cfdd769355584a063e306960acac

+

+Count = 213

+Klen = 74

+Tlen = 32

+Key = 6e1b663e808a6986f29956b7b9708066696f9dfe0d7bcdb55696d8bef9b3b7c052c857884d2499fb86039d4eaf604079330ae3e818fa6f742ae49593560c5bcb545bd46d89b22e7f2b7e

+Msg = c0bb12a5da628363a71f1f5c9ce715ce8995e607148d772b669f6532242f9830a1931bd952bd2a44821a8def46b92504b4b0c5da50bc43bfc727cef5e0ef81faaf24390c0c92a4ed43a09be40d78b204bf680db0c288755f439eaa9d2b3efb5352361547ef2919e65479f142d86ae35714856692523b359442cba333ef662ec1

+Mac = 665344e5618e0c1fb8758d049409a484fa69b89b009746067ea036bfa0ee8a37

+

+Count = 214

+Klen = 74

+Tlen = 32

+Key = 208f91ccc87965d365cc325d3262b64277f6112b0b9371a4174cee721c2eb32638735ff2a5f8abbc82f24c71d6dc1b9cd2b473375666dac0b789e490c0495569f6a4864e20da0a97071e

+Msg = 854b32866273c6eb110e380b8f3bfd169cc87a6f6149c75e5667b305637b0895465c10c134745773c31ab3be071c8215fb9a33ba231b087870da199564619d03765965d6b8a1a9fbb79d0726a3d1c90cb0ae67d3bbab4cc63198dd4e2d2fb81de0ed39ad362043e9b6403d2aab825a6481ab1ea271221eaf614a0716050ee14d

+Mac = 42680195f431e71b592899686af630e15996dc718cc29030163d677688a33021

+

+Count = 215

+Klen = 74

+Tlen = 32

+Key = 915794a6c6540f1ce9958c2784cefcc13772198cabd4fa17c88de45c281d648dcbd59a100cf4d8c8d3106c960db7b91f59578dd0045bae203897b61570e6210a2f11a5aff2f3c25163db

+Msg = 99494422460ec858a24394f603b1d9b940a24ad9c6a3d1e9e88781fe77afcd139389f7acc057cbba3d328cbf914e2f32667fc7259afc412594645162d4feac10ce45780cf9a400c3237ead50077132e421dc066bc19e176c5f21bd312e98ec29f384af8a187dd13afc2fddf08ea34a971ac0eff36311bd86f1c8acb5ac03f627

+Mac = 2ca1bb808448eb29085286594de21e254fb3416f9ab01e99ea33ca83c1d14dc3

+

+Count = 216

+Klen = 74

+Tlen = 32

+Key = b1a95aa80bac5acb7a18332fc03067600610f376d99e77a272be96063ac5a0ca8d316e6cbe978e575cdca1b8b4a8008d9718a6fe5eb34af12aa0cbd97116d1ceb613b2e3975192b40d76

+Msg = d8efcb416f237c7e05bed9212c543011c39e6a5f25d7e2cba065788a29bce1464d8041676be9fb91216cc76d049806ad943e534a6fd45b10c41bee5d0b005626f3c0e73a9c50d7cb07fc502acb4ec4d2093181a8a1568581a6d793e5101b8613b1f9e6446b20b9349fb69bdfe83f11880ac11b00252508252fe18ea9a0d41a15

+Mac = 988d4a6fa87f8138d754c5de9d176c45eaccf8eb8ca1799d87c8f04a966b6f4c

+

+Count = 217

+Klen = 74

+Tlen = 32

+Key = 9e4ba7d72b76edee6a6f290ed318bedb0ad88c8411f9c449bd4ffb3a661b7e41e32ee662b552ec4283e57ee6c7c712bec6773ae2c578789b7afa5425c1b6adb3901a4db42da6c0559e96

+Msg = 1a0223261ab437a4ac1701b4780776c43f0f8949b3e7a1618c3b4ab6d8ae2aa6921f38a2772b28d415f32905251fd3bd1a235bacfac00a486dceedb8143acdf11b4b611f1229c346f89f21299920b56b1b08f7f4d32511965d7693f0eb326893dd0c096492b6f0427ea450e87d1203146748c3e9e51d9e9183baa42806a0e3d5

+Mac = ee6492a669e22bcf19bbdfc45495cd0efa9c2f2ef5d42831e3f13a545cbcd6a1

+

+Count = 218

+Klen = 74

+Tlen = 32

+Key = 8fa12bc017bfeb6c894020e420c5f76f9080e8733b998ef3a7d0b6563063b66afa3200a82a21f6ba56be003a3924dcbdac1f3610d29079c19213e4e14ae0e009c1ef919b5e60ab4a9819

+Msg = faa6ce40d931f3c0cb4538a82a22f0d4f3221f027b99d3d85dffb729b751e57496b4fcadae5c72404fac2c54949e4c4cde664b948052479abcf59e1aef84bb9f088030473e9505c603c350ad33bb06ed928c1196757ea3e5bf3ec97e0f3c43f638529394f2a65459cfd1cd3d7041c6bcf8db9a91c1e58ec24e2461dc81412580

+Mac = 9611e838fb1d816a0ff9cd269217d93258c34df9e26b74476fe4da0f7dee2335

+

+Count = 219

+Klen = 74

+Tlen = 32

+Key = c18bc28d496beedb25ca42d1b217bc81891d4c2bbb35380e5bb9bf7e3dbbfd37fef70ef14407763447d6c06e915766430277f124165061236b9fcf057d785199b4381e49a2bcf3ef85d0

+Msg = 28b18b862ce9541ed6daf81199f9a331133b0ea3e48ff486c1acc6d5c40e9f8f063b7a15704ba3d3cea76b222511206d47e53c93a49edd8d639b7551b224c3f65aa802189648607e259ab1fa9ea665910435b7dc9a4c28aef8f32cf85f3a23e94a7e8a5945e9736702383261aac15ae571b4e8466da1bd31a83a5291745ba7af

+Mac = 0bb4127d89d9073ea425c303adc3f9db39e40adac23ea61fba8b6e251d79390f

+

+Count = 220

+Klen = 74

+Tlen = 32

+Key = dfd4faa6b9ebfff6eb33d4b536f3f18785fc33e82ddf3908735d0fd94f1f09666fa8f2667f876611a8d17d3256ceaa7e3ff3e224a11000a5cacb68e6de4dea84d53bea67c3e8be9a5cc9

+Msg = 80f20152d12b0a5993a2b17d1f55cfc0c078961ed00cd1c21db36d7a92c339691399eafca830621fdef232b06acd5d33108a5fc8c35a6d5b0eb2ff1bb2598c2d91c094a1ca91e4a5268a16f8b38c57a2aeef6de3a619f869df4ff7c5f5ca8f20c10e082a807719543215653f41ba45746350c855c170f85459315f62a13ecaaa

+Mac = 109ebb4cb2ad746762b6652fc63b99019857ae89acfe9807648c3cfa151fed42

+

+Count = 221

+Klen = 74

+Tlen = 32

+Key = c96c04a3bb0816fc47e05913a715fbac9a3ad09db75b48e8013d9f27bbe8532d7e63dbea88bf968f575602f377552e35987872a4e3155ddb8e5cef30aedd08504d4b2123bd7f3af62bbf

+Msg = b11389c7dc20ffd0c4a5f887f2576bdc302c7d2af7089a012799c528fa7f2ce23bb10071b31c83d9e58d63e6fbd04670ff1aa6de4ea4dfe94a9986a35032fdb7ea1f44f2452a1202e517257e97ced627a7bcf06e5476c236819f73daad0d96722527fe527891d4d42c0ce658af97428890da04e1efc56c6f337534d7fb57209b

+Mac = b53db6bf0c8317586ae6c1a1e2857f241bf55dddd1b423578c6949d4bf014611

+

+Count = 222

+Klen = 74

+Tlen = 32

+Key = 9319838432ca096960e2196a06398134ea06e4e8799ba470c54f0512cabb9045f529b6c4e749b6e27626c11df4595bf5b47c04ffcbe218351485f49077405ad96a3f17bcb7b3e21e80ca

+Msg = 57e1d3ff5fc4785f9370df2e5abf454579752ea934d2a9bab568d5aeb22ba43e4bc7df9f31366bb40d91ca822026e4e426cc088081732ef993ff7f676c571704a5b809278b50a3778108f4589fa18caa9f0283b3fad0bd594e406b950329d5242e5e5880b53aaa0eb57c66992055c4ffabc0a72ae712de42add2a321c0ca6808

+Mac = 4a34bd4dfeef7fa1dc739280f16a3fe1281a51311c10a920ab43d406d4ae3370

+

+Count = 223

+Klen = 74

+Tlen = 32

+Key = 2914da23e86a603cda1eede153be2431c2947cdaeed6a1ea801d18e2c218220ca682e40f0a51c4c13a31163cb730f83437bb7a88ecc903160956f0d483137d1d145ce948866ad57f2eca

+Msg = 6b8db9acdfd24150808a92368596557181d445e5a04e91112db2812b58035d72378d8bc00a1ef75ec373b81dc6f1f0a2ed96f302cf2eac8f42ca3df11e6ee678440a28b0dfab2a36eaf35bcbf3c759a71e47120f6c03292a3d6b9b111488a2259bead9a5e7e2a180fcf1c467947f59271cd0e8360035ce8b287fe2b3c3b95822

+Mac = 4de7bab7fe9a0a9bf7b51a7cdf7d929f2b1c6ff4575fd527baba1efdf4254890

+

+Count = 224

+Klen = 74

+Tlen = 32

+Key = 4b7ab133efe99e02fc89a28409ee187d579e774f4cba6fc223e13504e3511bef8d4f638b9aca55d4a43b8fbd64cf9d74dcc8c9e8d52034898c70264ea911a3fd70813fa73b083371289b

+Msg = 138efc832c64513d11b9873c6fd4d8a65dbf367092a826ddd587d141b401580b798c69025ad510cff05fcfbceb6cf0bb03201aaa32e423d5200925bddfadd418d8e30e18050eb4f0618eb9959d9f78c1157d4b3e02cd5961f138afd57459939917d9144c95d8e6a94c8f6d4eef3418c17b1ef0b46c2a7188305d9811dccb3d99

+Mac = 4f1ee7cb36c58803a8721d4ac8c4cf8cae5d8832392eed2a96dc59694252801b