                  The HPACK Purity Test - 134 Question Version
                  ============================================
                               Updated 19/09/92

Version Tested: [ 0.78          ]   Date/Time tested: [  /  /92,   :  ]
---------------                     -----------------
                              
Basic Functions:
----------------

 1.[ ] [A] - Add files to archive.  Create a new archive and add files to it.
 2.[ ] [X] - Extract files from an existing archive.  Files extracted should
              have the modification date of the original file.
 3.[ ] [V] - View list of files inside archive.
 4.[ ] [T] - Test integrity of files within archive.
 5.[ ] [P] - Extract files within archive to screen.
    
Extended Basic Functions:
-------------------------

 6.[ ] [A] - Add more files to an existing archive.
       [D] - Delete files from an archive.  Cases for deletion:
 7.[ ]       1. Delete first file in archive.
 8.[ ]       2. Delete file(s) from middle of archive.
 9.[ ]       3. Delete last file in archive.
10.[ ]       4. Delete multiple blocks of files.
       [F] - Freshen files in archive.  Cases for freshen:   
11.[ ]       1. Freshen first file in archive.
12.[ ]       2. Freshen file(s) from middle of archive.
13.[ ]       3. Freshen last file in archive.
14.[ ]       4. Freshen multiple blocks of files.
       [R] - Replace files in archive.  Cases for replace:
15.[ ]       1. Replace first file in archive.
16.[ ]       2. Replace file(s) from middle of archive.
17.[ ]       3. Replace last file in archive.
18.[ ]       4. Replace multiple blocks of files.
       [U] - Update files to archive.  Cases for update:
19.[ ]       1. Update first file in archive.
20.[ ]       2. Update file(s) from middle of archive.
21.[ ]       3. Update last file in archive.
22.[ ]       4. Update multiple blocks of files.
       
Options:
--------

23.[ ] -0 - Store files without compression.  All files should be added without
             any compression being attempted.
       -a - Store attributes.  4 cases:
24.[ ]      1.  Store attributes on archiving.
25.[ ]      2.  Restore attributes on dearchiving.
26.[ ]      3.  Store directory attributes with -p flag.
27.[ ]      4.  Restore directory attributes with -p flag (not possible under
                MSDOS).
       -b - Specify base path to work off.  Two cases:
28.[ ]      1.  Adding to archive:  All files should be treated as being off
                the given base path.
29.[ ]      2.  Extracting from archive:  All files should be extracted to this
                base path.
       -c - Encrypt data.  See special section on encryption below.
       -d - Directory options.  Six cases (three for store paths, three for
             extra options):       
30.[ ]      1.  The View option should show the files by the directories they
                are in.
31.[ ]      2.  The Extract option should create the directories before the
                extraction is done.
32.[ ]      3.  The Test, Display options should show the full path for the
                files being processed.
33.[ ]      4.  Add all paths.  All paths, even those containing no files,
                should be added to the archive.
34.[ ]      5.  Extract all paths.  All paths, even those containing no files,
                should be extracted from the archive.
35.[ ]      5.  Add no paths - if the path isn't already in the archive, exit
                with an error message.
36.[ ]      6.  Incorrect option given:  Error message should indicate that an
                incorrect directory option has been given.
37.[ ] -e - Error recovery information.  This should be written for all files
             specified, and consist of an error ID, the fileheader, and the
             filename.
       -i - Interactive mode - prompt for each file before taking any action.
             6 cases:
38.[ ]      1.  Adding to archive.
39.[ ]      2.  Extracting from archive.
40.[ ]      3.  Testing/viewing file in archive.
41.[ ]      4.  Deleting from archive.
42.[ ]      5.  Freshening to archive.
43.[ ]      6.  Replacing to archive.
44.[ ]      7.  Answer 'Y' processes the file being prompted for.
45.[ ]      8.  Answer 'N' skips the file being prompted for.
46.[ ]      9.  Answer 'A' processes this and all following files.
       -j - Move files.  Four cases:
47.[ ]      1.  Add/Freshen/Replace/Update with move: Files should be deleted
                after archive is created.
48.[ ]      2.  Add with move, encryption: Files should be physically
                annihilated not just deleted.
49.[ ]      3.  Extract with move: Files should be deleted from archive after
                extraction.
50.[ ]      4.  If move on a unit-compressed or encrypted archive is given, an
                error message should be printed.
51.[ ] -k - Overwrite an existing archive.  Existing archive should be deleted 
             and a new one created.
       -l - Add security information.  2 cases:
52.[ ]      1.  Add security information for entire archive.
53.[ ]      2.  Add security information for individual files.
54.[ ]      Individually secured files should be shown as such when the View
            option is used.
