home *** CD-ROM | disk | FTP | other *** search
- /*
- * Data Encryption Standard front end
- * Usage: des [-e -d] keyvalue infile outfile
- */
-
- #include <stdio.h>
- #include <string.h>
- #include "des.h"
-
- static void setparity(char *key);
-
- void main(int argc, char *argv[])
- {
- FILE *fi, *fo;
- char key[9];
- char blk[8];
-
- if (argc > 4) {
- strncpy(key, argv[2], 8);
- key[8] = '\0';
- setparity(key);
-
- initkey(key);
- if ((fi = fopen(argv[3], "rb")) != NULL) {
- if ((fo = fopen(argv[4], "wb")) != NULL) {
- while (!feof(fi)) {
- memset(blk, 0, 8);
- if (fread(blk, 1, 8, fi) != 0) {
- if (stricmp(argv[1], "-e") == 0)
- encrypt(blk);
- else
- decrypt(blk);
- fwrite(blk, 1, 8, fo);
- }
- }
- fclose(fo);
- }
- fclose(fi);
- }
- }
- else
- printf("\nUsage: des [-e -d] keyvalue infile outfile");
- }
-
- /* -------- make a character odd parity ---------- */
- static unsigned char oddparity(unsigned char s)
- {
- unsigned char c = s | 0x80;
- while (s) {
- if (s & 1)
- c ^= 0x80;
- s = (s >> 1) & 0x7f;
- }
- return c;
- }
-
- /* ------ make a key odd parity ------- */
- void setparity(char *key)
- {
- int i;
- for (i = 0; i < 8; i++)
- *(key+i) = oddparity(*(key+i));
- }
-