kcrypt.c

最終更新:2009/12/16

kcrypt.c

001: /* kcrypt.c
002:  * 暗号化・復号のサンプル
003:  */
004: 
005: #define USAGE "Usage: kcrypt <cipher_alg> <enc | dec> <input_file> <output_file>"
006: 
007: #include "apr_general.h"
008: #include "apr_file_io.h"
009: #include "apr_errno.h"
010: #include "apr_strings.h"
011: #include "apr_buckets.h"
012: 
013: #include "mycipher.h"
014: #include "mybb.h"
015: #include "mystab.h"
016: 
017: int apr_my_main (int ac, char **av, apr_file_t * astdin, apr_file_t * astdout, apr_file_t * astderr, apr_pool_t * pool) {
018: 
019:   int error_flag = 0;
020:   apr_status_t rv;
021:   char error_buf[256];
022:   
023:   
024:   char *cipher_alg = NULL;
025:   char *encdec = NULL;
026:   char *input_file = NULL;
027:   char *output_file = NULL;
028:   int enc = 0;
029:   
030:   if (ac < 5) {
031:     apr_file_printf(astderr, "%s\n", USAGE);
032:     error_flag = 1;
033:     goto _FINALLY_;
034:   }
035:   
036:   cipher_alg = av[1];
037:   encdec = av[2];
038:   input_file = av[3];
039:   output_file = av[4];
040:   
041:   if (!strcmp(encdec, "enc")) {
042:     enc = 1;
043:   }
044:   
045:   init_mycipher();
046:   
047:   if (1) {
048:     apr_bucket_alloc_t *ba = NULL;
049:     apr_bucket_brigade *bbin = NULL;
050:     apr_bucket_brigade *bbout = NULL;
051:     apr_file_t *fpin = NULL;
052:     apr_file_t *fpout = NULL;
053:     apr_finfo_t finfo;
054:     if (APR_SUCCESS != (rv = apr_file_open(&fpin, input_file, APR_FOPEN_READ|APR_FOPEN_BINARY, APR_OS_DEFAULT, pool))) {
055:       apr_file_printf(astderr, "ERROR: apr_file_open: %s\n", apr_strerror(rv, error_buf, sizeof(error_buf)));
056:       error_flag = 1;
057:       goto _FINALLY_;
058:     }
059:     if (APR_SUCCESS != (rv = apr_file_info_get(&finfo, APR_FINFO_SIZE, fpin))) {
060:       apr_file_printf(astderr, "ERROR: apr_file_info_get: %s ", apr_strerror(rv, error_buf, sizeof(error_buf)));
061:       apr_file_close(fpin);
062:       error_flag = 1;
063:       goto _FINALLY_;
064:     }
065:     if (APR_SUCCESS != (rv = apr_file_open(&fpout, output_file, 
066:       APR_FOPEN_WRITE|APR_FOPEN_CREATE|APR_FOPEN_TRUNCATE|APR_FOPEN_BINARY, APR_OS_DEFAULT, pool))) {
067:       apr_file_close(fpin);
068:       apr_file_printf(astderr, "ERROR: apr_file_open: %s ", apr_strerror(rv, error_buf, sizeof(error_buf)));
069:       error_flag = 1;
070:       goto _FINALLY_;
071:     }
072: 
073:     ba = apr_bucket_alloc_create(pool);
074:     bbin = apr_brigade_create(pool, ba);
075:     bbout = apr_brigade_create(pool, ba);
076: 
077:     apr_brigade_insert_file(bbin, fpin, 0, finfo.size, pool);
078: 
079: #ifdef DEBUG
080:     printf("#finfo.size=[%d]\n", finfo.size);
081: #endif
082: 
083:     /* メモ:鍵やIVは乱数にするのが普通だけど…。 */
084: 
085:     if(kencdec_from_bb_to_bb(cipher_alg, "0123456789ABCDEF", 16, "This is a pencil", 16, (apr_size_t)finfo.size, bbin, bbout, enc)) {
086:       write_from_bb_to_fp (bbout, fpout);
087:     } else {
088:       error_flag = 1;
089:     }
090: 
091:     apr_file_close(fpout);
092:     fpin = NULL;
093:     apr_file_close(fpout);
094:     fpout = NULL;
095:     apr_brigade_destroy(bbin);
096:     bbin = NULL;
097:     apr_brigade_destroy(bbout);
098:     bbout =NULL;
099:     apr_bucket_alloc_destroy(ba);
100:     ba = NULL;
101:   }
102: 
103:   _FINALLY_:
104: 
105:   if (error_flag) {
106:     apr_file_printf(astderr, "failed!\n");
107:     return 1; /* 異常終了 */
108:   }
109:   
110:   apr_file_printf(astdout, "\ndone.\n");
111:   return 0; /* 正常終了 */
112: 
113: } /* end of main */
114: 
Copyright (C) KAKU PROJECT (2009)KAKU PROJECT (2009)