55.[ ]      Secured files/archives should be tested for integrity when the 
            Extract/Test/Display options are used.
       -m - Multipart archives.
56.[ ]      1.  Create multipart archive.  When the disk is full, the multipart
                trailer should be added and a new disk requested.
57.[ ]      2.  Segment size of <512 bytes:  If the segment is less than 512
                bytes long, it should be deleted and a new (emptier) disk
                requested).
58.[ ]      3.  If a multipart archive contains only one segment, it should be
                stored as a normal archive.
59.[ ]      4.  If the trailer would be split over two disks, the entire
                trailer should be moved to a new disk and the seperate trailer
                flag set.
60.[ ]      4.  On reading an archive the last segment should be requested if a
                multipart archive is detected.
61.[ ]      5.  Currently unimplemented:  Once the last segment is acquired
                HPACK should read the directory information (moving to the
                previous disk if the seperate trailer flag is set).
62.[ ]      6.  When files are on seperate disks (eg disk #1, #3, and #8), only
                those disks should be requested; unused disks can be skipped.
       -o - Overwrite on extract options.  6 cases:
63.[ ]      1.  Overwrite all:  All files on extraction should overwrite 
                existing files on disk.
64.[ ]      2.  Overwrite none: No files on extraction should overwrite 
                existing files on disk.
65.[ ]      3.  Overwrite smart:  Files on extraction should be given a unique
                name based on the actual name so that they don't clash with any
                file already on disk.
66.[ ]      4.  Name prompt:  The user should be prompted for a new name for 
                the file.
67.[ ]      6.  No option given:  The user is asked to confirm overwriting for
                each individual case.
68.[ ]      5.  Incorrect option given:  Error message should indicate that an
                incorrect overwrite option has been given.
69.[ ] -r - Recurse subdirectories.  All subdirectories below the given one 
             should be scanned for files.
70.[ ] -s - Stealth mode.  All non-error and non-warning type messages should
             be suppressed.
71.[ ] -t - Files extracted should have the current date and not the 
             modification date.
       -u - Unit-compressed archives.  3 cases:
72.[ ]      1.  All files should be compressed without the compressor being
                 reset.  If there are many small, similar files this will
                 result in a noticeable increase in compression.
73.[ ]      2.  Unit-compressed files should be extracted as normal, if any
                 files are skipped they should be extracted in test mode as if
                 'T' had been used instead of 'P'.
74.[ ]      3.  Any attempt to modify a unit-compressed archive should result
                 in an error being printed.
       -v - View options.  4 cases:
75.[ ]      1.  View files only.
76.[ ]      2.  View list of subdirectories in directories only.
77.[ ]      4.  Sort files before displaying them.
78.[ ]      5.  Incorrect option given:  Error message should indicate that an
                 incorrect view option has been given.
       -w - Archive comment options. 4 cases:
79.[ ]      1.  Files added with the -w option should inhabit their own
                namespace and not clash with existing files.
80.[ ]      2.  Delete, freshen, replace options should not work on comment
                files; to work on comment files the -w option needs to be
                given.
81.[ ]      3.  The view files option should display comment files (if 
                possible) or skip them (if the format cannot be handled).
                Comment files should not be included in the count of data
                files.
82.[ ]      4.  Text comments when displayed should be converted to ASCII-only 
                (or the local equivalent on the machine being used), be word 
                wrapped at the current screen width, and recognise the simple
                formatting options given in HPACKEXT.DOC.
       -x - Extract options.  7 cases:
83.[ ]      1.  Translate LF -> Local EOL delimiter.
84.[ ]      2.  Translate CR -> Local EOL delimiter.
85.[ ]      3.  Translate CRLF -> Local EOL delimiter.
86.[ ]      4.  Treat 1 or 2-digit hex value as EOF symbol; xlate this to the
                local EOL delimiter.
87.[ ]      5.  Translate from EBCDIC -> ASCII.
88.[ ]      6.  Translate from Pr1ime ASCII (high bit set so they could save a
                75c IC in their serial driver) -> normal ASCII.
89.[ ]      7.  Translate from ASCII -> ASCII.
90.[ ]  -z - System-specific special options.  Print error message if no
             options, otherwise results are system-specific.
                
Complex options:
----------------
    
       -rd - Recurse and store paths.  3 cases:
91.[ ]      1.  The View option should show the files by the directories they 
                are in.
92.[ ]      2.  The Extract option should create the directories before the 
                extraction is done.
93.[ ]      3.  The Test, Display options should show the full path for the
                files being processed.
       -rd with Add - 2 cases:
94.[ ]      1.  Added directories should be added to directories in archive if
                they don't already exist.
95.[ ]      2.  When directories are added to the middle of the directory tree,
                it should be rearranged into an inorder traversal with 
                contiguous directory indices before being written to disk.
96.[ ] -ard with Add - Add directories with flags.  When directory tags are 
                added to the middle of the directory tree, the directory tags 
                should be reordered when the directory tree is rebuilt.
       More complex options are assumed OK provided they have been checked for
       the individual-archive cases.
        
Listfiles:
----------

97.[ ] Args beginning with an @ should be treated as listfiles.
98.[ ] Comments and leading whitespace in a listfile should be ignored.
99.[ ] A warning is printed for over-long paths/illegal chars.
100.[ ] Valid paths are added to the argument list as if they had been entered
        from the command-line.
101.[ ] If warnings were issued, once the listfile has been processed or the
        number of warning passses a certain threshold, exit with an error
        count.

Encryption/Authentication:
--------------------------

       Individual encryption options:
102.[ ] -c  The user should be asked for a password of between 8 and 80 chars,
        -ca and the entire archive should be encrypted.
103.[ ] -ci The user should be asked for a password of between 8 and 80 chars,
            and individual files should be encrypted.
104.[ ] -cs The user should be asked for a secondary password as well as the
            main password and the archive directory and file data encrypted
            seperately using the two passwords.
105.[ ] -cpa The given userID should be used to public-key encrypt the entire
            archive.
106.[ ] -cpi The given userID should be used to public-key encrypt individual
            files.
107.[ ] -cps The given userID should be used as a secondary ID as per -cs.
108.[ ]     Individually encrypted files should be show as encrypted when using
            the View option.
109.[ ]     Individually encrypted files which are also secured should be
            shown as encrypted and secured when using the View option.
110.[ ]     Decryption with -c for a conventional-key encrypted archive should
            request the decryption password from the user.
111.[ ]     Decryption with -c for a dual-conventional-key encrypted archive
            should request the secondary key from the user.
112.[ ]     Decryption with -c for a public-key encrypted archive should
            require no password from the user since the key management is
            automatic.
       UserID handling:
113.[ ]     If a list of comma-seperated userID's is given, one PKE packet per
            userID should be created to allow decryption by multiple
            recipients.
114.[ ]     If a userID is given in hex, the hex fragment should be matched
            against the keyID rather than the userID.
115.[ ]     If the secret key is encrypted with an algorithm HPACK can decrypt,
            the user should be given three attempts at a decryption password to
            decrypt the key.
       Error handling:
116.[ ]     Encrypted individual files should be skipped on Extract/Test/
            Display if no -c option is given.
117.[ ]     Encrypted archives should be skipped if no -c option is given.
118.[ ]     If no userID is given for public-key encryption, an error message
            about the missing userID should be printed.
119.[ ]     If a wrong userID is given for public-key encryption, an error
            message about the userID not being found on the keyring should be
            printed.
120.[ ]     Decryption with the wrong conventional-key password should result
            in a warning about a possibly incorrect password and give the
            user the option of quitting.

Error Handling and Misc:
------------------------

121.[ ] Wildcards should work for archives, files, and listfiles.
122.[ ] A help screen should be displayed if HPACK is invoked with no args.
123.[ ] Detection of non-HPACK archives:  An error message should be printed.
124.[ ] Adding an archive to itself:  The archive should be skipped.  Care
        should be taken to ensure this works with aliased pathnames, for
        example /A/B/C and ../C may be the same file.
125.[ ] On extraction, a file with the name of the directory tp be extracted
        already exists: The directory should be skipped along with all files
        and directories in it, and a warning issued.
126.[ ] Unknown command: Indicate via an error message.
127.[ ] Data errors:  A warning message should be printed in the case of
        corrupted data.
128.[ ] -k with [D], [R], [F], [U] - Error message should indicate that the
        archive to change would be deleted.
129.[ ] Disk full (without multipart archive specified) and similar errors:  
        The original archive should be restored fully, all temporary files
        deleted, and HPACK should exit with an error message.
130.[ ] User interrupt:  Exit with error message.
131.[ ] Command results in no action to take:  Indicate to the user via an
        error message.
132.[ ] No files in archive:  HPACK should correctly handle the case of there
        being only directories (but no files) in an archive.
133.[ ] At least two Easter Egg features are included in the executable, none
        of which should be easily found.
134.[ ] The program has been used for at least 10 minutes by 'ward.  This
        ensures the code is both crash-proof and idiot-proof :-).
