Eraser 6-rc5

Posted by: Joel, 10 June 2009, 7.00pm, +800 GMT

Having written almost 25,000 lines of code since the start of our project, v6 was due for a code review. So that's what I did, reviewed the code with the help of a static code analysis tool (FxCop for you developers out there :) ) and fixed all sorts of inconsistencies in the code. This should result in slightly higher performance and better behaviour when Eraser is in use.

However, due to the same code changes resulting from the review, all tasks will be lost during the upgrade. You are encouraged to note down tasks which you intend to use in the new install and redefine them once it is installed. Furthermore, because quite a substantial amount of code has been rewritten, certain functions may no longer work (or they may not work properly.) Please report such bugs to Trac!

Nonetheless, there has been a large number of bugs being fixed (as evidenced from the large jump in build number) and this release of Eraser should be better than before. Please help find any remaining bugs and report thme to Trac - this is most likely to be the final RC before Eraser 6 is released as stable.


Revision Description Author
876, 1014, 1015 FAT dates only reach up to Jan 1 1980. Fixes #168. Joel
878 Allow drives to be erased from the Explorer context menu. Joel
879 Allow task cancellations to take place when searching for file cluster tips to erase. Joel
880 Internationalised the Log Viewer. Joel
881 Add the Eraser icon to the add/remove programs control panel applet. Fixes #187. Joel
892, 897 Store all certificates in the Windows certificate store instead of having thme as loose PFX's on the disk for security reasons. Joel
893 Flush all data to disk immediately after writing. Fixes #171. Joel
894-895 Handle files which are currently locked during erasure as well as files which are encrypted, compressed or sparse gracefully. Joel
896, 1022 Improvements to the progress dialog, better user experience when the dialog is waiting for data to come from the Erasure Executor. Joel
898, 899, 901-973, 976, 978-984, 986-988, 991-1010, 1017, 1018, 1052-1053, 1057-1063, 1069-1071, 1088-1094, 1096, 1102-1103 Code Review/Cleanup with FxCop: User-visible changes:
  • Dialog boxes appear as right-to-left under Arabic or Hebrew locales (currently no impact since Eraser doesn't come in the Arabic or Hebrew translations; but this will be of importance once those translations are complete.)
  • Remote Executor classes (eg Explorer context menu erasure, Eraser Command Line) rewritten from scratch - less prone to crashing and more reliable. This should fix problems for users who report that after selecting a file for erasure through the context menu nothing happens.
  • Called IDispoable.Dispose on some disposable objects; should reduce memory consumption in the long run.
  • The Eraser Tool Bar now is an ownerdrawn menu bar instead of a generic control. This allows for shortcuts to be used. Ctrl+N now maps to New Task.
  • Native context menus look better. All context menus under Vista+ will be natively styled.
  • More error messages are localisable, for it to be displayed in languages other than English (in non-English environments)
900 Disable redrawing on the log viewer when log items are being added. This allows for the display of long logs quickly. Joel
972, 974 Fixed crash in Log Viewer when copying an empty log. Kaz/Joel
975 Delete the folder the user asked for erasure only if it is empty! Fixes the problem reported in the forums. Joel
977 Implemented filename escaping/unescaping when using the Eraser command line. All filenames containing any one of:
  • \
  • ,
  • =
must be escaped by prepending a \ to it. This reduced ambiguity to the Eraser command line parser since , and = are used to denote subparameters.
985 The About dialog displays our new Website now instead of the SourceForge one. Joel
989-990 Remove ISAAC from the list of PRNGs. Joel
1011-1013, 1081 Allow users to export and import task lists. Implements #193. Joel
1016 Display the nice antialiased Security Shield instead of an old aliased one previously. Joel
1019 Fixed how the Scheduler manages actively executing tasks. This should prevent progress bars from being "abandoned": displayed without a parent item. Joel
1026 Disable the context menu for the recycle bin entry when there are no files in the recycle bin. Implements #50.. Joel
1028 All forms should call UXThemeApi.UpdateControlTheme so that relevant theming upgrades can be made (eg list-views) and that the proper system font can be assigned (Tahoma on XP, Segoe UI >= Vista). This prevents the ugly use of MS Sans Serif under XP. Joel
1033, 1034 Allow date Created, date Accessed and date Modified values to be set on streams. Joel
1035 Fixed ADS enumeration. WIN32_STREAM_ID is a structure with packing 1 - the native packing doesn't seem to give a structure of the right size. I picked Pack=1 because this is meant to be stored to file and files don't usually have alignments (unlike memory). Joel
1037 Implemented ADS Deletion. Joel
1041 GetPathADSes takes a value by "out", meaning whatever value the totalSize variable had before would have been overwritten. Fixed the code to work properly now. This would have reported the wrong amount of data that needs to be written to erase the file.. Joel
1042, 1044, 1046, 1047 Implemented drag-and-drop into the scheduler. Task Lists are imported and all other files are erased. Joel
1048 Fixed the Log viewer's resizing: the buttons aren't all over the place now. Joel
1049 Use SetFileAttributes directly when dealing with streams since that will support ADSes but not the .NET variant (which does path checking.) ADSes can be erased properly now and their properties are also reset like normal files. Joel
1050 When erasing Recycle bin files erase ADSes before the unnamed stream (following the order of the other file erasures). This allows for the secure deletion of files with ADSes which were sent to the recycle bin. Joel
1051 Don't delete folders which are volume mount points even if they are empty Joel
1054 Save all tasks when exiting Eraser on system shut down. Joel
1056, 1064, 1083, 1087 Implemented unlocker feature - all locked files which are slated for erasure will have all open handles closed where possible before erasure. Joel
1066 Include the correct runtime library - prevent Runtime configuration incorrect errors. Joel
1067 Various scheduler fixes, including:
  • Scheduled tasks should be queued at start up
  • Multiple tasks with the same scheduled execution time will now work as expected
1068 Place the run status on the Status column instead of the Next Run column Joel
1072, 1073 Fixed crash when clearing the task log while the task was executing, and when there are no entries for a particular execution session, append a blank entry so that the session header will appear. Joel
1082 Allow tasks to specify files to delete - and if they don't exist when the task is executed ignore and continue. Joel
1085 Handle locked files' ADSes more elegantly - if the file can't be unlocked when searching for ADSes just continue; if the file is still locked it will throw an error later when the unnamed stream is erased. Joel
1086 Rewritten ADS finding function - more efficient. Joel
1095 Updated About dialog - version information is displayed, along side special build status (when there are uncommitted changes) Joel
1097-1099, 1105-1106 Better-looking native menus (down to pixel) Joel
1100 Better error handling when FL16KB erase method was unselected/deleted Joel
1101 When displaying the Invalid default values message box, do not specify the invalid/invisible parent window. This ensures that the dialog can be seen in the status bar at startup. Joel
1102 Multiple scheduler fixes:
  • When cancelling scheduled tasks we removed the scheduled version of the task as well so tasks will no longer run on the schedule
  • When editing tasks the schedules were not updated and scheduled tasks still ran on the old schedule
  • Determining whether the task was queued manually for execution was a little unpredictable, this is now fixed
  • For consistency, when tasks are queued we will prevent editing of tasks
1107 Fixed a regression introduced in the scheduler fixes Joel

Why remove ISAAC?

Perhaps some of you are wondering why I'm removing ISAAC, the default PRNG for Eraser 5, from Eraser 6.

I met up with Professor Ling San on a seminar he conducted and I managed to ask him about his opinion regarding ISAAC (through email). This was his response and I quote:

After discussing with some colleagues who know ISAAC better, this is what some of them have to say:

ISAAC cannot be considered as broken so far, despite the few properties highlighted in the works of Aumasson (the best attack to date) and Paul-Praneel (on a modified version rather than the original ISAAC).

However, using ISAAC as a pseudo-random generator is maybe not an optimal choice, for

  1. the specification of ISAAC includes no precise initialization mechanism,
  2. ISAAC has probably not been as thoroughly analyzed as other algorithms,
  3. it uses a rather large internal state (more than 8192 bits), which may be a performance issue in certain environments.

To use as a pseudo-random generator in cryptographic applications, we would suggest one of the stream ciphers selected by the eSTREAM project (, or AES in counter mode.

This, and in light of concerns that some members of the community have over the security of ISAAC (most notably #143), I've come to a decision that ISAAC will be removed from Eraser. In addition, since an alternative was readily available in .NET (RNGCryptoServiceProvider) and that the default for v6 was set to the RNGCryptoServiceProvider, I felt that the change was not going to be really significant.

The On-Ramp

So you've still decided that v6 is for you? Look no further.

Disclaimer: The code is still of beta quality and may not be as stable or secure as the released versions of Eraser. Internal testing has been conducted to a certain extent, but remember that this is beta quality code and any loss of information or any data left unerased due to the use of this software has been disclaimed.

If you have read the disclaimer, read a few notes about installing and using betas then download and runthe installer. Some may have realised that the need for installing an Eraser Root Certificate is no longer needed - that is correct. I have managed to acquire a validated Certum Certificate which should validate without further action.


Latest News

Eraser 6-rc5 released!

Posted by: Joel, 10 June 2009, 7.00pm, +800 GMT

Having written almost 25,000 lines of code since the start of our project, v6 was due for a code review. So that's what I did, reviewed the code with the help of a static code analysis tool (FxCop for you developers out there :) ) and fixed all sorts of inconsistencies in the code. This should result in slightly higher performance and better behaviour when Eraser is in use. See the full announcement.

Eraser 5.8.7-beta5 released!

Posted by: Joel, 18 April 2009, 11.36am, +800 GMT

Hello all! I know I've been keeping silence for quite a while, but I assure you Eraser is not dead. See the full announcement.