A command line utility to (a) compress, encrypt and asciify files and/or
directories (with or without directory recursion), and (b) accomplish the
inverse with user-specified option for recreating a source tree directory.
Uses java.zip tools to deflate and inflate data, Cryptix IJCE for the cipher
and message digest (used to compute cipher keys from user plain ascii
passphrase) algorithms, and a PGP-style Base-64 armour with P. R. Zimmermann
24-bit CRC method (PRZ24 class) for the [de-]asciification.
Hard-wired default values for cipher (Square) and Simple String To Key (S2K)
specifier with message digest (RIPEMD-160) algorithms are used. These and
other default values can be individually modified for each user by setting
the appropriate properties in a
scar.properties file placed in the
user's home directory.
Current scar properties that the user can alter are:
scar.header
The text that will be enclosed between a pair of ----- to visually
indicate the start of an asciified scar. Current default is "BEGIN
SCAR ARCHIVE".
scar.comment
A text that will follow the text "Comment: " in a line following
scar version information in an asciified scar. Current default is
"scar by Cryptix...".
scar.footer
The text that will be enclosed between a pair of ----- to visually
indicate the end of an asciified scar. Current default is "END SCAR
ARCHIVE."
scar.cipher.algorithm
The name of a symmetric cipher algorithm installed and accessible
by the user Java VM. Current default is "Square". Square is a
symmetric block cipher algorithm developed by Joan Daemen
<Daemen.J@banksys.com> and Vincent Rijmen
<vincent.rijmen@esat.kuleuven.ac.be>.
scar.passphrase
The text to use as the pass-phrase. This pass-phrase will be used
as the basis for computing a session key. The algorithms used to
generate a session key from the pass-phrase are an implementation
of the proposed S2K Simple, Salted, Iterated and Salted-Iterated
variations described in the OpenPGP IETF draft document dated
November 1997. The current default is "sub rosa."
scar.md.algorithm
The Message Digest algorithm used in the S2K algorithms. "RIPEMD-160"
Is the default. RIPEMD-160 is designed by Hans Dobbertin, Antoon
Bosselaers and Bart Preneel.
scar.md.salt
A salt value to use in S2K Salted and Iterated-Salted variants.
Current value is "Cryptix Development Team".
scar.md.iterations
A positive integer to use in S2K Iterated and Salted-Iterated
variants. Current default value is 7.
To do:
- Add an option to allow use in distribution applications ('JAR' format
with manifest file).
- ...
Note: this is an alpha release of scar. The format of
encrypted archives may (and probably will) change incompatibly in future
releases..
Copyright © 1997, 1998
Systemics Ltd on behalf of the
Cryptix Development Team.
All rights reserved.
$Revision: 1.4 $
BASE64
(package private) static final char[] BASE64
CONV_OTHER
(package private) static final int CONV_OTHER
- -3
CONV_PAD
(package private) static final int CONV_PAD
- -2
CONV_WHITE
(package private) static final int CONV_WHITE
- -1
DEBUG
public static boolean DEBUG
DEFAULT_CIPHER
(package private) static final String DEFAULT_CIPHER
DEFAULT_COMMENT
(package private) static final String DEFAULT_COMMENT
DEFAULT_FOOTER
(package private) static final String DEFAULT_FOOTER
DEFAULT_HEADER
(package private) static final String DEFAULT_HEADER
Default default values!
DEFAULT_ITERATIONS
(package private) static final int DEFAULT_ITERATIONS
- 7
DEFAULT_MD
(package private) static final String DEFAULT_MD
DEFAULT_PASS_PHRASE
(package private) static final String DEFAULT_PASS_PHRASE
DEFAULT_SALT
(package private) static final String DEFAULT_SALT
IN
(package private) static final boolean IN
- true
MAX_LINE_LENGTH
(package private) static final int MAX_LINE_LENGTH
- 64
OUT
(package private) static final boolean OUT
- false
PADDING
(package private) static final char PADDING
TRACE
(package private) static final boolean TRACE
- false
VERSION
(package private) static final String VERSION
comment
(package private) String comment
Comment data.
debuglevel
(package private) static int debuglevel
err
(package private) static final PrintWriter err
footer
(package private) String footer
Footer info following ----- in an asciified scar file.
fs
(package private) static String fs
User runtime jvm host file separator.
header
(package private) String header
Header info following ----- in an asciified scar file.
properties
(package private) PropertyResourceBundle properties
User ResourceBundle file for his/her scar.properties. Only
user home directory is searched for this properties file.
random
(package private) static final SecureRandom random
Source of randomness.
debug
(package private) static void debug(String s)
initDefaults
(package private) void initDefaults()
Set default properties.
main
public static void main(String[] args)
processOptions
public void processOptions(String[] args)
Process command line arguments.
run
public void run()
main action.
trace
(package private) static void trace(String s)
trace
(package private) static void trace(boolean in,
String s)
unzip
public void unzip(ZipInputStream zip,
File dest)
throws FileNotFoundException,
IOException
unzip files and/or directories to a destination.
dest
- destination File object.
zip
public void zip(File source,
ZipOutputStream zip,
int level)
throws FileNotFoundException,
IOException
Zip files and/or directories to a ZipOutputStream.
source
- source file or directory.zip
- destination zip output stream.level
- depth level in the recursion tree of this method.
Used to distinguish top level directory from sub-
directories (whether to apply recursion or not).