Updated Windows build (added sig, fixed warnings, 2017 update) (#169)

* Updated Visual Studio solution to 2017 version, fixed build warnings (issue #159), added signature and Picnic support.

* commit

treat warnings as errors

* Fix ENABLED_PICNIC macro in sig_picnic.

* Prettyprint

* Try to fix Travis error or macOS.
This commit is contained in:
Christian Paquin 2017-10-18 16:50:24 -04:00 committed by Douglas Stebila
parent a329060696
commit 40ffb4eb38
27 changed files with 516 additions and 186 deletions

View File

@ -63,6 +63,7 @@ matrix:
- CC_OQS=clang
- AES_NI=0
before_install:
- brew update
- brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/0c4314c499576b28e4c082b591228a8f940954c0/Formula/clang-format.rb
- os: osx
compiler: clang
@ -76,6 +77,7 @@ matrix:
- USE_PICNIC=1
- M4RI_DIR=/usr/local/
before_install:
- brew update
- brew install libsodium
- brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/0c4314c499576b28e4c082b591228a8f940954c0/Formula/clang-format.rb
- brew install homebrew/science/m4ri

View File

@ -202,6 +202,16 @@ McBits is disabled by default in the Visual Studio build; follow these steps to
- Add the sodium "src/include" location to the "Additional Include Directories" in the oqs project C properties.
- Add the libsodium library to the "Additional Dependencies" in the `test_kex` project Linker properties.
Picnic is disabled by default in the Visual Studio build; follow these steps to enable it:
- Download the [Picnic library](https://github.com/Microsoft/Picnic/archive/master.zip), unzip it into src\sig\sig_picnic\external.
- Open src\sig_picnic\external\Picnic-master\VisualStudio\picnic.sln, build the library for the desired target.
- Add "ENABLE_PICNIC" the oqs and test_picnic projects' C/C++ Preprocessor Definitions.
- Add "libeay32.lib" and "picnic.lib" to the test_picnic project's Linker Input.
Picnic requires pre-generated parameters to run. They cannot be generated on Windows due to some lib dependencies. They must therefore
be generated externally and imported on the Windows machine; see the Picnic library documentation. Once this is done, before running
the OQS unit tests or other programs using OQS with Picnic enabled, follow this step:
- Add an environment variable PICNIC_PARAMS_PATH containing the path of the pregenerated parameters.
Building for Android
--------------------
@ -223,7 +233,6 @@ Run it from your Android device:
Tested on SM-930F
Documentation
-------------

View File

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
# Visual Studio 15
VisualStudioVersion = 15.0.26430.4
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_rand", "test_rand\test_rand.vcxproj", "{6BB96591-0BCD-42E6-8863-4B9BFE75530C}"
ProjectSection(ProjectDependencies) = postProject
@ -15,6 +15,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_kex", "test_kex\test_k
{DCFEFB81-4696-45D2-9FCA-351CCFC13C74} = {DCFEFB81-4696-45D2-9FCA-351CCFC13C74}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_sig", "test_sig\test_sig.vcxproj", "{990D1E9C-75E0-4E17-8514-6DA0858BC17C}"
ProjectSection(ProjectDependencies) = postProject
{DCFEFB81-4696-45D2-9FCA-351CCFC13C74} = {DCFEFB81-4696-45D2-9FCA-351CCFC13C74}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@ -47,6 +52,14 @@ Global
{820B79FE-57D7-4539-A0CA-B668A0723B9B}.Release|x64.Build.0 = Release|x64
{820B79FE-57D7-4539-A0CA-B668A0723B9B}.Release|x86.ActiveCfg = Release|Win32
{820B79FE-57D7-4539-A0CA-B668A0723B9B}.Release|x86.Build.0 = Release|Win32
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Debug|x64.ActiveCfg = Debug|x64
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Debug|x64.Build.0 = Debug|x64
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Debug|x86.ActiveCfg = Debug|Win32
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Debug|x86.Build.0 = Debug|Win32
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Release|x64.ActiveCfg = Release|x64
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Release|x64.Build.0 = Release|x64
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Release|x86.ActiveCfg = Release|Win32
{990D1E9C-75E0-4E17-8514-6DA0858BC17C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -45,6 +45,8 @@
<ClInclude Include="..\..\src\kex_sidh_cln16\kex_sidh_cln16.h" />
<ClInclude Include="..\..\src\kex_sidh_cln16\SIDH.h" />
<ClInclude Include="..\..\src\kex_sidh_cln16\SIDH_internal.h" />
<ClInclude Include="..\..\src\sig\sig.h" />
<ClInclude Include="..\..\src\sig_picnic\sig_picnic.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\common\common.c" />
@ -79,6 +81,8 @@
<ClCompile Include="..\..\src\kex_sidh_cln16\SIDH.c" />
<ClCompile Include="..\..\src\kex_sidh_cln16\sidh_kex.c" />
<ClCompile Include="..\..\src\kex_sidh_cln16\SIDH_setup.c" />
<ClCompile Include="..\..\src\sig\sig.c" />
<ClCompile Include="..\..\src\sig_picnic\sig_picnic.c" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{DCFEFB81-4696-45D2-9FCA-351CCFC13C74}</ProjectGuid>
@ -171,6 +175,8 @@ copy "$(SolutionDir)..\src\kex_sidh_cln16\kex_sidh_cln16.h" "$(SolutionDir)inclu
copy "$(SolutionDir)..\src\kex_code_mcbits\kex_code_mcbits.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_mlwe_kyber\kex_mlwe_kyber.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\"
</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
@ -180,10 +186,11 @@ copy "$(SolutionDir)..\src\kex_mlwe_kyber\kex_mlwe_kyber.h" "$(SolutionDir)inclu
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@ -206,8 +213,13 @@ copy "$(SolutionDir)..\src\kex_sidh_cln16\kex_sidh_cln16.h" "$(SolutionDir)inclu
copy "$(SolutionDir)..\src\kex_code_mcbits\kex_code_mcbits.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_mlwe_kyber\kex_mlwe_kyber.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\"
</Command>
</PreBuildEvent>
<Lib>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
@ -245,6 +257,8 @@ copy "$(SolutionDir)..\src\kex_sidh_cln16\kex_sidh_cln16.h" "$(SolutionDir)inclu
copy "$(SolutionDir)..\src\kex_code_mcbits\kex_code_mcbits.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_mlwe_kyber\kex_mlwe_kyber.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\"
</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
@ -256,10 +270,11 @@ copy "$(SolutionDir)..\src\kex_mlwe_kyber\kex_mlwe_kyber.h" "$(SolutionDir)inclu
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@ -284,8 +299,13 @@ copy "$(SolutionDir)..\src\kex_sidh_cln16\kex_sidh_cln16.h" "$(SolutionDir)inclu
copy "$(SolutionDir)..\src\kex_code_mcbits\kex_code_mcbits.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\kex_mlwe_kyber\kex_mlwe_kyber.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\"
copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\"
</Command>
</PreBuildEvent>
<Lib>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Lib>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -97,6 +97,12 @@
<ClCompile Include="..\..\src\kex_mlwe_kyber\kex_mlwe_kyber.c">
<Filter>KEX_Kyber</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sig\sig.c">
<Filter>Sig</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sig_picnic\sig_picnic.c">
<Filter>Sig_Picnic</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\kex_lwe_frodo\kex_lwe_frodo.h">
@ -177,6 +183,12 @@
<ClInclude Include="..\..\src\kex_mlwe_kyber\kex_mlwe_kyber.h">
<Filter>KEX_Kyber</Filter>
</ClInclude>
<ClInclude Include="..\..\src\sig\sig.h">
<Filter>Sig</Filter>
</ClInclude>
<ClInclude Include="..\..\src\sig_picnic\sig_picnic.h">
<Filter>Sig_Picnic</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="Common">
@ -221,5 +233,11 @@
<Filter Include="KEX_Kyber">
<UniqueIdentifier>{c95ab174-03e5-4e85-a903-ccef78182c4f}</UniqueIdentifier>
</Filter>
<Filter Include="Sig">
<UniqueIdentifier>{d8958465-5fd0-4d0f-8acf-f20d79c4a490}</UniqueIdentifier>
</Filter>
<Filter Include="Sig_Picnic">
<UniqueIdentifier>{18dd9adb-41b8-4058-a714-0a0d49db26ad}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>

View File

@ -101,6 +101,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -109,16 +110,18 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -141,6 +144,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -151,10 +155,11 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -163,6 +168,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

View File

@ -104,6 +104,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -112,16 +113,18 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -144,6 +147,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -154,10 +158,11 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -166,6 +171,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -0,0 +1,169 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{990D1E9C-75E0-4E17-8514-6DA0858BC17C}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>test_sig</RootNamespace>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<SDLCheck>true</SDLCheck>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WINDOWS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<SDLCheck>true</SDLCheck>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WINDOWS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)include</AdditionalIncludeDirectories>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4006 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\src\sig\test_sig.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\sig\test_sig.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -157,7 +157,7 @@ int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n) {
#if defined(WINDOWS)
HCRYPTPROV hCryptProv;
if (!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) ||
!CryptGenRandom(hCryptProv, n, buf)) {
!CryptGenRandom(hCryptProv, (DWORD) n, buf)) {
goto err;
}
#else

View File

@ -17,6 +17,10 @@
#include <oqs/rand.h>
#include <oqs/rand_urandom_aesctr.h>
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
typedef struct oqs_rand_urandom_aesctr_ctx {
uint64_t ctr;
void *schedule;

View File

@ -1,3 +1,7 @@
#if defined(WINDOWS)
#pragma warning(disable : 4267)
#endif
#include <sys/types.h>
#if defined(WINDOWS)
#include <windows.h>
@ -17,6 +21,10 @@
#include "external/chacha20.c"
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
typedef struct OQS_RAND_urandom_chacha20_ctx {
uint8_t key[32];
uint32_t nonce[2];

View File

@ -5,6 +5,10 @@
* from https://twitter.com/tweetfips202
* by Gilles Van Assche, Daniel J. Bernstein, and Peter Schwabe */
#if defined(WINDOWS)
#pragma warning(disable : 4244)
#endif
#include <assert.h>
#include <oqs/sha3.h>
#include <stdint.h>

View File

@ -1,3 +1,7 @@
#if defined(WINDOWS)
#pragma warning(disable : 4244 4293)
#endif
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@ -222,7 +226,7 @@ static void cleanup_bob(uint8_t *bob_msg, uint8_t *bob_key) {
free(bob_key);
}
static int kex_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, const int seconds) {
static int kex_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, const size_t seconds) {
OQS_KEX *kex = NULL;
int rc;

View File

@ -18,6 +18,10 @@
#include "kex_code_mcbits.h"
#include "mcbits.h"
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
OQS_KEX *OQS_KEX_code_mcbits_new(OQS_RAND *rand) {
OQS_KEX *k = malloc(sizeof(OQS_KEX));
if (k == NULL) {

View File

@ -1,3 +1,7 @@
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
OQS_KEX *MACRIFY(OQS_KEX_lwe_frodo_new)(OQS_RAND *rand, const uint8_t *seed, const size_t seed_len, const char *named_parameters) {
OQS_KEX *k;

View File

@ -19,6 +19,10 @@
#include "kyber.c"
#include "params.h"
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
OQS_KEX *OQS_KEX_mlwe_kyber_new(OQS_RAND *rand) {
OQS_KEX *k = malloc(sizeof(OQS_KEX));
if (k == NULL) {

View File

@ -1,6 +1,10 @@
#include <string.h>
#include <stdint.h>
#if defined(WINDOWS)
#pragma warning(disable : 4146 4244)
#endif
/* returns 0 for equal strings, 1 for non-equal strings */
static int verify(const unsigned char *a, const unsigned char *b, size_t len) {
uint64_t r;

View File

@ -21,6 +21,10 @@
#include <ntru_crypto.h>
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
#define NTRU_PARAMETER_SELECTION NTRU_EES743EP1
#define NTRU_PARAMETER_SELECTION_NAME "EES743EP1"

View File

@ -21,6 +21,10 @@
#include "rlwe_a.h"
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
OQS_KEX *OQS_KEX_rlwe_bcns15_new(OQS_RAND *rand) {
OQS_KEX *k = malloc(sizeof(OQS_KEX));

View File

@ -9,8 +9,7 @@
*/
#if defined(WINDOWS)
/* Disable error/warning for unary minus operator used in this file */
#pragma warning(disable : 4146)
#pragma warning(disable : 4146 4244 4267)
#endif
#include <inttypes.h>

View File

@ -18,6 +18,10 @@
#include "LatticeCrypto_priv.h"
#include "kex_rlwe_msrln16.h"
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
OQS_KEX *OQS_KEX_rlwe_msrln16_new(OQS_RAND *rand) {
OQS_KEX *k = malloc(sizeof(OQS_KEX));

View File

@ -19,6 +19,10 @@
#include "newhope.c"
#include "params.h"
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
OQS_KEX *OQS_KEX_rlwe_newhope_new(OQS_RAND *rand) {
OQS_KEX *k = malloc(sizeof(OQS_KEX));
if (k == NULL) {

View File

@ -1,3 +1,7 @@
#if defined(WINDOWS)
#pragma warning(disable : 4047)
#endif
#if defined(WINDOWS)
#define UNUSED
#else
@ -17,6 +21,10 @@
#include "SIDH.h"
#include "kex_sidh_cln16.h"
#if defined(WINDOWS)
#define strdup _strdup // for strdup deprecation warning
#endif
static char *P751 = "p751";
static char *CompressedP751 = "compressedp751";

View File

@ -1,3 +1,7 @@
#if defined(WINDOWS)
#pragma warning(disable : 4244 4293)
#endif
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

View File

@ -4,6 +4,6 @@ noinst_LTLIBRARIES = libpicnic.la
libpicnic_la_SOURCES = sig_picnic.c external/Picnic-master/picnic.c external/Picnic-master/LowMCEnc.c external/Picnic-master/LowMC.c
libpicnic_la_CPPFLAGS = -march=native -I$(OPENSSL_DIR)/include -I../../include -Iexternal/Picnic-master
#libpicnic_la_CPPFLAGS += $(AM_CPPFLAGS)
libpicnic_la_CPPFLAGS += $(AM_CPPFLAGS)
libpicnic_la_CPPFLAGS += -std=c99

View File

@ -1,172 +1,174 @@
#if defined(WINDOWS)
#define UNUSED
#else
#define UNUSED __attribute__((unused))
#endif
#include <string.h>
#include <oqs/common.h>
#include <oqs/sig.h>
#include <oqs/rand.h>
#include "sig_picnic.h"
#include "picnic.h"
#define SERIALIZED_PUB_KEY_LEN (PICNIC_MAX_PUBLICKEY_SIZE + 1)
#define SERIALIZED_PRIV_KEY_LEN (PICNIC_MAX_PRIVATEKEY_SIZE + 1 + SERIALIZED_PUB_KEY_LEN)
static char *Picnic_42_14_FS = "Picnic_42_14_FS";
static char *Picnic_42_14_UR = "Picnic_42_14_UR";
static char *Picnic_1_316_FS = "Picnic_1_316_FS";
static char *Picnic_1_316_UR = "Picnic_1_316_UR";
static char *Picnic_10_38_FS = "Picnic_10_38_FS";
static char *Picnic_10_38_UR = "Picnic_10_38_UR";
// This flag indicates if OpenSSL is used by OQS (or an app including OQS, such
// as OpenSSL itself). If so, then Picnic skips the initialization and shutdown
// of OpenSSL, not to interfere with the containing app.
static int USES_OPENSSL =
#if USE_OPENSSL
1;
#else
0;
#endif
typedef struct PICNIC_CTX {
picnic_params_t params;
} PICNIC_CTX;
int OQS_SIG_picnic_get(OQS_SIG *s, enum OQS_SIG_algid algid) {
if (s == NULL) {
return OQS_ERROR;
}
// init the alg
picnic_params_t params;
char *name;
switch (algid) {
case OQS_SIG_picnic_42_14_FS:
params = LowMC_256_256_42_14_FS;
name = Picnic_42_14_FS;
break;
case OQS_SIG_picnic_42_14_UR:
params = LowMC_256_256_42_14_UR;
name = Picnic_42_14_UR;
break;
case OQS_SIG_picnic_1_316_FS:
params = LowMC_256_256_1_316_FS;
name = Picnic_1_316_FS;
break;
case OQS_SIG_picnic_1_316_UR:
params = LowMC_256_256_1_316_UR;
name = Picnic_1_316_UR;
break;
case OQS_SIG_picnic_default:
case OQS_SIG_picnic_10_38_FS:
params = LowMC_256_256_10_38_FS;
name = Picnic_10_38_FS;
break;
case OQS_SIG_picnic_10_38_UR:
params = LowMC_256_256_10_38_UR;
name = Picnic_10_38_UR;
break;
default:
return OQS_ERROR;
}
PICNIC_CTX *pctx = malloc(sizeof(PICNIC_CTX));
if (pctx == NULL) {
return OQS_ERROR;
}
pctx->params = params;
// read the path to the picnic params (if undefined, NULL is
// returned and passed to picnic_init, and the default is used).
const char *params_path = getenv("PICNIC_PARAMS_PATH");
if (picnic_init(params, params_path, USES_OPENSSL) != 0) {
free(pctx);
return OQS_ERROR;
}
// set the scheme values
s->method_name = name;
s->estimated_classical_security = 256;
s->estimated_quantum_security = 128;
s->priv_key_len = SERIALIZED_PRIV_KEY_LEN;
s->pub_key_len = SERIALIZED_PUB_KEY_LEN;
s->max_sig_len = PICNIC_MAX_SIGNATURE_SIZE;
s->keygen = &OQS_SIG_picnic_keygen;
s->sign = &OQS_SIG_picnic_sign;
s->verify = &OQS_SIG_picnic_verify;
s->shutdown = &OQS_SIG_picnic_shutdown;
s->ctx = pctx;
return OQS_SUCCESS;
}
int OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) {
if (s == NULL || priv == NULL || pub == NULL) {
return OQS_ERROR;
}
picnic_publickey_t pk;
picnic_privatekey_t sk;
picnic_params_t parameters = ((PICNIC_CTX *) s->ctx)->params;
int ret = picnic_keygen(parameters, &pk, &sk);
if (ret != 0) {
return OQS_ERROR;
}
// serialize the public key
if (picnic_write_public_key(&pk, pub, SERIALIZED_PUB_KEY_LEN) != SERIALIZED_PUB_KEY_LEN) {
return OQS_ERROR;
}
// serialize the private key
// 1. prepend the public key
memcpy(priv, pub, SERIALIZED_PUB_KEY_LEN);
// 2. write the private key
if (picnic_write_private_key(&sk, priv + SERIALIZED_PUB_KEY_LEN, SERIALIZED_PRIV_KEY_LEN) != (PICNIC_MAX_PRIVATEKEY_SIZE + 1)) {
return OQS_ERROR;
}
// wipe the private key
OQS_MEM_cleanse(&sk, sizeof(picnic_privatekey_t));
return OQS_SUCCESS;
}
int OQS_SIG_picnic_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len) {
if (s == NULL || priv == NULL || msg == NULL || sig == NULL || sig_len == NULL) {
return OQS_ERROR;
}
picnic_privatekey_t sk;
picnic_publickey_t pk;
// deserialize the private key
// 1. read the prepended public key
if (picnic_read_public_key(&pk, priv, SERIALIZED_PUB_KEY_LEN) != 0) {
return OQS_ERROR;
}
// 2. read the private key
if (picnic_read_private_key(&sk, priv + SERIALIZED_PUB_KEY_LEN, SERIALIZED_PRIV_KEY_LEN, &pk) != 0) {
return OQS_ERROR;
}
if (picnic_sign(&sk, msg, msg_len, sig, sig_len) != 0) {
return OQS_ERROR;
}
return OQS_SUCCESS;
}
int OQS_SIG_picnic_verify(UNUSED const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len) {
if (pub == NULL || msg == NULL || sig == NULL) {
return OQS_ERROR;
}
picnic_publickey_t pk;
// deserialize the private key
if (picnic_read_public_key(&pk, pub, SERIALIZED_PUB_KEY_LEN) != 0) {
return OQS_ERROR;
}
if (picnic_verify(&pk, msg, msg_len, sig, sig_len) != 0) {
return OQS_ERROR;
}
return OQS_SUCCESS;
}
int OQS_SIG_picnic_shutdown(OQS_SIG *s) {
if (s == NULL) {
return OQS_ERROR;
}
picnic_shutdown(USES_OPENSSL);
free(s->ctx);
return OQS_SUCCESS;
}
#if defined(ENABLE_PICNIC)
#if defined(WINDOWS)
#define UNUSED
#else
#define UNUSED __attribute__((unused))
#endif
#include <string.h>
#include <oqs/common.h>
#include <oqs/sig.h>
#include <oqs/rand.h>
#include "sig_picnic.h"
#include "picnic.h"
#define SERIALIZED_PUB_KEY_LEN (PICNIC_MAX_PUBLICKEY_SIZE + 1)
#define SERIALIZED_PRIV_KEY_LEN (PICNIC_MAX_PRIVATEKEY_SIZE + 1 + SERIALIZED_PUB_KEY_LEN)
static char *Picnic_42_14_FS = "Picnic_42_14_FS";
static char *Picnic_42_14_UR = "Picnic_42_14_UR";
static char *Picnic_1_316_FS = "Picnic_1_316_FS";
static char *Picnic_1_316_UR = "Picnic_1_316_UR";
static char *Picnic_10_38_FS = "Picnic_10_38_FS";
static char *Picnic_10_38_UR = "Picnic_10_38_UR";
// This flag indicates if OpenSSL is used by OQS (or an app including OQS, such
// as OpenSSL itself). If so, then Picnic skips the initialization and shutdown
// of OpenSSL, not to interfere with the containing app.
static int USES_OPENSSL =
#if USE_OPENSSL
1;
#else
0;
#endif
typedef struct PICNIC_CTX {
picnic_params_t params;
} PICNIC_CTX;
int OQS_SIG_picnic_get(OQS_SIG *s, enum OQS_SIG_algid algid) {
if (s == NULL) {
return OQS_ERROR;
}
// init the alg
picnic_params_t params;
char *name;
switch (algid) {
case OQS_SIG_picnic_42_14_FS:
params = LowMC_256_256_42_14_FS;
name = Picnic_42_14_FS;
break;
case OQS_SIG_picnic_42_14_UR:
params = LowMC_256_256_42_14_UR;
name = Picnic_42_14_UR;
break;
case OQS_SIG_picnic_1_316_FS:
params = LowMC_256_256_1_316_FS;
name = Picnic_1_316_FS;
break;
case OQS_SIG_picnic_1_316_UR:
params = LowMC_256_256_1_316_UR;
name = Picnic_1_316_UR;
break;
case OQS_SIG_picnic_default:
case OQS_SIG_picnic_10_38_FS:
params = LowMC_256_256_10_38_FS;
name = Picnic_10_38_FS;
break;
case OQS_SIG_picnic_10_38_UR:
params = LowMC_256_256_10_38_UR;
name = Picnic_10_38_UR;
break;
default:
return OQS_ERROR;
}
PICNIC_CTX *pctx = malloc(sizeof(PICNIC_CTX));
if (pctx == NULL) {
return OQS_ERROR;
}
pctx->params = params;
// read the path to the picnic params (if undefined, NULL is
// returned and passed to picnic_init, and the default is used).
const char *params_path = getenv("PICNIC_PARAMS_PATH");
if (picnic_init(params, params_path, USES_OPENSSL) != 0) {
free(pctx);
return OQS_ERROR;
}
// set the scheme values
s->method_name = name;
s->estimated_classical_security = 256;
s->estimated_quantum_security = 128;
s->priv_key_len = SERIALIZED_PRIV_KEY_LEN;
s->pub_key_len = SERIALIZED_PUB_KEY_LEN;
s->max_sig_len = PICNIC_MAX_SIGNATURE_SIZE;
s->keygen = &OQS_SIG_picnic_keygen;
s->sign = &OQS_SIG_picnic_sign;
s->verify = &OQS_SIG_picnic_verify;
s->shutdown = &OQS_SIG_picnic_shutdown;
s->ctx = pctx;
return OQS_SUCCESS;
}
int OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) {
if (s == NULL || priv == NULL || pub == NULL) {
return OQS_ERROR;
}
picnic_publickey_t pk;
picnic_privatekey_t sk;
picnic_params_t parameters = ((PICNIC_CTX *) s->ctx)->params;
int ret = picnic_keygen(parameters, &pk, &sk);
if (ret != 0) {
return OQS_ERROR;
}
// serialize the public key
if (picnic_write_public_key(&pk, pub, SERIALIZED_PUB_KEY_LEN) != SERIALIZED_PUB_KEY_LEN) {
return OQS_ERROR;
}
// serialize the private key
// 1. prepend the public key
memcpy(priv, pub, SERIALIZED_PUB_KEY_LEN);
// 2. write the private key
if (picnic_write_private_key(&sk, priv + SERIALIZED_PUB_KEY_LEN, SERIALIZED_PRIV_KEY_LEN) != (PICNIC_MAX_PRIVATEKEY_SIZE + 1)) {
return OQS_ERROR;
}
// wipe the private key
OQS_MEM_cleanse(&sk, sizeof(picnic_privatekey_t));
return OQS_SUCCESS;
}
int OQS_SIG_picnic_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len) {
if (s == NULL || priv == NULL || msg == NULL || sig == NULL || sig_len == NULL) {
return OQS_ERROR;
}
picnic_privatekey_t sk;
picnic_publickey_t pk;
// deserialize the private key
// 1. read the prepended public key
if (picnic_read_public_key(&pk, priv, SERIALIZED_PUB_KEY_LEN) != 0) {
return OQS_ERROR;
}
// 2. read the private key
if (picnic_read_private_key(&sk, priv + SERIALIZED_PUB_KEY_LEN, SERIALIZED_PRIV_KEY_LEN, &pk) != 0) {
return OQS_ERROR;
}
if (picnic_sign(&sk, msg, msg_len, sig, sig_len) != 0) {
return OQS_ERROR;
}
return OQS_SUCCESS;
}
int OQS_SIG_picnic_verify(UNUSED const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len) {
if (pub == NULL || msg == NULL || sig == NULL) {
return OQS_ERROR;
}
picnic_publickey_t pk;
// deserialize the private key
if (picnic_read_public_key(&pk, pub, SERIALIZED_PUB_KEY_LEN) != 0) {
return OQS_ERROR;
}
if (picnic_verify(&pk, msg, msg_len, sig, sig_len) != 0) {
return OQS_ERROR;
}
return OQS_SUCCESS;
}
int OQS_SIG_picnic_shutdown(OQS_SIG *s) {
if (s == NULL) {
return OQS_ERROR;
}
picnic_shutdown(USES_OPENSSL);
free(s->ctx);
return OQS_SUCCESS;
}
#endif // ENABLE_PICNIC