/* This file is in the public domain. */ #include #include #include "algs.h" typedef struct arc4state ARC4STATE; struct arc4state { ARC4_STATE s; } ; static void *enc_arcfour_init_128_0(const void *key, const void *iv __attribute__((__unused__))) { ARC4STATE *s; s = malloc(sizeof(ARC4STATE)); if (s == 0) return(0); arc4_init(&s->s); arc4_setkey(&s->s,key,16,0); return(s); } static void *enc_arcfour_init_128_1536(const void *key, const void *iv __attribute__((__unused__))) { ARC4STATE *s; s = malloc(sizeof(ARC4STATE)); if (s == 0) return(0); arc4_init(&s->s); arc4_setkey(&s->s,key,16,1536); return(s); } static void *enc_arcfour_init_256_1536(const void *key, const void *iv __attribute__((__unused__))) { ARC4STATE *s; s = malloc(sizeof(ARC4STATE)); if (s == 0) return(0); arc4_init(&s->s); arc4_setkey(&s->s,key,32,1536); return(s); } static void *enc_arcfour_init_128_64k(const void *key, const void *iv __attribute__((__unused__))) { ARC4STATE *s; s = malloc(sizeof(ARC4STATE)); if (s == 0) return(0); arc4_init(&s->s); arc4_setkey(&s->s,key,16,65536); return(s); } static void enc_arcfour_process(void *state, const void *in, void *out, int datalen) { ARC4STATE *s; s = state; arc4_crypt(&s->s,in,datalen,out); } static void enc_arcfour_done(void *state) { free(state); } ENCALG encalg_arcfour_128_0 = { "arcfour", "has known issues with weak keys", 1, 0, 16, 0, &enc_arcfour_init_128_0, &enc_arcfour_init_128_0, &enc_arcfour_process, &enc_arcfour_done }; ENCALG encalg_arcfour_128_1536 = { "arcfour128-draft-00@putty.projects.tartarus.org", "fixed arcfour", 1, 0, 16, 0, &enc_arcfour_init_128_1536, &enc_arcfour_init_128_1536, &enc_arcfour_process, &enc_arcfour_done }; ENCALG encalg_arcfour_256_1536 = { "arcfour256-draft-00@putty.projects.tartarus.org", "fixed arcfour", 1, 0, 32, 0, &enc_arcfour_init_256_1536, &enc_arcfour_init_256_1536, &enc_arcfour_process, &enc_arcfour_done }; ENCALG encalg_arcfour_128_64k = { "arcfour-64k@rodents.montreal.qc.ca", "fixed arcfour", 1, 0, 16, 0, &enc_arcfour_init_128_64k, &enc_arcfour_init_128_64k, &enc_arcfour_process, &enc_arcfour_done };