cryptix.tools

Class Scar


public class Scar
extends Thread

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: 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 $

Author:
Raif S. Naffah

Nested Class Summary

(package private) class
Scar.ScarInputStream
(package private) class
Scar.ScarOutputStream

Field Summary

(package private) static char[]
BASE64
(package private) static int
CONV_OTHER
(package private) static int
CONV_PAD
(package private) static int
CONV_WHITE
static boolean
DEBUG
(package private) static String
DEFAULT_CIPHER
(package private) static String
DEFAULT_COMMENT
(package private) static String
DEFAULT_FOOTER
(package private) static String
DEFAULT_HEADER
Default default values!
(package private) static int
DEFAULT_ITERATIONS
(package private) static String
DEFAULT_MD
(package private) static String
DEFAULT_PASS_PHRASE
(package private) static String
DEFAULT_SALT
(package private) static boolean
IN
(package private) static int
MAX_LINE_LENGTH
(package private) static boolean
OUT
(package private) static char
PADDING
(package private) static boolean
TRACE
(package private) static String
VERSION
(package private) String
comment
Comment data.
(package private) static int
debuglevel
(package private) static PrintWriter
err
(package private) String
footer
Footer info following ----- in an asciified scar file.
(package private) static String
fs
User runtime jvm host file separator.
(package private) String
header
Header info following ----- in an asciified scar file.
(package private) PropertyResourceBundle
properties
User ResourceBundle file for his/her scar.properties.
(package private) static SecureRandom
random
Source of randomness.

Constructor Summary

Scar()

Method Summary

(package private) static void
debug(String s)
(package private) void
initDefaults()
Set default properties.
static void
main(String[] args)
void
processOptions(String[] args)
Process command line arguments.
void
run()
main action.
(package private) static void
trace(String s)
(package private) static void
trace(boolean in, String s)
void
unzip(ZipInputStream zip, File dest)
unzip files and/or directories to a destination.
void
zip(File source, ZipOutputStream zip, int level)
Zip files and/or directories to a ZipOutputStream.

Field Details

BASE64

(package private) static final char[] BASE64


CONV_OTHER

(package private) static final int CONV_OTHER

Field Value:
-3


CONV_PAD

(package private) static final int CONV_PAD

Field Value:
-2


CONV_WHITE

(package private) static final int CONV_WHITE

Field Value:
-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

Field Value:
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

Field Value:
true


MAX_LINE_LENGTH

(package private) static final int MAX_LINE_LENGTH

Field Value:
64


OUT

(package private) static final boolean OUT

Field Value:
false


PADDING

(package private) static final char PADDING


TRACE

(package private) static final boolean TRACE

Field Value:
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.

Constructor Details

Scar

public Scar()

Method Details

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.

Parameters:
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.

Parameters:
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).