passwordping 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.gitmodules +3 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +5 -0
  6. data/README.md +89 -0
  7. data/Rakefile +11 -0
  8. data/ext/argon2-wrapper/Makefile +74 -0
  9. data/ext/argon2-wrapper/extconf.rb +1 -0
  10. data/ext/phc-winner-argon2/.gitattributes +10 -0
  11. data/ext/phc-winner-argon2/.gitignore +21 -0
  12. data/ext/phc-winner-argon2/.travis.yml +14 -0
  13. data/ext/phc-winner-argon2/Argon2.sln +160 -0
  14. data/ext/phc-winner-argon2/CHANGELOG.md +25 -0
  15. data/ext/phc-winner-argon2/LICENSE +314 -0
  16. data/ext/phc-winner-argon2/Makefile +187 -0
  17. data/ext/phc-winner-argon2/README.md +290 -0
  18. data/ext/phc-winner-argon2/appveyor.yml +25 -0
  19. data/ext/phc-winner-argon2/argon2-specs.pdf +0 -0
  20. data/ext/phc-winner-argon2/export.sh +7 -0
  21. data/ext/phc-winner-argon2/include/argon2.h +435 -0
  22. data/ext/phc-winner-argon2/kats/argon2d +12304 -0
  23. data/ext/phc-winner-argon2/kats/argon2d.shasum +1 -0
  24. data/ext/phc-winner-argon2/kats/argon2d_v16 +12304 -0
  25. data/ext/phc-winner-argon2/kats/argon2d_v16.shasum +1 -0
  26. data/ext/phc-winner-argon2/kats/argon2i +12304 -0
  27. data/ext/phc-winner-argon2/kats/argon2i.shasum +1 -0
  28. data/ext/phc-winner-argon2/kats/argon2i_v16 +12304 -0
  29. data/ext/phc-winner-argon2/kats/argon2i_v16.shasum +1 -0
  30. data/ext/phc-winner-argon2/kats/argon2id +12304 -0
  31. data/ext/phc-winner-argon2/kats/argon2id.shasum +1 -0
  32. data/ext/phc-winner-argon2/kats/argon2id_v16 +12304 -0
  33. data/ext/phc-winner-argon2/kats/argon2id_v16.shasum +1 -0
  34. data/ext/phc-winner-argon2/kats/check-sums.ps1 +42 -0
  35. data/ext/phc-winner-argon2/kats/check-sums.sh +13 -0
  36. data/ext/phc-winner-argon2/kats/test.ps1 +50 -0
  37. data/ext/phc-winner-argon2/kats/test.sh +49 -0
  38. data/ext/phc-winner-argon2/latex/IEEEtran.cls +6347 -0
  39. data/ext/phc-winner-argon2/latex/Makefile +18 -0
  40. data/ext/phc-winner-argon2/latex/argon2-specs.tex +920 -0
  41. data/ext/phc-winner-argon2/latex/pics/argon2-par.pdf +0 -0
  42. data/ext/phc-winner-argon2/latex/pics/compression.pdf +0 -0
  43. data/ext/phc-winner-argon2/latex/pics/generic.pdf +0 -0
  44. data/ext/phc-winner-argon2/latex/pics/power-distribution.jpg +0 -0
  45. data/ext/phc-winner-argon2/latex/tradeoff.bib +822 -0
  46. data/ext/phc-winner-argon2/libargon2.pc +16 -0
  47. data/ext/phc-winner-argon2/man/argon2.1 +57 -0
  48. data/ext/phc-winner-argon2/src/argon2.c +452 -0
  49. data/ext/phc-winner-argon2/src/bench.c +111 -0
  50. data/ext/phc-winner-argon2/src/blake2/blake2-impl.h +156 -0
  51. data/ext/phc-winner-argon2/src/blake2/blake2.h +91 -0
  52. data/ext/phc-winner-argon2/src/blake2/blake2b.c +390 -0
  53. data/ext/phc-winner-argon2/src/blake2/blamka-round-opt.h +328 -0
  54. data/ext/phc-winner-argon2/src/blake2/blamka-round-ref.h +56 -0
  55. data/ext/phc-winner-argon2/src/core.c +635 -0
  56. data/ext/phc-winner-argon2/src/core.h +227 -0
  57. data/ext/phc-winner-argon2/src/encoding.c +463 -0
  58. data/ext/phc-winner-argon2/src/encoding.h +57 -0
  59. data/ext/phc-winner-argon2/src/genkat.c +208 -0
  60. data/ext/phc-winner-argon2/src/genkat.h +49 -0
  61. data/ext/phc-winner-argon2/src/opt.c +241 -0
  62. data/ext/phc-winner-argon2/src/ref.c +194 -0
  63. data/ext/phc-winner-argon2/src/run.c +317 -0
  64. data/ext/phc-winner-argon2/src/test.c +254 -0
  65. data/ext/phc-winner-argon2/src/thread.c +57 -0
  66. data/ext/phc-winner-argon2/src/thread.h +67 -0
  67. data/ext/phc-winner-argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj +226 -0
  68. data/ext/phc-winner-argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters +69 -0
  69. data/ext/phc-winner-argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj +226 -0
  70. data/ext/phc-winner-argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters +69 -0
  71. data/ext/phc-winner-argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj +225 -0
  72. data/ext/phc-winner-argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters +66 -0
  73. data/ext/phc-winner-argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj +239 -0
  74. data/ext/phc-winner-argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters +72 -0
  75. data/ext/phc-winner-argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj +227 -0
  76. data/ext/phc-winner-argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters +69 -0
  77. data/ext/phc-winner-argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj +226 -0
  78. data/ext/phc-winner-argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters +69 -0
  79. data/ext/phc-winner-argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj +226 -0
  80. data/ext/phc-winner-argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters +69 -0
  81. data/ext/phc-winner-argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj +225 -0
  82. data/ext/phc-winner-argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters +66 -0
  83. data/ext/phc-winner-argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj +227 -0
  84. data/ext/phc-winner-argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters +72 -0
  85. data/ext/phc-winner-argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj +226 -0
  86. data/ext/phc-winner-argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters +69 -0
  87. data/lib/passwordping.rb +186 -0
  88. data/lib/passwordping/argon2_wrapper_ffi.rb +89 -0
  89. data/lib/passwordping/constants.rb +10 -0
  90. data/lib/passwordping/errors.rb +3 -0
  91. data/lib/passwordping/hashing.rb +160 -0
  92. data/lib/passwordping/password_type.rb +24 -0
  93. data/lib/passwordping/version.rb +5 -0
  94. data/passwordping.gemspec +34 -0
  95. metadata +304 -0
