├── .gitignore
├── DelayedEventHandler.cs
├── KeePassHIBP.csproj
├── KeePassHIBP.sln
├── KeePassHIBPExt.cs
├── LICENSE
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
└── Resources.resx
├── README.md
├── Resources
└── B16x16_Icon.png
└── keepass.version
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 | # Uncomment if you have tasks that create the project's static files in wwwroot
28 | #wwwroot/
29 |
30 | # MSTest test Results
31 | [Tt]est[Rr]esult*/
32 | [Bb]uild[Ll]og.*
33 |
34 | # NUNIT
35 | *.VisualState.xml
36 | TestResult.xml
37 |
38 | # Build Results of an ATL Project
39 | [Dd]ebugPS/
40 | [Rr]eleasePS/
41 | dlldata.c
42 |
43 | # DNX
44 | project.lock.json
45 | artifacts/
46 |
47 | *_i.c
48 | *_p.c
49 | *_i.h
50 | *.ilk
51 | *.meta
52 | *.obj
53 | *.pch
54 | *.pdb
55 | *.pgc
56 | *.pgd
57 | *.rsp
58 | *.sbr
59 | *.tlb
60 | *.tli
61 | *.tlh
62 | *.tmp
63 | *.tmp_proj
64 | *.log
65 | *.vspscc
66 | *.vssscc
67 | .builds
68 | *.pidb
69 | *.svclog
70 | *.scc
71 |
72 | # Chutzpah Test files
73 | _Chutzpah*
74 |
75 | # Visual C++ cache files
76 | ipch/
77 | *.aps
78 | *.ncb
79 | *.opendb
80 | *.opensdf
81 | *.sdf
82 | *.cachefile
83 | *.VC.db
84 | *.VC.VC.opendb
85 |
86 | # Visual Studio profiler
87 | *.psess
88 | *.vsp
89 | *.vspx
90 | *.sap
91 |
92 | # TFS 2012 Local Workspace
93 | $tf/
94 |
95 | # Guidance Automation Toolkit
96 | *.gpState
97 |
98 | # ReSharper is a .NET coding add-in
99 | _ReSharper*/
100 | *.[Rr]e[Ss]harper
101 | *.DotSettings.user
102 |
103 | # JustCode is a .NET coding add-in
104 | .JustCode
105 |
106 | # TeamCity is a build add-in
107 | _TeamCity*
108 |
109 | # DotCover is a Code Coverage Tool
110 | *.dotCover
111 |
112 | # NCrunch
113 | _NCrunch_*
114 | .*crunch*.local.xml
115 | nCrunchTemp_*
116 |
117 | # MightyMoose
118 | *.mm.*
119 | AutoTest.Net/
120 |
121 | # Web workbench (sass)
122 | .sass-cache/
123 |
124 | # Installshield output folder
125 | [Ee]xpress/
126 |
127 | # DocProject is a documentation generator add-in
128 | DocProject/buildhelp/
129 | DocProject/Help/*.HxT
130 | DocProject/Help/*.HxC
131 | DocProject/Help/*.hhc
132 | DocProject/Help/*.hhk
133 | DocProject/Help/*.hhp
134 | DocProject/Help/Html2
135 | DocProject/Help/html
136 |
137 | # Click-Once directory
138 | publish/
139 |
140 | # Publish Web Output
141 | *.[Pp]ublish.xml
142 | *.azurePubxml
143 | # TODO: Comment the next line if you want to checkin your web deploy settings
144 | # but database connection strings (with potential passwords) will be unencrypted
145 | *.pubxml
146 | *.publishproj
147 |
148 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
149 | # checkin your Azure Web App publish settings, but sensitive information contained
150 | # in these scripts will be unencrypted
151 | PublishScripts/
152 |
153 | # NuGet Packages
154 | *.nupkg
155 | # The packages folder can be ignored because of Package Restore
156 | **/packages/*
157 | # except build/, which is used as an MSBuild target.
158 | !**/packages/build/
159 | # Uncomment if necessary however generally it will be regenerated when needed
160 | #!**/packages/repositories.config
161 | # NuGet v3's project.json files produces more ignoreable files
162 | *.nuget.props
163 | *.nuget.targets
164 |
165 | # Microsoft Azure Build Output
166 | csx/
167 | *.build.csdef
168 |
169 | # Microsoft Azure Emulator
170 | ecf/
171 | rcf/
172 |
173 | # Windows Store app package directories and files
174 | AppPackages/
175 | BundleArtifacts/
176 | Package.StoreAssociation.xml
177 | _pkginfo.txt
178 |
179 | # Visual Studio cache files
180 | # files ending in .cache can be ignored
181 | *.[Cc]ache
182 | # but keep track of directories ending in .cache
183 | !*.[Cc]ache/
184 |
185 | # Others
186 | ClientBin/
187 | ~$*
188 | *~
189 | *.dbmdl
190 | *.dbproj.schemaview
191 | *.pfx
192 | *.publishsettings
193 | node_modules/
194 | orleans.codegen.cs
195 |
196 | # Since there are multiple workflows, uncomment next line to ignore bower_components
197 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
198 | #bower_components/
199 |
200 | # RIA/Silverlight projects
201 | Generated_Code/
202 |
203 | # Backup & report files from converting an old project file
204 | # to a newer Visual Studio version. Backup files are not needed,
205 | # because we have git ;-)
206 | _UpgradeReport_Files/
207 | Backup*/
208 | UpgradeLog*.XML
209 | UpgradeLog*.htm
210 |
211 | # SQL Server files
212 | *.mdf
213 | *.ldf
214 |
215 | # Business Intelligence projects
216 | *.rdl.data
217 | *.bim.layout
218 | *.bim_*.settings
219 |
220 | # Microsoft Fakes
221 | FakesAssemblies/
222 |
223 | # GhostDoc plugin setting file
224 | *.GhostDoc.xml
225 |
226 | # Node.js Tools for Visual Studio
227 | .ntvs_analysis.dat
228 |
229 | # Visual Studio 6 build log
230 | *.plg
231 |
232 | # Visual Studio 6 workspace options file
233 | *.opt
234 |
235 | # Visual Studio LightSwitch build output
236 | **/*.HTMLClient/GeneratedArtifacts
237 | **/*.DesktopClient/GeneratedArtifacts
238 | **/*.DesktopClient/ModelManifest.xml
239 | **/*.Server/GeneratedArtifacts
240 | **/*.Server/ModelManifest.xml
241 | _Pvt_Extensions
242 |
243 | # Paket dependency manager
244 | .paket/paket.exe
245 | paket-files/
246 |
247 | # FAKE - F# Make
248 | .fake/
249 |
250 | # JetBrains Rider
251 | .idea/
252 | *.sln.iml
253 |
--------------------------------------------------------------------------------
/DelayedEventHandler.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace KeePassHIBP
5 | {
6 | public class DelayedEventHandler
7 | {
8 | private readonly Timer delayTimer = new Timer();
9 |
10 | private object delegatedSender;
11 | private EventArgs delegatedEventArgs;
12 |
13 | public EventHandler OnDelay;
14 |
15 | public DelayedEventHandler(TimeSpan delay, EventHandler eventDelegate)
16 | {
17 | delayTimer.Interval = (int)delay.TotalMilliseconds;
18 | delayTimer.Tick += delegate
19 | {
20 | delayTimer.Stop();
21 |
22 | if (eventDelegate != null)
23 | {
24 | eventDelegate.Invoke(delegatedSender, delegatedEventArgs);
25 | }
26 | };
27 |
28 | OnDelay = delegate (object sender, EventArgs e)
29 | {
30 | delegatedSender = sender;
31 | delegatedEventArgs = e;
32 |
33 | delayTimer.Stop();
34 |
35 | delayTimer.Start();
36 | };
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/KeePassHIBP.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}
8 | Library
9 | Properties
10 | KeePassHIBP
11 | KeePassHIBP
12 | v4.0
13 | 512
14 |
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 | false
25 | x86
26 |
27 |
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 | false
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | True
49 | True
50 | Resources.resx
51 |
52 |
53 |
54 |
55 | ResXFileCodeGenerator
56 | Resources.Designer.cs
57 |
58 |
59 |
60 |
61 | {10938016-dee2-4a25-9a5a-8fd3444379ca}
62 | KeePass
63 |
64 |
65 |
66 |
67 |
68 |
69 |
76 |
--------------------------------------------------------------------------------
/KeePassHIBP.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.27130.2027
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeePassHIBP", "KeePassHIBP.csproj", "{6A249FA1-3F87-4C81-8D31-6BDF62308F48}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeePass", "..\KeePass\KeePass\KeePass.csproj", "{10938016-DEE2-4A25-9A5A-8FD3444379CA}"
9 | EndProject
10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B6024896-002F-4562-91BA-DCF0E56EF345}"
11 | ProjectSection(SolutionItems) = preProject
12 | keepass.version = keepass.version
13 | README.md = README.md
14 | EndProjectSection
15 | EndProject
16 | Global
17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
18 | Debug|Any CPU = Debug|Any CPU
19 | Release|Any CPU = Release|Any CPU
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Release|Any CPU.ActiveCfg = Release|Any CPU
25 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Release|Any CPU.Build.0 = Release|Any CPU
26 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Release|Any CPU.Build.0 = Release|Any CPU
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | GlobalSection(ExtensibilityGlobals) = postSolution
35 | SolutionGuid = {E1AD4ACB-ACCA-40ED-AF9B-4443BF8D623C}
36 | EndGlobalSection
37 | EndGlobal
38 |
--------------------------------------------------------------------------------
/KeePassHIBPExt.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Drawing;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Net;
8 | using System.Reflection;
9 | using System.Security.Cryptography;
10 | using System.Threading;
11 | using System.Windows.Forms;
12 | using KeePass.Forms;
13 | using KeePass.Plugins;
14 | using KeePass.UI;
15 | using KeePassLib.Serialization;
16 | using KeePassLib.Utility;
17 |
18 | namespace KeePassHIBP
19 | {
20 | public class KeePassHIBPExt : Plugin
21 | {
22 | public override Image SmallIcon
23 | {
24 | get { return Properties.Resources.B16x16_Icon; }
25 | }
26 |
27 | public override string UpdateUrl
28 | {
29 | get { return "https://github.com/JanisEst/KeePassHIBP/raw/master/keepass.version"; }
30 | }
31 |
32 | public override bool Initialize(IPluginHost host)
33 | {
34 | //Debugger.Launch();
35 |
36 | // Workaround to support Tsl1.2 on .NET 4.0
37 | ServicePointManager.Expect100Continue = true;
38 | ServicePointManager.SecurityProtocol |= (SecurityProtocolType)768 | (SecurityProtocolType)3072;
39 |
40 | GlobalWindowManager.WindowAdded += WindowAddedHandler;
41 |
42 | return true;
43 | }
44 |
45 | public override void Terminate()
46 | {
47 | GlobalWindowManager.WindowAdded -= WindowAddedHandler;
48 | }
49 |
50 | ///
51 | /// Used to modify other form when they load.
52 | ///
53 | ///
54 | ///
55 | private void WindowAddedHandler(object sender, GwmWindowEventArgs e)
56 | {
57 | if (e.Form is PwEntryForm || e.Form is KeyCreationForm)
58 | {
59 | e.Form.Shown += delegate
60 | {
61 | var fieldInfo = e.Form.GetType().GetField("m_icgPassword", BindingFlags.Instance | BindingFlags.NonPublic);
62 | if (fieldInfo != null)
63 | {
64 | var icg = fieldInfo.GetValue(e.Form) as PwInputControlGroup;
65 | if (icg != null)
66 | {
67 | var m_tbPassword = e.Form.Controls.Find("m_tbPassword", true).FirstOrDefault() as TextBox;
68 | if (m_tbPassword != null)
69 | {
70 | m_tbPassword.TextChanged += new DelayedEventHandler(TimeSpan.FromMilliseconds(500), delegate
71 | {
72 | var pwBytes = icg.GetPasswordUtf8();
73 | var hash = CreateSha1Hash(pwBytes);
74 | MemUtil.ZeroByteArray(pwBytes);
75 |
76 | ThreadPool.QueueUserWorkItem(delegate(object oHash)
77 | {
78 | var strHash = (string)oHash;
79 | try
80 | {
81 | var knownHashes = RequestPwnedHashes(strHash);
82 |
83 | if (knownHashes.Contains(hash))
84 | {
85 | m_tbPassword.Invoke((MethodInvoker)delegate
86 | {
87 | var toolTip = new ToolTip();
88 | var pt = new Point(0, 0);
89 | pt.Offset(0, m_tbPassword.Height + 1);
90 | toolTip.Show("Warning: This password has previously appeared in a data breach.", m_tbPassword, pt, 2500);
91 | });
92 | }
93 | }
94 | catch
95 | {
96 | // Service may not be available.
97 | }
98 | }, hash);
99 |
100 | MemUtil.ZeroByteArray(pwBytes);
101 | }).OnDelay;
102 | }
103 | }
104 | }
105 | };
106 | }
107 | }
108 |
109 | private static List RequestPwnedHashes(string hash)
110 | {
111 | const string ApiUrl = "https://api.pwnedpasswords.com/range/";
112 |
113 | var first5Chars = hash.Substring(0, 5);
114 |
115 | var result = DownloadString(ApiUrl + first5Chars);
116 |
117 | result = StrUtil.NormalizeNewLines(result, false);
118 |
119 | const int Sha1SuffixLength = 35;
120 |
121 | return result
122 | .Split('\n')
123 | .Where(l => l.Length >= Sha1SuffixLength)
124 | .Select(l => first5Chars + l.Substring(0, Sha1SuffixLength))
125 | .ToList();
126 | }
127 |
128 | private static string DownloadString(string url)
129 | {
130 | var ioc = IOConnectionInfo.FromPath(url);
131 |
132 | using (var s = IOConnection.OpenRead(ioc))
133 | {
134 | if (s == null)
135 | {
136 | throw new InvalidOperationException();
137 | }
138 |
139 | using (var ms = new MemoryStream())
140 | {
141 | MemUtil.CopyStream(s, ms);
142 |
143 | return StrUtil.Utf8.GetString(ms.ToArray());
144 | }
145 | }
146 | }
147 |
148 | private static string CreateSha1Hash(byte[] data)
149 | {
150 | using (var sha1 = new SHA1Managed())
151 | {
152 | var hash = sha1.ComputeHash(data);
153 |
154 | return MemUtil.ByteArrayToHexString(hash);
155 | }
156 | }
157 | }
158 | }
159 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Janis Estelmann
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("KeePassHIBP")]
9 | [assembly: AssemblyDescription("KeePass 2.x plugin which checks passwords on https://haveibeenpwned.com/")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Janis Estelmann")]
12 | [assembly: AssemblyProduct("KeePass Plugin")]
13 | [assembly: AssemblyCopyright("")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("6a249fa1-3f87-4c81-8d31-6bee62308f39")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
33 | // übernehmen, indem Sie "*" eingeben:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:4.0.30319.42000
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace KeePassHIBP.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
17 | ///
18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KeePassHIBP.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap B16x16_Icon {
67 | get {
68 | object obj = ResourceManager.GetObject("B16x16_Icon", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\Resources\B16x16_Icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | KeePassHIBP
2 | =================================
3 |
4 | OVERVIEW
5 | -----
6 | KeePassHIBP (Have I Been Pwned) is a plug-in for KeePass 2.x which tests your passwords against the [Have I Been Pwned](https://haveibeenpwned.com/) database.
7 |
8 | The plugin hooks into two windows in KeePass (the 'Create Composite Master Key' form and the 'Edit Entry' form). When you type in the password field your input gets checked if it has previously appeared in a data breach. You can get [here](https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/) more informations about how the API of HIBP works.
9 |
10 | INSTALLATION
11 | -----
12 | - Download from https://github.com/JanisEst/KeePassHIBP/releases
13 | - Copy the plug-in (KeePassHIBP.plgx) into the KeePass plugin directory
14 | - Start KeePass
15 |
16 | HOW TO USE
17 | -----
18 | Type into the password field in one of the mentioned forms. If the password is weak you will see a little tooltip:
19 |
20 | 
21 |
--------------------------------------------------------------------------------
/Resources/B16x16_Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JanisEst/KeePassHIBP/2790711a8c0e1f0d64e761a4acab56f661f22c37/Resources/B16x16_Icon.png
--------------------------------------------------------------------------------
/keepass.version:
--------------------------------------------------------------------------------
1 | :
2 | KeePassHIBP:1.0.0
3 | :
4 |
--------------------------------------------------------------------------------