Annotation of OpenXM/src/ox_ntl/crypt/des/des3.c, Revision 1.2
1.2 ! iwane 1: /* $OpenXM: OpenXM/src/ox_ntl/crypt/des/des3.c,v 1.1 2005/06/19 15:30:00 iwane Exp $ */
1.1 iwane 2: /*
3: * Triple-DES
4: * see des.c
5: */
6:
7: #include <stdio.h>
8:
9: #include "des3.h"
10: #include "block.h"
11:
12: #ifdef HAVE_CONFIG_H
13: #include "config.h"
14: #endif
15:
16: #define BLOCK 8
17:
18:
19: /*===========================================================*
20: * KEY STRUCT
21: *===========================================================*/
22:
23: int
24: des3_keychk(des3_key *key)
25: {
26: int ret = 1;
27: int i;
28:
29: for (i = 0; i < 3; i++) {
30: ret = (ret && des_keychk(key->key + i));
31: }
32:
33: return (ret);
34: }
35:
36: void
37: des3_keyset(const unsigned char *key, des3_key *dkey)
38: {
39: int i;
40:
41: for (i = 0; i < 3; i++) {
42: des_keyset(key + 8 * i, dkey->key + i);
43: }
44: }
45:
46:
47:
48:
49: /*===========================================================*
50: * BASE CRYPTO
51: *===========================================================*/
52: /**
53: * input: data: 8 byte
54: */
55: int
56: des3_enc_c(const des3_key *key, const unsigned char *data, unsigned char *enc)
57: {
58: unsigned char b1[8];
59: unsigned char b2[8];
60:
61: des_enc_c(key->key + 0, data, b1);
62: des_dec_c(key->key + 1, b1, b2);
63: des_enc_c(key->key + 2, b2, enc);
64:
65: return (0);
66: }
67:
68:
69: /**
70: * input: data: 8 byte
71: */
72: int
73: des3_dec_c(const des3_key *key, const unsigned char *enc, unsigned char *data)
74: {
75: unsigned char b1[8];
76: unsigned char b2[8];
77:
78: des_dec_c(key->key + 0, enc, b1);
79: des_enc_c(key->key + 1, b1, b2);
80: des_dec_c(key->key + 2, b2, data);
81:
82: return (0);
83: }
84:
85: /*===========================================================*
86: * CRYPTO: length of input data is "64 * n" byte
87: *===========================================================*/
88: int
89: des3_enc_ecb(const des3_key *key, int len, const unsigned char *data, unsigned char *buf)
90: {
91: int ret;
92:
93: ret = crypt_ecb((void *)key, BLOCK, len, data, buf, (void *)des3_enc_c);
94:
95: return (ret);
96: }
97:
98:
99: int
100: des3_dec_ecb(const des3_key *key, int len, const unsigned char *enc, unsigned char *data)
101: {
102: int ret;
103:
104: ret = crypt_ecb((void *)key, BLOCK, len, enc, data, (void *)des3_dec_c);
105:
106: return (ret);
107: }
108:
109:
110:
111: int
1.2 ! iwane 112: des3_enc_cbc(const des3_key *key, unsigned char *iv, int len,
1.1 iwane 113: const unsigned char *data, unsigned char *buf)
114: {
115: int ret;
116:
117: ret = crypt_enc_cbc((void *)key, BLOCK, iv, len, data, buf, (void *)des3_enc_c);
118:
119: return (ret);
120: }
121:
122:
123: int
124: des3_dec_cbc(const des3_key *key, unsigned char *iv, int len,
125: const unsigned char *data, unsigned char *buf)
126: {
127: int ret;
128:
129: ret = crypt_dec_cbc((void *)key, BLOCK, iv, len, data, buf, (void *)des3_dec_c);
130:
131: return (ret);
132: }
133:
134:
135: int
136: des3_enc_cfb(const des3_key *key, int bit,
137: const unsigned char *iv, int len,
138: const unsigned char *data, unsigned char *buf)
139: {
140: int ret;
141:
142: ret = crypt_cfb((void *)key, 0, bit, BLOCK, iv, len, data, buf, (void *)des3_enc_c);
143:
144: return (ret);
145: }
146:
147: int
148: des3_dec_cfb(const des3_key *key, int bit,
149: const unsigned char *iv, int len,
150: const unsigned char *data, unsigned char *buf)
151: {
152: int ret;
153:
154: ret = crypt_cfb((void *)key, 1, bit, BLOCK, iv, len, data, buf, (void *)des3_enc_c);
155:
156: return (ret);
157: }
158:
159:
160: int
161: des3_ofb(const des3_key *key, int bit,
162: const unsigned char *iv, int len,
163: const unsigned char *data,
164: unsigned char *buf)
165: {
166: int ret;
167: ret = crypt_ofb((void *)key, bit, BLOCK, iv, len, data, buf, (void *)des3_enc_c);
168:
169: return (ret);
170: }
171:
172:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>