@@ -0,0 +1,72 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <ItemGroup>
4
+ <Filter Include="Source Files">
5
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
6
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
7
+ </Filter>
8
+ <Filter Include="Header Files">
9
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
10
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
11
+ </Filter>
12
+ <Filter Include="Resource Files">
13
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15
+ </Filter>
16
+ </ItemGroup>
17
+ <ItemGroup>
18
+ <ClInclude Include="..\..\include\argon2.h">
19
+ <Filter>Header Files</Filter>
20
+ </ClInclude>
21
+ <ClInclude Include="..\..\src\core.h">
22
+ <Filter>Header Files</Filter>
23
+ </ClInclude>
24
+ <ClInclude Include="..\..\src\encoding.h">
25
+ <Filter>Header Files</Filter>
26
+ </ClInclude>
27
+ <ClInclude Include="..\..\src\genkat.h">
28
+ <Filter>Header Files</Filter>
29
+ </ClInclude>
30
+ <ClInclude Include="..\..\src\ref.h">
31
+ <Filter>Header Files</Filter>
32
+ </ClInclude>
33
+ <ClInclude Include="..\..\src\thread.h">
34
+ <Filter>Header Files</Filter>
35
+ </ClInclude>
36
+ <ClInclude Include="..\..\src\blake2\blake2.h">
37
+ <Filter>Header Files</Filter>
38
+ </ClInclude>
39
+ <ClInclude Include="..\..\src\blake2\blake2-impl.h">
40
+ <Filter>Header Files</Filter>
41
+ </ClInclude>
42
+ <ClInclude Include="..\..\src\blake2\blamka-round-opt.h">
43
+ <Filter>Header Files</Filter>
44
+ </ClInclude>
45
+ <ClInclude Include="..\..\src\blake2\blamka-round-ref.h">
46
+ <Filter>Header Files</Filter>
47
+ </ClInclude>
48
+ </ItemGroup>
49
+ <ItemGroup>
50
+ <ClCompile Include="..\..\src\blake2\blake2b.c">
51
+ <Filter>Source Files</Filter>
52
+ </ClCompile>
53
+ <ClCompile Include="..\..\src\argon2.c">
54
+ <Filter>Source Files</Filter>
55
+ </ClCompile>
56
+ <ClCompile Include="..\..\src\core.c">
57
+ <Filter>Source Files</Filter>
58
+ </ClCompile>
59
+ <ClCompile Include="..\..\src\encoding.c">
60
+ <Filter>Source Files</Filter>
61
+ </ClCompile>
62
+ <ClCompile Include="..\..\src\genkat.c">
63
+ <Filter>Source Files</Filter>
64
+ </ClCompile>
65
+ <ClCompile Include="..\..\src\ref.c">
66
+ <Filter>Source Files</Filter>
67
+ </ClCompile>
68
+ <ClCompile Include="..\..\src\thread.c">
69
+ <Filter>Source Files</Filter>
70
+ </ClCompile>
71
+ </ItemGroup>
72
+ </Project>
@@ -0,0 +1,226 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <ItemGroup Label="ProjectConfigurations">
4
+ <ProjectConfiguration Include="Debug|Win32">
5
+ <Configuration>Debug</Configuration>
6
+ <Platform>Win32</Platform>
7
+ </ProjectConfiguration>
8
+ <ProjectConfiguration Include="ReleaseStatic|Win32">
9
+ <Configuration>ReleaseStatic</Configuration>
10
+ <Platform>Win32</Platform>
11
+ </ProjectConfiguration>
12
+ <ProjectConfiguration Include="ReleaseStatic|x64">
13
+ <Configuration>ReleaseStatic</Configuration>
14
+ <Platform>x64</Platform>
15
+ </ProjectConfiguration>
16
+ <ProjectConfiguration Include="Release|Win32">
17
+ <Configuration>Release</Configuration>
18
+ <Platform>Win32</Platform>
19
+ </ProjectConfiguration>
20
+ <ProjectConfiguration Include="Debug|x64">
21
+ <Configuration>Debug</Configuration>
22
+ <Platform>x64</Platform>
23
+ </ProjectConfiguration>
24
+ <ProjectConfiguration Include="Release|x64">
25
+ <Configuration>Release</Configuration>
26
+ <Platform>x64</Platform>
27
+ </ProjectConfiguration>
28
+ </ItemGroup>
29
+ <PropertyGroup Label="Globals">
30
+ <ProjectGuid>{8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}</ProjectGuid>
31
+ <RootNamespace>Argon2RefTestCI</RootNamespace>
32
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
33
+ </PropertyGroup>
34
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
35
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
36
+ <ConfigurationType>Application</ConfigurationType>
37
+ <UseDebugLibraries>true</UseDebugLibraries>
38
+ <PlatformToolset>v140</PlatformToolset>
39
+ <CharacterSet>MultiByte</CharacterSet>
40
+ </PropertyGroup>
41
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
42
+ <ConfigurationType>Application</ConfigurationType>
43
+ <UseDebugLibraries>false</UseDebugLibraries>
44
+ <PlatformToolset>v140</PlatformToolset>
45
+ <WholeProgramOptimization>true</WholeProgramOptimization>
46
+ <CharacterSet>MultiByte</CharacterSet>
47
+ </PropertyGroup>
48
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="Configuration">
49
+ <ConfigurationType>Application</ConfigurationType>
50
+ <UseDebugLibraries>false</UseDebugLibraries>
51
+ <PlatformToolset>v140</PlatformToolset>
52
+ <WholeProgramOptimization>true</WholeProgramOptimization>
53
+ <CharacterSet>MultiByte</CharacterSet>
54
+ </PropertyGroup>
55
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
56
+ <ConfigurationType>Application</ConfigurationType>
57
+ <UseDebugLibraries>true</UseDebugLibraries>
58
+ <PlatformToolset>v140</PlatformToolset>
59
+ <CharacterSet>MultiByte</CharacterSet>
60
+ </PropertyGroup>
61
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
62
+ <ConfigurationType>Application</ConfigurationType>
63
+ <UseDebugLibraries>false</UseDebugLibraries>
64
+ <PlatformToolset>v140</PlatformToolset>
65
+ <WholeProgramOptimization>true</WholeProgramOptimization>
66
+ <CharacterSet>MultiByte</CharacterSet>
67
+ </PropertyGroup>
68
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="Configuration">
69
+ <ConfigurationType>Application</ConfigurationType>
70
+ <UseDebugLibraries>false</UseDebugLibraries>
71
+ <PlatformToolset>v140</PlatformToolset>
72
+ <WholeProgramOptimization>true</WholeProgramOptimization>
73
+ <CharacterSet>MultiByte</CharacterSet>
74
+ </PropertyGroup>
75
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
76
+ <ImportGroup Label="ExtensionSettings">
77
+ </ImportGroup>
78
+ <ImportGroup Label="Shared">
79
+ </ImportGroup>
80
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
81
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
82
+ </ImportGroup>
83
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
84
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
85
+ </ImportGroup>
86
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="PropertySheets">
87
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
88
+ </ImportGroup>
89
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
90
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
91
+ </ImportGroup>
92
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
93
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
94
+ </ImportGroup>
95
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="PropertySheets">
96
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
97
+ </ImportGroup>
98
+ <PropertyGroup Label="UserMacros" />
99
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
100
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
101
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
102
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
103
+ </PropertyGroup>
104
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
105
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
106
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
107
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
108
+ </PropertyGroup>
109
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
110
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
111
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
112
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
113
+ </PropertyGroup>
114
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
115
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
116
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
117
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
118
+ </PropertyGroup>
119
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
120
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
121
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
122
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
123
+ </PropertyGroup>
124
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
125
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
126
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
127
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
128
+ </PropertyGroup>
129
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
130
+ <ClCompile>
131
+ <WarningLevel>Level3</WarningLevel>
132
+ <Optimization>Disabled</Optimization>
133
+ <SDLCheck>true</SDLCheck>
134
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
135
+ </ClCompile>
136
+ </ItemDefinitionGroup>
137
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
138
+ <ClCompile>
139
+ <WarningLevel>Level3</WarningLevel>
140
+ <Optimization>Disabled</Optimization>
141
+ <SDLCheck>true</SDLCheck>
142
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
143
+ </ClCompile>
144
+ </ItemDefinitionGroup>
145
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
146
+ <ClCompile>
147
+ <WarningLevel>Level3</WarningLevel>
148
+ <Optimization>MaxSpeed</Optimization>
149
+ <FunctionLevelLinking>true</FunctionLevelLinking>
150
+ <IntrinsicFunctions>true</IntrinsicFunctions>
151
+ <SDLCheck>true</SDLCheck>
152
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
153
+ </ClCompile>
154
+ <Link>
155
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
156
+ <OptimizeReferences>true</OptimizeReferences>
157
+ </Link>
158
+ </ItemDefinitionGroup>
159
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
160
+ <ClCompile>
161
+ <WarningLevel>Level3</WarningLevel>
162
+ <Optimization>MaxSpeed</Optimization>
163
+ <FunctionLevelLinking>true</FunctionLevelLinking>
164
+ <IntrinsicFunctions>true</IntrinsicFunctions>
165
+ <SDLCheck>true</SDLCheck>
166
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
167
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
168
+ </ClCompile>
169
+ <Link>
170
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
171
+ <OptimizeReferences>true</OptimizeReferences>
172
+ </Link>
173
+ </ItemDefinitionGroup>
174
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
175
+ <ClCompile>
176
+ <WarningLevel>Level3</WarningLevel>
177
+ <Optimization>MaxSpeed</Optimization>
178
+ <FunctionLevelLinking>true</FunctionLevelLinking>
179
+ <IntrinsicFunctions>true</IntrinsicFunctions>
180
+ <SDLCheck>true</SDLCheck>
181
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
182
+ </ClCompile>
183
+ <Link>
184
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
185
+ <OptimizeReferences>true</OptimizeReferences>
186
+ </Link>
187
+ </ItemDefinitionGroup>
188
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
189
+ <ClCompile>
190
+ <WarningLevel>Level3</WarningLevel>
191
+ <Optimization>MaxSpeed</Optimization>
192
+ <FunctionLevelLinking>true</FunctionLevelLinking>
193
+ <IntrinsicFunctions>true</IntrinsicFunctions>
194
+ <SDLCheck>true</SDLCheck>
195
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
196
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
197
+ </ClCompile>
198
+ <Link>
199
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
200
+ <OptimizeReferences>true</OptimizeReferences>
201
+ </Link>
202
+ </ItemDefinitionGroup>
203
+ <ItemGroup>
204
+ <ClCompile Include="..\..\src\argon2.c" />
205
+ <ClCompile Include="..\..\src\blake2\blake2b.c" />
206
+ <ClCompile Include="..\..\src\core.c" />
207
+ <ClCompile Include="..\..\src\encoding.c" />
208
+ <ClCompile Include="..\..\src\ref.c" />
209
+ <ClCompile Include="..\..\src\test.c" />
210
+ <ClCompile Include="..\..\src\thread.c" />
211
+ </ItemGroup>
212
+ <ItemGroup>
213
+ <ClInclude Include="..\..\include\argon2.h" />
214
+ <ClInclude Include="..\..\src\blake2\blake2-impl.h" />
215
+ <ClInclude Include="..\..\src\blake2\blake2.h" />
216
+ <ClInclude Include="..\..\src\blake2\blamka-round-opt.h" />
217
+ <ClInclude Include="..\..\src\blake2\blamka-round-ref.h" />
218
+ <ClInclude Include="..\..\src\core.h" />
219
+ <ClInclude Include="..\..\src\encoding.h" />
220
+ <ClInclude Include="..\..\src\ref.h" />
221
+ <ClInclude Include="..\..\src\thread.h" />
222
+ </ItemGroup>
223
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
224
+ <ImportGroup Label="ExtensionTargets">
225
+ </ImportGroup>
226
+ </Project>
@@ -0,0 +1,69 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <ItemGroup>
4
+ <Filter Include="Source Files">
5
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
6
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
7
+ </Filter>
8
+ <Filter Include="Header Files">
9
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
10
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
11
+ </Filter>
12
+ <Filter Include="Resource Files">
13
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15
+ </Filter>
16
+ </ItemGroup>
17
+ <ItemGroup>
18
+ <ClCompile Include="..\..\src\argon2.c">
19
+ <Filter>Source Files</Filter>
20
+ </ClCompile>
21
+ <ClCompile Include="..\..\src\core.c">
22
+ <Filter>Source Files</Filter>
23
+ </ClCompile>
24
+ <ClCompile Include="..\..\src\encoding.c">
25
+ <Filter>Source Files</Filter>
26
+ </ClCompile>
27
+ <ClCompile Include="..\..\src\ref.c">
28
+ <Filter>Source Files</Filter>
29
+ </ClCompile>
30
+ <ClCompile Include="..\..\src\test.c">
31
+ <Filter>Source Files</Filter>
32
+ </ClCompile>
33
+ <ClCompile Include="..\..\src\thread.c">
34
+ <Filter>Source Files</Filter>
35
+ </ClCompile>
36
+ <ClCompile Include="..\..\src\blake2\blake2b.c">
37
+ <Filter>Source Files</Filter>
38
+ </ClCompile>
39
+ </ItemGroup>
40
+ <ItemGroup>
41
+ <ClInclude Include="..\..\include\argon2.h">
42
+ <Filter>Header Files</Filter>
43
+ </ClInclude>
44
+ <ClInclude Include="..\..\src\blake2\blake2.h">
45
+ <Filter>Header Files</Filter>
46
+ </ClInclude>
47
+ <ClInclude Include="..\..\src\blake2\blake2-impl.h">
48
+ <Filter>Header Files</Filter>
49
+ </ClInclude>
50
+ <ClInclude Include="..\..\src\core.h">
51
+ <Filter>Header Files</Filter>
52
+ </ClInclude>
53
+ <ClInclude Include="..\..\src\encoding.h">
54
+ <Filter>Header Files</Filter>
55
+ </ClInclude>
56
+ <ClInclude Include="..\..\src\ref.h">
57
+ <Filter>Header Files</Filter>
58
+ </ClInclude>
59
+ <ClInclude Include="..\..\src\thread.h">
60
+ <Filter>Header Files</Filter>
61
+ </ClInclude>
62
+ <ClInclude Include="..\..\src\blake2\blamka-round-opt.h">
63
+ <Filter>Header Files</Filter>
64
+ </ClInclude>
65
+ <ClInclude Include="..\..\src\blake2\blamka-round-ref.h">
66
+ <Filter>Header Files</Filter>
67
+ </ClInclude>
68
+ </ItemGroup>
69
+ </Project>
@@ -0,0 +1,186 @@
1
+ require 'passwordping/errors'
2
+ require 'passwordping/constants'
3
+ require 'passwordping/password_type'
4
+ require 'passwordping/hashing'
5
+ require 'cgi'
6
+ require 'base64'
7
+ require 'rest-client'
8
+ require 'json'
9
+ require 'ostruct'
10
+
11
+ module PasswordPing
12
+ # This is the main entry point for accessing PasswordPing.
13
+ #
14
+ # Create this class with your API Key and Secret and then call the desired methods on the class
15
+ # to access the PasswordPing API.
16
+ class PasswordPing
17
+ def initialize(options = {})
18
+ @apiKey = options[:apiKey] || '';
19
+ raise PasswordPingFail, "No API key provided" if @apiKey == ''
20
+ @secret = options[:secret] || '';
21
+ raise PasswordPingFail, "No Secret provided" if @secret == ''
22
+ @baseURL = options[:baseURL] || "https://api.passwordping.com/v1"
23
+ @authString = calc_auth_string(@apiKey, @secret)
24
+ end
25
+
26
+ def check_credentials(username, password)
27
+ raise PasswordPingFail, "API key/Secret not set" if !@authString || @authString == ''
28
+
29
+ response = make_rest_call(@baseURL + Constants::ACCOUNTS_API_PATH + "?username=" + CGI.escape(username), "GET", nil)
30
+
31
+ if (response == "404")
32
+ return false
33
+ end
34
+
35
+ account_response = JSON.parse(response)
36
+ hashes_required = account_response["passwordHashesRequired"]
37
+
38
+ bcrypt_count = 0
39
+ query_string = ""
40
+
41
+ for i in 0..hashes_required.length - 1 do
42
+ hash_spec = hashes_required[i]
43
+
44
+ # bcrypt gets far too expensive for good response time if there are many of them to calculate.
45
+ # some mostly garbage accounts have accumulated a number of them in our DB and if we happen to hit one it
46
+ # kills performance, so short circuit out after at most 2 BCrypt hashes
47
+ if (hash_spec["hashType"] != PasswordType::BCrypt || bcrypt_count <= 2)
48
+ if (hash_spec["hashType"] == PasswordType::BCrypt)
49
+ bcrypt_count = bcrypt_count + 1
50
+ end
51
+
52
+ if (hash_spec["hashType"] != nil)
53
+ credential_hash = calc_credential_hash(username, password, account_response["salt"], hash_spec);
54
+
55
+ if (credential_hash != nil)
56
+ if (query_string.length == 0)
57
+ query_string = query_string + "?hashes=" + CGI.escape(credential_hash);
58
+ else
59
+ query_string = query_string + "&hashes=" + CGI.escape(credential_hash);
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ if (query_string.length > 0)
67
+ creds_response = make_rest_call(
68
+ @baseURL + Constants::CREDENTIALS_API_PATH + query_string, "GET", nil)
69
+ return creds_response != "404"
70
+ end
71
+
72
+ return false
73
+ end
74
+
75
+ def check_password(password)
76
+ response = make_rest_call(
77
+ @baseURL + Constants::PASSWORDS_API_PATH +
78
+ "?md5=" + Hashing.md5(password) +
79
+ "&sha1=" + Hashing.sha1(password) +
80
+ "&sha256=" + Hashing.sha256(password),
81
+ "GET", nil)
82
+
83
+ return response != "404"
84
+ end
85
+
86
+ def get_exposures_for_user(username)
87
+ response = make_rest_call(@baseURL + Constants::EXPOSURES_API_PATH + "?username=" + CGI.escape(username),
88
+ "GET", nil)
89
+
90
+ if (response == "404")
91
+ # don't have this email in the DB - return empty response
92
+ return JSON.parse('{ "count": 0, "exposures": [] }', object_class: OpenStruct)
93
+ else
94
+ # deserialize response
95
+ return JSON.parse(response, object_class: OpenStruct)
96
+ end
97
+ end
98
+
99
+ def get_exposure_details(exposure_id)
100
+ response = make_rest_call(@baseURL + Constants::EXPOSURES_API_PATH + "?id=" + CGI.escape(exposure_id),
101
+ "GET", nil)
102
+
103
+ if (response != "404")
104
+ # deserialize response
105
+ return JSON.parse(response, object_class: OpenStruct)
106
+ else
107
+ return nil
108
+ end
109
+ end
110
+
111
+ private
112
+ def make_rest_call(rest_url, method, body)
113
+ begin
114
+ response = RestClient::Request.execute(method: method, url: rest_url,
115
+ headers: { content_type: :json, accept: :json, authorization: @authString })
116
+ return response.body
117
+ rescue RestClient::NotFound
118
+ return "404"
119
+ end
120
+ end
121
+
122
+ def calc_credential_hash(username, password, salt, hash_spec)
123
+ password_hash = calc_password_hash(hash_spec["hashType"], password, hash_spec["salt"])
124
+
125
+ if (password_hash != nil)
126
+ argon2_hash = Hashing.argon2(username + "$" + password_hash, salt)
127
+
128
+ just_hash = argon2_hash[argon2_hash.rindex('$') + 1 .. argon2_hash.length]
129
+ return Base64.decode64(just_hash).unpack('H*')[0]
130
+ else
131
+ return nil
132
+ end
133
+ end
134
+
135
+ def calc_password_hash(password_type, password, salt)
136
+ case password_type
137
+ when PasswordType::MD5
138
+ return Hashing.md5(password)
139
+ when PasswordType::SHA1
140
+ return Hashing.sha1(password)
141
+ when PasswordType::SHA256
142
+ return Hashing.sha256(password)
143
+ when PasswordType::IPBoard_MyBB
144
+ if (salt != nil && salt.length > 0)
145
+ return Hashing.mybb(password, salt)
146
+ end
147
+ when PasswordType::VBulletinPre3_8_5
148
+ if (salt != nil && salt.length > 0)
149
+ return Hashing.vbulletin(password, salt)
150
+ end
151
+ when PasswordType::VBulletinPost3_8_5
152
+ if (salt != nil && salt.length > 0)
153
+ return Hashing.vbulletin(password, salt)
154
+ end
155
+ when PasswordType::BCrypt
156
+ if (salt != nil && salt.length > 0)
157
+ return Hashing.bcrypt(password, salt)
158
+ end
159
+ when PasswordType::CRC32
160
+ return Hashing.crc32(password)
161
+ when PasswordType::PHPBB3
162
+ if (salt != nil && salt.length > 0)
163
+ return Hashing.phpbb3(password, salt)
164
+ end
165
+ when PasswordType::CustomAlgorithm1
166
+ if (salt != nil && salt.length > 0)
167
+ return Hashing.custom_algorithm1(password, salt)
168
+ end
169
+ when PasswordType::CustomAlgorithm2
170
+ if (salt != nil && salt.length > 0)
171
+ return Hashing.custom_algorithm2(password, salt)
172
+ end
173
+ when PasswordType::MD5Crypt
174
+ if (salt != nil && salt.length > 0)
175
+ return Hashing.md5crypt(password, salt)
176
+ end
177
+ end
178
+
179
+ return nil
180
+ end
181
+
182
+ def calc_auth_string(apiKey, secret)
183
+ return "basic " + Base64.strict_encode64(apiKey + ":" + secret);
184
+ end
185
+ end
186
+ end