├── .gitattributes
├── .gitignore
├── Entitlement.TemplateOSX32.xml
├── HashCalc.deployproj
├── HashCalc.dpr
├── HashCalc.dproj
├── HashCalc.res
├── OSX32
├── Debug
│ ├── HashCalc
│ ├── HashCalc.entitlements
│ └── HashCalc.info.plist
└── Release
│ ├── HashCalc
│ ├── HashCalc.entitlements
│ └── HashCalc.info.plist
├── OSX_SS.png
├── README.md
├── Win64_SS.png
├── frmMain.Macintosh.fmx
├── frmMain.Windows.fmx
├── frmMain.fmx
└── frmMain.pas
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Uncomment these types if you want even more clean repository. But be careful.
2 | # It can make harm to an existing project source. Read explanations below.
3 | #
4 | # Resource files are binaries containing manifest, project icon and version info.
5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
6 | #*.res
7 | #
8 | # Type library file (binary). In old Delphi versions it should be stored.
9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
10 | #*.tlb
11 | #
12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
13 | # Uncomment this if you are not using diagrams or use newer Delphi version.
14 | #*.ddp
15 | #
16 | # Visual LiveBindings file. Added in Delphi XE2.
17 | # Uncomment this if you are not using LiveBindings Designer.
18 | #*.vlb
19 | #
20 | # Deployment Manager configuration file for your project. Added in Delphi XE2.
21 | # Uncomment this if it is not mobile development and you do not use remote debug feature.
22 | #*.deployproj
23 | #
24 |
25 | # Delphi compiler-generated binaries (safe to delete)
26 | *.exe
27 | *.dll
28 | *.bpl
29 | *.bpi
30 | *.dcp
31 | *.so
32 | *.apk
33 | *.drc
34 | *.map
35 | *.dres
36 | *.rsm
37 | *.tds
38 | *.dcu
39 | *.lib
40 |
41 | # Delphi autogenerated files (duplicated info)
42 | *.cfg
43 | *Resource.rc
44 |
45 | # Delphi local files (user-specific info)
46 | *.local
47 | *.identcache
48 | *.projdata
49 | *.tvsconfig
50 | *.dsk
51 |
52 | # Delphi history and backups
53 | __history/
54 | *.~*
55 |
56 | # =========================
57 | # Operating System Files
58 | # =========================
59 |
60 | # OSX
61 | # =========================
62 |
63 | .DS_Store
64 | .AppleDouble
65 | .LSOverride
66 |
67 | # Thumbnails
68 | ._*
69 |
70 | # Files that might appear on external disk
71 | .Spotlight-V100
72 | .Trashes
73 |
74 | # Directories potentially created on remote AFP share
75 | .AppleDB
76 | .AppleDesktop
77 | Network Trash Folder
78 | Temporary Items
79 | .apdisk
80 |
81 | # Windows
82 | # =========================
83 |
84 | # Windows image file caches
85 | Thumbs.db
86 | ehthumbs.db
87 |
88 | # Folder config file
89 | Desktop.ini
90 |
91 | # Recycle Bin used on file shares
92 | $RECYCLE.BIN/
93 |
94 | # Windows Installer files
95 | *.cab
96 | *.msi
97 | *.msm
98 | *.msp
99 |
100 | # Windows shortcuts
101 | *.lnk
102 |
--------------------------------------------------------------------------------
/Entitlement.TemplateOSX32.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <%appSandboxKeys%>
6 |
7 |
8 |
--------------------------------------------------------------------------------
/HashCalc.deployproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 12
5 |
6 |
7 |
8 |
9 |
10 | HashCalc\
11 | HashCalc.exe
12 | 0
13 |
14 |
15 | True
16 | True
17 |
18 |
19 |
20 |
21 | HashCalc.app\Contents\MacOS\
22 | libcgunwind.1.0.dylib
23 | 1
24 |
25 |
26 | True
27 |
28 |
29 | HashCalc.app\Contents\MacOS\
30 | HashCalc
31 | 1
32 |
33 |
34 | True
35 | True
36 |
37 |
38 | HashCalc.app\Contents\Resources\
39 | HashCalc.icns
40 | 1
41 |
42 |
43 | True
44 |
45 |
46 | HashCalc.app\../\
47 | HashCalc.entitlements
48 | 1
49 |
50 |
51 | True
52 |
53 |
54 | HashCalc.app\Contents\
55 | Info.plist
56 | 1
57 |
58 |
59 | True
60 |
61 |
62 | HashCalc.app\Contents\Resources\
63 | HashCalc.icns
64 | 1
65 |
66 |
67 | True
68 |
69 |
70 | HashCalc.app\../\
71 | HashCalc.entitlements
72 | 1
73 |
74 |
75 | True
76 |
77 |
78 | HashCalc.app\Contents\MacOS\
79 | HashCalc
80 | 1
81 |
82 |
83 | True
84 | True
85 |
86 |
87 | HashCalc.app\Contents\
88 | Info.plist
89 | 1
90 |
91 |
92 | True
93 |
94 |
95 |
96 |
97 | HashCalc.app\
98 | libcgunwind.1.0.dylib
99 | 1
100 |
101 |
102 | True
103 |
104 |
105 |
106 |
107 | HashCalc\
108 | HashCalc
109 | 0
110 |
111 |
112 | True
113 | True
114 |
115 |
116 | HashCalc\
117 | HashCalc.exe
118 | 0
119 |
120 |
121 | True
122 | True
123 |
124 |
125 |
126 |
--------------------------------------------------------------------------------
/HashCalc.dpr:
--------------------------------------------------------------------------------
1 | program HashCalc;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | frmMain in 'frmMain.pas' {Form1};
7 |
8 | {$R *.res}
9 |
10 | begin
11 | Application.Initialize;
12 | Application.CreateForm(TForm1, Form1);
13 | Application.Run;
14 | end.
15 |
--------------------------------------------------------------------------------
/HashCalc.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {59BF3AB1-FF70-4A67-8757-CE0ADE5EFDB1}
4 | 16.1
5 | FMX
6 | HashCalc.dpr
7 | True
8 | Release
9 | OSX32
10 | 7
11 | Application
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Cfg_1
54 | true
55 | true
56 |
57 |
58 | true
59 | Cfg_1
60 | true
61 | true
62 |
63 |
64 | true
65 | Cfg_1
66 | true
67 | true
68 |
69 |
70 | true
71 | Base
72 | true
73 |
74 |
75 | true
76 | Cfg_2
77 | true
78 | true
79 |
80 |
81 | true
82 | Cfg_2
83 | true
84 | true
85 |
86 |
87 | true
88 | Cfg_2
89 | true
90 | true
91 |
92 |
93 | true
94 | true
95 | $(BDS)\bin\delphi_PROJECTICON.ico
96 | true
97 | true
98 | true
99 | true
100 | true
101 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
102 | $(BDS)\bin\delphi_PROJECTICNS.icns
103 | HashCalc
104 | true
105 | true
106 | true
107 | .\$(Platform)\$(Config)
108 | .\$(Platform)\$(Config)
109 | false
110 | false
111 | false
112 | false
113 | false
114 |
115 |
116 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
117 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;CustomIPTransport;dsnap;IndyIPServer;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;dsnapxml;bindcompfmx;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDAC;inet;soapmidas;RESTComponents;dbexpress;IndyIPClient;$(DCC_UsePackage)
118 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
119 | true
120 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
121 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
122 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
123 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
124 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
125 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
126 | package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=preferExternal;largeHeap=False;theme=TitleBar;hardwareAccelerated=true
127 | Debug
128 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
129 |
130 |
131 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
132 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png
133 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png
134 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;CustomIPTransport;dsnap;IndyIPServer;fmxase;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;dsnapxml;bindcompfmx;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDAC;inet;soapmidas;RESTComponents;dbexpress;IndyIPClient;$(DCC_UsePackage)
135 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png
136 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png
137 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png
138 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png
139 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png
140 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png
141 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
142 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
143 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
144 | true
145 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
146 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
147 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
148 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png
149 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
150 | iPhoneAndiPad
151 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png
152 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
153 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
154 | Debug
155 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png
156 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
157 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
158 | $(MSBuildProjectName)
159 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png
160 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
161 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png
162 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
163 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png
164 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
165 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
166 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
167 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png
168 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist
169 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png
170 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
171 |
172 |
173 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png
174 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
175 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;CustomIPTransport;dsnap;IndyIPServer;fmxase;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;dsnapxml;bindcompfmx;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDAC;inet;soapmidas;RESTComponents;dbexpress;IndyIPClient;$(DCC_UsePackage)
176 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png
177 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png
178 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png
179 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png
180 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png
181 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png
182 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
183 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
184 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
185 | true
186 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
187 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
188 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png
189 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
190 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
191 | iPhoneAndiPad
192 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
193 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png
194 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png
195 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png
196 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
197 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
198 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
199 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png
200 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
201 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
202 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
203 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png
204 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png
205 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
206 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png
207 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
208 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist
209 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
210 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png
211 |
212 |
213 | true
214 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;DBXOracleDriver;CustomIPTransport;dsnap;IndyIPServer;fmxase;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDACMSSQLDriver;FireDAC;DBXInformixDriver;DataSnapServerMidas;DBXFirebirdDriver;inet;fmxobj;FireDACMySQLDriver;soapmidas;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage)
215 | CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities
216 |
217 |
218 | 1033
219 | TMSFMXChartPkgDEDXE7;FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;frxe21;TeeDB;tethering;TMSFMXWebOSMapsPkgDXE7;vcwdXE7;aqueryxe7;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;frx21;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;MetropolisUILiveTile;TMSFMXPackPkgDXE7;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;TMSFMXPackPkgDEDXE7;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;CodeSiteExpressPkg;DataSnapFireDAC;FireDACDBXDriver;soapserver;tmsdXE7;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;TMSFMXChartPkgDXE7;adortl;tmswizdXE7;FireDACASADriver;TMSiCLPkgDXE7;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;frxTee21;Tee;DBXOdbcDriver;TMSFMXCloudPackPkgDXE7;frxDB21;vclFireDAC;xmlrtl;DataSnapNativeClient;svnui;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;vclactnband;bindcompdbx;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;TMSFMXWebGMapsPkgDXE7;TMSmCLPkgDXE7;emsclient;VCLRESTComponents;FireDACMSSQLDriver;FireDAC;VclSmp;DBXInformixDriver;Intraweb;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;tmsexdXE7;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;tmsxlsdXE7;svn;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage)
220 | true
221 | $(BDS)\bin\default_app.manifest
222 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
223 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
224 |
225 |
226 | 1033
227 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;MetropolisUILiveTile;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;tmsdXE7;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DBXOdbcDriver;vclFireDAC;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;vclactnband;bindcompdbx;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;emsclient;VCLRESTComponents;FireDACMSSQLDriver;FireDAC;VclSmp;DBXInformixDriver;Intraweb;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;tmsexdXE7;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage)
228 | true
229 | $(BDS)\bin\default_app.manifest
230 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
231 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
232 |
233 |
234 | DEBUG;$(DCC_Define)
235 | true
236 | false
237 | true
238 | true
239 | true
240 |
241 |
242 | /usr/X11/bin/xterm -e "%debuggee%"
243 | true
244 | None
245 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath)
246 |
247 |
248 | false
249 |
250 |
251 | true
252 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath)
253 | 1033
254 |
255 |
256 | false
257 | RELEASE;$(DCC_Define)
258 | 0
259 | 0
260 |
261 |
262 | None
263 | true
264 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath)
265 | /usr/X11/bin/xterm -e "%debuggee%"
266 |
267 |
268 | 1033
269 | true
270 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath)
271 |
272 |
273 | 1033
274 | true
275 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath)
276 |
277 |
278 |
279 | MainSource
280 |
281 |
282 |
283 | fmx
284 |
285 |
286 | Cfg_2
287 | Base
288 |
289 |
290 | Base
291 |
292 |
293 | Cfg_1
294 | Base
295 |
296 |
297 |
298 | Delphi.Personality.12
299 | Application
300 |
301 |
302 |
303 | HashCalc.dpr
304 |
305 |
306 | Embarcadero C++Builder Office 2000 Servers Package
307 | Embarcadero C++Builder Office XP Servers Package
308 | Microsoft Office 2000 Sample Automation Server Wrapper Components
309 | Microsoft Office XP Sample Automation Server Wrapper Components
310 |
311 |
312 |
313 |
314 |
315 | true
316 |
317 |
318 | true
319 |
320 |
321 |
322 |
323 | HashCalc
324 | true
325 |
326 |
327 |
328 |
329 | HashCalc.icns
330 | true
331 |
332 |
333 |
334 |
335 | true
336 |
337 |
338 |
339 |
340 | Info.plist
341 | true
342 |
343 |
344 |
345 |
346 | HashCalc
347 | true
348 |
349 |
350 |
351 |
352 | HashCalc.icns
353 | true
354 |
355 |
356 |
357 |
358 | true
359 |
360 |
361 |
362 |
363 | HashCalc.exe
364 | true
365 |
366 |
367 |
368 |
369 | HashCalc
370 | true
371 |
372 |
373 |
374 |
375 | Info.plist
376 | true
377 |
378 |
379 |
380 |
381 | HashCalc.exe
382 | true
383 |
384 |
385 |
386 |
387 | 1
388 | .dylib
389 |
390 |
391 | 0
392 | .bpl
393 |
394 |
395 | Contents\MacOS
396 | 1
397 | .dylib
398 |
399 |
400 | 1
401 | .dylib
402 |
403 |
404 |
405 |
406 | 1
407 | .dylib
408 |
409 |
410 | 0
411 | .dll;.bpl
412 |
413 |
414 | Contents\MacOS
415 | 1
416 | .dylib
417 |
418 |
419 | 1
420 | .dylib
421 |
422 |
423 |
424 |
425 | 1
426 |
427 |
428 | 1
429 |
430 |
431 |
432 |
433 | Contents
434 | 1
435 |
436 |
437 |
438 |
439 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
440 | 1
441 |
442 |
443 |
444 |
445 | res\drawable-normal
446 | 1
447 |
448 |
449 |
450 |
451 | library\lib\x86
452 | 1
453 |
454 |
455 |
456 |
457 | 1
458 |
459 |
460 | 1
461 |
462 |
463 |
464 |
465 | ../
466 | 1
467 |
468 |
469 |
470 |
471 | library\lib\armeabi-v7a
472 | 1
473 |
474 |
475 |
476 |
477 | 1
478 |
479 |
480 | 1
481 |
482 |
483 |
484 |
485 | res\drawable-xlarge
486 | 1
487 |
488 |
489 |
490 |
491 | res\drawable-xhdpi
492 | 1
493 |
494 |
495 |
496 |
497 | 1
498 |
499 |
500 | 1
501 |
502 |
503 |
504 |
505 | res\drawable-xxhdpi
506 | 1
507 |
508 |
509 |
510 |
511 | library\lib\mips
512 | 1
513 |
514 |
515 |
516 |
517 | res\drawable
518 | 1
519 |
520 |
521 |
522 |
523 | Contents\MacOS
524 | 1
525 |
526 |
527 | 1
528 |
529 |
530 | 0
531 |
532 |
533 |
534 |
535 | Contents\MacOS
536 | 1
537 | .framework
538 |
539 |
540 | 0
541 |
542 |
543 |
544 |
545 | res\drawable-small
546 | 1
547 |
548 |
549 |
550 |
551 | ../
552 | 1
553 |
554 |
555 |
556 |
557 | Contents\MacOS
558 | 1
559 |
560 |
561 | 1
562 |
563 |
564 | Contents\MacOS
565 | 0
566 |
567 |
568 |
569 |
570 | classes
571 | 1
572 |
573 |
574 |
575 |
576 | 1
577 |
578 |
579 | 1
580 |
581 |
582 |
583 |
584 | 1
585 |
586 |
587 | 1
588 |
589 |
590 |
591 |
592 | res\drawable
593 | 1
594 |
595 |
596 |
597 |
598 | Contents\Resources
599 | 1
600 |
601 |
602 |
603 |
604 | 1
605 |
606 |
607 |
608 |
609 | 1
610 |
611 |
612 | 1
613 |
614 |
615 |
616 |
617 | 1
618 |
619 |
620 | library\lib\armeabi-v7a
621 | 1
622 |
623 |
624 | 0
625 |
626 |
627 | Contents\MacOS
628 | 1
629 |
630 |
631 | 1
632 |
633 |
634 |
635 |
636 | library\lib\armeabi
637 | 1
638 |
639 |
640 |
641 |
642 | res\drawable-large
643 | 1
644 |
645 |
646 |
647 |
648 | 0
649 |
650 |
651 | 0
652 |
653 |
654 | 0
655 |
656 |
657 | Contents\MacOS
658 | 0
659 |
660 |
661 | 0
662 |
663 |
664 |
665 |
666 | 1
667 |
668 |
669 | 1
670 |
671 |
672 |
673 |
674 | res\drawable-ldpi
675 | 1
676 |
677 |
678 |
679 |
680 | res\values
681 | 1
682 |
683 |
684 |
685 |
686 | 1
687 |
688 |
689 | 1
690 |
691 |
692 |
693 |
694 | res\drawable-mdpi
695 | 1
696 |
697 |
698 |
699 |
700 | res\drawable-hdpi
701 | 1
702 |
703 |
704 |
705 |
706 | 1
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 | False
718 | False
719 | False
720 | True
721 | True
722 | True
723 |
724 |
725 | 12
726 |
727 |
728 |
729 |
730 |
731 |
--------------------------------------------------------------------------------
/HashCalc.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/HashCalc.res
--------------------------------------------------------------------------------
/OSX32/Debug/HashCalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/OSX32/Debug/HashCalc
--------------------------------------------------------------------------------
/OSX32/Debug/HashCalc.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/OSX32/Debug/HashCalc.info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleName
6 | HashCalc
7 | CFBundleDisplayName
8 | HashCalc
9 | CFBundleIdentifier
10 | HashCalc
11 | CFBundleVersion
12 | 1.0.0
13 | CFBundlePackageType
14 | APPL
15 | CFBundleSignature
16 | ????
17 | CFBundleAllowMixedLocalizations
18 | YES
19 | CFBundleExecutable
20 | HashCalc
21 | NSHighResolutionCapable
22 | true
23 | LSApplicationCategoryType
24 | public.app-category.utilities
25 | UISupportedInterfaceOrientations
26 |
27 | UIInterfaceOrientationPortrait
28 | UIInterfaceOrientationPortraitUpsideDown
29 | UIInterfaceOrientationLandscapeLeft
30 | UIInterfaceOrientationLandscapeRight
31 |
32 | UISupportedInterfaceOrientations~ipad
33 |
34 | UIInterfaceOrientationPortrait
35 | UIInterfaceOrientationPortraitUpsideDown
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | CFBundleShortVersionString
40 | 1.0
41 | CFBundleIconFile
42 | HashCalc.icns
43 | UILaunchImages
44 |
45 |
46 | UILaunchImageSize
47 | {320, 480}
48 | UILaunchImageName
49 | Default
50 | UILaunchImageMinimumOSVersion
51 | 8.0
52 | UILaunchImageOrientation
53 | Portrait
54 |
55 |
56 | UILaunchImageSize
57 | {320, 568}
58 | UILaunchImageName
59 | Default-568h
60 | UILaunchImageMinimumOSVersion
61 | 8.0
62 | UILaunchImageOrientation
63 | Portrait
64 |
65 |
66 | UILaunchImageSize
67 | {414, 736}
68 | UILaunchImageName
69 | Default-736h
70 | UILaunchImageMinimumOSVersion
71 | 8.0
72 | UILaunchImageOrientation
73 | Portrait
74 |
75 |
76 | UILaunchImageSize
77 | {414, 736}
78 | UILaunchImageName
79 | Default-Landscape-736h
80 | UILaunchImageMinimumOSVersion
81 | 8.0
82 | UILaunchImageOrientation
83 | Landscape
84 |
85 |
86 | UILaunchImageSize
87 | {375, 667}
88 | UILaunchImageName
89 | Default-667h
90 | UILaunchImageMinimumOSVersion
91 | 8.0
92 | UILaunchImageOrientation
93 | Portrait
94 |
95 |
96 | UILaunchImages~ipad
97 |
98 |
99 | UILaunchImageSize
100 | {768, 1024}
101 | UILaunchImageName
102 | Default-Portrait
103 | UILaunchImageMinimumOSVersion
104 | 8.0
105 | UILaunchImageOrientation
106 | Portrait
107 |
108 |
109 | UILaunchImageSize
110 | {768, 1024}
111 | UILaunchImageName
112 | Default-Landscape
113 | UILaunchImageMinimumOSVersion
114 | 8.0
115 | UILaunchImageOrientation
116 | Landscape
117 |
118 |
119 | UILaunchImageSize
120 | {1536, 2048}
121 | UILaunchImageName
122 | Default-Portrait
123 | UILaunchImageMinimumOSVersion
124 | 8.0
125 | UILaunchImageOrientation
126 | Portrait
127 |
128 |
129 | UILaunchImageSize
130 | {1536, 2048}
131 | UILaunchImageName
132 | Default-Landscape
133 | UILaunchImageMinimumOSVersion
134 | 8.0
135 | UILaunchImageOrientation
136 | Landscape
137 |
138 |
139 |
140 |
141 |
--------------------------------------------------------------------------------
/OSX32/Release/HashCalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/OSX32/Release/HashCalc
--------------------------------------------------------------------------------
/OSX32/Release/HashCalc.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/OSX32/Release/HashCalc.info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleName
6 | HashCalc
7 | CFBundleDisplayName
8 | HashCalc
9 | CFBundleIdentifier
10 | HashCalc
11 | CFBundleVersion
12 | 1.0.0
13 | CFBundlePackageType
14 | APPL
15 | CFBundleSignature
16 | ????
17 | CFBundleAllowMixedLocalizations
18 | YES
19 | CFBundleExecutable
20 | HashCalc
21 | NSHighResolutionCapable
22 | true
23 | LSApplicationCategoryType
24 | public.app-category.utilities
25 | UISupportedInterfaceOrientations
26 |
27 | UIInterfaceOrientationPortrait
28 | UIInterfaceOrientationPortraitUpsideDown
29 | UIInterfaceOrientationLandscapeLeft
30 | UIInterfaceOrientationLandscapeRight
31 |
32 | UISupportedInterfaceOrientations~ipad
33 |
34 | UIInterfaceOrientationPortrait
35 | UIInterfaceOrientationPortraitUpsideDown
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | CFBundleShortVersionString
40 | 1.0
41 | CFBundleIconFile
42 | HashCalc.icns
43 | UILaunchImages
44 |
45 |
46 | UILaunchImageSize
47 | {320, 480}
48 | UILaunchImageName
49 | Default
50 | UILaunchImageMinimumOSVersion
51 | 8.0
52 | UILaunchImageOrientation
53 | Portrait
54 |
55 |
56 | UILaunchImageSize
57 | {320, 568}
58 | UILaunchImageName
59 | Default-568h
60 | UILaunchImageMinimumOSVersion
61 | 8.0
62 | UILaunchImageOrientation
63 | Portrait
64 |
65 |
66 | UILaunchImageSize
67 | {414, 736}
68 | UILaunchImageName
69 | Default-736h
70 | UILaunchImageMinimumOSVersion
71 | 8.0
72 | UILaunchImageOrientation
73 | Portrait
74 |
75 |
76 | UILaunchImageSize
77 | {414, 736}
78 | UILaunchImageName
79 | Default-Landscape-736h
80 | UILaunchImageMinimumOSVersion
81 | 8.0
82 | UILaunchImageOrientation
83 | Landscape
84 |
85 |
86 | UILaunchImageSize
87 | {375, 667}
88 | UILaunchImageName
89 | Default-667h
90 | UILaunchImageMinimumOSVersion
91 | 8.0
92 | UILaunchImageOrientation
93 | Portrait
94 |
95 |
96 | UILaunchImages~ipad
97 |
98 |
99 | UILaunchImageSize
100 | {768, 1024}
101 | UILaunchImageName
102 | Default-Portrait
103 | UILaunchImageMinimumOSVersion
104 | 8.0
105 | UILaunchImageOrientation
106 | Portrait
107 |
108 |
109 | UILaunchImageSize
110 | {768, 1024}
111 | UILaunchImageName
112 | Default-Landscape
113 | UILaunchImageMinimumOSVersion
114 | 8.0
115 | UILaunchImageOrientation
116 | Landscape
117 |
118 |
119 | UILaunchImageSize
120 | {1536, 2048}
121 | UILaunchImageName
122 | Default-Portrait
123 | UILaunchImageMinimumOSVersion
124 | 8.0
125 | UILaunchImageOrientation
126 | Portrait
127 |
128 |
129 | UILaunchImageSize
130 | {1536, 2048}
131 | UILaunchImageName
132 | Default-Landscape
133 | UILaunchImageMinimumOSVersion
134 | 8.0
135 | UILaunchImageOrientation
136 | Landscape
137 |
138 |
139 |
140 |
141 |
--------------------------------------------------------------------------------
/OSX_SS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/OSX_SS.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #HashCalc -- A File Hash Calculator for Win32, Win64 and OS X
2 |
3 | This is an experimental project using Embarcadero Delphi XE7. It also uses the [DCPCrypt](https://github.com/StephenGenusa/DCPCrypt) library for the hash functions.
4 |
5 | It will currently calculate file hashes for MD4, MD5, RIPEMD-128, RIPEMD-160, SHA1, SHA256, SHA384, SHA512, Tiger and Haval.
6 |
7 | You can drag-and-drop any file on the drop target of the form or you can give a single command-line parameter which is the path/filename. On OS X you'd probably want to create a link file pointing to /Applications/HashCalc.app/Contents/MacOS/HashCalc so that you can type hashcalc path/file
8 |
9 | There is also a Base64 text encoder and decoder on the second tab as a convenience tool.
10 |
11 | [Binaries](https://github.com/StephenGenusa/HashCalc/releases) are available for download.
12 |
13 | 
14 |
HashCalc on OS X
15 |
16 | 
17 |
HashCalc on Windows
18 |
--------------------------------------------------------------------------------
/Win64_SS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/Win64_SS.png
--------------------------------------------------------------------------------
/frmMain.Macintosh.fmx:
--------------------------------------------------------------------------------
1 | inherited Form1_Macintosh: TForm1_Macintosh
2 | ClientHeight = 686
3 | ClientWidth = 804
4 | DesignerMasterStyle = 1
5 | inherited Button1: TButton
6 | Position.X = 648.000000000000000000
7 | Position.Y = 600.000000000000000000
8 | OnClick = Button1Click
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/frmMain.Windows.fmx:
--------------------------------------------------------------------------------
1 | inherited Form1_Windows: TForm1_Windows
2 | Caption = 'Stephen Genusa'#39's Hash Calculator'
3 | ClientHeight = 603
4 | ClientWidth = 713
5 | DesignerMasterStyle = 1
6 | inherited Button1: TButton
7 | OnClick = Button1Click
8 | end
9 | inherited DropTarget1: TDropTarget
10 | Filter = '*'
11 | Position.X = 264.000000000000000000
12 | Position.Y = 32.000000000000000000
13 | Text = 'Drop File Here'
14 | OnDragOver = DropTarget1DragOver
15 | OnDropped = DropTarget1Dropped
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/frmMain.fmx:
--------------------------------------------------------------------------------
1 | object Form1: TForm1
2 | Left = 0
3 | Top = 0
4 | BorderStyle = Single
5 | Caption = 'Stephen Genusa'#39's Hash Calculator and Base64 Utility'
6 | ClientHeight = 686
7 | ClientWidth = 851
8 | Position = ScreenCenter
9 | FormFactor.Width = 320
10 | FormFactor.Height = 480
11 | FormFactor.Devices = [Desktop]
12 | OnCreate = FormCreate
13 | DesignerMasterStyle = 0
14 | object tabBase64: TTabControl
15 | Position.X = 8.000000000000000000
16 | Position.Y = 8.000000000000000000
17 | Size.Width = 833.000000000000000000
18 | Size.Height = 673.000000000000000000
19 | Size.PlatformDefault = False
20 | TabIndex = 0
21 | TabOrder = 0
22 | TabPosition = PlatformDefault
23 | object TabItem1: TTabItem
24 | CustomIcon = <
25 | item
26 | end>
27 | IsSelected = True
28 | Size.Width = 84.000000000000000000
29 | Size.Height = 24.000000000000000000
30 | Size.PlatformDefault = False
31 | TabOrder = 0
32 | Text = 'File Hashing'
33 | object DropTarget1: TDropTarget
34 | Filter = '*.*'
35 | Position.X = 32.000000000000000000
36 | Position.Y = 32.000000000000000000
37 | Size.Width = 769.000000000000000000
38 | Size.Height = 120.000000000000000000
39 | Size.PlatformDefault = False
40 | TabOrder = 0
41 | Text = 'Drop File Here'
42 | OnDragOver = DropTarget1DragOver
43 | OnDropped = DropTarget1Dropped
44 | end
45 | object edtMD5Hash: TEdit
46 | Touch.InteractiveGestures = [LongTap, DoubleTap]
47 | TabOrder = 2
48 | Position.X = 110.000000000000000000
49 | Position.Y = 272.000000000000000000
50 | Size.Width = 700.000000000000000000
51 | Size.Height = 22.000000000000000000
52 | Size.PlatformDefault = False
53 | end
54 | object lblMD5: TLabel
55 | Position.X = 5.000000000000000000
56 | Position.Y = 272.000000000000000000
57 | Size.Width = 101.000000000000000000
58 | Size.Height = 17.000000000000000000
59 | Size.PlatformDefault = False
60 | Text = 'MD5:'
61 | end
62 | object lblFilename: TLabel
63 | StyledSettings = [Family, Size, FontColor]
64 | Position.X = 112.000000000000000000
65 | Position.Y = 176.000000000000000000
66 | Size.Width = 697.000000000000000000
67 | Size.Height = 57.000000000000000000
68 | Size.PlatformDefault = False
69 | TextSettings.Font.Style = [fsBold]
70 | Text = 'n/a'
71 | end
72 | object edtSHA1Hash: TEdit
73 | Touch.InteractiveGestures = [LongTap, DoubleTap]
74 | TabOrder = 9
75 | Position.X = 110.000000000000000000
76 | Position.Y = 368.000000000000000000
77 | Size.Width = 700.000000000000000000
78 | Size.Height = 22.000000000000000000
79 | Size.PlatformDefault = False
80 | end
81 | object lblSHA1: TLabel
82 | Position.X = 5.000000000000000000
83 | Position.Y = 368.000000000000000000
84 | Size.Width = 101.000000000000000000
85 | Size.Height = 17.000000000000000000
86 | Size.PlatformDefault = False
87 | Text = 'SHA1:'
88 | end
89 | object edtSHA256Hash: TEdit
90 | Touch.InteractiveGestures = [LongTap, DoubleTap]
91 | TabOrder = 21
92 | Position.X = 110.000000000000000000
93 | Position.Y = 400.000000000000000000
94 | Size.Width = 700.000000000000000000
95 | Size.Height = 22.000000000000000000
96 | Size.PlatformDefault = False
97 | end
98 | object lblSHA256: TLabel
99 | Position.X = 5.000000000000000000
100 | Position.Y = 400.000000000000000000
101 | Size.Width = 101.000000000000000000
102 | Size.Height = 17.000000000000000000
103 | Size.PlatformDefault = False
104 | Text = 'SHA256:'
105 | end
106 | object lblSHA384: TLabel
107 | Position.X = 5.000000000000000000
108 | Position.Y = 432.000000000000000000
109 | Size.Width = 101.000000000000000000
110 | Size.Height = 17.000000000000000000
111 | Size.PlatformDefault = False
112 | Text = 'SHA384:'
113 | end
114 | object lblSHA512: TLabel
115 | Position.X = 5.000000000000000000
116 | Position.Y = 496.000000000000000000
117 | Size.Width = 101.000000000000000000
118 | Size.Height = 17.000000000000000000
119 | Size.PlatformDefault = False
120 | Text = 'SHA512:'
121 | end
122 | object lblHaval: TLabel
123 | Position.X = 5.000000000000000000
124 | Position.Y = 560.000000000000000000
125 | Size.Width = 101.000000000000000000
126 | Size.Height = 17.000000000000000000
127 | Size.PlatformDefault = False
128 | Text = 'Haval:'
129 | end
130 | object edtHavalHash: TEdit
131 | Touch.InteractiveGestures = [LongTap, DoubleTap]
132 | TabOrder = 52
133 | Position.X = 110.000000000000000000
134 | Position.Y = 560.000000000000000000
135 | Size.Width = 700.000000000000000000
136 | Size.Height = 22.000000000000000000
137 | Size.PlatformDefault = False
138 | end
139 | object lblMD4: TLabel
140 | Position.X = 5.000000000000000000
141 | Position.Y = 240.000000000000000000
142 | Size.Width = 101.000000000000000000
143 | Size.Height = 17.000000000000000000
144 | Size.PlatformDefault = False
145 | Text = 'MD4:'
146 | end
147 | object edtMD4Hash: TEdit
148 | Touch.InteractiveGestures = [LongTap, DoubleTap]
149 | TabOrder = 1
150 | Position.X = 110.000000000000000000
151 | Position.Y = 240.000000000000000000
152 | Size.Width = 700.000000000000000000
153 | Size.Height = 22.000000000000000000
154 | Size.PlatformDefault = False
155 | end
156 | object memSHA512Hash: TMemo
157 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
158 | Position.X = 110.000000000000000000
159 | Position.Y = 496.000000000000000000
160 | Size.Width = 700.000000000000000000
161 | Size.Height = 50.000000000000000000
162 | Size.PlatformDefault = False
163 | TabOrder = 50
164 | TextSettings.WordWrap = True
165 | end
166 | object memSHA384Hash: TMemo
167 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
168 | Position.X = 110.000000000000000000
169 | Position.Y = 432.000000000000000000
170 | Size.Width = 700.000000000000000000
171 | Size.Height = 50.000000000000000000
172 | Size.PlatformDefault = False
173 | TabOrder = 36
174 | TextSettings.WordWrap = True
175 | end
176 | object lblRipeMD160: TLabel
177 | Position.X = 5.000000000000000000
178 | Position.Y = 336.000000000000000000
179 | Size.Width = 101.000000000000000000
180 | Size.Height = 17.000000000000000000
181 | Size.PlatformDefault = False
182 | Text = 'RIPEMD-160:'
183 | end
184 | object edtRipeMD160Hash: TEdit
185 | Touch.InteractiveGestures = [LongTap, DoubleTap]
186 | TabOrder = 7
187 | Position.X = 110.000000000000000000
188 | Position.Y = 336.000000000000000000
189 | Size.Width = 700.000000000000000000
190 | Size.Height = 22.000000000000000000
191 | Size.PlatformDefault = False
192 | end
193 | object lblRipeMD128: TLabel
194 | Position.X = 5.000000000000000000
195 | Position.Y = 304.000000000000000000
196 | Size.Width = 101.000000000000000000
197 | Size.Height = 17.000000000000000000
198 | Size.PlatformDefault = False
199 | Text = 'RIPEMD-128:'
200 | end
201 | object edtRipeMD128Hash: TEdit
202 | Touch.InteractiveGestures = [LongTap, DoubleTap]
203 | TabOrder = 3
204 | Position.X = 110.000000000000000000
205 | Position.Y = 304.000000000000000000
206 | Size.Width = 700.000000000000000000
207 | Size.Height = 22.000000000000000000
208 | Size.PlatformDefault = False
209 | end
210 | object lblTiger: TLabel
211 | Position.X = 5.000000000000000000
212 | Position.Y = 592.000000000000000000
213 | Size.Width = 101.000000000000000000
214 | Size.Height = 17.000000000000000000
215 | Size.PlatformDefault = False
216 | Text = 'Tiger:'
217 | end
218 | object edtTigerHash: TEdit
219 | Touch.InteractiveGestures = [LongTap, DoubleTap]
220 | TabOrder = 10
221 | Position.X = 110.000000000000000000
222 | Position.Y = 592.000000000000000000
223 | Size.Width = 700.000000000000000000
224 | Size.Height = 22.000000000000000000
225 | Size.PlatformDefault = False
226 | end
227 | object pgbarFileRead: TProgressBar
228 | Orientation = Horizontal
229 | Position.X = 32.000000000000000000
230 | Position.Y = 152.000000000000000000
231 | Size.Width = 769.000000000000000000
232 | Size.Height = 20.000000000000000000
233 | Size.PlatformDefault = False
234 | end
235 | object cbMD4: TCheckBox
236 | Position.X = 810.000000000000000000
237 | Position.Y = 242.000000000000000000
238 | Size.Width = 20.000000000000000000
239 | Size.Height = 19.000000000000000000
240 | Size.PlatformDefault = False
241 | TabOrder = 11
242 | end
243 | object cbMD5: TCheckBox
244 | IsChecked = True
245 | Position.X = 810.000000000000000000
246 | Position.Y = 274.000000000000000000
247 | Size.Width = 20.000000000000000000
248 | Size.Height = 19.000000000000000000
249 | Size.PlatformDefault = False
250 | TabOrder = 12
251 | end
252 | object cbRipeMD128: TCheckBox
253 | Position.X = 810.000000000000000000
254 | Position.Y = 306.000000000000000000
255 | Size.Width = 20.000000000000000000
256 | Size.Height = 19.000000000000000000
257 | Size.PlatformDefault = False
258 | TabOrder = 13
259 | end
260 | object cbRipeMD160: TCheckBox
261 | Position.X = 810.000000000000000000
262 | Position.Y = 338.000000000000000000
263 | Size.Width = 20.000000000000000000
264 | Size.Height = 19.000000000000000000
265 | Size.PlatformDefault = False
266 | TabOrder = 14
267 | end
268 | object cbSHA1: TCheckBox
269 | IsChecked = True
270 | Position.X = 810.000000000000000000
271 | Position.Y = 370.000000000000000000
272 | Size.Width = 20.000000000000000000
273 | Size.Height = 19.000000000000000000
274 | Size.PlatformDefault = False
275 | TabOrder = 15
276 | end
277 | object cbSHA256: TCheckBox
278 | IsChecked = True
279 | Position.X = 810.000000000000000000
280 | Position.Y = 402.000000000000000000
281 | Size.Width = 20.000000000000000000
282 | Size.Height = 19.000000000000000000
283 | Size.PlatformDefault = False
284 | TabOrder = 16
285 | end
286 | object cbSHA384: TCheckBox
287 | Position.X = 810.000000000000000000
288 | Position.Y = 442.000000000000000000
289 | Size.Width = 20.000000000000000000
290 | Size.Height = 19.000000000000000000
291 | Size.PlatformDefault = False
292 | TabOrder = 17
293 | end
294 | object cbSHA512: TCheckBox
295 | IsChecked = True
296 | Position.X = 810.000000000000000000
297 | Position.Y = 506.000000000000000000
298 | Size.Width = 20.000000000000000000
299 | Size.Height = 19.000000000000000000
300 | Size.PlatformDefault = False
301 | TabOrder = 18
302 | end
303 | object cbHaval: TCheckBox
304 | Position.X = 810.000000000000000000
305 | Position.Y = 562.000000000000000000
306 | Size.Width = 20.000000000000000000
307 | Size.Height = 19.000000000000000000
308 | Size.PlatformDefault = False
309 | TabOrder = 19
310 | end
311 | object cbTiger: TCheckBox
312 | Enabled = False
313 | Position.X = 810.000000000000000000
314 | Position.Y = 594.000000000000000000
315 | Size.Width = 20.000000000000000000
316 | Size.Height = 19.000000000000000000
317 | Size.PlatformDefault = False
318 | TabOrder = 20
319 | end
320 | object cbLowercaseHashes: TCheckBox
321 | IsChecked = True
322 | Position.X = 624.000000000000000000
323 | Position.Y = 622.000000000000000000
324 | Size.Width = 161.000000000000000000
325 | Size.Height = 19.000000000000000000
326 | Size.PlatformDefault = False
327 | TabOrder = 33
328 | Text = 'Lowercase Hashes'
329 | OnChange = cbLowercaseHashesChange
330 | end
331 | object cbCreateHashFiles: TCheckBox
332 | Position.X = 424.000000000000000000
333 | Position.Y = 622.000000000000000000
334 | Size.Width = 137.000000000000000000
335 | Size.Height = 19.000000000000000000
336 | Size.PlatformDefault = False
337 | TabOrder = 35
338 | Text = 'Create Hash Files'
339 | end
340 | object cbCheckAgainstExistingHashFiles: TCheckBox
341 | Position.X = 160.000000000000000000
342 | Position.Y = 622.000000000000000000
343 | Size.Width = 241.000000000000000000
344 | Size.Height = 19.000000000000000000
345 | Size.PlatformDefault = False
346 | TabOrder = 34
347 | Text = 'Check Against Existing Hash Files'
348 | Visible = False
349 | end
350 | end
351 | object TabItem2: TTabItem
352 | CustomIcon = <
353 | item
354 | end>
355 | IsSelected = False
356 | Size.Width = 57.000000000000000000
357 | Size.Height = 24.000000000000000000
358 | Size.PlatformDefault = False
359 | TabOrder = 0
360 | Text = 'Base64'
361 | object memoPlainText: TMemo
362 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
363 | Position.X = 56.000000000000000000
364 | Position.Y = 64.000000000000000000
365 | Size.Width = 737.000000000000000000
366 | Size.Height = 249.000000000000000000
367 | Size.PlatformDefault = False
368 | TabOrder = 10
369 | end
370 | object btnEncode: TButton
371 | Position.X = 16.000000000000000000
372 | Position.Y = 32.000000000000000000
373 | TabOrder = 11
374 | Text = 'Encode'
375 | OnClick = btnEncodeClick
376 | end
377 | object memoBase64Text: TMemo
378 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
379 | Position.X = 48.000000000000000000
380 | Position.Y = 360.000000000000000000
381 | Size.Width = 737.000000000000000000
382 | Size.Height = 249.000000000000000000
383 | Size.PlatformDefault = False
384 | TabOrder = 8
385 | end
386 | object btnDecode: TButton
387 | Position.X = 16.000000000000000000
388 | Position.Y = 328.000000000000000000
389 | TabOrder = 9
390 | Text = 'Decode'
391 | OnClick = btnDecodeClick
392 | end
393 | end
394 | end
395 | end
396 |
--------------------------------------------------------------------------------
/frmMain.pas:
--------------------------------------------------------------------------------
1 | unit frmMain;
2 |
3 | interface
4 |
5 | uses
6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
8 | FMX.ExtCtrls, IdHashMessageDigest, idHash, FMX.Controls.Presentation, FMX.Edit,
9 | FMX.Layouts, FMX.Memo, FMX.TabControl, DCPtiger, DCPsha512, DCPsha256,
10 | DCPsha1, DCPripemd160, DCPripemd128, DCPmd5, DCPmd4, DCPcrypt2, DCPhaval,
11 | FMX.Menus, System.NetEncoding, System.IOUtils;
12 |
13 | // https://bitbucket.org/wpostma/dcpcrypt2010
14 |
15 | type
16 | TForm1 = class(TForm)
17 | tabBase64: TTabControl;
18 | TabItem1: TTabItem;
19 | TabItem2: TTabItem;
20 | memoPlainText: TMemo;
21 | DropTarget1: TDropTarget;
22 | edtMD5Hash: TEdit;
23 | lblMD5: TLabel;
24 | lblFilename: TLabel;
25 | edtSHA1Hash: TEdit;
26 | lblSHA1: TLabel;
27 | edtSHA256Hash: TEdit;
28 | lblSHA256: TLabel;
29 | lblSHA384: TLabel;
30 | btnEncode: TButton;
31 | memoBase64Text: TMemo;
32 | btnDecode: TButton;
33 | lblSHA512: TLabel;
34 | lblHaval: TLabel;
35 | edtHavalHash: TEdit;
36 | lblMD4: TLabel;
37 | edtMD4Hash: TEdit;
38 | memSHA512Hash: TMemo;
39 | memSHA384Hash: TMemo;
40 | lblRipeMD160: TLabel;
41 | edtRipeMD160Hash: TEdit;
42 | lblRipeMD128: TLabel;
43 | edtRipeMD128Hash: TEdit;
44 | lblTiger: TLabel;
45 | edtTigerHash: TEdit;
46 | pgbarFileRead: TProgressBar;
47 | cbMD4: TCheckBox;
48 | cbMD5: TCheckBox;
49 | cbRipeMD128: TCheckBox;
50 | cbRipeMD160: TCheckBox;
51 | cbSHA1: TCheckBox;
52 | cbSHA256: TCheckBox;
53 | cbSHA384: TCheckBox;
54 | cbSHA512: TCheckBox;
55 | cbHaval: TCheckBox;
56 | cbTiger: TCheckBox;
57 | cbLowercaseHashes: TCheckBox;
58 | cbCreateHashFiles: TCheckBox;
59 | cbCheckAgainstExistingHashFiles: TCheckBox;
60 | procedure DropTarget1Dropped(Sender: TObject; const Data: TDragObject;
61 | const Point: TPointF);
62 | procedure DropTarget1DragOver(Sender: TObject; const Data: TDragObject;
63 | const Point: TPointF; var Operation: TDragOperation);
64 | procedure FormCreate(Sender: TObject);
65 | procedure mnuCopyValueClick(Sender: TObject);
66 | procedure btnEncodeClick(Sender: TObject);
67 | procedure btnDecodeClick(Sender: TObject);
68 | procedure cbLowercaseHashesChange(Sender: TObject);
69 | private
70 | { Private declarations }
71 | dcrypt_haval: TDCP_haval;
72 | dcrypt_md4: TDCP_md4;
73 | dcrypt_md5: TDCP_md5;
74 | dcrypt_ripemd128: TDCP_ripemd128;
75 | dcrypt_ripemd160: TDCP_ripemd160;
76 | dcrypt_sha1: TDCP_sha1;
77 | dcrypt_sha256: TDCP_sha256;
78 | dcrypt_sha384: TDCP_sha384;
79 | dcrypt_sha512: TDCP_sha512;
80 | dcrypt_tiger: TDCP_tiger;
81 | Hashes : array of TDCP_hash;
82 | //HashCheckboxes : array of TCheckbox;
83 | procedure ClearFieldHashValues;
84 | procedure EnableHashCheckboxes;
85 | procedure DisableHashCheckboxes;
86 | procedure CheckHashCase;
87 | procedure CreateHashFiles(strFilename : String);
88 | procedure CalculateFileHash(strFilename : String);
89 | public
90 | { Public declarations }
91 | end;
92 |
93 | var
94 | Form1: TForm1;
95 |
96 | implementation
97 |
98 | {$R *.fmx}
99 |
100 | procedure TForm1.DropTarget1DragOver(Sender: TObject; const Data: TDragObject;
101 | const Point: TPointF; var Operation: TDragOperation);
102 | begin
103 | Operation := TDragOperation.Copy;
104 | end;
105 |
106 |
107 | procedure TForm1.EnableHashCheckboxes;
108 | begin
109 | cbMD4.Enabled := True;
110 | cbMD5.Enabled := True;
111 | cbRipeMD128.Enabled := True;
112 | cbRipeMD160.Enabled := True;
113 | cbSHA1.Enabled := True;
114 | cbSHA256.Enabled := True;
115 | cbSHA384.Enabled := True;
116 | cbSHA512.Enabled := True;
117 | cbHaval.Enabled := True;
118 | cbTiger.Enabled := True;
119 | end;
120 |
121 |
122 | procedure TForm1.DisableHashCheckboxes;
123 | begin
124 | cbMD4.Enabled := False;
125 | cbMD5.Enabled := False;
126 | cbRipeMD128.Enabled := False;
127 | cbRipeMD160.Enabled := False;
128 | cbSHA1.Enabled := False;
129 | cbSHA256.Enabled := False;
130 | cbSHA384.Enabled := False;
131 | cbSHA512.Enabled := False;
132 | cbHaval.Enabled := False;
133 | cbTiger.Enabled := False;
134 | end;
135 |
136 |
137 | procedure TForm1.btnDecodeClick(Sender: TObject);
138 | var
139 | Base64_Decoder : TBase64Encoding;
140 | begin
141 | memoPlainText.Lines.Clear;
142 | Base64_Decoder := TBase64Encoding.Create;
143 | try
144 | memoPlainText.Lines.Add(Base64_Decoder.Decode(memoBase64Text.Text));
145 | finally
146 | Base64_Decoder.Free;
147 | end;
148 | end;
149 |
150 |
151 | procedure TForm1.btnEncodeClick(Sender: TObject);
152 | var
153 | Base64_Encoder : TBase64Encoding;
154 | begin
155 | memoBase64Text.Lines.Clear;
156 | Base64_Encoder := TBase64Encoding.Create;
157 | try
158 | memoBase64Text.Lines.Add(Base64_Encoder.Encode(memoPlainText.Text));
159 | finally
160 | Base64_Encoder.Free;
161 | end;
162 | end;
163 |
164 |
165 | procedure TForm1.ClearFieldHashValues;
166 | begin
167 | edtMD4Hash.Text := 'n/a';
168 | edtMD5Hash.Text := 'n/a';
169 | edtRipeMD128Hash.Text := 'n/a';
170 | edtRipeMD160Hash.Text := 'n/a';
171 | edtSHA1Hash.Text := 'n/a';
172 | edtSHA256Hash.Text := 'n/a';
173 | edtHavalHash.Text := 'n/a';
174 | edtTigerHash.Text := 'n/a';
175 | memSHA384Hash.Lines.Clear;
176 | memSHA384Hash.Lines.Add('n/a');
177 | memSHA512Hash.Lines.Clear;
178 | memSHA512Hash.Lines.Add('n/a');
179 | end;
180 |
181 |
182 | procedure TForm1.CheckHashCase;
183 | var
184 | strTempHash : String;
185 | begin
186 | if cbLowercaseHashes.IsChecked then begin
187 | edtMD4Hash.Text := LowerCase(edtMD4Hash.Text);
188 | edtMD5Hash.Text := LowerCase(edtMD5Hash.Text);
189 | edtRipeMD128Hash.Text := LowerCase(edtRipeMD128Hash.Text);
190 | edtRipeMD160Hash.Text := LowerCase(edtRipeMD160Hash.Text);
191 | edtSHA1Hash.Text := LowerCase(edtSHA1Hash.Text);
192 | edtSHA256Hash.Text := LowerCase(edtSHA256Hash.Text);
193 | edtHavalHash.Text := LowerCase(edtHavalHash.Text);
194 | edtTigerHash.Text := LowerCase(edtTigerHash.Text);
195 | strTempHash := LowerCase(memSHA384Hash.Text);
196 | memSHA384Hash.Lines.Clear;
197 | memSHA384Hash.Lines.Add(strTempHash);
198 | strTempHash := LowerCase(memSHA512Hash.Text);
199 | memSHA512Hash.Lines.Clear;
200 | memSHA512Hash.Lines.Add(strTempHash);
201 | end
202 | else begin
203 | edtMD4Hash.Text := UpperCase(edtMD4Hash.Text);
204 | edtMD5Hash.Text := UpperCase(edtMD5Hash.Text);
205 | edtRipeMD128Hash.Text := UpperCase(edtRipeMD128Hash.Text);
206 | edtRipeMD160Hash.Text := UpperCase(edtRipeMD160Hash.Text);
207 | edtSHA1Hash.Text := UpperCase(edtSHA1Hash.Text);
208 | edtSHA256Hash.Text := UpperCase(edtSHA256Hash.Text);
209 | edtHavalHash.Text := UpperCase(edtHavalHash.Text);
210 | edtTigerHash.Text := UpperCase(edtTigerHash.Text);
211 | strTempHash := UpperCase(memSHA384Hash.Text);
212 | memSHA384Hash.Lines.Clear;
213 | memSHA384Hash.Lines.Add(strTempHash);
214 | strTempHash := UpperCase(memSHA512Hash.Text);
215 | memSHA512Hash.Lines.Clear;
216 | memSHA512Hash.Lines.Add(strTempHash);
217 | end;
218 | end;
219 |
220 |
221 | procedure TForm1.CreateHashFiles(strFilename : String);
222 |
223 | procedure WriteHashFile(HashFilename, TextValue : String);
224 | var
225 | filHashFile : TextFile;
226 | begin
227 | AssignFile(filHashFile, HashFilename);
228 | Rewrite (filHashFile);
229 | Writeln (filHashFile, TextValue);
230 | CloseFile(filHashFile);
231 | end;
232 |
233 | procedure HandleFileExtension(HashCheckbox : TCheckBox; HashEditbox : TEdit; strFileExtension : String);
234 | var
235 | //intLen : Integer;
236 | strCurExt : String;
237 | strHashFilename : String;
238 | begin
239 | //intLen := Length(strFilename);
240 | strCurExt := LowerCase(TPath.GetExtension(strFilename));
241 | if HashCheckbox.IsChecked and (strCurExt <> strFileExtension) then begin
242 | strHashFilename := strFilename + strFileExtension;
243 | if not FileExists(strHashFilename) then
244 | WriteHashFile(strHashFilename, LowerCase(HashEditbox.Text) + ' ' + TPath.GetFileName(strFilename));
245 | end;
246 | end;
247 |
248 | begin
249 | HandleFileExtension(cbMD5, edtMD5Hash, '.md5');
250 | HandleFileExtension(cbSHA1, edtSHA1Hash, '.sha1');
251 | // HandleFileExtension(cbMD5, edtMD5Hash, '.md5');
252 | end;
253 |
254 |
255 | procedure TForm1.CalculateFileHash(strFilename : String);
256 | var
257 | HashDigest: array of byte;
258 | i, j, read: integer;
259 | s: string;
260 | buffer: array[0..16383] of byte;
261 | strmInput: TFileStream;
262 | pcount : integer;
263 |
264 | procedure AddHashFunctionToList (hashFunction : TDCP_hash);
265 | begin
266 | SetLength(Hashes, Length(Hashes)+1);
267 | Hashes[Length(Hashes)-1] := hashFunction;
268 | end;
269 |
270 | begin
271 | DisableHashCheckboxes;
272 | ClearFieldHashValues;
273 | lblFilename.Text := strFilename;
274 |
275 | Hashes := nil;
276 | if cbMD4.IsChecked then AddHashFunctionToList(dcrypt_md4);
277 | if cbMD5.IsChecked then AddHashFunctionToList(dcrypt_md5);
278 | if cbRipeMD128.IsChecked then AddHashFunctionToList(dcrypt_ripemd128);
279 | if cbRipeMD160.IsChecked then AddHashFunctionToList(dcrypt_ripemd160);
280 | if cbSHA1.IsChecked then AddHashFunctionToList(dcrypt_sha1);
281 | if cbSHA256.IsChecked then AddHashFunctionToList(dcrypt_sha256);
282 | if cbSHA384.IsChecked then AddHashFunctionToList(dcrypt_sha384);
283 | if cbSHA512.IsChecked then AddHashFunctionToList(dcrypt_sha512);
284 | if cbHaval.IsChecked then AddHashFunctionToList(dcrypt_haval);
285 | if cbTiger.IsChecked then AddHashFunctionToList(dcrypt_tiger);
286 |
287 | pgbarFileRead.Min := 0;
288 | pgbarFileRead.Value := 0;
289 | pgbarFileRead.Visible := True;
290 |
291 | // make a list of all the hash algorithms to use
292 | for i := 0 to Length(Hashes)-1 do
293 | TDCP_hash(Hashes[i]).Init;
294 | strmInput := nil;
295 | try
296 | strmInput := TFileStream.Create(strFilename, fmOpenRead or fmShareDenyWrite);
297 | pgbarFileRead.Max := strmInput.Size;
298 | pcount := 0;
299 | repeat
300 | // read into the buffer
301 | read := strmInput.Read(buffer,Sizeof(buffer));
302 | pgbarFileRead.Value := pgbarFileRead.Value + Sizeof(buffer);
303 | if pcount mod 40 = 0 then Application.ProcessMessages;
304 | // hash the buffer with each of the selected hashes
305 | for i := 0 to Length(Hashes) - 1 do begin
306 | Hashes[i].Update(buffer,read);
307 | end;
308 | inc(pcount);
309 | until read <> Sizeof(buffer);
310 | strmInput.Free;
311 | // iterate through the selected hashes
312 | memSHA384Hash.Lines.Clear;
313 | memSHA512Hash.Lines.Clear;
314 | for i := 0 to Length(Hashes) - 1 do
315 | begin
316 | SetLength(HashDigest,Hashes[i].HashSize div 8);
317 | Hashes[i].Final(HashDigest[0]); // get the output
318 | s := '';
319 | for j := 0 to Length(HashDigest) - 1 do // convert it into a hex string
320 | s := s + IntToHex(HashDigest[j],2);
321 | if Hashes[i].Algorithm = 'MD4' then edtMD4Hash.Text := s;
322 | if Hashes[i].Algorithm = 'MD5' then edtMD5Hash.Text := s;
323 | if Hashes[i].Algorithm = 'RipeMD-128' then edtRipeMD128Hash.Text := s;
324 | if Hashes[i].Algorithm = 'RipeMD-160' then edtRipeMD160Hash.Text := s;
325 | if Hashes[i].Algorithm = 'SHA1' then edtSHA1Hash.Text := s;
326 | if Hashes[i].Algorithm = 'SHA256' then edtSHA256Hash.Text := s;
327 | if Hashes[i].Algorithm = 'SHA384' then memSHA384Hash.Lines.Add(s);
328 | if Hashes[i].Algorithm = 'SHA512' then memSHA512Hash.Lines.Add(s);
329 | if Hashes[i].Algorithm = 'Haval (256bit, 5 passes)' then edtHavalHash.Text := s;
330 | if Hashes[i].Algorithm = 'Tiger' then edtTigerHash.Text := s;
331 | //txtOutput.Lines.Add(Hashes[i].Algorithm + ': ' + s);
332 | end;
333 | if cbCreateHashFiles.IsChecked then
334 | CreateHashFiles(strFilename);
335 | except
336 | strmInput.Free;
337 | end;
338 | CheckHashCase;
339 | pgbarFileRead.Visible := False;
340 | EnableHashCheckboxes;
341 | end;
342 |
343 | procedure TForm1.cbLowercaseHashesChange(Sender: TObject);
344 | begin
345 | CheckHashCase;
346 | end;
347 |
348 | procedure TForm1.DropTarget1Dropped(Sender: TObject; const Data: TDragObject;
349 | const Point: TPointF);
350 | begin
351 | CalculateFileHash(Data.Files[0]);
352 | end;
353 |
354 | procedure TForm1.FormCreate(Sender: TObject);
355 | begin
356 | dcrypt_haval:= TDCP_haval.Create(self);
357 | dcrypt_md4:= TDCP_md4.Create(self);
358 | dcrypt_md5:= TDCP_md5.Create(self);
359 | dcrypt_ripemd128:= TDCP_ripemd128.Create(self);
360 | dcrypt_ripemd160:= TDCP_ripemd160.Create(self);
361 | dcrypt_sha1:= TDCP_sha1.Create(self);
362 | dcrypt_sha256:= TDCP_sha256.Create(self);
363 | dcrypt_sha384:= TDCP_sha384.Create(self);
364 | dcrypt_sha512:= TDCP_sha512.Create(self);
365 | dcrypt_tiger:= TDCP_tiger.Create(self);
366 |
367 | lblMD4.TextAlign := TTextAlign.Trailing;
368 | lblMD5.TextAlign := TTextAlign.Trailing;
369 | lblRipeMD128.TextAlign := TTextAlign.Trailing;
370 | lblRipeMD160.TextAlign := TTextAlign.Trailing;
371 | lblSHA1.TextAlign := TTextAlign.Trailing;
372 | lblSHA256.TextAlign := TTextAlign.Trailing;
373 | lblSHA384.TextAlign := TTextAlign.Trailing;
374 | lblSHA512.TextAlign := TTextAlign.Trailing;
375 | lblHaval.TextAlign := TTextAlign.Trailing;
376 | lblTiger.TextAlign := TTextAlign.Trailing;
377 | ClearFieldHashValues;
378 | pgbarFileRead.Visible := False;
379 |
380 | if ParamCount = 1 then begin
381 | if FileExists(ParamStr(1)) then
382 | CalculateFileHash(ParamStr(1));
383 | end;
384 | end;
385 |
386 | procedure TForm1.mnuCopyValueClick(Sender: TObject);
387 | begin
388 | //
389 | end;
390 |
391 | end.
392 |
--------------------------------------------------------------------------------