Advertisement
Guest User

LION cipher

a guest
Mar 30th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <openssl/rc4.h>
  3. #include <openssl/sha.h>
  4.    
  5. #define HASH_SZ   20
  6. #define NUM_WORDS (HASH_SZ / sizeof(int))
  7.    
  8. void lion_encrypt(char *in, char *out, size_t blklen, char *key) {
  9.   int     i, tmp[NUM_WORDS];
  10.   RC4_KEY k;
  11.    
  12.   /* Round 1: R = R ^ RC4(L ^ K1) */
  13.   for (i = 0;  i < NUM_WORDS;  i++)
  14.     tmp[i] = ((int *)in)[i] ^ ((int *)key)[i];
  15.   RC4_set_key(&k, HASH_SZ, (char *)tmp);
  16.   RC4(&k, blklen - HASH_SZ, in + HASH_SZ, out + HASH_SZ);
  17.    
  18.   /* Round 2: L = L ^ SHA1(R) */
  19.   SHA1(out + HASH_SZ, blklen - HASH_SZ, out);
  20.   for (i = 0;  i < NUM_WORDS; i++)
  21.     ((int *)out)[i] ^= ((int *)in)[i];
  22.    
  23.   /* Round 3: R = R ^ RC4(L ^ K2) */
  24.   for (i = 0;  i < NUM_WORDS;  i++)
  25.     tmp[i] = ((int *)out)[i] ^ ((int *)key)[i + NUM_WORDS];
  26.   RC4_set_key(&k, HASH_SZ, (char *)tmp);
  27.   RC4(&k, blklen - HASH_SZ, out + HASH_SZ, out + HASH_SZ);
  28. }
  29.    
  30. void lion_decrypt(char *in, char *out, size_t blklen, char *key) {
  31.   int     i, tmp[NUM_WORDS];
  32.   RC4_KEY k;
  33.    
  34.   for (i = 0;  i < NUM_WORDS;  i++)
  35.     tmp[i] = ((int *)in)[i] ^ ((int *)key)[i + NUM_WORDS];
  36.   RC4_set_key(&k, HASH_SZ, (char *)tmp);
  37.   RC4(&k, blklen - HASH_SZ, in + HASH_SZ, out + HASH_SZ);
  38.    
  39.   SHA1(out + HASH_SZ, blklen - HASH_SZ, out);
  40.   for (i = 0;  i < NUM_WORDS;  i++) {
  41.     ((int *)out)[i] ^= ((int *)in)[i];
  42.     tmp[i] = ((int *)out)[i] ^ ((int *)key)[i];
  43.   }
  44.   RC4_set_key(&k, HASH_SZ, (char *)tmp);
  45.   RC4(&k, blklen - HASH_SZ, out + HASH_SZ, out + HASH_SZ);
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement