WvStreams
|
00001 /* 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 2003 Net Integration Technologies, Inc. 00004 * 00005 * Oakley authentication for IPSec 00006 */ 00007 00008 #include "wvoakley.h" 00009 00010 /* Group 1 prime */ 00011 static unsigned char group1_key[] = 00012 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 00013 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 00014 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 00015 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 00016 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 00017 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 00018 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, 00019 0xA6, 0x3A, 0x36, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 00020 }; 00021 00022 /* Group 2 prime */ 00023 static unsigned char group2_key[] = 00024 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 00025 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 00026 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 00027 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 00028 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 00029 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 00030 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, 00031 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 00032 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 00033 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81, 00034 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 00035 }; 00036 00037 WvOakleyAuth::WvOakleyAuth(int group) 00038 { 00039 switch (group) 00040 { 00041 case 1: 00042 dh = new WvDiffieHellman(group1_key, sizeof(group1_key), 00043 DH_GENERATOR_2); 00044 break; 00045 case 2: 00046 dh = new WvDiffieHellman(group2_key, sizeof(group2_key), 00047 DH_GENERATOR_2); 00048 break; 00049 case 3: case 4: 00050 /* We don't support any eliptic curve stuff. */ 00051 break; 00052 } 00053 pub_len = dh->pub_key_len(); 00054 } 00055 00056 short WvOakleyAuth::public_len() 00057 { 00058 return pub_len; 00059 } 00060 00061 short WvOakleyAuth::get_public_key(WvBuf &outbuf, short len) 00062 { 00063 return dh->get_public_value(outbuf, len); 00064 } 00065 00066 void WvOakleyAuth::create_secret(WvBuf &_other_pub_key, short len) 00067 { 00068 other_pub_key.put(_other_pub_key.peek(0, len), len); 00069 other_len = len; 00070 dh->create_secret(_other_pub_key, len, dh_secret); 00071 return; 00072 } 00073 00074 short WvOakleyAuth::other_pub_len() 00075 { 00076 return other_len; 00077 } 00078 00079 short WvOakleyAuth::get_other_public_key(WvBuf &outbuf, short len) 00080 { 00081 if (len > other_len) 00082 len = other_len; 00083 00084 outbuf.put(other_pub_key.peek(0, len), len); 00085 return len; 00086 }