Merge branch 'master' into apply-patch

This commit is contained in:
PartialVolume
2025-11-09 16:42:08 +00:00
committed by GitHub
12 changed files with 251 additions and 241 deletions

View File

@@ -1,6 +1,11 @@
RELEASE NOTES
=============
v0.39
-----------------------
- Removed EXPERIMENTAL! comments for ALFG and Xoroshiro. [#652](https://github.com/martijnvanbrummelen/nwipe/pull/652) Thanks @Knogle
- Fix: some declaration changes to satisfy gcc 15. [#663]((https://github.com/martijnvanbrummelen/nwipe/pull/663) Thanks @Knogle
v0.38
-----------------------
includes the following changes:

View File

@@ -21,23 +21,24 @@ The user can select from a variety of recognised secure erase methods which incl
* Fill With Zeros - Fills the device with zeros (0x00), one round only.
* Fill With Ones - Fills the device with ones (0xFF), one round only.
* RCMP TSSIT OPS-II - Royal Candian Mounted Police Technical Security Standard, OPS-II
* RCMP TSSIT OPS-II - Royal Canadian Mounted Police Technical Security Standard, OPS-II.
* DoD Short - The American Department of Defense 5220.22-M short 3 pass wipe (passes 1, 2 & 7).
* DoD 5220.22M - The American Department of Defense 5220.22-M full 7 pass wipe.
* Gutmann Wipe - Peter Gutmann's method (Secure Deletion of Data from Magnetic and Solid-State Memory).
* PRNG Stream - Fills the device with a stream from the PRNG.
* Verify Zeros - This method only reads the device and checks that it is filled with zeros (0x00).
* Verify Ones - This method only reads the device and checks that it is filled with ones (0xFF).
* HMG IS5 enhanced - Secure Sanitisation of Protectively Marked Information or Sensitive Information
* HMG IS5 enhanced - Secure Sanitisation of Protectively Marked Information or Sensitive Information.
* Schneier Wipe - Bruce Schneier's method (7-pass mixed pattern).
nwipe also includes the following pseudo random number generators (prng):
nwipe also includes the following pseudo random number generators (PRNG):
* Mersenne Twister
* ISAAC
In addition to the above, the following prngs will be available in v0.37
* ISAAC-64
* Additive Lagged Fibonacci Generator
* XORoshiro-256
* Lagged Fibonacci
* AES-CTR (openssl)
In addition to the above, the following PRNG will be available in future versions:
* AES-256-CTR
These can be used to overwrite a drive with a stream of randomly generated characters.
@@ -46,13 +47,13 @@ nwipe can be found in many [Linux distro repositories](#which-linux-distro-uses-
nwipe is also included in [ShredOS](https://github.com/PartialVolume/shredos.x86_64) which was developed in particular to showcase nwipe as a fast-to-boot standalone method similar to DBAN. ShredOS always contains the latest nwipe version.
## Limitations regarding solid state drives
In the current form nwipe does not sanitize solid state drives (hereinafter referred to as SSDs)
of any form (SAS / Sata / NVME) and / or form factor (2.5" / 3.5" / PCI) fully due to their nature:
In the current form nwipe does not sanitize solid-state drives (hereinafter referred to as SSDs)
of any form (SAS / SATA / NVMe) and / or form factor (2.5" / 3.5" / PCI) fully due to their nature:
SSDs, as the transistors contained in the memory modules are subject to wear, contain in most cases
additional memory modules installed as failover for broken sectors outside
of the host accessible space (frequently referred to as "overprovisioning") and for garbage collection.
Some manufacturers reserve access to these areas only to disk's own controller and firmware.
It is therefor always advised to use nwipe / shredOS in conjunction with the manufacturer's or hardware vendor's own tools for sanitization to assure
It is therefor always advised to use nwipe / ShredOS in conjunction with the manufacturer's or hardware vendor's own tools for sanitization to assure
full destruction of the information contained on the disk.
Given that most vendors and manufacturers do not provide open source tools, it is advised to validate the outcome by comparing the data on the disk before and after sanitization.
A list of the most common tools and instructions for SSD wipes can be found in the [SSD Guide](ssd-guide.md).
@@ -114,7 +115,7 @@ yum install coreutils
yum install smartmontools
yum install hdparm
```
Note. The following programs are optionally installed although recommended. 1. dmidecode 2. readlink 3. smartmontools.
Note: The following programs are optionally installed although recommended. 1. dmidecode 2. readlink 3. smartmontools.
#### hdparm [REQUIRED]
hdparm provides some of the information regarding disk size in sectors as related to the host protected area (HPA) and device configuration overlay (DCO). We do however have our own function that directly access the DCO to obtain the 'real max sectors' so reliance on hdparm may be removed at a future date.
@@ -145,7 +146,7 @@ make
make install
```
Then run nwipe !
Then run nwipe!
```
cd src
sudo ./nwipe
@@ -184,9 +185,9 @@ Once done with your coding then the released/patch/fixed code can be compiled, w
## Automating the download and compilation process for Debian based distros.
Here's a script that will do just that! It will create a directory in your home folder called 'nwipe_master'. It installs all the libraries required to compile the software (build-essential) and all the libraries that nwipe requires (libparted etc). It downloads the latest master copy of nwipe from github. It then compiles the software and then runs the latest nwipe. It doesn't write over the version of nwipe that's installed in the repository (If you had nwipe already installed). To run the latest master version of nwipe manually you would run it like this `sudo ~/nwipe_master/nwipe/src/nwipe`
Here's a script that will do just that! It will create a directory in your home folder called 'nwipe_master'. It installs all the libraries required to compile the software (build-essential) and all the libraries that nwipe requires (libparted etc). It downloads the latest master copy of nwipe from GitHub. It then compiles the software and then runs the latest nwipe. It doesn't write over the version of nwipe that's installed in the repository (If you had nwipe already installed). To run the latest master version of nwipe manually you would run it like this `sudo ~/nwipe_master/nwipe/src/nwipe`
You can run the script multiple times; the first time it's run it will install all the libraries; subsequent times it will just say the libraries are up to date. As it always downloads a fresh copy of the nwipe master from Github, you can always stay up to date. Just run it to get the latest version of nwipe. It only takes 11 seconds to compile on my i7.
You can run the script multiple times; the first time it's run it will install all the libraries; subsequent times it will just say the libraries are up to date. As it always downloads a fresh copy of the nwipe master from GitHub, you can always stay up to date. Just run it to get the latest version of nwipe. It only takes 11 seconds to compile on my i7.
If you already have nwipe installed from the repository, you need to take care which version you are running. If you typed `nwipe` from any directory it will always run the original repository copy of nwipe. To run the latest nwipe you have to explicitly tell it where the new copy is, e.g in the directory `~/nwipe_master/nwipe/src`. That's why you would run it by typing `sudo ~/nwipe_master/nwipe/src/nwipe` alternatively you could cd to the directory and run it like this:

View File

@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.63])
AC_INIT([nwipe],[0.38],[git@brumit.nl])
AC_INIT([nwipe],[0.39],[git@brumit.nl])
AM_INIT_AUTOMAKE(foreign subdir-objects)
AC_CONFIG_FILES([Makefile src/Makefile man/Makefile])
AC_OUTPUT

View File

@@ -1,4 +1,4 @@
.TH NWIPE "8" "Jan 2025" "nwipe version 0.38" "User Commands"
.TH NWIPE "8" "Sep 2025" "nwipe version 0.39" "User Commands"
.SH NAME
nwipe \- securely erase disks
.SH SYNOPSIS
@@ -6,28 +6,30 @@ nwipe \- securely erase disks
[\fIoptions\fR] [\fIdevice1\fR] [\fIdevice2\fR] ...
.SH DESCRIPTION
nwipe is a command that will securely erase disks using a variety of
recognised methods. It is a fork of the dwipe command used by Darik's Boot
and Nuke (dban). nwipe is included with partedmagic if you want a quick and
recognized methods. It is a fork of the dwipe command used by Darik's Boot
and Nuke (DBAN). nwipe is included with partedmagic if you want a quick and
easy bootable CD version. nwipe was created out of a need to run the DBAN
dwipe command outside of DBAN, in order to allow its use with any host
distribution, thus giving better hardware support. It is essentially the
same as dwipe, with a few changes:
.TP
- pthreads is used instead of fork
- pthreads is used instead of fork.
.TP
- The parted library is used to detect drives
- The parted library is used to detect drives.
.TP
- The code is designed to be compiled with gcc
- The code is designed to be compiled with gcc.
.TP
- SIGUSR1 can be used to log the stats of the current wipe
- SIGUSR1 can be used to log the stats of the current wipe.
.TP
- Additional wiping methods and PRNGs.
.SH OPTIONS
.TP
\fB\-V\fR, \fB\-\-version\fR
Prints the version number
Prints the version number.
.TP
\fB\-h\fR, \fB\-\-help\fR
Prints a help summary
Prints a help summary.
.TP
\fB\-\-autonuke\fR
If no devices have been specified on the command line, starts wiping all
@@ -39,17 +41,17 @@ Power off system on completion of wipe delayed for one minute. During
this one minute delay you can abort the shutdown by typing sudo shutdown -c
.TP
\fB\-\-sync\fR=\fINUM\fR
Will perform a syn after NUM writes (default: 100000)
Will perform a syn after NUM writes (default: 100000).
.IP
0 \- fdatasync after the disk is completely written
fdatasync errors not detected until completion.
0 is not recommended as disk errors may cause nwipe
to appear to hang
to appear to hang.
.IP
1 \- fdatasync after every write
1 \- fdatasync after every write.
Warning: Lower values will reduce wipe speeds.
.IP
1000 \- fdatasync after 1000 writes
1000 \- fdatasync after 1000 writes.
.TP
\fB\-\-noblank\fR
Do not perform the final blanking pass after the wipe (default is to blank,
@@ -74,13 +76,13 @@ SIGUSR1 can be used to retrieve the current wiping statistics.
Log more messages, useful for debugging.
.TP
\fB\-\-verify\fR=\fITYPE\fR
Whether to perform verification of erasure (default: last)
Whether to perform verification of erasure (default: last).
.IP
off \- Do not verify
off \- Do not verify.
.IP
last \- Verify after the last pass
last \- Verify after the last pass.
.IP
all \- Verify every pass
all \- Verify every pass.
.IP
Please mind that HMG IS5 enhanced always verifies the last (PRNG) pass
regardless of this option.
@@ -92,24 +94,26 @@ dod522022m / dod \- 7 pass DOD 5220.22\-M method
.IP
dodshort / dod3pass \- 3 pass DOD method
.IP
gutmann \- Peter Gutmann's Algorithm
gutmann \- Peter Gutmann's algorithm
.IP
ops2 \- RCMP TSSIT OPS\-II
.IP
random / prng / stream \- PRNG Stream
.IP
zero / quick \- Overwrite with zeros 0x00
zero / quick \- Overwrite with zeros (0x00)
.IP
one \- Overwrite with ones 0xFF
one \- Overwrite with ones (0xFF)
.IP
verify_zero \- Verifies disk is zero filled
verify_zero \- Verifies disk is zero (0x00) filled
.IP
verify_one \- Verifies disk is 0xFF filled
verify_one \- Verifies disk is one (0xFF) filled
.IP
is5enh \- HMG IS5 enhanced
.IP
bruce7 \- Schneier Bruce 7-pass mixed pattern
.TP
\fB\-l\fR, \fB\-\-logfile\fR=\fIFILE\fR
Filename to log to. Default is STDOUT
Filename to log to. Default is STDOUT.
.TP
\fB\-P\fR, \fB\-\-PDFreportpath\fR=\fIDIR\fR
Directory to write the PDF nwipe reports/certificates to.
@@ -117,15 +121,16 @@ Defaults to ".".
If \fIDIR\fR is set to \fInoPDF\fR no report PDF files are written.
.TP
\fB\-p\fR, \fB\-\-prng\fR=\fIMETHOD\fR
PRNG option (mersenne|twister|isaac|isaac64)
The PRNG option (default: xoroshiro256_prng).
(mersenne|twister|isaac|isaac64|add_lagg_fibonacci_prng|xoroshiro256_prng)
.TP
\fB\-q\fR, \fB\-\-quiet\fR
Anonymize serial numbers, Gui & logs display:
Anonymize serial numbers, GUI & logs display:
XXXXXXXX = S/N obtained & anonymized.
???????? = S/N not available.
.TP
\fB\-r\fR, \fB\-\-rounds\fR=\fINUM\fR
Number of times to wipe the device using the selected method (default: 1)
Number of times to wipe the device using the selected method (default: 1).
.TP
\fB\-e\fR, \fB\-\-exclude\fR=\fIDEVICES\fR
Up to ten comma separated devices to be excluded, examples:
@@ -133,10 +138,10 @@ Up to ten comma separated devices to be excluded, examples:
--exclude=/dev/sdc,/dev/sdd
--exclude=/dev/sdc,/dev/sdd,/dev/mapper/cryptswap1
.SH BUGS
Please see the GitHub site for the latest list
Please see the GitHub site for the latest list:
(https://github.com/martijnvanbrummelen/nwipe/issues)
.SH AUTHOR
Nwipe is developed by Martijn van Brummelen <github@brumit.nl>
nwipe is developed by Martijn van Brummelen <github@brumit.nl>.
.SH "SEE ALSO"
.BR shred (1),
.BR dwipe (1),

View File

@@ -20,6 +20,9 @@
* damages, or other liability, whether in an action of contract, tort, or otherwise, arising
* from, out of, or in connection with the software or the use or other dealings in the software.
*
* Actually it uses subtraction as the core operation, making it conceptually closer to a
* "Subtractive Lagged Fibonacci Generator" (SLFG) variant, but well..
*
* Note: This implementation is designed for non-cryptographic applications and should not be
* used where cryptographic security is required.
*/

View File

@@ -26,7 +26,7 @@
void customer_processes( int );
void select_customers( int, char** );
void delete_customer();
void delete_customer( int, char** );
void add_customer();
void write_customer_csv_entry( char*, char*, char*, char* );
void delete_customer_csv_entry( int* );

320
src/gui.c
View File

@@ -1717,27 +1717,27 @@ void nwipe_gui_prng( void )
mvwprintw( main_window,
yy++,
tab1,
"The Mersenne Twister, by Makoto Matsumoto and Takuji Nishimura, is a " );
"The Mersenne Twister, by Makoto Matsumoto and Takuji Nishimura, is a " );
mvwprintw( main_window,
yy++,
tab1,
"generalized feedback shift register PRNG that is uniform and " );
"generalized feedback shift register PRNG that is uniform and " );
mvwprintw( main_window,
yy++,
tab1,
"equidistributed in 623-dimensions with a proven period of 2^19937-1. " );
"equidistributed in 623-dimensions with a proven period of 2^19937-1. " );
mvwprintw( main_window,
yy++,
tab1,
" " );
" " );
mvwprintw( main_window,
yy++,
tab1,
"This implementation passes the Marsaglia Diehard test suite. " );
"This implementation passes the Marsaglia Diehard test suite. " );
mvwprintw( main_window,
yy++,
tab1,
" " );
" " );
break;
case 1:
@@ -1745,23 +1745,23 @@ void nwipe_gui_prng( void )
mvwprintw( main_window,
yy++,
tab1,
"ISAAC, by Bob Jenkins, is a PRNG derived from RC4 with a minimum period of " );
"ISAAC, by Bob Jenkins, is a PRNG derived from RC4 with a minimum period of " );
mvwprintw( main_window,
yy++,
tab1,
"2^40 and an expected period of 2^8295. It is difficult to recover the " );
"2^40 and an expected period of 2^8295. It is difficult to recover the " );
mvwprintw( main_window,
yy++,
tab1,
"initial PRNG state by cryptanalysis of the ISAAC stream. " );
"initial PRNG state by cryptanalysis of the ISAAC stream. " );
mvwprintw( main_window,
yy++,
tab1,
" " );
" " );
mvwprintw( main_window,
yy++,
tab1,
"Performs best on a 32-bit CPU. Use ISAAC-64 if this system has a 64-bit CPU." );
"Performs best on a 32-bit CPU. Use ISAAC-64 if this system has a 64-bit CPU. " );
break;
case 2:
@@ -1769,23 +1769,23 @@ void nwipe_gui_prng( void )
mvwprintw( main_window,
yy++,
tab1,
"ISAAC-64, by Bob Jenkins, is like 32-bit ISAAC, but with a minimum period of" );
"ISAAC-64, by Bob Jenkins, is like 32-bit ISAAC, but with a minimum period of " );
mvwprintw( main_window,
yy++,
tab1,
"2^77 and an expected period of 2^16583. It is difficult to recover the " );
"2^77 and an expected period of 2^16583. It is difficult to recover the " );
mvwprintw( main_window,
yy++,
tab1,
"initial PRNG state by cryptanalysis of the ISAAC-64 stream. " );
"initial PRNG state by cryptanalysis of the ISAAC-64 stream. " );
mvwprintw( main_window,
yy++,
tab1,
" " );
" " );
mvwprintw( main_window,
yy++,
tab1,
"Performs best on a 64-bit CPU. Use ISAAC if this system has a 32-bit CPU. " );
"Performs best on a 64-bit CPU. Use ISAAC if this system has a 32-bit CPU. " );
break;
case 3:
@@ -1793,11 +1793,11 @@ void nwipe_gui_prng( void )
mvwprintw( main_window,
yy++,
tab1,
"ALFG (Additive Lagged Fibonacci Generator), is a class of PRNGs utilizing" );
"ALFG (Additive Lagged Fibonacci Generator), is a class of PRNGs utilizing " );
mvwprintw( main_window,
yy++,
tab1,
"the Fibonacci sequence with additive operations between lagged values. While" );
"the Fibonacci sequence with additive operations between lagged values. While " );
mvwprintw( main_window,
yy++,
tab1,
@@ -1805,31 +1805,31 @@ void nwipe_gui_prng( void )
mvwprintw( main_window,
yy++,
tab1,
"that they provide lower levels of security, making them less suitable for" );
"that they provide lower levels of security, making them less suitable for " );
mvwprintw( main_window,
yy++,
tab1,
"cryptographic applications. Their periodicity depends on the choice of lags" );
"cryptographic applications. Their periodicity depends on the choice of lags " );
mvwprintw( main_window,
yy++,
tab1,
"and arithmetic operations, potentially achieving large values, often 2^N or" );
"and arithmetic operations, potentially achieving large values, often 2^N or " );
mvwprintw( main_window,
yy++,
tab1,
"higher, where N is the bit length of the states. " );
"higher, where N is the bit length of the states. " );
mvwprintw( main_window,
yy++,
tab1,
" " );
" " );
mvwprintw( main_window,
yy++,
tab1,
"Efficient on CPUs of any bit width, particularly suited for non-cryptographic" );
"Efficient on CPUs of any bit width, particularly suited for non-cryptographic " );
mvwprintw( main_window,
yy++,
tab1,
"applications requiring long sequences with a good speed-randomness trade-off. " );
"applications requiring long sequences with a good speed-randomness trade-off. " );
break;
case 4:
@@ -1837,47 +1837,47 @@ void nwipe_gui_prng( void )
mvwprintw( main_window,
yy++,
tab1,
"Xoroshiro256**, originally designed by David Blackman and Sebastiano Vigna" );
"XORoshiro256**, originally designed by David Blackman and Sebastiano Vigna " );
mvwprintw( main_window,
yy++,
tab1,
"for 128 bits, was adapted to 256 bits by Fabian Druschke. This adaptation " );
"for 128 bits, was adapted to 256 bits by Fabian Druschke. This adaptation " );
mvwprintw( main_window,
yy++,
tab1,
"enhances its capability for fast, high-quality generation of pseudo-random " );
"enhances its capability for fast, high-quality generation of pseudo-random " );
mvwprintw( main_window,
yy++,
tab1,
"numbers with a state size of 256 bits. It boasts an extremely long period " );
"numbers with a state size of 256 bits. It boasts an extremely long period " );
mvwprintw( main_window,
yy++,
tab1,
"of 2^256-1 without sacrificing performance, suitable for a wide range of " );
"of 2^256-1 without sacrificing performance, suitable for a wide range of " );
mvwprintw( main_window,
yy++,
tab1,
"applications. " );
"applications. " );
mvwprintw( main_window,
yy++,
tab1,
" " );
" " );
mvwprintw( main_window,
yy++,
tab1,
"The simple arithmetic operations (shifts, rotations, and XORs) of " );
"The simple arithmetic operations (shifts, rotations, and XORs) of " );
mvwprintw( main_window,
yy++,
tab1,
"Xoroshiro256** ensure low computational complexity. This, combined with " );
"XORoshiro256** ensure low computational complexity. This, combined with " );
mvwprintw( main_window,
yy++,
tab1,
"the adaptation for 256 bits by Fabian Druschke, allows efficient use " );
"the adaptation for 256 bits by Fabian Druschke, allows efficient use " );
mvwprintw( main_window,
yy++,
tab1,
"especially for legacy systems, due to its efficiency and minimal demands. " );
"especially for legacy systems, due to its efficiency and minimal demands. " );
break;
}
@@ -2410,105 +2410,105 @@ void nwipe_gui_method( void )
mvwprintw( main_window, 2, tab2, "Security Level: high (1 pass)" );
mvwprintw( main_window, 4, tab2, "This method fills the device with zeros. Note " );
mvwprintw( main_window, 5, tab2, "that the rounds option does not apply to this " );
mvwprintw( main_window, 6, tab2, "method. This method always runs one round. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "There is no publicly available evidence that " );
mvwprintw( main_window, 9, tab2, "data can be recovered from a modern traditional " );
mvwprintw( main_window, 10, tab2, "hard drive (HDD) that has been zero wiped, " );
mvwprintw( main_window, 11, tab2, "however a wipe that includes a prng may be " );
mvwprintw( main_window, 12, tab2, "preferable. " );
mvwprintw( main_window, 4, tab2, "This method fills the device with zeros. Note " );
mvwprintw( main_window, 5, tab2, "that the rounds option does not apply to this " );
mvwprintw( main_window, 6, tab2, "method. This method always runs one round. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "There is no publicly available evidence that " );
mvwprintw( main_window, 9, tab2, "data can be recovered from a modern traditional " );
mvwprintw( main_window, 10, tab2, "hard drive (HDD) that has been zero wiped, " );
mvwprintw( main_window, 11, tab2, "however a wipe that includes a PRNG may be " );
mvwprintw( main_window, 12, tab2, "preferable. " );
break;
case 1:
mvwprintw( main_window, 2, tab2, "Security Level: high (1 pass)" );
mvwprintw( main_window, 4, tab2, "This method fills the device with ones. Note that" );
mvwprintw( main_window, 5, tab2, "the rounds option does not apply to this method. " );
mvwprintw( main_window, 6, tab2, "This method always runs one round. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "This method might be used when wiping a solid " );
mvwprintw( main_window, 9, tab2, "state drive if an additional level of security is" );
mvwprintw( main_window, 10, tab2, "required beyond using the drives internal secure " );
mvwprintw( main_window, 11, tab2, "erase features. Alternatively PRNG may be " );
mvwprintw( main_window, 12, tab2, "preferable. " );
mvwprintw( main_window, 4, tab2, "This method fills the device with ones. Note that " );
mvwprintw( main_window, 5, tab2, "the rounds option does not apply to this method. " );
mvwprintw( main_window, 6, tab2, "This method always runs one round. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "This method might be used when wiping a solid " );
mvwprintw( main_window, 9, tab2, "state drive if an additional level of security is " );
mvwprintw( main_window, 10, tab2, "required beyond using the drives internal secure " );
mvwprintw( main_window, 11, tab2, "erase features. Alternatively PRNG may be " );
mvwprintw( main_window, 12, tab2, "preferable. " );
break;
case 2:
mvwprintw( main_window, 2, tab2, "Security Level: higher (8 passes)" );
mvwprintw( main_window, 4, tab2, "The Royal Canadian Mounted Police Technical " );
mvwprintw( main_window, 5, tab2, "Security Standard for Information Technology. " );
mvwprintw( main_window, 6, tab2, "Appendix OPS-II: Media Sanitization. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "This implementation, with regards to paragraph 2 " );
mvwprintw( main_window, 9, tab2, "section A of the standard, uses a pattern that is" );
mvwprintw( main_window, 10, tab2, "one random byte and that is changed each round. " );
mvwprintw( main_window, 4, tab2, "The Royal Canadian Mounted Police Technical " );
mvwprintw( main_window, 5, tab2, "Security Standard for Information Technology. " );
mvwprintw( main_window, 6, tab2, "Appendix OPS-II: Media Sanitization. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "This implementation, with regards to paragraph 2 " );
mvwprintw( main_window, 9, tab2, "section A of the standard, uses a pattern that is " );
mvwprintw( main_window, 10, tab2, "one random byte and that is changed each round. " );
break;
case 3:
mvwprintw( main_window, 2, tab2, "Security Level: higher (3 passes)" );
mvwprintw( main_window, 4, tab2, "The US Department of Defense 5220.22-M short wipe" );
mvwprintw( main_window, 5, tab2, "This method is composed of passes 1, 2 & 7 from " );
mvwprintw( main_window, 6, tab2, "the standard DoD 5220.22-M wipe. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "Pass 1: A random character " );
mvwprintw( main_window, 9, tab2, "Pass 2: The bitwise complement of pass 1. " );
mvwprintw( main_window, 10, tab2, "Pass 3: A random number generated data stream " );
mvwprintw( main_window, 4, tab2, "The US Department of Defense 5220.22-M short wipe." );
mvwprintw( main_window, 5, tab2, "This method is composed of passes 1, 2 & 7 from " );
mvwprintw( main_window, 6, tab2, "the standard DoD 5220.22-M wipe. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "Pass 1: A random character. " );
mvwprintw( main_window, 9, tab2, "Pass 2: The bitwise complement of pass 1. " );
mvwprintw( main_window, 10, tab2, "Pass 3: A random number generated data stream. " );
break;
case 4:
mvwprintw( main_window, 2, tab2, "Security Level: higher (7 passes)" );
mvwprintw( main_window, 3, tab2, "The American Department of Defense 5220.22-M " );
mvwprintw( main_window, 4, tab2, "standard wipe. " );
mvwprintw( main_window, 5, tab2, " " );
mvwprintw( main_window, 6, tab2, "Pass 1: A Random character " );
mvwprintw( main_window, 7, tab2, "Pass 2: The bitwise complement of pass 1 " );
mvwprintw( main_window, 8, tab2, "Pass 3: A random number generated data stream " );
mvwprintw( main_window, 9, tab2, "Pass 4: A Random character " );
mvwprintw( main_window, 10, tab2, "Pass 5: A Random character " );
mvwprintw( main_window, 11, tab2, "Pass 6: The bitwise complement of pass 5 " );
mvwprintw( main_window, 12, tab2, "Pass 7: A random number generated data stream " );
mvwprintw( main_window, 3, tab2, "The American Department of Defense 5220.22-M " );
mvwprintw( main_window, 4, tab2, "standard wipe. " );
mvwprintw( main_window, 5, tab2, " " );
mvwprintw( main_window, 6, tab2, "Pass 1: A random character. " );
mvwprintw( main_window, 7, tab2, "Pass 2: The bitwise complement of pass 1. " );
mvwprintw( main_window, 8, tab2, "Pass 3: A random number generated data stream. " );
mvwprintw( main_window, 9, tab2, "Pass 4: A random character. " );
mvwprintw( main_window, 10, tab2, "Pass 5: A random character. " );
mvwprintw( main_window, 11, tab2, "Pass 6: The bitwise complement of pass 5. " );
mvwprintw( main_window, 12, tab2, "Pass 7: A random number generated data stream. " );
break;
case 5:
mvwprintw( main_window, 2, tab2, "Security Level: Paranoid ! (35 passes) " );
mvwprintw( main_window, 3, tab2, "Don't waste your time with this on a modern drive" );
mvwprintw( main_window, 2, tab2, "Security Level: Paranoid ! (35 passes) " );
mvwprintw( main_window, 3, tab2, "Don't waste your time with this on a modern drive!" );
mvwprintw( main_window, 5, tab2, "This is the method described by Peter Gutmann in " );
mvwprintw( main_window, 6, tab2, "the paper entitled \"Secure Deletion of Data from" );
mvwprintw( main_window, 7, tab2, "Magnetic and Solid-State Memory\", however not " );
mvwprintw( main_window, 8, tab2, "relevant in regards to modern hard disk drives. " );
mvwprintw( main_window, 5, tab2, "This is the method described by Peter Gutmann in " );
mvwprintw( main_window, 6, tab2, "the paper entitled \"Secure Deletion of Data from " );
mvwprintw( main_window, 7, tab2, "Magnetic and Solid-State Memory\", however not " );
mvwprintw( main_window, 8, tab2, "relevant in regards to modern hard disk drives. " );
break;
case 6:
mvwprintw( main_window, 2, tab2, "Security Level: Depends on Rounds" );
mvwprintw( main_window, 4, tab2, "This method fills the device with a stream from " );
mvwprintw( main_window, 5, tab2, "the PRNG. It is probably the best method to use " );
mvwprintw( main_window, 6, tab2, "on modern hard disk drives due to variation in " );
mvwprintw( main_window, 7, tab2, "encoding methods. " );
mvwprintw( main_window, 8, tab2, " " );
mvwprintw( main_window, 9, tab2, "This method has a high security level with 1 " );
mvwprintw( main_window, 10, tab2, "round and an increasingly higher security level " );
mvwprintw( main_window, 11, tab2, "as rounds are increased." );
mvwprintw( main_window, 4, tab2, "This method fills the device with a stream from " );
mvwprintw( main_window, 5, tab2, "the PRNG. It is probably the best method to use " );
mvwprintw( main_window, 6, tab2, "on modern hard disk drives due to variation in " );
mvwprintw( main_window, 7, tab2, "encoding methods. " );
mvwprintw( main_window, 8, tab2, " " );
mvwprintw( main_window, 9, tab2, "This method has a high security level with 1 " );
mvwprintw( main_window, 10, tab2, "round and an increasingly higher security level " );
mvwprintw( main_window, 11, tab2, "as rounds are increased. " );
break;
case 7:
mvwprintw( main_window, 2, tab2, "Security Level: Not applicable" );
mvwprintw( main_window, 4, tab2, "This method only reads the device and checks " );
mvwprintw( main_window, 5, tab2, "that it is all zero. " );
mvwprintw( main_window, 4, tab2, "This method only reads the device and checks " );
mvwprintw( main_window, 5, tab2, "that it is all zeros (0x00). " );
break;
@@ -2516,8 +2516,8 @@ void nwipe_gui_method( void )
mvwprintw( main_window, 2, tab2, "Security Level: Not applicable" );
mvwprintw( main_window, 4, tab2, "This method only reads the device and checks " );
mvwprintw( main_window, 5, tab2, "that it is all ones (0xFF)." );
mvwprintw( main_window, 4, tab2, "This method only reads the device and checks " );
mvwprintw( main_window, 5, tab2, "that it is all ones (0xFF). " );
break;
@@ -2525,14 +2525,14 @@ void nwipe_gui_method( void )
mvwprintw( main_window, 2, tab2, "Security Level: higher (3 passes)" );
mvwprintw( main_window, 4, tab2, "HMG IA/IS 5 (Infosec Standard 5): Secure " );
mvwprintw( main_window, 5, tab2, "Sanitisation of Protectively Marked Information " );
mvwprintw( main_window, 6, tab2, "or Sensitive Information " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "This method fills the device with 0s, then with " );
mvwprintw( main_window, 9, tab2, "1s, then with a PRNG stream, then reads the " );
mvwprintw( main_window, 10, tab2, "device to verify the PRNG stream was " );
mvwprintw( main_window, 11, tab2, "successfully written. " );
mvwprintw( main_window, 4, tab2, "HMG IA/IS 5 (Infosec Standard 5): Secure " );
mvwprintw( main_window, 5, tab2, "Sanitisation of Protectively Marked Information " );
mvwprintw( main_window, 6, tab2, "or Sensitive Information " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "This method fills the device with 0s, then with " );
mvwprintw( main_window, 9, tab2, "1s, then with a PRNG stream, then reads the " );
mvwprintw( main_window, 10, tab2, "device to verify the PRNG stream was " );
mvwprintw( main_window, 11, tab2, "successfully written. " );
break;
case 10:
@@ -2541,9 +2541,9 @@ void nwipe_gui_method( void )
mvwprintw( main_window, 4, tab2, "Bruce Schneier 7-Pass Wiping Method: " );
mvwprintw( main_window, 5, tab2, "A secure erasure technique developed by the " );
mvwprintw( main_window, 6, tab2, "renowned cryptographer Bruce Schneier. " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 7, tab2, " " );
mvwprintw( main_window, 8, tab2, "This method first overwrites the device with " );
mvwprintw( main_window, 9, tab2, "ones (0xFF), followed by zeroes (0x00). Then, " );
mvwprintw( main_window, 9, tab2, "ones (0xFF), followed by zeros (0x00). Then, " );
mvwprintw( main_window, 10, tab2, "it performs five additional passes of PRNG- " );
mvwprintw( main_window, 11, tab2, "generated random data to maximize security. " );
break;
@@ -2741,73 +2741,73 @@ void nwipe_gui_config( void )
mvwprintw( main_window, 2, tab2, "PDF Report = DISABLED" );
}
mvwprintw( main_window, 4, tab2, "Enable or Disable creation of the PDF " );
mvwprintw( main_window, 5, tab2, "report/certificate " );
mvwprintw( main_window, 4, tab2, "Enable or disable creation of the PDF " );
mvwprintw( main_window, 5, tab2, "report/certificate. " );
break;
case 1:
mvwprintw( main_window, 2, tab2, "PDF Report - Edit Organisation" );
mvwprintw( main_window, 2, tab2, "PDF Report - Edit Organisation " );
mvwprintw( main_window, 4, tab2, "This option allows you to edit details" );
mvwprintw( main_window, 5, tab2, "of the organisation that is performing" );
mvwprintw( main_window, 6, tab2, "the erasure. This includes: business " );
mvwprintw( main_window, 7, tab2, "name, business address, contact name " );
mvwprintw( main_window, 8, tab2, "and contact phone. " );
mvwprintw( main_window, 4, tab2, "This option allows you to edit details " );
mvwprintw( main_window, 5, tab2, "of the organisation that is performing " );
mvwprintw( main_window, 6, tab2, "the erasure. This includes: business " );
mvwprintw( main_window, 7, tab2, "name, business address, contact name " );
mvwprintw( main_window, 8, tab2, "and contact phone. " );
break;
case 2:
mvwprintw( main_window, 2, tab2, "PDF Report - Select Customer" );
mvwprintw( main_window, 2, tab2, "PDF Report - Select Customer " );
mvwprintw( main_window, 4, tab2, "Allows selection of a customer as " );
mvwprintw( main_window, 5, tab2, "displayed on the PDF report. Customer " );
mvwprintw( main_window, 6, tab2, "information includes Name (This can be" );
mvwprintw( main_window, 7, tab2, "a personal or business name), address " );
mvwprintw( main_window, 8, tab2, "contact name and contact phone. " );
mvwprintw( main_window, 9, tab2, " " );
mvwprintw( main_window, 10, tab2, "Customer data is located in: " );
mvwprintw( main_window, 11, tab2, "/etc/nwipe/nwipe_customers.csv " );
mvwprintw( main_window, 4, tab2, "Allows selection of a customer as " );
mvwprintw( main_window, 5, tab2, "displayed on the PDF report. Customer " );
mvwprintw( main_window, 6, tab2, "information includes Name (This can be " );
mvwprintw( main_window, 7, tab2, "a personal or business name), address " );
mvwprintw( main_window, 8, tab2, "contact name and contact phone. " );
mvwprintw( main_window, 9, tab2, " " );
mvwprintw( main_window, 10, tab2, "Customer data is located in: " );
mvwprintw( main_window, 11, tab2, "/etc/nwipe/nwipe_customers.csv " );
break;
case 3:
mvwprintw( main_window, 2, tab2, "PDF Report - Add Customer " );
mvwprintw( main_window, 2, tab2, "PDF Report - Add Customer " );
mvwprintw( main_window, 4, tab2, "This option allows you to add a new " );
mvwprintw( main_window, 5, tab2, "customer. A customer can be optionally" );
mvwprintw( main_window, 6, tab2, "displayed on the PDF report. Customer " );
mvwprintw( main_window, 7, tab2, "information includes Name (This can be" );
mvwprintw( main_window, 8, tab2, "a personal or business name), address " );
mvwprintw( main_window, 9, tab2, "contact name and contact phone. " );
mvwprintw( main_window, 10, tab2, " " );
mvwprintw( main_window, 11, tab2, "Customer data is saved in: " );
mvwprintw( main_window, 12, tab2, "/etc/nwipe/nwipe_customers.csv " );
mvwprintw( main_window, 4, tab2, "This option allows you to add a new " );
mvwprintw( main_window, 5, tab2, "customer. A customer can be optionally " );
mvwprintw( main_window, 6, tab2, "displayed on the PDF report. Customer " );
mvwprintw( main_window, 7, tab2, "information includes Name (This can be " );
mvwprintw( main_window, 8, tab2, "a personal or business name), address " );
mvwprintw( main_window, 9, tab2, "contact name and contact phone. " );
mvwprintw( main_window, 10, tab2, " " );
mvwprintw( main_window, 11, tab2, "Customer data is saved in: " );
mvwprintw( main_window, 12, tab2, "/etc/nwipe/nwipe_customers.csv " );
break;
case 4:
mvwprintw( main_window, 2, tab2, "PDF Report - Delete Customer " );
mvwprintw( main_window, 2, tab2, "PDF Report - Delete Customer " );
mvwprintw( main_window, 4, tab2, "This option allows you to delete a " );
mvwprintw( main_window, 5, tab2, "customer. A customer can be optionally" );
mvwprintw( main_window, 6, tab2, "displayed on the PDF report. Customer " );
mvwprintw( main_window, 7, tab2, "information includes Name (This can be" );
mvwprintw( main_window, 8, tab2, "a personal or business name), address " );
mvwprintw( main_window, 9, tab2, "contact name and contact phone. " );
mvwprintw( main_window, 10, tab2, " " );
mvwprintw( main_window, 11, tab2, "Customer data is saved in: " );
mvwprintw( main_window, 12, tab2, "/etc/nwipe/nwipe_customers.csv " );
mvwprintw( main_window, 4, tab2, "This option allows you to delete a " );
mvwprintw( main_window, 5, tab2, "customer. A customer can be optionally " );
mvwprintw( main_window, 6, tab2, "displayed on the PDF report. Customer " );
mvwprintw( main_window, 7, tab2, "information includes Name (This can be " );
mvwprintw( main_window, 8, tab2, "a personal or business name), address " );
mvwprintw( main_window, 9, tab2, "contact name and contact phone. " );
mvwprintw( main_window, 10, tab2, " " );
mvwprintw( main_window, 11, tab2, "Customer data is saved in: " );
mvwprintw( main_window, 12, tab2, "/etc/nwipe/nwipe_customers.csv " );
break;
case 5:
mvwprintw( main_window, 2, tab2, "PDF Report - Preview Organisation, " );
mvwprintw( main_window, 3, tab2, "Customer and Date/Time details " );
mvwprintw( main_window, 2, tab2, "PDF Report - Preview Organisation, " );
mvwprintw( main_window, 3, tab2, "Customer and Date/Time details " );
mvwprintw( main_window, 5, tab2, "This allows the above information to " );
mvwprintw( main_window, 6, tab2, "be checked prior to starting the wipe " );
mvwprintw( main_window, 7, tab2, "so that the information is correct on " );
mvwprintw( main_window, 8, tab2, "the pdf report. " );
mvwprintw( main_window, 5, tab2, "This allows the above information to " );
mvwprintw( main_window, 6, tab2, "be checked prior to starting the wipe " );
mvwprintw( main_window, 7, tab2, "so that the information is correct on " );
mvwprintw( main_window, 8, tab2, "the PDF report. " );
break;
case 6:
@@ -2820,22 +2820,22 @@ void nwipe_gui_config( void )
{
mvwprintw( main_window, 2, tab2, "Preview Org. & Customer at start = DISABLED" );
}
mvwprintw( main_window, 4, tab2, "A preview prior to the drive selection" );
mvwprintw( main_window, 5, tab2, "of the organisation that is performing" );
mvwprintw( main_window, 6, tab2, "the wipe, the customer details and the" );
mvwprintw( main_window, 7, tab2, "current date and time in order to " );
mvwprintw( main_window, 8, tab2, "confirm that the information is " );
mvwprintw( main_window, 9, tab2, "correct on the pdf report prior to " );
mvwprintw( main_window, 10, tab2, "drive selection and starting the erase" );
mvwprintw( main_window, 4, tab2, "A preview prior to the drive selection " );
mvwprintw( main_window, 5, tab2, "of the organisation that is performing " );
mvwprintw( main_window, 6, tab2, "the wipe, the customer details and the " );
mvwprintw( main_window, 7, tab2, "current date and time in order to " );
mvwprintw( main_window, 8, tab2, "confirm that the information is " );
mvwprintw( main_window, 9, tab2, "correct on the PDF report prior to " );
mvwprintw( main_window, 10, tab2, "drive selection and starting the erase." );
break;
case 8:
mvwprintw( main_window, 2, tab2, "Set System Date & Time " );
mvwprintw( main_window, 2, tab2, "Set System Date & Time " );
mvwprintw( main_window, 4, tab2, "Useful when host is not connected to " );
mvwprintw( main_window, 5, tab2, "the internet and not running the 'ntp'" );
mvwprintw( main_window, 6, tab2, "(network time protocol). " );
mvwprintw( main_window, 4, tab2, "Useful when host is not connected to " );
mvwprintw( main_window, 5, tab2, "the internet and not running the 'NTP' " );
mvwprintw( main_window, 6, tab2, "(Network Time Protocol). " );
break;
} /* switch */

View File

@@ -25,8 +25,7 @@ MODIFIED:
*(r++) = b = ind(mm,y>>RANDSIZL) + x; \
}
void isaac(ctx)
randctx *ctx;
void isaac(randctx *ctx)
{
register ub4 a,b,x,y,*m,*mm,*m2,*r,*mend;
mm=ctx->randmem;
@@ -64,9 +63,7 @@ randctx *ctx;
}
/* if (flag==TRUE), then use the contents of randrsl[] to initialize mm[]. */
void randinit(ctx, flag)
randctx *ctx;
word flag;
void randinit(randctx *ctx, word flag)
{
word i;
ub4 a,b,c,d,e,f,g,h;

View File

@@ -32,10 +32,9 @@ typedef struct randctx randctx;
If (flag==TRUE), then use the contents of randrsl[0..RANDSIZ-1] as the seed.
------------------------------------------------------------------------------
*/
void randinit(/*_ randctx *r, word flag _*/);
void isaac(/*_ randctx *r _*/);
void randinit(randctx *r, word flag);
void isaac(randctx *r);
/*
------------------------------------------------------------------------------

View File

@@ -617,11 +617,11 @@ void nwipe_options_log( void )
}
else if( nwipe_options.prng == &nwipe_add_lagg_fibonacci_prng )
{
nwipe_log( NWIPE_LOG_NOTICE, " prng = Lagged Fibonacci generator (EXPERIMENTAL!)" );
nwipe_log( NWIPE_LOG_NOTICE, " prng = Lagged Fibonacci generator" );
}
else if( nwipe_options.prng == &nwipe_xoroshiro256_prng )
{
nwipe_log( NWIPE_LOG_NOTICE, " prng = XORoshiro-256 (EXPERIMENTAL!)" );
nwipe_log( NWIPE_LOG_NOTICE, " prng = XORoshiro-256" );
}
else if( nwipe_options.prng == &nwipe_isaac )
{
@@ -714,28 +714,28 @@ void display_help()
puts( " -l, --logfile=FILE Filename to log to. Default is STDOUT\n" );
puts( " -P, --PDFreportpath=PATH Path to write PDF reports to. Default is \".\"" );
puts( " If set to \"noPDF\" no PDF reports are written.\n" );
puts( " -p, --prng=METHOD PRNG option "
puts( " -p, --prng=METHOD PRNG option "
"(mersenne|twister|isaac|isaac64|add_lagg_fibonacci_prng|xoroshiro256_prng)\n" );
puts( " -q, --quiet Anonymize logs and the GUI by removing unique data, i.e." );
puts( " serial numbers, LU WWN Device ID, and SMBIOS/DMI data" );
puts( " XXXXXX = S/N exists, ????? = S/N not obtainable\n" );
puts( " -r, --rounds=NUM Number of times to wipe the device using the selected" );
puts( " method (default: 1)\n" );
puts( " --noblank Do NOT blank disk after wipe" );
puts( " (default is to complete a final blank pass)\n" );
puts( " --nowait Do NOT wait for a key before exiting" );
puts( " (default is to wait)\n" );
puts( " --nosignals Do NOT allow signals to interrupt a wipe" );
puts( " (default is to allow)\n" );
puts( " --nogui Do NOT show the GUI interface. Automatically invokes" );
puts( " the nowait option. Must be used with the --autonuke" );
puts( " option. Send SIGUSR1 to log current stats\n" );
puts( " --nousb Do NOT show or wipe any USB devices whether in GUI" );
puts( " mode, --nogui or --autonuke modes.\n" );
puts( " -e, --exclude=DEVICES Up to ten comma separated devices to be excluded" );
puts( " --exclude=/dev/sdc" );
puts( " --exclude=/dev/sdc,/dev/sdd" );
puts( " --exclude=/dev/sdc,/dev/sdd,/dev/mapper/cryptswap1\n" );
puts( " -q, --quiet Anonymize logs and the GUI by removing unique data, i.e." );
puts( " serial numbers, LU WWN Device ID, and SMBIOS/DMI data." );
puts( " XXXXXX = S/N exists, ????? = S/N not obtainable\n" );
puts( " -r, --rounds=NUM Number of times to wipe the device using the selected" );
puts( " method. (default: 1)\n" );
puts( " --noblank Do NOT blank disk after wipe." );
puts( " (default is to complete a final blank pass)\n" );
puts( " --nowait Do NOT wait for a key before exiting." );
puts( " (default is to wait)\n" );
puts( " --nosignals Do NOT allow signals to interrupt a wipe." );
puts( " (default is to allow)\n" );
puts( " --nogui Do NOT show the GUI interface. Automatically invokes" );
puts( " the nowait option. Must be used with the --autonuke" );
puts( " option. Send SIGUSR1 to log current stats.\n" );
puts( " --nousb Do NOT show or wipe any USB devices whether in GUI" );
puts( " mode, --nogui or --autonuke modes.\n" );
puts( " -e, --exclude=DEVICES Up to ten comma separated devices to be excluded." );
puts( " --exclude=/dev/sdc" );
puts( " --exclude=/dev/sdc,/dev/sdd" );
puts( " --exclude=/dev/sdc,/dev/sdd,/dev/mapper/cryptswap1\n" );
puts( "" );
exit( EXIT_SUCCESS );
}

View File

@@ -260,7 +260,7 @@ int nwipe_isaac64_read( NWIPE_PRNG_READ_SIGNATURE )
return 0;
}
/* EXPERIMENTAL implementation of Lagged Fibonacci generator a lot of random numbers */
/* Implementation of Lagged Fibonacci generator a lot of random numbers */
int nwipe_add_lagg_fibonacci_prng_init( NWIPE_PRNG_INIT_SIGNATURE )
{
if( *state == NULL )
@@ -274,7 +274,7 @@ int nwipe_add_lagg_fibonacci_prng_init( NWIPE_PRNG_INIT_SIGNATURE )
return 0;
}
/* EXPERIMENTAL implementation of XORoroshiro256 algorithm to provide high-quality, but a lot of random numbers */
/* Implementation of XORoroshiro256 algorithm to provide high-quality, but a lot of random numbers */
int nwipe_xoroshiro256_prng_init( NWIPE_PRNG_INIT_SIGNATURE )
{
nwipe_log( NWIPE_LOG_NOTICE, "Initialising XORoroshiro-256 PRNG" );
@@ -320,7 +320,7 @@ int nwipe_xoroshiro256_prng_read( NWIPE_PRNG_READ_SIGNATURE )
u8* restrict bufpos = buffer;
size_t words = count / SIZE_OF_XOROSHIRO256_PRNG;
/* Loop to fill the buffer with blocks directly from the XORoroshiro256 algorithm */
/* Loop to fill the buffer with blocks directly from the XORoshiro256 algorithm */
for( size_t ii = 0; ii < words; ++ii )
{
xoroshiro256_genrand_uint256_to_buf( (xoroshiro256_state_t*) *state, bufpos );

View File

@@ -4,15 +4,15 @@
* used by configure to dynamically assign those values
* to documentation files.
*/
const char* version_string = "0.38.1";
const char* version_string = "0.39";
const char* program_name = "nwipe";
const char* author_name = "Martijn van Brummelen";
const char* email_address = "git@brumit.nl";
const char* years = "2024";
const char* years = "2025";
const char* copyright = "Copyright Darik Horn <dajhorn-dban@vanadac.com>\n\
Andy Beverley <andy@andybev.com> Martijn van Brummelen <martijn@brumit.nl>\n\
Nick Law <shredos.eraser@gmail.com> (@PartialVolume) and others\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty; not even for MERCHANTABILITY or FITNESS\n\
FOR A PARTICULAR PURPOSE.\n";
const char* banner = "nwipe 0.38.1";
const char* banner = "nwipe 0.39";