123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #include <stdint.h>
- #include <stdlib.h>
- #include <unistd.h>
- struct expanded_key {
- uint32_t l[16], r[16];
- };
- void __des_setkey(const unsigned char *key, struct expanded_key *ekey);
- void __do_des(uint32_t l_in, uint32_t r_in,
- uint32_t *l_out, uint32_t *r_out,
- uint32_t count, uint32_t saltbits, const struct expanded_key *ekey);
- static struct expanded_key __encrypt_key;
- void setkey(const char *key)
- {
- unsigned char bkey[8];
- int i, j;
- for (i = 0; i < 8; i++) {
- bkey[i] = 0;
- for (j = 7; j >= 0; j--, key++)
- bkey[i] |= (uint32_t)(*key & 1) << j;
- }
- __des_setkey(bkey, &__encrypt_key);
- }
- void encrypt(char *block, int edflag)
- {
- struct expanded_key decrypt_key, *key;
- uint32_t b[2];
- int i, j;
- char *p;
- p = block;
- for (i = 0; i < 2; i++) {
- b[i] = 0;
- for (j = 31; j >= 0; j--, p++)
- b[i] |= (uint32_t)(*p & 1) << j;
- }
- key = &__encrypt_key;
- if (edflag) {
- key = &decrypt_key;
- for (i = 0; i < 16; i++) {
- decrypt_key.l[i] = __encrypt_key.l[15-i];
- decrypt_key.r[i] = __encrypt_key.r[15-i];
- }
- }
- __do_des(b[0], b[1], b, b + 1, 1, 0, key);
- p = block;
- for (i = 0; i < 2; i++)
- for (j = 31; j >= 0; j--)
- *p++ = b[i]>>j & 1;
- }
|