mirror of https://github.com/PurpleI2P/i2pd.git
orignal
8 years ago
committed by
GitHub
27 changed files with 366 additions and 286 deletions
@ -0,0 +1,62 @@ |
|||||||
|
@echo off |
||||||
|
setlocal enableextensions enabledelayedexpansion |
||||||
|
title Building i2pd |
||||||
|
|
||||||
|
REM Copyright (c) 2013-2017, The PurpleI2P Project |
||||||
|
REM This file is part of Purple i2pd project and licensed under BSD3 |
||||||
|
REM See full license text in LICENSE file at top of project tree |
||||||
|
|
||||||
|
REM To use that script, you must have installed in your MSYS installation theese packages: |
||||||
|
REM Base: git make zip |
||||||
|
REM x86_64: mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-gcc |
||||||
|
REM i686: mingw-w64-i686-boost mingw-w64-i686-openssl mingw-w64-i686-gcc |
||||||
|
|
||||||
|
REM setting up variables for MSYS |
||||||
|
REM Note: if you installed MSYS64 to different path, edit WD variable (only C:\msys64 needed to edit)! |
||||||
|
set "WD=C:\msys64\usr\bin\" |
||||||
|
set MSYS2_PATH_TYPE=inherit |
||||||
|
set CHERE_INVOKING=enabled_from_arguments |
||||||
|
set MSYSTEM=MSYS |
||||||
|
|
||||||
|
REM detecting number of processors and subtract 1. |
||||||
|
set /a threads=%NUMBER_OF_PROCESSORS%-1 |
||||||
|
|
||||||
|
REM we must work in root of repo |
||||||
|
cd .. |
||||||
|
|
||||||
|
echo Receiving latest commit and cleaning up... |
||||||
|
"%WD%bash" -lc "git pull && make clean" > build/build_git.log 2>&1 |
||||||
|
echo. |
||||||
|
|
||||||
|
REM set to variable current commit hash |
||||||
|
FOR /F "usebackq" %%a IN (`%WD%bash -lc 'git describe --tags'`) DO ( |
||||||
|
set tag=%%a |
||||||
|
) |
||||||
|
|
||||||
|
REM starting building |
||||||
|
set MSYSTEM=MINGW32 |
||||||
|
set bitness=32 |
||||||
|
call :BUILDING |
||||||
|
echo. |
||||||
|
|
||||||
|
set MSYSTEM=MINGW64 |
||||||
|
set bitness=64 |
||||||
|
call :BUILDING |
||||||
|
echo. |
||||||
|
|
||||||
|
echo Build complete... |
||||||
|
pause |
||||||
|
exit /b 0 |
||||||
|
|
||||||
|
:BUILDING |
||||||
|
echo Building i2pd %tag% for win%bitness%: |
||||||
|
echo Build AVX+AESNI... |
||||||
|
"%WD%bash" -lc "make USE_UPNP=yes USE_AVX=1 USE_AESNI=1 -j%threads% && zip -9 build/i2pd_%tag%_win%bitness%_mingw_avx_aesni.zip i2pd.exe && make clean" > build/build_win%bitness%_avx_aesni.log 2>&1 |
||||||
|
echo Build AVX... |
||||||
|
"%WD%bash" -lc "make USE_UPNP=yes USE_AVX=1 -j%threads% && zip -9 build/i2pd_%tag%_win%bitness%_mingw_avx.zip i2pd.exe && make clean" > build/build_win%bitness%_avx.log 2>&1 |
||||||
|
echo Build AESNI... |
||||||
|
"%WD%bash" -lc "make USE_UPNP=yes USE_AESNI=1 -j%threads% && zip -9 build/i2pd_%tag%_win%bitness%_mingw_aesni.zip i2pd.exe && make clean" > build/build_win%bitness%_aesni.log 2>&1 |
||||||
|
echo Build without extensions... |
||||||
|
"%WD%bash" -lc "make USE_UPNP=yes -j%threads% && zip -9 build/i2pd_%tag%_win%bitness%_mingw.zip i2pd.exe && make clean" > build/build_win%bitness%.log 2>&1 |
||||||
|
|
||||||
|
:EOF |
@ -1,25 +0,0 @@ |
|||||||
@echo off |
|
||||||
setlocal |
|
||||||
|
|
||||||
title Building i2pd |
|
||||||
|
|
||||||
set "WD=C:\msys64\usr\bin\" |
|
||||||
set MSYS2_PATH_TYPE=inherit |
|
||||||
set CHERE_INVOKING=enabled_from_arguments |
|
||||||
set MSYSCON= |
|
||||||
|
|
||||||
echo Building i2pd for win32. Press Enter after the end of compilation... |
|
||||||
set MSYSTEM=MINGW32 |
|
||||||
set CONTITLE=MinGW x32 |
|
||||||
start "%CONTITLE%" /WAIT "%WD%bash" --login build_mingw.sh |
|
||||||
pause > nul |
|
||||||
|
|
||||||
echo Building i2pd for win64. Press Enter after the end of compilation... |
|
||||||
set MSYSTEM=MINGW64 |
|
||||||
set CONTITLE=MinGW x64 |
|
||||||
start "%CONTITLE%" /WAIT "%WD%bash" --login build_mingw.sh |
|
||||||
pause > nul |
|
||||||
|
|
||||||
echo Build complete... |
|
||||||
pause |
|
||||||
exit /b 0 |
|
@ -1,88 +0,0 @@ |
|||||||
#!/bin/sh |
|
||||||
|
|
||||||
# Определяем архитектуру. |
|
||||||
if [ $MSYSTEM == MINGW64 ]; then |
|
||||||
export arch="win64" |
|
||||||
elif [ $MSYSTEM == MINGW32 ]; then |
|
||||||
export arch="win32" |
|
||||||
else |
|
||||||
echo "Не могу понять, какая у вас архитектура, используемая для сборки."; |
|
||||||
echo "Вы точно запустили скрипт в оболочке MSYS2 MinGW [64/32]-bit ?"; |
|
||||||
echo "Обычно её можно запустить выполнив c:\msys64\mingw64.exe или c:\msys64\mingw32.exe"; |
|
||||||
exit 1; |
|
||||||
fi; |
|
||||||
|
|
||||||
# Задаём переменной contrib текущий путь и переходим на уровень выше. |
|
||||||
export contrib=$PWD |
|
||||||
cd .. |
|
||||||
|
|
||||||
# Очистка от предыдущей сборки (на всякий случай =) ). |
|
||||||
make clean >> /dev/null |
|
||||||
|
|
||||||
# Обновляем репозиторий, и получаем хеш последнего коммита. |
|
||||||
echo "Получаем обновления из репозитория."; |
|
||||||
git pull |
|
||||||
if [ "$?" != 0 ]; then |
|
||||||
echo "Не удалось обновить локальный репозиторий."; |
|
||||||
echo "Вы точно запустили скрипт в папке репозитория?"; |
|
||||||
exit 1; |
|
||||||
fi; |
|
||||||
|
|
||||||
export commit=$(git rev-parse --verify HEAD | cut -c -7) |
|
||||||
if [ -z commit ]; then |
|
||||||
echo "Не удалось получить хеш последнего коммита."; |
|
||||||
echo "Вы точно запустили скрипт в папке репозитория?"; |
|
||||||
exit 1; |
|
||||||
fi; |
|
||||||
|
|
||||||
# Получаем версию приложения |
|
||||||
export version=$(grep -E "I2PD_VERSION_(MAJOR|MINOR|MICRO)\ " version.h | grep -oE '[^ ]+$' | tr '\n' '.'|head -c -1) |
|
||||||
|
|
||||||
# Получаем количество ядер, и уменьшаем количество потоков на 1 от количества ядер (если их больше чем 1). |
|
||||||
if [ $NUMBER_OF_PROCESSORS -ge 2 ]; then |
|
||||||
export threads=$(( $NUMBER_OF_PROCESSORS - 1 )) |
|
||||||
else |
|
||||||
export threads=$NUMBER_OF_PROCESSORS |
|
||||||
fi; |
|
||||||
|
|
||||||
echo "Собираем i2pd ${version} (коммит ${commit}) для ${arch}."; |
|
||||||
|
|
||||||
# Собираем приложение с разными параметрами, и архивируем в zip архивы. |
|
||||||
echo "Сборка AVX+AESNI"; |
|
||||||
make USE_UPNP=yes USE_AVX=1 USE_AESNI=1 -j ${threads} > ${contrib}/build_${arch}_avx_aesni.log 2>&1 |
|
||||||
if [ "$?" != 0 ]; then |
|
||||||
echo "Сборка не удалась. Смотрите в build_avx_aesni.log"; |
|
||||||
exit 1; |
|
||||||
fi; |
|
||||||
zip -9 ${contrib}/i2pd_${version}_${commit}_${arch}_mingw_avx_aesni.zip i2pd.exe >> /dev/null |
|
||||||
make clean >> /dev/null |
|
||||||
|
|
||||||
echo "Сборка AVX"; |
|
||||||
make USE_UPNP=yes USE_AVX=1 -j ${threads} > ${contrib}/build_${arch}_avx.log 2>&1 |
|
||||||
if [ "$?" != 0 ]; then |
|
||||||
echo "Сборка не удалась. Смотрите в build_avx.log."; |
|
||||||
exit 1; |
|
||||||
fi; |
|
||||||
zip -9 ${contrib}/i2pd_${version}_${commit}_${arch}_mingw_avx.zip i2pd.exe >> /dev/null |
|
||||||
make clean >> /dev/null |
|
||||||
|
|
||||||
echo "Сборка AESNI"; |
|
||||||
make USE_UPNP=yes USE_AESNI=1 -j ${threads} > ${contrib}/build_${arch}_aesni.log 2>&1 |
|
||||||
if [ "$?" != 0 ]; then |
|
||||||
echo "Сборка не удалась. Смотрите в build_aesni.log"; |
|
||||||
exit 1; |
|
||||||
fi; |
|
||||||
zip -9 ${contrib}/i2pd_${version}_${commit}_${arch}_mingw_aesni.zip i2pd.exe >> /dev/null |
|
||||||
make clean >> /dev/null |
|
||||||
|
|
||||||
echo "Сборка без дополнительных инструкций"; |
|
||||||
make USE_UPNP=yes -j ${threads} > ${contrib}/build_${arch}.log 2>&1 |
|
||||||
if [ "$?" != 0 ]; then |
|
||||||
echo "Сборка не удалась. Смотрите в build.log"; |
|
||||||
exit 1; |
|
||||||
fi; |
|
||||||
zip -9 ${contrib}/i2pd_${version}_${commit}_${arch}_mingw.zip i2pd.exe >> /dev/null |
|
||||||
make clean >> /dev/null |
|
||||||
|
|
||||||
echo "Сборка i2pd ${version} для ${arch} завершена."; |
|
||||||
exit 0; |
|
@ -0,0 +1,35 @@ |
|||||||
|
#include <cassert> |
||||||
|
#include <inttypes.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include "../Gost.h" |
||||||
|
#include "../Signature.h" |
||||||
|
|
||||||
|
const uint8_t example2[72] = |
||||||
|
{ |
||||||
|
0xfb,0xe2,0xe5,0xf0,0xee,0xe3,0xc8,0x20,0xfb,0xea,0xfa,0xeb,0xef,0x20,0xff,0xfb, |
||||||
|
0xf0,0xe1,0xe0,0xf0,0xf5,0x20,0xe0,0xed,0x20,0xe8,0xec,0xe0,0xeb,0xe5,0xf0,0xf2, |
||||||
|
0xf1,0x20,0xff,0xf0,0xee,0xec,0x20,0xf1,0x20,0xfa,0xf2,0xfe,0xe5,0xe2,0x20,0x2c, |
||||||
|
0xe8,0xf6,0xf3,0xed,0xe2,0x20,0xe8,0xe6,0xee,0xe1,0xe8,0xf0,0xf2,0xd1,0x20,0x2c, |
||||||
|
0xe8,0xf0,0xf2,0xe5,0xe2,0x20,0xe5,0xd1 |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
int main () |
||||||
|
{ |
||||||
|
uint8_t priv[64], pub[128], signature[128]; |
||||||
|
i2p::crypto::CreateGOSTR3410RandomKeys (i2p::crypto::eGOSTR3410TC26A512, priv, pub); |
||||||
|
i2p::crypto::GOSTR3410_512_Signer signer (i2p::crypto::eGOSTR3410TC26A512, priv); |
||||||
|
signer.Sign (example2, 72, signature); |
||||||
|
i2p::crypto::GOSTR3410_512_Verifier verifier (i2p::crypto::eGOSTR3410TC26A512, pub); |
||||||
|
assert (verifier.Verify (example2, 72, signature)); |
||||||
|
|
||||||
|
i2p::crypto::CreateGOSTR3410RandomKeys (i2p::crypto::eGOSTR3410CryptoProA, priv, pub); |
||||||
|
i2p::crypto::GOSTR3410_256_Signer signer1 (i2p::crypto::eGOSTR3410CryptoProA, priv); |
||||||
|
signer1.Sign (example2, 72, signature); |
||||||
|
i2p::crypto::GOSTR3410_256_Verifier verifier1 (i2p::crypto::eGOSTR3410CryptoProA, pub); |
||||||
|
assert (verifier1.Verify (example2, 72, signature)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,69 @@ |
|||||||
|
#include <cassert> |
||||||
|
#include <inttypes.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include "../Gost.h" |
||||||
|
|
||||||
|
const uint8_t example1[63] = |
||||||
|
{ |
||||||
|
0x32,0x31,0x30,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x39,0x38,0x37, |
||||||
|
0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31, |
||||||
|
0x30,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x39,0x38,0x37,0x36,0x35, |
||||||
|
0x34,0x33,0x32,0x31,0x30,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30 |
||||||
|
}; |
||||||
|
|
||||||
|
const uint8_t example2[72] = |
||||||
|
{ |
||||||
|
0xfb,0xe2,0xe5,0xf0,0xee,0xe3,0xc8,0x20,0xfb,0xea,0xfa,0xeb,0xef,0x20,0xff,0xfb, |
||||||
|
0xf0,0xe1,0xe0,0xf0,0xf5,0x20,0xe0,0xed,0x20,0xe8,0xec,0xe0,0xeb,0xe5,0xf0,0xf2, |
||||||
|
0xf1,0x20,0xff,0xf0,0xee,0xec,0x20,0xf1,0x20,0xfa,0xf2,0xfe,0xe5,0xe2,0x20,0x2c, |
||||||
|
0xe8,0xf6,0xf3,0xed,0xe2,0x20,0xe8,0xe6,0xee,0xe1,0xe8,0xf0,0xf2,0xd1,0x20,0x2c, |
||||||
|
0xe8,0xf0,0xf2,0xe5,0xe2,0x20,0xe5,0xd1 |
||||||
|
}; |
||||||
|
|
||||||
|
const uint8_t example1_hash_512[64] = |
||||||
|
{ |
||||||
|
0x48,0x6f,0x64,0xc1,0x91,0x78,0x79,0x41,0x7f,0xef,0x08,0x2b,0x33,0x81,0xa4,0xe2, |
||||||
|
0x11,0xc3,0x24,0xf0,0x74,0x65,0x4c,0x38,0x82,0x3a,0x7b,0x76,0xf8,0x30,0xad,0x00, |
||||||
|
0xfa,0x1f,0xba,0xe4,0x2b,0x12,0x85,0xc0,0x35,0x2f,0x22,0x75,0x24,0xbc,0x9a,0xb1, |
||||||
|
0x62,0x54,0x28,0x8d,0xd6,0x86,0x3d,0xcc,0xd5,0xb9,0xf5,0x4a,0x1a,0xd0,0x54,0x1b |
||||||
|
}; |
||||||
|
|
||||||
|
const uint8_t example1_hash_256[32] = |
||||||
|
{ |
||||||
|
0x00,0x55,0x7b,0xe5,0xe5,0x84,0xfd,0x52,0xa4,0x49,0xb1,0x6b,0x02,0x51,0xd0,0x5d, |
||||||
|
0x27,0xf9,0x4a,0xb7,0x6c,0xba,0xa6,0xda,0x89,0x0b,0x59,0xd8,0xef,0x1e,0x15,0x9d |
||||||
|
}; |
||||||
|
|
||||||
|
const uint8_t example2_hash_512[64] = |
||||||
|
{ |
||||||
|
0x28,0xfb,0xc9,0xba,0xda,0x03,0x3b,0x14,0x60,0x64,0x2b,0xdc,0xdd,0xb9,0x0c,0x3f, |
||||||
|
0xb3,0xe5,0x6c,0x49,0x7c,0xcd,0x0f,0x62,0xb8,0xa2,0xad,0x49,0x35,0xe8,0x5f,0x03, |
||||||
|
0x76,0x13,0x96,0x6d,0xe4,0xee,0x00,0x53,0x1a,0xe6,0x0f,0x3b,0x5a,0x47,0xf8,0xda, |
||||||
|
0xe0,0x69,0x15,0xd5,0xf2,0xf1,0x94,0x99,0x6f,0xca,0xbf,0x26,0x22,0xe6,0x88,0x1e |
||||||
|
}; |
||||||
|
|
||||||
|
const uint8_t example2_hash_256[32] = |
||||||
|
{ |
||||||
|
0x50,0x8f,0x7e,0x55,0x3c,0x06,0x50,0x1d,0x74,0x9a,0x66,0xfc,0x28,0xc6,0xca,0xc0, |
||||||
|
0xb0,0x05,0x74,0x6d,0x97,0x53,0x7f,0xa8,0x5d,0x9e,0x40,0x90,0x4e,0xfe,0xd2,0x9d |
||||||
|
}; |
||||||
|
|
||||||
|
int main () |
||||||
|
{ |
||||||
|
uint8_t digest[64]; |
||||||
|
i2p::crypto::GOSTR3411_2012_512 (example1, 63, digest); |
||||||
|
assert(memcmp (digest, example1_hash_512, 64) == 0); |
||||||
|
|
||||||
|
i2p::crypto::GOSTR3411_2012_256 (example1, 63, digest); |
||||||
|
assert(memcmp (digest, example1_hash_256, 32) == 0); |
||||||
|
|
||||||
|
i2p::crypto::GOSTR3411_2012_512 (example2, 72, digest); |
||||||
|
assert(memcmp (digest, example2_hash_512, 64) == 0); |
||||||
|
|
||||||
|
i2p::crypto::GOSTR3411_2012_256 (example2, 72, digest); |
||||||
|
assert(memcmp (digest, example2_hash_256, 32) == 0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue