⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.cc

📁 COPE the first practical network coding scheme which is developped on click
💻 CC
📖 第 1 页 / 共 2 页
字号:
/* * des.{cc,hh} -- element implements IPsec encryption using DES * Alex Snoeren, Benjie Chen * contains code from other sources; see below * * Copyright (c) 1999-2000 Massachusetts Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */#include <click/config.h>#ifndef HAVE_IPSEC# error "Must #define HAVE_IPSEC in config.h"#endif#include "des.hh"#include "esp.hh"#include <click/ipaddress.hh>#include <click/confparse.hh>#include <click/error.hh>#include <click/glue.hh>CLICK_DECLSDes::Des()  : Element(1, 1), _op(0){}Des::~Des(){}Des::Des(int decrypt, unsigned char * key){  add_input();  add_output();  _op = decrypt;  memcpy(_key, key, 8);}intDes::configure(Vector<String> &conf, ErrorHandler *errh){  int dec_int;  _ignore = 12;  if (cp_va_parse(conf, this, errh,		  cpInteger, "Decrypt/Encrypt (0/1)", &dec_int,		  cpDesCblock, "64-bit DES key", _key,		  cpOptional,		  cpInteger, "Bytes to ignore at the end", &_ignore,		  cpEnd) < 0)    return -1;  _op = dec_int;#ifdef DEBUG  click_chatter("Key: %x%x%x%x%x%x%x%x",_key[0], _key[1], _key[2], _key[3],	      _key[4], _key[5], _key[6], _key[7]);#endif  return 0;}intDes::initialize(ErrorHandler *){  des_set_key(&_key, _ks);  return 0;}Packet *Des::simple_action(Packet *p_in){  WritablePacket *p = p_in->uniqueify();  unsigned char hold[8];  unsigned char *idat = p->data();  struct esp_new *esp = (struct esp_new *)p->data();  des_cblock iv;  unsigned char *ivp = esp->esp_iv;  int i, plen = p->length() - sizeof(esp_new) - _ignore;  idat = p->data() + sizeof(esp_new);    if (_op == DES_DECRYPT)    memcpy(iv, ivp, 8);  // de/encrypt the payload  while (plen > 0) {    if(_op == DES_DECRYPT) {      memcpy(hold, idat, 8);      des_ecb_encrypt((des_cblock *)idat, (des_cblock *)idat,		      _ks, DES_DECRYPT);      /* CBC: XOR with the IV */      for (i = 0; i < 8; i++)	idat[i] ^= ivp[i];      memcpy(ivp, hold, 8);          } else {      /* CBC: XOR with the IV */      for (i = 0; i < 8; i++)	idat[i] ^= ivp[i];      des_ecb_encrypt((des_cblock *)idat, (des_cblock *)idat, 		      _ks, DES_ENCRYPT);      ivp = idat;    }    idat += 8;    plen -= 8;  }  if (_op == DES_DECRYPT)     memcpy(ivp, iv, 8);  return(p);}/* Copyright (C) 1992 Eric Young - see COPYING for more details *//* Collected and modified by Werner Almesberger */#define _	ks._#define ITERATIONS 16#define c2l(c,l)	(l =((unsigned long)(*((c)++)))    , \			 l|=((unsigned long)(*((c)++)))<< 8, \			 l|=((unsigned long)(*((c)++)))<<16, \			 l|=((unsigned long)(*((c)++)))<<24)#define l2c(l,c)	(*((c)++)=(unsigned char)(((l)    )&0xff), \			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \			 *((c)++)=(unsigned char)(((l)>>24)&0xff))/* from spr.h */static unsigned long des_SPtrans[8][64]={/* nibble 0 */ {0x00820200, 0x00020000, 0x80800000, 0x80820200,  0x00800000, 0x80020200, 0x80020000, 0x80800000,  0x80020200, 0x00820200, 0x00820000, 0x80000200,  0x80800200, 0x00800000, 0x00000000, 0x80020000,  0x00020000, 0x80000000, 0x00800200, 0x00020200,  0x80820200, 0x00820000, 0x80000200, 0x00800200,  0x80000000, 0x00000200, 0x00020200, 0x80820000,  0x00000200, 0x80800200, 0x80820000, 0x00000000,  0x00000000, 0x80820200, 0x00800200, 0x80020000,  0x00820200, 0x00020000, 0x80000200, 0x00800200,  0x80820000, 0x00000200, 0x00020200, 0x80800000,  0x80020200, 0x80000000, 0x80800000, 0x00820000,  0x80820200, 0x00020200, 0x00820000, 0x80800200,  0x00800000, 0x80000200, 0x80020000, 0x00000000,  0x00020000, 0x00800000, 0x80800200, 0x00820200,  0x80000000, 0x80820000, 0x00000200, 0x80020200},/* nibble 1 */ {0x10042004, 0x00000000, 0x00042000, 0x10040000,  0x10000004, 0x00002004, 0x10002000, 0x00042000,  0x00002000, 0x10040004, 0x00000004, 0x10002000,  0x00040004, 0x10042000, 0x10040000, 0x00000004,  0x00040000, 0x10002004, 0x10040004, 0x00002000,  0x00042004, 0x10000000, 0x00000000, 0x00040004,  0x10002004, 0x00042004, 0x10042000, 0x10000004,  0x10000000, 0x00040000, 0x00002004, 0x10042004,  0x00040004, 0x10042000, 0x10002000, 0x00042004,  0x10042004, 0x00040004, 0x10000004, 0x00000000,  0x10000000, 0x00002004, 0x00040000, 0x10040004,  0x00002000, 0x10000000, 0x00042004, 0x10002004,  0x10042000, 0x00002000, 0x00000000, 0x10000004,  0x00000004, 0x10042004, 0x00042000, 0x10040000,  0x10040004, 0x00040000, 0x00002004, 0x10002000,  0x10002004, 0x00000004, 0x10040000, 0x00042000},/* nibble 2 */ {0x41000000, 0x01010040, 0x00000040, 0x41000040,  0x40010000, 0x01000000, 0x41000040, 0x00010040,  0x01000040, 0x00010000, 0x01010000, 0x40000000,  0x41010040, 0x40000040, 0x40000000, 0x41010000,  0x00000000, 0x40010000, 0x01010040, 0x00000040,  0x40000040, 0x41010040, 0x00010000, 0x41000000,  0x41010000, 0x01000040, 0x40010040, 0x01010000,  0x00010040, 0x00000000, 0x01000000, 0x40010040,  0x01010040, 0x00000040, 0x40000000, 0x00010000,  0x40000040, 0x40010000, 0x01010000, 0x41000040,  0x00000000, 0x01010040, 0x00010040, 0x41010000,  0x40010000, 0x01000000, 0x41010040, 0x40000000,  0x40010040, 0x41000000, 0x01000000, 0x41010040,  0x00010000, 0x01000040, 0x41000040, 0x00010040,  0x01000040, 0x00000000, 0x41010000, 0x40000040,  0x41000000, 0x40010040, 0x00000040, 0x01010000},/* nibble 3 */ {0x00100402, 0x04000400, 0x00000002, 0x04100402,  0x00000000, 0x04100000, 0x04000402, 0x00100002,  0x04100400, 0x04000002, 0x04000000, 0x00000402,  0x04000002, 0x00100402, 0x00100000, 0x04000000,  0x04100002, 0x00100400, 0x00000400, 0x00000002,  0x00100400, 0x04000402, 0x04100000, 0x00000400,  0x00000402, 0x00000000, 0x00100002, 0x04100400,  0x04000400, 0x04100002, 0x04100402, 0x00100000,  0x04100002, 0x00000402, 0x00100000, 0x04000002,  0x00100400, 0x04000400, 0x00000002, 0x04100000,  0x04000402, 0x00000000, 0x00000400, 0x00100002,  0x00000000, 0x04100002, 0x04100400, 0x00000400,  0x04000000, 0x04100402, 0x00100402, 0x00100000,  0x04100402, 0x00000002, 0x04000400, 0x00100402,  0x00100002, 0x00100400, 0x04100000, 0x04000402,  0x00000402, 0x04000000, 0x04000002, 0x04100400},/* nibble 4 */ {0x02000000, 0x00004000, 0x00000100, 0x02004108,  0x02004008, 0x02000100, 0x00004108, 0x02004000,  0x00004000, 0x00000008, 0x02000008, 0x00004100,  0x02000108, 0x02004008, 0x02004100, 0x00000000,  0x00004100, 0x02000000, 0x00004008, 0x00000108,  0x02000100, 0x00004108, 0x00000000, 0x02000008,  0x00000008, 0x02000108, 0x02004108, 0x00004008,  0x02004000, 0x00000100, 0x00000108, 0x02004100,  0x02004100, 0x02000108, 0x00004008, 0x02004000,  0x00004000, 0x00000008, 0x02000008, 0x02000100,  0x02000000, 0x00004100, 0x02004108, 0x00000000,  0x00004108, 0x02000000, 0x00000100, 0x00004008,  0x02000108, 0x00000100, 0x00000000, 0x02004108,  0x02004008, 0x02004100, 0x00000108, 0x00004000,  0x00004100, 0x02004008, 0x02000100, 0x00000108,  0x00000008, 0x00004108, 0x02004000, 0x02000008},/* nibble 5 */ {0x20000010, 0x00080010, 0x00000000, 0x20080800,  0x00080010, 0x00000800, 0x20000810, 0x00080000,  0x00000810, 0x20080810, 0x00080800, 0x20000000,  0x20000800, 0x20000010, 0x20080000, 0x00080810,  0x00080000, 0x20000810, 0x20080010, 0x00000000,  0x00000800, 0x00000010, 0x20080800, 0x20080010,  0x20080810, 0x20080000, 0x20000000, 0x00000810,  0x00000010, 0x00080800, 0x00080810, 0x20000800,  0x00000810, 0x20000000, 0x20000800, 0x00080810,  0x20080800, 0x00080010, 0x00000000, 0x20000800,  0x20000000, 0x00000800, 0x20080010, 0x00080000,  0x00080010, 0x20080810, 0x00080800, 0x00000010,  0x20080810, 0x00080800, 0x00080000, 0x20000810,  0x20000010, 0x20080000, 0x00080810, 0x00000000,  0x00000800, 0x20000010, 0x20000810, 0x20080800,  0x20080000, 0x00000810, 0x00000010, 0x20080010},/* nibble 6 */ {0x00001000, 0x00000080, 0x00400080, 0x00400001,  0x00401081, 0x00001001, 0x00001080, 0x00000000,  0x00400000, 0x00400081, 0x00000081, 0x00401000,  0x00000001, 0x00401080, 0x00401000, 0x00000081,  0x00400081, 0x00001000, 0x00001001, 0x00401081,  0x00000000, 0x00400080, 0x00400001, 0x00001080,  0x00401001, 0x00001081, 0x00401080, 0x00000001,  0x00001081, 0x00401001, 0x00000080, 0x00400000,  0x00001081, 0x00401000, 0x00401001, 0x00000081,  0x00001000, 0x00000080, 0x00400000, 0x00401001,  0x00400081, 0x00001081, 0x00001080, 0x00000000,  0x00000080, 0x00400001, 0x00000001, 0x00400080,  0x00000000, 0x00400081, 0x00400080, 0x00001080,  0x00000081, 0x00001000, 0x00401081, 0x00400000,  0x00401080, 0x00000001, 0x00001001, 0x00401081,  0x00400001, 0x00401080, 0x00401000, 0x00001001},/* nibble 7 */ {0x08200020, 0x08208000, 0x00008020, 0x00000000,  0x08008000, 0x00200020, 0x08200000, 0x08208020,  0x00000020, 0x08000000, 0x00208000, 0x00008020,  0x00208020, 0x08008020, 0x08000020, 0x08200000,  0x00008000, 0x00208020, 0x00200020, 0x08008000,  0x08208020, 0x08000020, 0x00000000, 0x00208000,  0x08000000, 0x00200000, 0x08008020, 0x08200020,  0x00200000, 0x00008000, 0x08208000, 0x00000020,  0x00200000, 0x00008000, 0x08000020, 0x08208020,  0x00008020, 0x08000000, 0x00000000, 0x00208000,  0x08200020, 0x08008020, 0x08008000, 0x00200020,  0x08208000, 0x00000020, 0x00200020, 0x08008000,  0x08208020, 0x00200000, 0x08200000, 0x08000020,  0x00208000, 0x00008020, 0x08008020, 0x08200000,  0x00000020, 0x08208000, 0x00208020, 0x00000000,  0x08000000, 0x08200020, 0x00008000, 0x00208020}};/* from sk.h */static unsigned long des_skb[8][64]={/* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ {0x00000000,0x00000010,0x20000000,0x20000010,  0x00010000,0x00010010,0x20010000,0x20010010,  0x00000800,0x00000810,0x20000800,0x20000810,  0x00010800,0x00010810,0x20010800,0x20010810,  0x00000020,0x00000030,0x20000020,0x20000030,  0x00010020,0x00010030,0x20010020,0x20010030,  0x00000820,0x00000830,0x20000820,0x20000830,  0x00010820,0x00010830,0x20010820,0x20010830,  0x00080000,0x00080010,0x20080000,0x20080010,  0x00090000,0x00090010,0x20090000,0x20090010,  0x00080800,0x00080810,0x20080800,0x20080810,  0x00090800,0x00090810,0x20090800,0x20090810,  0x00080020,0x00080030,0x20080020,0x20080030,  0x00090020,0x00090030,0x20090020,0x20090030,  0x00080820,0x00080830,0x20080820,0x20080830,  0x00090820,0x00090830,0x20090820,0x20090830},

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -