Embedded systems coursework 2.

Fork of Crypto_light by Edward Stott

Committer:
feb11
Date:
Sat Sep 14 20:54:59 2013 +0000
Revision:
8:a090264e9b2d
Parent:
7:2dbbdfb08123
refactored public API for ciphers & added TDES

Who changed what in which revision?

UserRevisionLine numberNew contents of line
feb11 0:7a1237bd2d13 1 #include "RC4.h"
feb11 0:7a1237bd2d13 2
feb11 0:7a1237bd2d13 3 RC4::RC4(uint8_t *key, uint8_t keyLength):
feb11 8:a090264e9b2d 4 StreamCipher(),
feb11 0:7a1237bd2d13 5 s(),
feb11 0:7a1237bd2d13 6 i(0),
feb11 0:7a1237bd2d13 7 j(0)
feb11 0:7a1237bd2d13 8 {
feb11 0:7a1237bd2d13 9 for(int k = 0; k < 256; ++k)
feb11 0:7a1237bd2d13 10 s[k] = k;
feb11 0:7a1237bd2d13 11 int l = 0;
feb11 0:7a1237bd2d13 12 for(int k = 0; k < 256; ++k)
feb11 0:7a1237bd2d13 13 {
feb11 0:7a1237bd2d13 14 l = (l + s[k] + key[k % keyLength]) % 256;
feb11 0:7a1237bd2d13 15 uint8_t tmp = s[l];
feb11 0:7a1237bd2d13 16 s[l] = s[k];
feb11 0:7a1237bd2d13 17 s[k] = tmp;
feb11 0:7a1237bd2d13 18 }
feb11 0:7a1237bd2d13 19 }
feb11 0:7a1237bd2d13 20
feb11 8:a090264e9b2d 21 uint8_t RC4::encryptByte(uint8_t in)
feb11 0:7a1237bd2d13 22 {
feb11 0:7a1237bd2d13 23 ++i;
feb11 0:7a1237bd2d13 24 j += s[i];
feb11 0:7a1237bd2d13 25 uint8_t tmp = s[i];
feb11 0:7a1237bd2d13 26 s[i] = s[j];
feb11 0:7a1237bd2d13 27 s[j] = tmp;
feb11 0:7a1237bd2d13 28 uint8_t c = s[(s[i]+s[j])%256];
feb11 8:a090264e9b2d 29 return in^c;
feb11 0:7a1237bd2d13 30 }
feb11 0:7a1237bd2d13 31
feb11 8:a090264e9b2d 32 uint8_t RC4::decryptByte(uint8_t in)
feb11 0:7a1237bd2d13 33 {
feb11 8:a090264e9b2d 34 return encryptByte(in);
feb11 0:7a1237bd2d13 35 }