|
|
Choosing A Webhost: |
[CVS] OpenSSL: OpenSSL_0_9_7-stable: openssl/crypto/aes/ aes.h aes_cfb...: msg#00041encryption.openssl.cvs
OpenSSL CVS Repository http://cvs.openssl.org/ ____________________________________________________________________________ Server: cvs.openssl.org Name: Ben Laurie Root: /e/openssl/cvs Email: ben@xxxxxxxxxxx Module: openssl Date: 29-Jul-2003 19:05:17 Branch: OpenSSL_0_9_7-stable Handle: 2003072918051204 Modified files: (Branch: OpenSSL_0_9_7-stable) openssl/crypto/aes aes.h aes_cfb.c openssl/crypto/evp c_allc.c e_aes.c evptests.txt openssl/crypto/objects obj_dat.h obj_mac.h obj_mac.num objects.txt openssl/fips/aes fips_aesavs.c Log: AES CFB8. Summary: Revision Changes Path 1.1.2.7 +3 -0 openssl/crypto/aes/aes.h 1.1.2.7 +14 -0 openssl/crypto/aes/aes_cfb.c 1.8.2.4 +1 -0 openssl/crypto/evp/c_allc.c 1.6.2.7 +4 -9 openssl/crypto/evp/e_aes.c 1.9.2.3 +48 -0 openssl/crypto/evp/evptests.txt 1.49.2.15 +20 -5 openssl/crypto/objects/obj_dat.h 1.19.2.15 +15 -0 openssl/crypto/objects/obj_mac.h 1.15.2.11 +3 -0 openssl/crypto/objects/obj_mac.num 1.20.2.16 +3 -0 openssl/crypto/objects/objects.txt 1.1.2.7 +11 -0 openssl/fips/aes/fips_aesavs.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openssl/crypto/aes/aes.h ============================================================================ $ cvs diff -u -r1.1.2.6 -r1.1.2.7 aes.h --- openssl/crypto/aes/aes.h 28 Jul 2003 15:07:53 -0000 1.1.2.6 +++ openssl/crypto/aes/aes.h 29 Jul 2003 17:05:12 -0000 1.1.2.7 @@ -98,6 +98,9 @@ void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, const unsigned long length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + const unsigned long length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out, const int nbits,const AES_KEY *key, unsigned char *ivec,const int enc); @@ . patch -p0 <<'@@ .' Index: openssl/crypto/aes/aes_cfb.c ============================================================================ $ cvs diff -u -r1.1.2.6 -r1.1.2.7 aes_cfb.c --- openssl/crypto/aes/aes_cfb.c 29 Jul 2003 10:56:55 -0000 1.1.2.6 +++ openssl/crypto/aes/aes_cfb.c 29 Jul 2003 17:05:12 -0000 1.1.2.7 @@ -222,6 +222,7 @@ { unsigned int n; unsigned char c[1],d[1]; + assert(in && out && key && ivec && num); assert(*num == 0); @@ -232,5 +233,18 @@ AES_cfbr_encrypt_block(c,d,1,key,ivec,enc); out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8)); } + } + +void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + const unsigned long length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc) + { + unsigned int n; + + assert(in && out && key && ivec && num); + assert(*num == 0); + + for(n=0 ; n < length ; ++n) + AES_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc); } @@ . patch -p0 <<'@@ .' Index: openssl/crypto/evp/c_allc.c ============================================================================ $ cvs diff -u -r1.8.2.3 -r1.8.2.4 c_allc.c --- openssl/crypto/evp/c_allc.c 29 Jul 2003 10:56:56 -0000 1.8.2.3 +++ openssl/crypto/evp/c_allc.c 29 Jul 2003 17:05:13 -0000 1.8.2.4 @@ -151,6 +151,7 @@ EVP_add_cipher(EVP_aes_128_cbc()); EVP_add_cipher(EVP_aes_128_cfb()); EVP_add_cipher(EVP_aes_128_cfb1()); + EVP_add_cipher(EVP_aes_128_cfb8()); EVP_add_cipher(EVP_aes_128_ofb()); #if 0 EVP_add_cipher(EVP_aes_128_ctr()); @@ . patch -p0 <<'@@ .' Index: openssl/crypto/evp/e_aes.c ============================================================================ $ cvs diff -u -r1.6.2.6 -r1.6.2.7 e_aes.c --- openssl/crypto/evp/e_aes.c 29 Jul 2003 13:24:25 -0000 1.6.2.6 +++ openssl/crypto/evp/e_aes.c 29 Jul 2003 17:05:13 -0000 1.6.2.7 @@ -96,15 +96,10 @@ IMPLEMENT_CFBR(128,1) IMPLEMENT_CFBR(192,1) IMPLEMENT_CFBR(256,1) - /* -BLOCK_CIPHER_func_cfb(aes_128,AES,1,EVP_AES_KEY,ks) -BLOCK_CIPHER_def_cfb(aes_128,EVP_AES_KEY, - NID_aes_128, 16, 16, 1, - 0, aes_init_key, NULL, - EVP_CIPHER_set_asn1_iv, - EVP_CIPHER_get_asn1_iv, - NULL) - */ + +IMPLEMENT_CFBR(128,8) +IMPLEMENT_CFBR(192,8) +IMPLEMENT_CFBR(256,8) static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) @@ . patch -p0 <<'@@ .' Index: openssl/crypto/evp/evptests.txt ============================================================================ $ cvs diff -u -r1.9.2.2 -r1.9.2.3 evptests.txt --- openssl/crypto/evp/evptests.txt 29 Jul 2003 10:56:56 -0000 1.9.2.2 +++ openssl/crypto/evp/evptests.txt 29 Jul 2003 17:05:13 -0000 1.9.2.3 @@ -140,6 +140,54 @@ # TODO: CFB1-AES192 and 256 +# CFB8-AES128.Encrypt + +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6b:3b:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f3b:c1:79:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:02030405060708090a0b0c0d0e0f3b79:be:42:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:030405060708090a0b0c0d0e0f3b7942:e2:4c:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0405060708090a0b0c0d0e0f3b79424c:2e:9c:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:05060708090a0b0c0d0e0f3b79424c9c:40:0d:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:060708090a0b0c0d0e0f3b79424c9c0d:9f:d4:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0708090a0b0c0d0e0f3b79424c9c0dd4:96:36:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:08090a0b0c0d0e0f3b79424c9c0dd436:e9:ba:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:090a0b0c0d0e0f3b79424c9c0dd436ba:3d:ce:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0a0b0c0d0e0f3b79424c9c0dd436bace:7e:9e:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0b0c0d0e0f3b79424c9c0dd436bace9e:11:0e:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0c0d0e0f3b79424c9c0dd436bace9e0e:73:d4:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0d0e0f3b79424c9c0dd436bace9e0ed4:93:58:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0e0f3b79424c9c0dd436bace9e0ed458:17:6a:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0f3b79424c9c0dd436bace9e0ed4586a:2a:4f:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:3b79424c9c0dd436bace9e0ed4586a4f:ae:32:1 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:79424c9c0dd436bace9e0ed4586a4f32:2d:b9:1 +# all of the above packed into one +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1bee22e409f96e93d7e117393172aae2d:3b79424c9c0dd436bace9e0ed4586a4f32b9:1 + +# CFB8-AES128.Decrypt + +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6b:3b:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f3b:c1:79:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:02030405060708090a0b0c0d0e0f3b79:be:42:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:030405060708090a0b0c0d0e0f3b7942:e2:4c:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0405060708090a0b0c0d0e0f3b79424c:2e:9c:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:05060708090a0b0c0d0e0f3b79424c9c:40:0d:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:060708090a0b0c0d0e0f3b79424c9c0d:9f:d4:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0708090a0b0c0d0e0f3b79424c9c0dd4:96:36:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:08090a0b0c0d0e0f3b79424c9c0dd436:e9:ba:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:090a0b0c0d0e0f3b79424c9c0dd436ba:3d:ce:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0a0b0c0d0e0f3b79424c9c0dd436bace:7e:9e:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0b0c0d0e0f3b79424c9c0dd436bace9e:11:0e:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0c0d0e0f3b79424c9c0dd436bace9e0e:73:d4:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0d0e0f3b79424c9c0dd436bace9e0ed4:93:58:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0e0f3b79424c9c0dd436bace9e0ed458:17:6a:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0f3b79424c9c0dd436bace9e0ed4586a:2a:4f:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:3b79424c9c0dd436bace9e0ed4586a4f:ae:32:0 +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:79424c9c0dd436bace9e0ed4586a4f32:2d:b9:0 +# all of the above packed into one +AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1bee22e409f96e93d7e117393172aae2d:3b79424c9c0dd436bace9e0ed4586a4f32b9:0 + +# TODO: 192 and 256 bit keys + # For all CFB128 encrypts and decrypts, the transformed sequence is # AES-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec # CFB128-AES128.Encrypt @@ . patch -p0 <<'@@ .' Index: openssl/crypto/objects/obj_dat.h ============================================================================ $ cvs diff -u -r1.49.2.14 -r1.49.2.15 obj_dat.h --- openssl/crypto/objects/obj_dat.h 29 Jul 2003 13:24:25 -0000 1.49.2.14 +++ openssl/crypto/objects/obj_dat.h 29 Jul 2003 17:05:14 -0000 1.49.2.15 @@ -62,12 +62,12 @@ * [including the GNU Public Licence.] */ -#define NUM_NID 653 -#define NUM_SN 646 -#define NUM_LN 646 -#define NUM_OBJ 620 +#define NUM_NID 656 +#define NUM_SN 649 +#define NUM_LN 649 +#define NUM_OBJ 623 -static unsigned char lvalues[4473]={ +static unsigned char lvalues[4491]={ 0x00, /* [ 0] OBJ_undef */ 0x2A,0x86,0x48,0x86,0xF7,0x0D, /* [ 1] OBJ_rsadsi */ 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01, /* [ 7] OBJ_pkcs */ @@ -688,6 +688,9 @@ 0x29,0x01,0x01,0x85,0x1A,0x03, /* [4454] OBJ_aes_128_cfb1 */ 0x29,0x01,0x01,0x85,0x1A,0x04, /* [4460] OBJ_aes_192_cfb1 */ 0x29,0x01,0x01,0x85,0x1A,0x05, /* [4466] OBJ_aes_256_cfb1 */ +0x29,0x01,0x01,0x85,0x1A,0x06, /* [4472] OBJ_aes_128_cfb8 */ +0x29,0x01,0x01,0x85,0x1A,0x07, /* [4478] OBJ_aes_192_cfb8 */ +0x29,0x01,0x01,0x85,0x1A,0x08, /* [4484] OBJ_aes_256_cfb8 */ }; static ASN1_OBJECT nid_objs[NUM_NID]={ @@ -1734,6 +1737,9 @@ {"AES-128-CFB1","aes-128-cfb1",NID_aes_128_cfb1,6,&(lvalues[4454]),0}, {"AES-192-CFB1","aes-192-cfb1",NID_aes_192_cfb1,6,&(lvalues[4460]),0}, {"AES-256-CFB1","aes-256-cfb1",NID_aes_256_cfb1,6,&(lvalues[4466]),0}, +{"AES-128-CFB8","aes-128-cfb8",NID_aes_128_cfb8,6,&(lvalues[4472]),0}, +{"AES-192-CFB8","aes-192-cfb8",NID_aes_192_cfb8,6,&(lvalues[4478]),0}, +{"AES-256-CFB8","aes-256-cfb8",NID_aes_256_cfb8,6,&(lvalues[4484]),0}, }; static ASN1_OBJECT *sn_objs[NUM_SN]={ @@ -1741,16 +1747,19 @@ &(nid_objs[419]),/* "AES-128-CBC" */ &(nid_objs[421]),/* "AES-128-CFB" */ &(nid_objs[650]),/* "AES-128-CFB1" */ +&(nid_objs[653]),/* "AES-128-CFB8" */ &(nid_objs[418]),/* "AES-128-ECB" */ &(nid_objs[420]),/* "AES-128-OFB" */ &(nid_objs[423]),/* "AES-192-CBC" */ &(nid_objs[425]),/* "AES-192-CFB" */ &(nid_objs[651]),/* "AES-192-CFB1" */ +&(nid_objs[654]),/* "AES-192-CFB8" */ &(nid_objs[422]),/* "AES-192-ECB" */ &(nid_objs[424]),/* "AES-192-OFB" */ &(nid_objs[427]),/* "AES-256-CBC" */ &(nid_objs[429]),/* "AES-256-CFB" */ &(nid_objs[652]),/* "AES-256-CFB1" */ +&(nid_objs[655]),/* "AES-256-CFB8" */ &(nid_objs[426]),/* "AES-256-ECB" */ &(nid_objs[428]),/* "AES-256-OFB" */ &(nid_objs[91]),/* "BF-CBC" */ @@ -2495,16 +2504,19 @@ &(nid_objs[419]),/* "aes-128-cbc" */ &(nid_objs[421]),/* "aes-128-cfb" */ &(nid_objs[650]),/* "aes-128-cfb1" */ +&(nid_objs[653]),/* "aes-128-cfb8" */ &(nid_objs[418]),/* "aes-128-ecb" */ &(nid_objs[420]),/* "aes-128-ofb" */ &(nid_objs[423]),/* "aes-192-cbc" */ &(nid_objs[425]),/* "aes-192-cfb" */ &(nid_objs[651]),/* "aes-192-cfb1" */ +&(nid_objs[654]),/* "aes-192-cfb8" */ &(nid_objs[422]),/* "aes-192-ecb" */ &(nid_objs[424]),/* "aes-192-ofb" */ &(nid_objs[427]),/* "aes-256-cbc" */ &(nid_objs[429]),/* "aes-256-cfb" */ &(nid_objs[652]),/* "aes-256-cfb1" */ +&(nid_objs[655]),/* "aes-256-cfb8" */ &(nid_objs[426]),/* "aes-256-ecb" */ &(nid_objs[428]),/* "aes-256-ofb" */ &(nid_objs[376]),/* "algorithm" */ @@ -3250,6 +3262,9 @@ &(nid_objs[650]),/* OBJ_aes_128_cfb1 1 1 1 1 666 3 */ &(nid_objs[651]),/* OBJ_aes_192_cfb1 1 1 1 1 666 4 */ &(nid_objs[652]),/* OBJ_aes_256_cfb1 1 1 1 1 666 5 */ +&(nid_objs[653]),/* OBJ_aes_128_cfb8 1 1 1 1 666 6 */ +&(nid_objs[654]),/* OBJ_aes_192_cfb8 1 1 1 1 666 7 */ +&(nid_objs[655]),/* OBJ_aes_256_cfb8 1 1 1 1 666 8 */ &(nid_objs[ 1]),/* OBJ_rsadsi 1 2 840 113549 */ &(nid_objs[185]),/* OBJ_X9cm 1 2 840 10040 4 */ &(nid_objs[127]),/* OBJ_id_pkix 1 3 6 1 5 5 7 */ @@ . patch -p0 <<'@@ .' Index: openssl/crypto/objects/obj_mac.h ============================================================================ $ cvs diff -u -r1.19.2.14 -r1.19.2.15 obj_mac.h --- openssl/crypto/objects/obj_mac.h 29 Jul 2003 13:24:26 -0000 1.19.2.14 +++ openssl/crypto/objects/obj_mac.h 29 Jul 2003 17:05:14 -0000 1.19.2.15 @@ -2024,6 +2024,21 @@ #define NID_aes_256_cfb1 652 #define OBJ_aes_256_cfb1 1L,1L,1L,1L,666L,5L +#define SN_aes_128_cfb8 "AES-128-CFB8" +#define LN_aes_128_cfb8 "aes-128-cfb8" +#define NID_aes_128_cfb8 653 +#define OBJ_aes_128_cfb8 1L,1L,1L,1L,666L,6L + +#define SN_aes_192_cfb8 "AES-192-CFB8" +#define LN_aes_192_cfb8 "aes-192-cfb8" +#define NID_aes_192_cfb8 654 +#define OBJ_aes_192_cfb8 1L,1L,1L,1L,666L,7L + +#define SN_aes_256_cfb8 "AES-256-CFB8" +#define LN_aes_256_cfb8 "aes-256-cfb8" +#define NID_aes_256_cfb8 655 +#define OBJ_aes_256_cfb8 1L,1L,1L,1L,666L,8L + #define SN_hold_instruction_code "holdInstructionCode" #define LN_hold_instruction_code "Hold Instruction Code" #define NID_hold_instruction_code 430 @@ . patch -p0 <<'@@ .' Index: openssl/crypto/objects/obj_mac.num ============================================================================ $ cvs diff -u -r1.15.2.10 -r1.15.2.11 obj_mac.num --- openssl/crypto/objects/obj_mac.num 29 Jul 2003 13:24:26 -0000 1.15.2.10 +++ openssl/crypto/objects/obj_mac.num 29 Jul 2003 17:05:14 -0000 1.15.2.11 @@ -650,3 +650,6 @@ aes_128_cfb1 650 aes_192_cfb1 651 aes_256_cfb1 652 +aes_128_cfb8 653 +aes_192_cfb8 654 +aes_256_cfb8 655 @@ . patch -p0 <<'@@ .' Index: openssl/crypto/objects/objects.txt ============================================================================ $ cvs diff -u -r1.20.2.15 -r1.20.2.16 objects.txt --- openssl/crypto/objects/objects.txt 29 Jul 2003 13:24:26 -0000 1.20.2.15 +++ openssl/crypto/objects/objects.txt 29 Jul 2003 17:05:14 -0000 1.20.2.16 @@ -686,6 +686,9 @@ 1 1 1 1 666 3 : AES-128-CFB1 : aes-128-cfb1 1 1 1 1 666 4 : AES-192-CFB1 : aes-192-cfb1 1 1 1 1 666 5 : AES-256-CFB1 : aes-256-cfb1 +1 1 1 1 666 6 : AES-128-CFB8 : aes-128-cfb8 +1 1 1 1 666 7 : AES-192-CFB8 : aes-192-cfb8 +1 1 1 1 666 8 : AES-256-CFB8 : aes-256-cfb8 # Hold instruction CRL entry extension !Cname hold-instruction-code @@ . patch -p0 <<'@@ .' Index: openssl/fips/aes/fips_aesavs.c ============================================================================ $ cvs diff -u -r1.1.2.6 -r1.1.2.7 fips_aesavs.c --- openssl/fips/aes/fips_aesavs.c 29 Jul 2003 14:34:48 -0000 1.1.2.6 +++ openssl/fips/aes/fips_aesavs.c 29 Jul 2003 17:05:16 -0000 1.1.2.7 @@ -49,6 +49,8 @@ kt = 4000; else if(!strcasecmp(amode,"CFB1")) kt=5000; + else if(!strcasecmp(amode,"CFB8")) + kt=6000; else { printf("Unknown mode: %s\n", amode); @@ -110,6 +112,15 @@ break; case 5256: cipher=EVP_aes_256_cfb1(); + break; + case 6128: + cipher=EVP_aes_128_cfb8(); + break; + case 6192: + cipher=EVP_aes_192_cfb8(); + break; + case 6256: + cipher=EVP_aes_256_cfb8(); break; default: printf("Didn't handle mode %d\n",kt); @@ . ______________________________________________________________________ OpenSSL Project http://www.openssl.org CVS Repository Commit List openssl-cvs@xxxxxxxxxxx Automated List Manager majordomo@xxxxxxxxxxx
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [CVS] OpenSSL: OpenSSL_0_9_7-stable: openssl/fips/ fips_err_wrapper.c ..., Ben Laurie |
|---|---|
| Next by Date: | [CVS] OpenSSL: OpenSSL_0_9_7-stable: openssl/ Makefile.org, Richard Levitte |
| Previous by Thread: | [CVS] OpenSSL: OpenSSL_0_9_7-stable: openssl/crypto/aes/ aes.h aes_cfb..., Ben Laurie |
| Next by Thread: | [CVS] OpenSSL: OpenSSL_0_9_7-stable: openssl/ Configure Makefile.org o..., Ben Laurie |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
Free MagazinesCisco NewsReceive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business. subscribe Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field. subscribe The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business. subscribe Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company. subscribe Total Telecom Total Telecom is "The Economist of the communications industry". subscribe |