diff --git a/CHANGES b/CHANGES index da064a7597960897cf17f0386e75ce0acda0e0c7..824afe61af753b1fa3354fe2be2698a31a5fa238 100644 --- a/CHANGES +++ b/CHANGES @@ -425,7 +425,7 @@ o Locale.Charset o The ancient syntax for arrays (string * was an alias for array(string)) has now been removed completely. -o Compatibility for pike versions before 7.4 is no longer available. +o Compatibility for pike versions before 7.6 is no longer available. o decode_value can no longer decode programs using the 'old style' program encoding. diff --git a/lib/7.4/include/msql.h b/lib/7.4/include/msql.h deleted file mode 100644 index bd464987b888060a45edd13c87420e9bb9e18856..0000000000000000000000000000000000000000 --- a/lib/7.4/include/msql.h +++ /dev/null @@ -1 +0,0 @@ -import Msql; diff --git a/lib/7.4/include/mysql.h b/lib/7.4/include/mysql.h deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/lib/7.4/include/postgres.h b/lib/7.4/include/postgres.h deleted file mode 100644 index bee668c4dfcd906878802d28f8492c906d7fa0ab..0000000000000000000000000000000000000000 --- a/lib/7.4/include/postgres.h +++ /dev/null @@ -1 +0,0 @@ -import Postgres; diff --git a/lib/7.4/include/simulate.h b/lib/7.4/include/simulate.h deleted file mode 100644 index 404014dbbac8d09cd63d1ff291fc072d59e2ccf3..0000000000000000000000000000000000000000 --- a/lib/7.4/include/simulate.h +++ /dev/null @@ -1,5 +0,0 @@ -#define list multiset -#define perror(X) werror(X) -#define efun predef -#define regexp(X,Y) filter((X),Regexp(Y)->match) -import Simulate; diff --git a/lib/7.4/modules/.autodoc b/lib/7.4/modules/.autodoc deleted file mode 100644 index d62816d4a6abf61174d3007a22deaa052ca0b14b..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/.autodoc +++ /dev/null @@ -1 +0,0 @@ -7.4:: diff --git a/lib/7.4/modules/ADT.pmod/Heap.pike b/lib/7.4/modules/ADT.pmod/Heap.pike deleted file mode 100644 index bfdcfc4c26f3643085e2b7ab4b82ee96c2a1e50d..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/ADT.pmod/Heap.pike +++ /dev/null @@ -1,8 +0,0 @@ - -#pike 7.6 - -inherit ADT.Heap; - -//! This method has been renamed to @expr{pop@} in Pike 7.6. -//! @deprecated pop -mixed top() { return pop(); } diff --git a/lib/7.4/modules/Array.pmod b/lib/7.4/modules/Array.pmod deleted file mode 100644 index c9661eb6fc9678ae81b2831750f87c9d2742f0d1..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Array.pmod +++ /dev/null @@ -1,75 +0,0 @@ -#pike 7.5 - -inherit Array; - -// diff3, complement to diff (alpha stage) - -//! This diff3 implementation is obsoleted by @[Array.diff3]. -//! @deprecated diff3 -array(array(array)) diff3_old(array mid,array left,array right) -{ - array(array) lmid,ldst; - array(array) rmid,rdst; - - [lmid,ldst]=diff(mid,left); - [rmid,rdst]=diff(mid,right); - - int l=0,r=0,n; - array(array(array)) res=({}); - int lpos=0,rpos=0; - array eq=({}); - int x; - - for (n=0; ;) - { - while (l<sizeof(lmid) && lpos>=sizeof(lmid[l])) - { - if (sizeof(ldst[l])>lpos) - res+=({({({}),ldst[l][lpos..],({})})}); - l++; - lpos=0; - } - while (r<sizeof(rmid) && rpos>=sizeof(rmid[r])) - { - if (sizeof(rdst[r])>rpos) - res+=({({({}),({}),rdst[r][rpos..]})}); - r++; - rpos=0; - } - - if (n==sizeof(mid)) break; - - x=min(sizeof(lmid[l])-lpos,sizeof(rmid[r])-rpos); - - if (lmid[l]==ldst[l] && rmid[r]==rdst[r]) - { - eq=lmid[l][lpos..lpos+x-1]; - res+=({({eq,eq,eq})}); - } - else if (lmid[l]==ldst[l]) - { - eq=lmid[l][lpos..lpos+x-1]; - res+=({({eq,eq,rdst[r][rpos..rpos+x-1]})}); - } - else if (rmid[r]==rdst[r]) - { - eq=rmid[r][rpos..rpos+x-1]; - res+=({({eq,ldst[l][lpos..lpos+x-1],eq})}); - } - else - { - res+=({({lmid[l][lpos..lpos+x-1], - ldst[l][lpos..lpos+x-1], - rdst[r][rpos..rpos+x-1]})}); - } - -// werror(sprintf("-> %-5{%O%} %-5{%O%} %-5{%O%}" -// " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos)); - - rpos+=x; - lpos+=x; - n+=x; - } - - return transpose(res); -} diff --git a/lib/7.4/modules/Crypto.pmod/aes.pmod b/lib/7.4/modules/Crypto.pmod/aes.pmod deleted file mode 100644 index a549a8928af3f8310820af82fddea5a4ced77fc8..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/aes.pmod +++ /dev/null @@ -1,25 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.AES) -inherit Nettle.AES; - -//! This is the Pike 7.4 compatibility implementation of -//! the AES cipher. -//! -//! @deprecated Crypto.AES -class _module_value { - - //! @ignore - inherit State; - //! @endignore - - //! @decl inherit Nettle.AES.State - - //! - string name() { return "AES"; } - - int query_key_length() { return 32; } - int query_block_size() { return block_size(); } - string crypt_block(string p) { return crypt(p); } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/arcfour.pmod b/lib/7.4/modules/Crypto.pmod/arcfour.pmod deleted file mode 100644 index 137d07028e9998d6c01e4ca39dbea8fe752b8458..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/arcfour.pmod +++ /dev/null @@ -1,24 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.ARCFOUR) -inherit Nettle.ARCFOUR; - -//! This is the Pike 7.4 compatibility implementation of -//! the Arcfour cipher. -//! -//! @deprecated Crypto.Arcfour -class _module_value { - - //! @ignore - inherit State; - //! @endignore - - //! @decl inherit Nettle.ARCFOUR.State - - //! - string name() { return "ARCFOUR"; } - - int query_key_length() { return 1; } - string crypt_block(string p) { return crypt(p); } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/cast.pmod b/lib/7.4/modules/Crypto.pmod/cast.pmod deleted file mode 100644 index 38cd03367440faeb57652ea8c7aab0ce299a097f..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/cast.pmod +++ /dev/null @@ -1,25 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.CAST128) -inherit Nettle.CAST128; - -//! This is the Pike 7.4 compatibility implementation of -//! the CAST128 cipher. -//! -//! @deprecated Crypto.CAST -class _module_value { - - //! @ignore - inherit State; - //! @endignore - - //! @decl inherit Nettle.CAST128.State; - - //! - string name() { return "CAST"; } - - int query_key_length() { return 16; } - int query_block_size() { return block_size(); } - string crypt_block(string p) { return crypt(p); } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/cbc.pike b/lib/7.4/modules/Crypto.pmod/cbc.pike deleted file mode 100644 index 573ee33a135bfb9b350e5cf65bf9b524d8f12503..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/cbc.pike +++ /dev/null @@ -1,57 +0,0 @@ -#pike 7.5 -#pragma no_deprecation_warnings - -//! This is the Pike 7.4 compatibility implementation of -//! the Cipher Block Chaining method. -//! -//! @deprecated Crypto.CBC - -#if constant(Crypto.CBC) -inherit Crypto.CBC; - -protected class Wrapper(object a) { - int block_size() { return a->query_block_size(); } - int key_size() { return a->query_key_length(); } - function(string:void) set_encrypt_key = a->set_encrypt_key; - function(string:void) set_decrypt_key = a->set_decrypt_key; - string crypt(string data) { return a->crypt_block(data); } -} - -protected void create(program|object a) { - if(a->crypt) - ::create(a); - else - ::create(Wrapper(a)); -} - -int query_key_length() { return key_size(); } -int query_block_size() { return block_size(); } - -protected int(0..1) mode; -this_program set_encrypt_key(string key) { - mode = 0; - return ::set_encrypt_key(key); -} - -this_program set_decrypt_key(string key) { - mode = 1; - return ::set_decrypt_key(key); -} - -string encrypt_block(string data) { - if(!mode) - return crypt(data); - else - error("CBC is in decrypt mode.\n"); -} - -string decrypt_block(string data) { - if(mode) - return crypt(data); - else - error("CBC is in encrypt mode.\n"); -} - -string crypt_block(string p) { return crypt(p); } - -#endif diff --git a/lib/7.4/modules/Crypto.pmod/crypto.pike b/lib/7.4/modules/Crypto.pmod/crypto.pike deleted file mode 100644 index b139486cad02149581eb04e1321b7c6d67fa794d..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/crypto.pike +++ /dev/null @@ -1,52 +0,0 @@ -#pike 7.5 - -//! This is the Pike 7.4 compatibility implementation of -//! cipher buffering. -//! -//! @deprecated Crypto.Buffer - -#if constant(Nettle.Proxy) -inherit Nettle.Proxy; - -protected class Wrapper(object a) { - int _key_size; - int block_size() { - if(!a->query_block_size) return 1; - return a->query_block_size() || 1; - } - int key_size() { return _key_size; } - void set_encrypt_key(string key) { - _key_size = sizeof(key); - a->set_encrypt_key(key); - } - void set_decrypt_key(string key) { - _key_size = sizeof(key); - a->set_decrypt_key(key); - } - string crypt(string data) { return a->crypt_block(data); } - string name() { return a->name(); } -} - -protected void create(program|object|array(program|mixed) c) { - if(programp(c)) - c = c(); - else if(arrayp(c)){ - if(!sizeof(c)) error("Empty array as argument.\n"); - c = c[0](@c[1..]); - } - if( !c->block_size ) - c = Wrapper(c); - ::create( @c ); -} - -string name() { return ::name(); } - -int query_key_length() { return key_size(); } -int query_block_size() { return block_size(); } -string crypt_block(string p) { return crypt(p); } -string unpad(string m) { - m = crypt(m); - return ::unpad(m); -} - -#endif diff --git a/lib/7.4/modules/Crypto.pmod/des.pmod b/lib/7.4/modules/Crypto.pmod/des.pmod deleted file mode 100644 index 83d2644651587fe69ceb539b0dec70b7ecb8105b..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/des.pmod +++ /dev/null @@ -1,25 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.DES) -inherit Nettle.DES; - -//! This is the Pike 7.4 compatibility implementation of -//! the DES cipher algorithm. -//! -//! @deprecated Crypto.DES -class _module_value { - - //! @ignore - inherit State; - //! @endignore - - //! @decl inherit Nettle.DES.State - - //! - string name() { return "DES"; } - - int query_key_length() { return 8; } - int query_block_size() { return 8; } - string crypt_block(string p) { return crypt(p); } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/des3.pmod b/lib/7.4/modules/Crypto.pmod/des3.pmod deleted file mode 100644 index 9d7bd044d5939debcd73095132e3696df23fcd02..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/des3.pmod +++ /dev/null @@ -1,26 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.DES3) -inherit Nettle.DES3; - -//! This is the Pike 7.4 compatibility implementation of -//! the DES3 cipher. -//! -//! @deprecated Crypto.DES3 -class _module_value { - - //! @ignore - inherit State; - //! @endignore - - //! @decl inherit Crypto.DES3.State - - //! - string name() { return "DES"; } // Yep, it doesn't say DES3 - - array(int) query_key_length() { return ({ 8, 8, 8 }); } - int query_block_size() { return 8; } - int query_key_size() { return 16; } - string crypt_block(string p) { return crypt(p); } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/des3_cbc.pike b/lib/7.4/modules/Crypto.pmod/des3_cbc.pike deleted file mode 100644 index a9d50d1efb1c23e3695b51276d07a12bdb7525c5..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/des3_cbc.pike +++ /dev/null @@ -1,14 +0,0 @@ - -#pike 8.0 - -//! Use @expr{Crypto.DES3.CBC@} instead. -//! @deprecated - -#if constant(Crypto.DES3.CBC) - -inherit Crypto.DES3.CBC.State; -string crypt_block(string data) { return crypt(data); } -int query_key_length() { return key_size(); } -int query_block_size() { return block_size(); } - -#endif diff --git a/lib/7.4/modules/Crypto.pmod/des_cbc.pike b/lib/7.4/modules/Crypto.pmod/des_cbc.pike deleted file mode 100644 index d5410902dd72e7de1804364e4c5b1577989da7dd..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/des_cbc.pike +++ /dev/null @@ -1,14 +0,0 @@ - -#pike 8.0 - -//! Use @expr{Crypto.DES.CBC@} instead. -//! @deprecated - -#if constant(Crypto.DES.CBC) - -inherit Crypto.DES.CBC.State; -string crypt_block(string data) { return crypt(data); } -int query_key_length() { return key_size(); } -int query_block_size() { return block_size(); } - -#endif diff --git a/lib/7.4/modules/Crypto.pmod/dsa.pike b/lib/7.4/modules/Crypto.pmod/dsa.pike deleted file mode 100644 index 531f5423bc7b0bb904c74787064624d4ce4a0d68..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/dsa.pike +++ /dev/null @@ -1,264 +0,0 @@ - -#pike 7.5 - -//! @deprecated Crypto.DSA - -#define bignum object(Gmp.mpz) - -// FIXME: Privatize these? -bignum p; /* Modulo */ -bignum q; /* Group order */ -bignum g; /* Generator */ - -bignum y; /* Public key */ -bignum x; /* Private key */ - -function random; - -Gmp.mpz get_p() { return p; } -Gmp.mpz get_q() { return q; } -Gmp.mpz get_g() { return g; } -Gmp.mpz get_y() { return y; } -Gmp.mpz get_x() { return x; } - -object set_public_key(bignum p_, bignum q_, bignum g_, bignum y_) -{ - p = p_; q = q_; g = g_; y = y_; - return this_object(); -} - -object set_private_key(bignum secret) -{ - x = secret; - return this_object(); -} - -object set_random(function r) -{ - random = r; - return this; -} - -object use_random(function r) -{ - random = r; - return this; -} - -bignum hash2number(string digest) -{ - return Gmp.mpz(digest, 256) % q; -} - -bignum dsa_hash(string msg) -{ - return hash2number(Crypto.SHA1->hash(msg)); -} - -// Generate a random number k, 0<=k<n -bignum random_number(bignum n) -{ - return Gmp.mpz(random( (q->size() + 10 / 8)), 256) % n; -} - -bignum random_exponent() -{ - return random_number(q - 1) + 1; -} - -array(bignum) raw_sign(bignum h) -{ - bignum k = random_exponent(); - - bignum r = g->powm(k, p) % q; - bignum s = (k->invert(q) * (h + x*r)) % q; - - return ({ r, s }); -} - -int raw_verify(bignum h, bignum r, bignum s) -{ - bignum w; - if (catch - { - w = s->invert(q); - }) - /* Non-invertible */ - return 0; - - /* The inner %q's are redundant, as g^q == y^q == 1 (mod p) */ - return r == (g->powm(w * h % q, p) * y->powm(w * r % q, p) % p) % q; -} - -string sign_rsaref(string msg) -{ - [bignum r, bignum s] = raw_sign(dsa_hash(msg)); - - return sprintf("%'\0'20s%'\0'20s", r->digits(256), s->digits(256)); -} - -int verify_rsaref(string msg, string s) -{ - if (sizeof(s) != 40) - return 0; - - return raw_verify(dsa_hash(msg), - Gmp.mpz(s[..19], 256), - Gmp.mpz(s[20..], 256)); -} - -string sign_ssl(string msg) -{ - return Standards.ASN1.Types.asn1_sequence( - Array.map(raw_sign(dsa_hash(msg)), - Standards.ASN1.Types.asn1_integer))->get_der(); -} - -int verify_ssl(string msg, string s) -{ - object a = Standards.ASN1.Decode.simple_der_decode(s); - - if (!a - || (a->type_name != "SEQUENCE") - || (sizeof(a->elements) != 2) - || (sizeof(a->elements->type_name - ({ "INTEGER" })))) - return 0; - - return raw_verify(dsa_hash(msg), - a->elements[0]->value, - a->elements[1]->value); -} - -object set_public_test_key() -{ - return set_public_key(Gmp.mpz("cc61a8f5a4f94e31f5412d462791e7b493e8360a2ad6e5288e67a106927feb0b3338f2b9e3d19d0056127f6aa2062d48ae0f41185633a3fc1b22ee34a2161e5a1885d99be7ba5cfa09a0abc4becf8598ea4ec2c81316d9e2c6d28385a53f2e03", - 16), - Gmp.mpz("f50473f33754ac2173968f96b50c24eb7d0a472d", - 16), - Gmp.mpz("1209dae33ba50a8f9f6cb00d1b1274bf5cc94acdf3e8a78df7a13aca0640465fdf1bc3b66ae068ccd0845abdb73e622f90b633372c7fa439a65732e8cf88077c686cc679b1c463a979c02696f6d99af05eea07d974a5fc3da6fa34ff48b030b5", - 16), - Gmp.mpz("7008517ecec3974b0a8813e5a39252b6b0051442f460bef29b4eb5c7f2972ac5f805c5383b6edcaa72596d50995b1e40f76b9a0b89ab4fb08f0458c38f2485740de6959e260e12e3052e1e28275ab84fdf3c7e9d347cb772792d4d38abcd3cfc", - 16)); -} - -object set_private_test_key() -{ - return set_private_key(Gmp.mpz("403a09fa0820287c84f2e8459a1fccf4c48c32e1", - 16)); -} - -#define SEED_LENGTH 20 - -// The (slow) NIST method of generating DSA primes. Algorithm 4.56 of -// Handbook of Applied Cryptography. -string nist_hash(bignum x) -{ - string s = x->digits(256); - - return Crypto.SHA1->hash(s[sizeof(s) - SEED_LENGTH..]); -} - -array(bignum) nist_primes(int l) -{ - if ( (l < 0) || (l > 8) ) - error( "Crypto.dsa->nist_primes: Unsupported key size.\n" ); - - int L = 512 + 64 * l; - - int n = (L-1) / 160; - int b = (L-1) % 160; - - for (;;) - { - /* Generate q */ - string seed = random(SEED_LENGTH); - bignum s = Gmp.mpz(seed, 256); - - string h = nist_hash(s) ^ nist_hash(s + 1); - - h = sprintf("%c%s%c", h[0] | 0x80, h[1..sizeof(h) - 2], h[-1] | 1); - - bignum q = Gmp.mpz(h, 256); - - if (q->small_factor() || !q->probably_prime_p()) - continue; - - /* q is a prime, with overwelming probability. */ - - int i, j; - - for (i = 0, j = 2; i < 4096; i++, j += n+1) - { - string buffer = ""; - int k; - - for (k = 0; k<= n; k++) - buffer = nist_hash(s + j + k) + buffer; - - buffer = buffer[sizeof(buffer) - L/8 ..]; - buffer = sprintf("%c%s", buffer[0] | 0x80, buffer[1..]); - - bignum p = Gmp.mpz(buffer, 256); - - p -= p % (2 * q) - 1; - - if (!p->small_factor() && p->probably_prime_p()) - { - /* Done */ - return ({ p, q }); - } - } - } -} - -bignum find_generator(bignum p, bignum q) -{ - bignum e = (p - 1) / q; - bignum g; - - do - { - /* A random number in { 2, 3, ... p - 2 } */ - g = (random_number(p-3) + 2) - /* Exponentiate to get an element of order 1 or q */ - ->powm(e, p); - } - while (g == 1); - - return g; -} - -object generate_parameters(int bits) -{ - if (bits % 64) - error( "Crypto.dsa->generate_key: Unsupported key size.\n" ); - - [p, q] = nist_primes(bits / 64 - 8); - - if (p % q != 1) - error( "Crypto.dsa->generate_key: Internal error.\n" ); - - if (q->size() != 160) - error( "Crypto.dsa->generate_key: Internal error.\n" ); - - g = find_generator(p, q); - - if ( (g == 1) || (g->powm(q, p) != 1)) - error( "Crypto.dsa->generate_key: Internal error.\n" ); - - return this_object(); -} - -object generate_key() -{ - /* x in { 2, 3, ... q - 1 } */ - x = random_number(q - 2) + 2; - y = g->powm(x, p); - - return this_object(); -} - -int public_key_equal (object dsa) -{ - return p == dsa->p && q == dsa->q && g == dsa->g && y == dsa->y; -} diff --git a/lib/7.4/modules/Crypto.pmod/hmac.pike b/lib/7.4/modules/Crypto.pmod/hmac.pike deleted file mode 100644 index a28233948577e4e5b4feff5baf5f287a7c0bf016..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/hmac.pike +++ /dev/null @@ -1,53 +0,0 @@ - -#pike 7.5 - -//! @deprecated Crypto.HMAC - -inherit Crypto.HMAC; - -protected class Wrapper -{ - protected object h; - function(void:mixed) asn1_id; - void create(object _h) { - h = _h; - if (h()->identifier) - asn1_id = lambda() { - return Standards.ASN1.Types.Identifier()-> - decode_primitive(h()->identifier()); - }; - } - string hash(string m) { return h()->update(m)->digest(); } - int digest_size() { return sizeof(hash("")); } - - class HMAC - { - string ikey; /* ipad XOR:ed with the key */ - string okey; /* opad XOR:ed with the key */ - - void create(string passwd) - { - if (sizeof(passwd) > B) - passwd = raw_hash(passwd); - if (sizeof(passwd) < B) - passwd = passwd + "\0" * (B - sizeof(passwd)); - - ikey = (passwd ^ ("6" * B)); - okey = (passwd ^ ("\\" * B)); - } - - string `()(string text) - { - return raw_hash(okey + raw_hash(ikey + text)); - } - - string digest_info(string text) - { - return pkcs_digest(okey + raw_hash(ikey + text)); - } - }; -} - -void create(object h, void|int b) { - ::create(Wrapper(h), b||64); -} diff --git a/lib/7.4/modules/Crypto.pmod/idea.pmod b/lib/7.4/modules/Crypto.pmod/idea.pmod deleted file mode 100644 index cf9009b4ecf712f5d260a914541411ddcf0493fb..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/idea.pmod +++ /dev/null @@ -1,25 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.IDEA) -inherit Nettle.IDEA; - -//! This is the Pike 7.4 compatibility implementation of -//! the IDEA cipher. -//! -//! @deprecated Crypto.IDEA -class _module_value { - - //! @ignore - inherit State; - //! @endignore - - //! @decl inherit Nettle.IDEA.State - - //! - string name() { return "IDEA"; } - - int query_key_length() { return 16; } - int query_block_size() { return block_size(); } - string crypt_block(string p) { return crypt(p); } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/idea_cbc.pike b/lib/7.4/modules/Crypto.pmod/idea_cbc.pike deleted file mode 100644 index 1447741d1754dd0a6994ed3826092d3ac29efdf6..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/idea_cbc.pike +++ /dev/null @@ -1,15 +0,0 @@ - -#pike 7.5 - -//! Use @expr{Crypto.CBC(Crypto.IDEA)@} instead. -//! @deprecated - -#if constant(Nettle.CBC) - -inherit Nettle.CBC; -void create() { ::create(Crypto.IDEA()); } -string crypt_block(string data) { return crypt(data); } -int query_key_length() { return key_size(); } -int query_block_size() { return block_size(); } - -#endif diff --git a/lib/7.4/modules/Crypto.pmod/invert.pike b/lib/7.4/modules/Crypto.pmod/invert.pike deleted file mode 100644 index 58c72b149e96b92ecc3e1251d7f8b1289dbe6f88..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/invert.pike +++ /dev/null @@ -1,29 +0,0 @@ -#pike 7.5 -#pragma strict_types - -//! Inversion crypto module. - -//! Returns the string @expr{"INVERT"@}. -string name() { return "INVERT"; } - -//! Returns the block size for the invert crypto (currently 8). -int(8..8) query_block_size() { return 8; } - -//! Returns the minimum key length for the invert crypto. -//! -//! Since this crypto doesn't use a key, this will be 0. -int(0..0) query_key_length() { return 0; } - -//! Set the encryption key (currently a no op). -void set_encrypt_key(string key) {key;} - -//! Set the decryption key (currently a no op). -void set_decrypt_key(string key) {key;} - -//! De/encrypt the string @[data] with the invert crypto -//! (ie invert the string). -string crypt_block(string data) { - if(sizeof(data)%8) - error("Bad length of data.\n"); - return ~data; -} diff --git a/lib/7.4/modules/Crypto.pmod/koremutake.pmod b/lib/7.4/modules/Crypto.pmod/koremutake.pmod deleted file mode 100644 index 26d9c6ec9c10dccc3c1666bb06fce900f2f1468a..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/koremutake.pmod +++ /dev/null @@ -1,6 +0,0 @@ - -#pike 7.5 - -//! @deprecated Crypto.Koremutake - -inherit Crypto.Koremutake; diff --git a/lib/7.4/modules/Crypto.pmod/md2.pmod b/lib/7.4/modules/Crypto.pmod/md2.pmod deleted file mode 100644 index 89c8298e521f118ab5eb273ac2f1a1aca270df1f..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/md2.pmod +++ /dev/null @@ -1,27 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.MD2) -inherit Nettle.MD2; - -//! This is the Pike 7.4 compatibility implementation of the MD2 hash algorithm. -//! -//! @deprecated Crypto.MD2 -class _module_value { - - //! @ignore - inherit MD2::State; - //! @endignore - - //! @decl inherit Nettle.MD2.State - - string identifier() { return "*\206H\206\367\r\2\2"; } - string asn1_id() { return identifier(); } - //! Return the BER encoded ASN.1 identifier for MD2. - - //! @deprecated Crypto.MD2.hash - string hash(string m) { return update(m)->digest(); } - - //! - string name() { return "MD2"; } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/md4.pmod b/lib/7.4/modules/Crypto.pmod/md4.pmod deleted file mode 100644 index 469e199673887d010961d644cba4ae5746bb02ee..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/md4.pmod +++ /dev/null @@ -1,27 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.MD4) -inherit Nettle.MD4; - -//! This is the Pike 7.4 compatibility implementation of the MD4 hash algorithm. -//! -//! @deprecated Crypto.MD4 -class _module_value { - - //! @ignore - inherit MD4::State; - //! @endignore - - //! @decl inherit Nettle.MD4.State - - string identifier() { return "*\206H\206\367\r\2\4"; } - string asn1_id() { return identifier(); } - //! Return the BER encoded ASN.1 identifier for MD4. - - //! @deprecated Crypto.MD4.hash - string hash(string m) { return update(m)->digest(); } - - //! - string name() { return "MD4"; } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/md5.pmod b/lib/7.4/modules/Crypto.pmod/md5.pmod deleted file mode 100644 index 40d254edea92f98fdfd5b2d6bc40fb29245b64f5..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/md5.pmod +++ /dev/null @@ -1,27 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.MD5) -inherit Nettle.MD5; - -//! This is the Pike 7.4 compatibility implementation of the MD5 hash algorithm. -//! -//! @deprecated Crypto.MD5 -class _module_value { - - //! @ignore - inherit MD5::State; - //! @endignore - - //! @decl inherit Nettle.MD5.State - - string identifier() { return "*\206H\206\367\r\2\5"; } - string asn1_id() { return identifier(); } - //! Return the BER encoded ASN.1 identifier for MD5. - - //! @deprecated Crypto.MD5.hash - string hash(string m) { return update(m)->digest(); } - - //! - string name() { return "MD5"; } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/module.pmod b/lib/7.4/modules/Crypto.pmod/module.pmod deleted file mode 100644 index 9bc018db041d239c9545c32f08205385c23b2598..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/module.pmod +++ /dev/null @@ -1,32 +0,0 @@ -#pike 7.6 - -//! From Pike 7.5 @[pw] and @[salt] are binary strings, so -//! the result is different if any of these includes @expr{"\0"@}. -//! -//! The return type is also changed from string to int|string. If -//! the second argument is a hash, @[pw] will be hashed with the -//! salt from the hash and compared with the hash. -string crypt_md5(string pw, void|string salt) { - sscanf(pw, "%s\0", pw); - if(salt) { - sscanf(salt, "%s\0", salt); - sscanf(salt, "$1$%s", salt); - } - return Crypto.make_crypt_md5(pw,salt); -} - -//! @deprecated String.string2hex -constant string_to_hex = __builtin.string2hex; - -//! @deprecated String.hex2string -constant hex_to_string = __builtin.hex2string; - -//! des_parity is removed. Instead there is @[Crypto.DES->fix_parity], -//! but it always outputs a key sized string. -string des_parity(string s) { - foreach(s; int pos; int v) { - int i = v & 0xfe; - s[pos] = i | !Int.parity(i); - } - return s; -} diff --git a/lib/7.4/modules/Crypto.pmod/pipe.pike b/lib/7.4/modules/Crypto.pmod/pipe.pike deleted file mode 100644 index 19ba6a60d1696dad83b3186887b4945af5196945..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/pipe.pike +++ /dev/null @@ -1,52 +0,0 @@ -#pike 7.5 - -#if constant(Crypto.Pipe) -inherit Crypto.Pipe; - -protected class Wrapper(object a) { - int _key_size; - int block_size() { - if(!a->query_block_size) return 1; - return a->query_block_size() || 1; - } - int key_size() { return _key_size; } - void set_encrypt_key(string key) { - _key_size = sizeof(key); - a->set_encrypt_key(key); - } - void set_decrypt_key(string key) { - _key_size = sizeof(key); - a->set_decrypt_key(key); - } - string crypt(string data) { return a->crypt_block(data); } - string name() { return a->name(); } -} - -protected void create(program|object|array(program|mixed) ... c) { - array new_c = ({}); - foreach(c, program|object|array cc) { - object new; - if(objectp(cc)) - new = cc; - else if(programp(cc)) - new = cc(); - else { - if(!sizeof(cc)) error("Empty array as argument.\n"); - new = cc[0](@cc[1..]); - } - if( !new->block_size ) - new = Wrapper(new); - new_c += ({ new }); - } - ::create( @new_c ); -} - -string name() { return upper_case(::name()); } - -array(int) query_key_length() { return key_size(); } -int query_block_size() { return block_size(); } -string crypt_block(string p) { return crypt(p); } - -#else /* constant(Crypto.Pipe) */ -constant this_program_does_not_exist=1; -#endif /* constant(Crypto.Pipe) */ diff --git a/lib/7.4/modules/Crypto.pmod/randomness.pmod b/lib/7.4/modules/Crypto.pmod/randomness.pmod deleted file mode 100644 index f9e4466da24eafc6fc7f74b6f120deac276390da..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/randomness.pmod +++ /dev/null @@ -1,173 +0,0 @@ - -//! Assorted stronger or weaker randomnumber generators. -//! These devices try to collect entropy from the environment. -//! They differ in behaviour when they run low on entropy, /dev/random -//! will block if it can't provide enough random bits, while /dev/urandom -//! will degenerate into a reasonably strong pseudo random generator -//! @deprecated Crypto.Random - -#pike 7.5 - -// #pragma strict_types - -#if constant(Crypto.SHA1.name) - -protected constant RANDOM_DEVICE = "/dev/random"; -protected constant PRANDOM_DEVICE = "/dev/urandom"; - -/* Collect somewhat random data from the environment. Unfortunately, - * this is quite system dependent - */ -protected constant PATH = "/usr/sbin:/usr/etc:/usr/bin/:/sbin/:/etc:/bin"; - -#ifndef __NT__ -protected constant SYSTEM_COMMANDS = ({ - "last -256", "arp -a", - "netstat -anv","netstat -mv","netstat -sv", - "uptime","ps -fel","ps aux", - "vmstat -s","vmstat -M", - "iostat","iostat -cdDItx" -}); -#endif - -protected RandomSource global_arcfour; -protected int(0..1) goodseed; - -#ifdef __NT__ -protected string nt_random_string(int len) { - object ctx = Nettle.NT.CryptContext(0, 0, Nettle.NT.PROV_RSA_FULL, - Nettle.NT.CRYPT_VERIFYCONTEXT - /*|Nettle.NT.CRYPT_SILENT*/); - if(!ctx) - error( "Couldn't create crypto context.\n" ); - - string res = ctx->read(len); - - if(!res) - error( "Couldn't generate randomness.\n" ); - - destruct(ctx); - return res; -} -#endif - -//! Executes several programs (last -256, arp -a, netstat -anv, netstat -mv, -//! netstat -sv, uptime, ps -fel, ps aux, vmstat -s, vmstat -M, iostat, -//! iostat -cdDItx) to generate some entropy from their output. On Microsoft -//! Windows the Windows cryptographic routines are called to generate random -//! data. -string some_entropy() -{ -#ifdef __NT__ - return nt_random_string(8192); -#else /* !__NT__ */ - mapping env = [mapping(string:string)]getenv(); - env->PATH = PATH; - - Stdio.File parent_pipe = Stdio.File(); - Stdio.File child_pipe = parent_pipe->pipe(); - if (!child_pipe) - error( "Couldn't create pipe.\n" ); - - Stdio.File null = Stdio.File("/dev/null","rw"); - - foreach(SYSTEM_COMMANDS, string cmd) - { - catch { - Process.create_process(Process.split_quoted_string(cmd), - (["stdin":null, - "stdout":child_pipe, - "stderr":null, - "env":env])); - }; - } - - destruct(child_pipe); - - return parent_pipe->read(); -#endif -} - -//! Virtual class for randomness source object. -class RandomSource { - - //! Returns a string of length len with (pseudo) random values. - string read(int(0..) len) { return random_string(len); } -} - -// Compatibility -constant pike_random = RandomSource; - -#ifdef __NT__ -protected class NTSource { - string read(int(0..) len) { return nt_random_string(len); } -} -#endif - -//! A pseudo random generator based on the arcfour crypto. -class arcfour_random { - - inherit .arcfour; - - //! Initialize and seed the arcfour random generator. - void create(string secret) - { - set_encrypt_key(Crypto.SHA1->hash(secret)); - } - - //! Return a string of the next len random characters from the - //! arcfour random generator. - string read(int len) - { - if (len > 16384) return read(len/2)+read(len-len/2); - return crypt("\47" * len); - } -} - -//! Returns a reasonably random random-source. -RandomSource reasonably_random() -{ -#ifdef __NT__ - return NTSource(); -#endif - - if (file_stat(PRANDOM_DEVICE)) - { - Stdio.File res = Stdio.File(); - if (res->open(PRANDOM_DEVICE, "r")) - return res; - } - - if (global_arcfour) - return global_arcfour; - - string seed = some_entropy(); - if (sizeof(seed) < 2001) - seed = random_string(2001); // Well, we're only at reasonably random... - return (global_arcfour = arcfour_random(sprintf("%4c%O%s", time(), - _memory_usage(), seed))); -} - -//! Returns a really random random-source. -RandomSource really_random(int|void may_block) -{ -#ifdef __NT__ - return NTSource(); -#endif - Stdio.File res = Stdio.File(); - if (may_block && file_stat(RANDOM_DEVICE)) - { - if (res->open(RANDOM_DEVICE, "r")) - return res; - } - - if (file_stat(PRANDOM_DEVICE)) - { - if (res->open(PRANDOM_DEVICE, "r")) - return res; - } - - error( "No source found.\n" ); -} - -#endif // constant(Crypto.SHA1) diff --git a/lib/7.4/modules/Crypto.pmod/rijndael.pmod b/lib/7.4/modules/Crypto.pmod/rijndael.pmod deleted file mode 100644 index e1a861e62a27491691312c84ced0c71d4fa29617..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/rijndael.pmod +++ /dev/null @@ -1,25 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.AES) -inherit Nettle.AES; - -//! This is the Pike 7.4 compatibility implementation of -//! the AES cipher. -//! -//! @deprecated Crypto.AES -class _module_value { - - //! @ignore - inherit State; - //! @endignore - - //! @decl inherit Nettle.AES.State - - //! - string name() { return "RIJNDAEL"; } - - int query_key_length() { return 32; } - int query_block_size() { return block_size(); } - string crypt_block(string p) { return crypt(p); } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/rsa.pike b/lib/7.4/modules/Crypto.pmod/rsa.pike deleted file mode 100644 index 39815eadbf3fe0925d8af8c0daee94291e710d39..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/rsa.pike +++ /dev/null @@ -1,20 +0,0 @@ - -#pike 7.5 - -//! @deprecated Crypto.RSA - -#if constant(Crypto.Hash) - -inherit Crypto.RSA; - -Gmp.mpz sign(string m, program|object h) { - if(!h->hash) h=h(); - return ::sign(m,h); -} - -int(0..1) verify(string m, program|object h, object s) { - if(!h->hash) h=h(); - return ::verify(m,h,s); -} - -#endif diff --git a/lib/7.4/modules/Crypto.pmod/sha.pmod b/lib/7.4/modules/Crypto.pmod/sha.pmod deleted file mode 100644 index fbcfdf33730a0f4d9cec78416c999d882479069e..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/sha.pmod +++ /dev/null @@ -1,24 +0,0 @@ -#pike 7.5 - -#if constant(Nettle.SHA1) -inherit Nettle.SHA1; - -//! This is the Pike 7.4 compatibility implementation of -//! the SHA1 hash algorithm. -//! -//! @deprecated Crypto.SHA1 -class _module_value { - - //! @ignore - inherit SHA1::State; - //! @endignore - - //! @decl inherit Nettle.SHA1.State - - //! @deprecated Crypto.SHA1.hash - string hash(string m) { return update(m)->digest(); } - - //! - string name() { return "SHA"; } -} -#endif diff --git a/lib/7.4/modules/Crypto.pmod/substitution.pike b/lib/7.4/modules/Crypto.pmod/substitution.pike deleted file mode 100644 index b20212bf336e9395f86db5f0047f69b768b59977..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/substitution.pike +++ /dev/null @@ -1,9 +0,0 @@ - -#pike 7.5 - -//! @deprecated Crypto.Substitution - -inherit Crypto.Substitution; - -string encode(string m) { return encrypt(m); } -string decode(string m) { return decrypt(m); } diff --git a/lib/7.4/modules/Crypto.pmod/testsuite.in b/lib/7.4/modules/Crypto.pmod/testsuite.in deleted file mode 100644 index 1ccc40c5f6531d5e726f2f5775d78104b21508f9..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Crypto.pmod/testsuite.in +++ /dev/null @@ -1,498 +0,0 @@ -START_MARKER(7.4) - -// Crypto -test_true([[objectp(Crypto)]]) - -// C-programs -test_true([[programp(Crypto.cbc)]]) -test_true([[programp(Crypto.crypto)]]) -test_true([[programp(Crypto.invert)]]) -test_true([[programp(Crypto.md2)]]) -test_true([[programp(Crypto.md4)]]) -test_true([[programp(Crypto.md5)]]) -cond_resolv(Crypto.Pipe, [[ -test_true([[programp(Crypto.pipe)]]) -]]) -test_true([[programp(Crypto.sha)]]) - -test_true([[programp(Crypto.rijndael)]]) -test_true([[programp(Crypto.des)]]) -test_true([[programp(Crypto.idea)]]) -test_true([[programp(Crypto.cast)]]) -test_true([[programp(Crypto.arcfour)]]) - -// Functions -test_eq(Crypto.des_parity("\xff"*8), "\xfe"*8) -test_eq(Crypto.des_parity("12345678"), "12244778") -test_true([[functionp(Crypto.hex_to_string)]]) -test_true([[functionp(Crypto.string_to_hex)]]) - -// Pike programs -test_true([[programp(Crypto.des3)]]) -test_true([[programp(Crypto.des3_cbc)]]) -test_true([[programp(Crypto.des_cbc)]]) -test_true([[programp(Crypto.idea_cbc)]]) -test_true([[programp(Crypto.rsa)]]) - -// invert -test_eq([[Crypto.invert()->crypt_block("")]],[[""]]) -test_eq([[Crypto.invert()->crypt_block("\0\xffpqrstx")]], - [["\xff\0\x8f\x8e\x8d\x8c\x8b\x87"]]) - -// RSA -cond_resolv(Crypto.MD5.name, [[ -test_do(add_constant("RSA", Crypto.rsa()) ) -test_do( RSA->generate_key(1024) ) -test_equal( RSA->raw_sign("hej"), RSA->raw_sign("hej") ) -test_true( RSA->raw_verify("tjo", RSA->raw_sign("tjo")) ) -test_equal( RSA->get_n(), RSA->get_n() ) -test_true( functionp(RSA->get_n()->gcdext2) ) -test_equal( RSA->get_e(), RSA->get_e() ) -test_true( functionp(RSA->get_e()->gcdext2) ) -test_equal( RSA->get_d(), RSA->get_d() ) -test_true( functionp(RSA->get_d()->gcdext2) ) -test_equal( RSA->get_p(), RSA->get_p() ) -test_true( functionp(RSA->get_p()->gcdext2) ) -test_equal( RSA->get_q(), RSA->get_q() ) -test_true( functionp(RSA->get_q()->gcdext2) ) -test_equal( RSA->cooked_get_n(), RSA->get_n()->digits(256) ) -test_equal( RSA->cooked_get_e(), RSA->get_e()->digits(256) ) -test_equal( RSA->cooked_get_d(), RSA->get_d()->digits(256) ) -test_equal( RSA->cooked_get_p(), RSA->get_p()->digits(256) ) -test_equal( RSA->cooked_get_q(), RSA->get_q()->digits(256) ) -test_do(add_constant("RSB", Crypto.rsa()) ) -test_do( RSB->set_private_key(RSA->get_d(), - ({ RSA->get_p(), RSA->get_q() }) ) ) -test_equal( RSA->get_d(), RSB->get_d() ) -test_equal( RSA->get_p(), RSB->get_p() ) -test_equal( RSA->get_q(), RSB->get_q() ) -test_true([[RSA->verify("hej", Crypto.md5, RSB->sign("hej", Crypto.md5)) ]]) -test_false([[RSA->verify("hoj", Crypto.md5, RSB->sign("hej", Crypto.md5)) ]]) -test_true( RSA->sha_verify("hej", RSB->sha_sign("hej")) ) -test_false( RSA->sha_verify("hoj", RSB->sha_sign("hej")) ) -test_true( RSA->md5_verify("hej", RSB->md5_sign("hej")) ) -test_false( RSA->md5_verify("hoj", RSB->md5_sign("hej")) ) -test_do( add_constant("RSA") ) -test_do( add_constant("RSB") ) - -test_do(add_constant("RSA", Crypto.rsa()) ) -test_true( RSA->set_public_key( - 0x838b848334d4f2151d25971e655eed8a0905cb5b81ba9047db2bf3b56765b058fa9af2ad89a2726233fc8917e52e8966db4bae5d426207f98ab50e1467accb2d, - 65537) ) -test_true( RSA->set_private_key( - 0x3f8a1cafe3cd1841ea9a45ac80faa172937921094a587b68ba0d38e2ded6d79ef1a5b8d9605278ddc61616f12fbb9dc6dbdea50f9dc4a51f6a8ed30ada7c9301, - ({ 0xae01268cb370af44cb05e9618ea6681dae1186bd746d3aa6122b8bf6c2290619, - 0xc1884f35667fb5ea3e8e7cfa052bb34894c2970b3da6a0650182fe514b23c835 })) ) -test_eq( RSA->query_blocksize(), 61 ) -test_true( RSA->raw_verify("fl�rpzprutt",RSA->raw_sign("fl�rpzprutt")) ) -test_false( RSA->raw_verify("fl�rpzputt",RSA->raw_sign("fl�rpzprutt")) ) -test_true( RSA->decrypt(RSA->encrypt("fl�rpzprutt")) ) -test_eq( RSA->rsa_size(), 512 ) -test_true( RSA->public_key_equal(RSA) ) -test_false(RSA->public_key_equal(Crypto.rsa()->generate_key(512)) ) -test_do( add_constant("RSA") ) -]]) - -// DSA -cond_resolv(Crypto.SHA1.name, [[ -test_do(add_constant("DSA", Crypto.dsa()) ) -test_true( DSA->set_public_test_key() ) -test_true( DSA->set_private_test_key() ) -test_true( DSA->p->gcdext2 ) -test_true( DSA->q->gcdext2 ) -test_true( DSA->g->gcdext2 ) -test_true( DSA->x->gcdext2 ) -test_true( DSA->y->gcdext2 ) -test_true( DSA->hash2number ) -test_true( DSA->dsa_hash ) -test_true( DSA->random_number ) -test_true( DSA->random_exponent ) -test_true( DSA->nist_hash ) -test_true( DSA->find_generator ) -test_do( add_constant("DSA") ) -]]) - - -// DES -cond_resolv(Crypto.DES.name, [[ -test_true([[objectp(Crypto.des())]]) -test_eq([[Crypto.string_to_hex(Crypto.des()->set_encrypt_key(Crypto.hex_to_string("0101010101010180")) - ->crypt_block(Crypto.hex_to_string("0000000000000000")))]], - [["9cc62df43b6eed74"]]) -test_eq([[Crypto.string_to_hex(Crypto.des()->set_encrypt_key(Crypto.hex_to_string("8001010101010101")) - ->crypt_block(Crypto.hex_to_string("0000000000000040")))]], - [["a380e02a6be54696"]]) -test_eq([[Crypto.string_to_hex(Crypto.des()->set_encrypt_key(Crypto.hex_to_string("08192a3b4c5d6e7f")) - ->crypt_block(Crypto.hex_to_string("0000000000000000")))]], - [["25ddac3e96176467"]]) -test_eq([[Crypto.string_to_hex(Crypto.des()->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef")) - ->crypt_block("Now is t"))]], - [["3fa40e8a984d4815"]]) -test_eq([[Crypto.string_to_hex(Crypto.des()->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef")) - ->crypt_block(Crypto.hex_to_string("0123456789abcde7")))]], - [["c95744256a5ed31d"]]) - -test_eq([[Crypto.des()->set_decrypt_key(Crypto.hex_to_string("0123456789abcdef")) - ->crypt_block(Crypto.hex_to_string("3fa40e8a984d4815"))]], - [["Now is t"]]) -]]) - -// DES3 (EDE with AAA key == DES) -cond_resolv(Crypto.DES3.name, [[ -test_true([[objectp(Crypto.des())]]) -test_eq([[Crypto.string_to_hex(Crypto.des3()->set_encrypt_key(Crypto.hex_to_string("0101010101010180")*3) - ->crypt_block(Crypto.hex_to_string("0000000000000000")))]], - [["9cc62df43b6eed74"]]) -test_eq([[Crypto.string_to_hex(Crypto.des3()->set_encrypt_key(Crypto.hex_to_string("8001010101010101")*3) - ->crypt_block(Crypto.hex_to_string("0000000000000040")))]], - [["a380e02a6be54696"]]) -test_eq([[Crypto.string_to_hex(Crypto.des3()->set_encrypt_key(Crypto.hex_to_string("08192a3b4c5d6e7f")*3) - ->crypt_block(Crypto.hex_to_string("0000000000000000")))]], - [["25ddac3e96176467"]]) -test_eq([[Crypto.string_to_hex(Crypto.des3()->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef")*3) - ->crypt_block("Now is t"))]], - [["3fa40e8a984d4815"]]) -test_eq([[Crypto.string_to_hex(Crypto.des3()->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef")*3) - ->crypt_block(Crypto.hex_to_string("0123456789abcde7")))]], - [["c95744256a5ed31d"]]) - -test_eq([[Crypto.des3()->set_decrypt_key(Crypto.hex_to_string("0123456789abcdef")*3) - ->crypt_block(Crypto.hex_to_string("3fa40e8a984d4815"))]], - [["Now is t"]]) -]]) - -// RIJNDAEL -cond_resolv(Crypto.AES.name, [[ -test_true([[objectp(Crypto.rijndael()) && objectp(Crypto.aes())]]) -]]) - -// IDEA -cond_resolv(Crypto.IDEA.name, [[ -test_true([[objectp(Crypto.idea())]]) -test_eq([[Crypto.idea() - ->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef" - "0123456789abcdef")) - ->crypt_block(Crypto.hex_to_string("0123456789abcde7"))]], - [[String.hex2string("2011aacef6f4bc7f")]]) -]]) - -// CAST -cond_resolv(Crypto.CAST.name, [[ -test_true([[objectp(Crypto.cast())]]) -// encryption -test_eq([[Crypto.cast() - ->set_encrypt_key(Crypto.hex_to_string("0123456712345678" - "234567893456789A")) - ->crypt_block(Crypto.hex_to_string("0123456789ABCDEF"))]], - [[String.hex2string("238B4FE5847E44B2")]]) -test_eq([[Crypto.cast() - ->set_encrypt_key(Crypto.hex_to_string("0123456712345678" - "2345")) - ->crypt_block(Crypto.hex_to_string("0123456789ABCDEF"))]], - [[String.hex2string("EB6A711A2C02271B")]]) -test_eq([[Crypto.cast() - ->set_encrypt_key(Crypto.hex_to_string("0123456712")) - ->crypt_block(Crypto.hex_to_string("0123456789ABCDEF"))]], - [[String.hex2string("7AC816D16E9B302E")]]) -// decryption -test_eq([[Crypto.cast() - ->set_decrypt_key(Crypto.hex_to_string("0123456712345678" - "234567893456789A")) - ->crypt_block(Crypto.hex_to_string("238B4FE5847E44B2"))]], - [[String.hex2string("0123456789ABCDEF")]]) -test_eq([[Crypto.cast() - ->set_decrypt_key(Crypto.hex_to_string("0123456712345678" - "2345")) - ->crypt_block(Crypto.hex_to_string("EB6A711A2C02271B"))]], - [[String.hex2string("0123456789ABCDEF")]]) -test_eq([[Crypto.cast() - ->set_decrypt_key(Crypto.hex_to_string("0123456712")) - ->crypt_block(Crypto.hex_to_string("7AC816D16E9B302E"))]], - [[String.hex2string("0123456789ABCDEF")]]) -]]) - -// ARCFOUR -cond_resolv(Crypto.Arcfour.name, [[ -test_true([[objectp(Crypto.arcfour())]]) -test_eq([[Crypto.arcfour()->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef")) - ->crypt(Crypto.hex_to_string("0123456789abcdef"))]], - [[String.hex2string("75b7878099e0c596")]]) -test_eq([[Crypto.arcfour()->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef")) - ->crypt(Crypto.hex_to_string("0000000000000000"))]], - [[String.hex2string("7494c2e7104b0879")]]) -test_eq([[Crypto.arcfour()->set_encrypt_key(Crypto.hex_to_string("0000000000000000")) - ->crypt(Crypto.hex_to_string("0000000000000000"))]], - [[String.hex2string("de188941a3375d3a")]]) -test_eq([[Crypto.arcfour()->set_encrypt_key(Crypto.hex_to_string("ef012345")) - ->crypt(Crypto.hex_to_string("00000000000000000000"))]], - [[String.hex2string("d6a141a7ec3c38dfbd61")]]) - -test_eq([[Crypto.arcfour() - ->set_encrypt_key(Crypto.hex_to_string("0123456789abcdef")) - ->crypt(Crypto.hex_to_string( - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101" - "0101010101010101010101010101010101010101010101010101010101010101"))]], - [[String.hex2string( - "7595c3e6114a09780c4ad452338e1ffd9a1be9498f813d76533449b6778dcad8" - "c78a8d2ba9ac66085d0e53d59c26c2d1c490c1ebbe0ce66d1b6b1b13b6b919b8" - "47c25a91447a95e75e4ef16779cde8bf0a95850e32af9689444fd377108f98fd" - "cbd4e726567500990bcc7e0ca3c4aaa304a387d20f3b8fbbcd42a1bd311d7a43" - "03dda5ab078896ae80c18b0af66dff319616eb784e495ad2ce90d7f772a81747" - "b65f62093b1e0db9e5ba532fafec47508323e671327df9444432cb7367cec82f" - "5d44c0d00b67d650a075cd4b70dedd77eb9b10231b6b5b741347396d62897421" - "d43df9b42e446e358e9c11a9b2184ecbef0cd8e7a877ef968f1390ec9b3d35a5" - "585cb009290e2fcde7b5ec66d9084be44055a619d9dd7fc3166f9487f7cb2729" - "12426445998514c15d53a18c864ce3a2b7555793988126520eacf2e3066e230c" - "91bee4dd5304f5fd0405b35bd99c73135d3d9bc335ee049ef69b3867bf2d7bd1" - "eaa595d8bfc0066ff8d31509eb0c6caa006c807a623ef84c3d33c195d23ee320" - "c40de0558157c822d4b8c569d849aed59d4e0fd7f379586b4b7ff684ed6a189f" - "7486d49b9c4bad9ba24b96abf924372c8a8fffb10d55354900a77a3db5f205e1" - "b99fcd8660863a159ad4abe40fa48934163ddde542a6585540fd683cbfd8c00f" - "12129a284deacc4cdefe58be7137541c047126c8d49e2755ab181ab7e940b0c0")]]) -]]) - -// MD5 -cond_resolv(Crypto.MD5.name, [[ -test_true([[objectp(Crypto.md5())]]) -test_eq([[Crypto.md5()->update("")->digest()]], - [[String.hex2string("d41d8cd98f00b204e9800998ecf8427e")]]) -test_eq([[Crypto.md5()->update("a")->digest()]], - [[String.hex2string("0cc175b9c0f1b6a831c399e269772661")]]) -test_eq([[Crypto.md5()->update("abc")->digest()]], - [[String.hex2string("900150983cd24fb0d6963f7d28e17f72")]]) -test_eq([[Crypto.md5()->update("message digest")->digest()]], - [[String.hex2string("f96b697d7cb7938d525a2f31aaf161d0")]]) -test_eq([[Crypto.md5()->update("abcdefghijklmnopqrstuvwxyz")->digest()]], - [[String.hex2string("c3fcd3d76192e4007dfb496cca67e13b")]]) -test_eq([[Crypto.md5()->update("ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz0123456789")->digest()]], - [[String.hex2string("d174ab98d277d9f5a5611c2c9f419d9f")]]) -test_eq([[Crypto.md5()->update("1234567890123456789012345678901234567890" - "1234567890123456789012345678901234567890")->digest()]], - [[String.hex2string("57edf4a22be3c955ac49da2e2107b67a")]]) -]]) - -// MD4 -cond_resolv(Crypto.MD4.name, [[ -test_true([[objectp(Crypto.md4())]]) -test_eq([[Crypto.md4()->update("")->digest()]], - [[String.hex2string("31d6cfe0d16ae931b73c59d7e0c089c0")]]) -test_eq([[Crypto.md4()->update("a")->digest()]], - [[String.hex2string("bde52cb31de33e46245e05fbdbd6fb24")]]) -test_eq([[Crypto.md4()->update("abc")->digest()]], - [[String.hex2string("a448017aaf21d8525fc10ae87aa6729d")]]) -test_eq([[Crypto.md4()->update("message digest")->digest()]], - [[String.hex2string("d9130a8164549fe818874806e1c7014b")]]) -test_eq([[Crypto.md4()->update("abcdefghijklmnopqrstuvwxyz")->digest()]], - [[String.hex2string("d79e1c308aa5bbcdeea8ed63df412da9")]]) -test_eq([[Crypto.md4()->update("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")->digest()]], - [[String.hex2string("043f8582f241db351ce627e153e7f0e4")]]) -test_eq([[Crypto.md4()->update("12345678901234567890123456789012345678901234567890123456789012345678901234567890")->digest()]], - [[String.hex2string("e33b4ddc9c38f2199c3e7b164fcc0536")]]) -]]) - -// MD2 -cond_resolv(Crypto.MD2.name, [[ -test_true([[objectp(Crypto.md2())]]) -test_eq([[Crypto.md2()->update("")->digest()]], - [[String.hex2string("8350e5a3e24c153df2275c9f80692773")]]) -test_eq([[Crypto.md2()->update("a")->digest()]], - [[String.hex2string("32ec01ec4a6dac72c0ab96fb34c0b5d1")]]) -test_eq([[Crypto.md2()->update("abc")->digest()]], - [[String.hex2string("da853b0d3f88d99b30283a69e6ded6bb")]]) -test_eq([[Crypto.md2()->update("message digest")->digest()]], - [[String.hex2string("ab4f496bfb2a530b219ff33031fe06b0")]]) -test_eq([[Crypto.md2()->update("abcdefghijklmnopqrstuvwxyz")->digest()]], - [[String.hex2string("4e8ddff3650292ab5a4108c3aa47940b")]]) -test_eq([[Crypto.md2()->update("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")->digest()]], - [[String.hex2string("da33def2a42df13975352846c30338cd")]]) -test_eq([[Crypto.md2()->update("1234567890123456789012345678901234567890" - "1234567890123456789012345678901234567890")->digest()]], - [[String.hex2string("d5976f79d83d3a0dc9806c3c66f3efd8")]]) -]]) - -// SHA -cond_resolv(Crypto.SHA1.name, [[ -test_true([[objectp(Crypto.sha())]]) -test_eq([[Crypto.sha()->update("")->digest()]], - [[String.hex2string("da39a3ee5e6b4b0d3255bfef95601890afd80709")]]) -test_eq([[Crypto.sha()->update("abc")->digest()]], - [[String.hex2string("a9993e364706816aba3e25717850c26c9cd0d89d")]]) -test_eq(Crypto.string_to_hex(Crypto.sha()->update("x"*63)->digest()), - "0ddc4e0cccd9a12850deb5abb0853a4425559fec") -test_eq(Crypto.string_to_hex(Crypto.sha()->update("x"*64)->digest()), - "bb2fa3ee7afb9f54c6dfb5d021f14b1ffe40c163") -test_eq(Crypto.string_to_hex(Crypto.sha()->update("x"*65)->digest()), - "78c741ddc482e4cdf8c474a0876347a0905b6233") -test_eq(Crypto.string_to_hex(Crypto.sha()->update("x"*257)->digest()), - "0796067748b6b0c2af864656a399f7722ef9283a") -]]) - -// HMAC -cond_resolv(Crypto.MD5.name, [[ -test_eq([[Crypto.hmac(Crypto.md5)("")("")]], - [[String.hex2string("74e6f7298a9c2d168935f58c001bad88")]]) -// Test vectors for md5 from RFC-2104 -test_eq([[Crypto.hmac(Crypto.md5)("\013" * 16)("Hi There")]], - [[String.hex2string("9294727a3638bb1c13f48ef8158bfc9d")]]) -test_eq([[Crypto.hmac(Crypto.md5)("Jefe")("what do ya want for nothing?")]], - [[String.hex2string("750c783e6ab0b503eaa86e310a5db738")]]) -test_eq([[Crypto.hmac(Crypto.md5)("\252" * 16)("\335" * 50)]], - [[String.hex2string("56be34521d144c88dbb8c733f0e8b3f6")]]) -]]) - -// Similar test vectors for sha; not verified with other implementations -cond_resolv(Crypto.SHA1.name, [[ -test_eq([[Crypto.hmac(Crypto.sha)("")("")]], - [[String.hex2string("fbdb1d1b18aa6c08324b7d64b71fb76370690e1d")]]) -test_eq([[Crypto.hmac(Crypto.sha)("\013" * 16)("Hi There")]], - [[String.hex2string("675b0b3a1b4ddf4e124872da6c2f632bfed957e9")]]) -test_eq([[Crypto.hmac(Crypto.sha)("Jefe")("what do ya want for nothing?")]], - [[String.hex2string("effcdf6ae5eb2fa2d27416d5f184df9c259a7c79")]]) -test_eq([[Crypto.hmac(Crypto.sha)("\252" * 16)("\335" * 50)]], - [[String.hex2string("d730594d167e35d5956fd8003d0db3d3f46dc7bb")]]) -]]) - -// CRYPT_MD5 -cond_resolv(Crypto.crypt_md5, [[ -test_true([[Crypto.crypt_md5("")]]) -test_eq([[Crypto.crypt_md5("","")]], - [["$1$$qRPK7m23GJusamGpoGLby/"]]) -test_eq([[Crypto.crypt_md5("","$xyz")]], - [["$1$$qRPK7m23GJusamGpoGLby/"]]) -test_eq([[Crypto.crypt_md5("Hello","sl5hO7j4")]], - [["$1$sl5hO7j4$glLmY.ttmi1hWK8ucIrig."]]) -test_eq([[Crypto.crypt_md5("Hello","$1$sl5hO7j4$glLmY.ttmi1hWK8ucIrig.")]], - [["$1$sl5hO7j4$glLmY.ttmi1hWK8ucIrig."]]) -test_eq([[Crypto.crypt_md5("Hellx","$1$sl5hO7j4$glLmY.ttmi1hWK8ucIrig.")]], - [["$1$sl5hO7j4$3cyvb8g68rK8.kH9Eayvk."]]) -]]) - -// ->name -test_eq(Crypto.invert()->name(),"INVERT") -cond_resolv(Crypto.DES.name, [[ -test_eq(Crypto.des()->name(),"DES") -test_eq(Crypto.rijndael()->name(),"RIJNDAEL") -test_eq(Crypto.aes()->name(),"AES") -]]) -cond_resolv(Crypto.IDEA.name, [[ -test_eq(Crypto.idea()->name(),"IDEA") -]]) -cond_resolv(Crypto.CAST.name, [[ -test_eq(Crypto.cast()->name(),"CAST") -test_eq(Crypto.arcfour()->name(),"ARCFOUR") -test_eq(Crypto.md5()->name(),"MD5") -cond_resolv(Crypto.MD4.name, [[ -test_eq(Crypto.md4()->name(),"MD4") -]]) -cond_resolv(Crypto.MD2.name, [[ -test_eq(Crypto.md2()->name(),"MD2") -]]) -test_eq(Crypto.sha()->name(),"SHA") -]]) - -// ->query_key_length -test_eq(Crypto.invert()->query_key_length(),0) -cond_resolv(Crypto.DES.name, [[ -test_eq(Crypto.des()->query_key_length(),8) -test_eq(Crypto.aes()->query_key_length(),32) -]]) -cond_resolv(Crypto.IDEA.name, [[ -test_eq(Crypto.idea()->query_key_length(),16) -]]) -cond_resolv(Crypto.CAST.name, [[ -test_eq(Crypto.cast()->query_key_length(),16) -test_eq(Crypto.arcfour()->query_key_length(),1) -]]) - -// ->query_block_size -test_eq(Crypto.invert()->query_block_size(),8) -cond_resolv(Crypto.DES.name, [[ -test_eq(Crypto.des()->query_block_size(),8) -test_eq(Crypto.aes()->query_block_size(),16) -]]) -cond_resolv(Crypto.IDEA.name, [[ -test_eq(Crypto.idea()->query_block_size(),8) -]]) -cond_resolv(Crypto.CAST.name, [[ -test_eq(Crypto.cast()->query_block_size(),8) -test_eq(Crypto.arcfour()->query_block_size,0) -]]) - -// pipe -cond_resolv(Crypto.IDEA.name, [[ -test_eq( Crypto.pipe( Crypto.des(), Crypto.aes(), Crypto.idea(), - Crypto.cast(), Crypto.arcfour() )->name(), - "PIPE(DES, AES, IDEA, CAST, ARCFOUR)") -test_equal( Crypto.pipe( Crypto.des(), Crypto.aes(), Crypto.idea(), - Crypto.cast(), Crypto.arcfour() )->query_key_length(), - ({ 0, 0, 0, 0, 0 }) ) -test_eq( Crypto.pipe( Crypto.des(), Crypto.aes(), Crypto.idea(), - Crypto.cast(), Crypto.arcfour() )->query_block_size(), 16) -test_eq( Crypto.pipe( Crypto.des(), Crypto.idea(), Crypto.cast(), - Crypto.arcfour() )->query_block_size(), 8) -test_eq( Crypto.pipe( Crypto.des(), Crypto.aes(), Crypto.idea(), - Crypto.cast() )-> - set_encrypt_key( Crypto.des_parity("A"*8), "B"*32, "C"*16, - "D"*16 )->crypt_block("F"*16), - String.hex2string("fc222f3584addf1a5f974e104a3e2231") ) -test_eq( Crypto.pipe( Crypto.des(), Crypto.aes(), Crypto.idea(), - Crypto.cast() )-> - set_decrypt_key( Crypto.des_parity("A"*8), "B"*32, "C"*16, - "D"*16 )-> - crypt_block(String.hex2string("fc222f3584addf1a5f974e104a3e2231")), - "F"*16 ) -]]) - -// Rijndael CBC decrypt -cond_resolv(Crypto.AES.name, [[ -test_any([[ object aes_cbc = Crypto.cbc(Crypto.aes()); - aes_cbc->set_decrypt_key(String.hex2string("00000000000000000000000000000000")); - aes_cbc->set_iv(String.hex2string("00000000000000000000000000000000")); - string ct = String.hex2string("00000000000000000000000000000000"); - for(int i = 0; i < 10000; i++) { - ct = aes_cbc->crypt_block(ct); - } - return String.string2hex(ct); -]], [[ "faca37e0b0c85373df706e73f7c9af86" ]]) -]]) - -test_do( add_constant("C", Crypto.substitution()) ) - -dnl ROT -test_do( C->set_rot_key() ) -test_eq( C->encode("Pelle"), "Cryyr" ) -test_eq( C->decode("Cryyr"), "Pelle" ) -dnl --- Jay Kominek ROT13 conformance test -test_eq( C->encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),"NOPQRSTUVWXYZABCDEFGHIJKLM" ) -test_eq( C->encode("abcdefghijklmnopqrstuvwxyz"),"nopqrstuvwxyzabcdefghijklm" ) -test_eq( C->encode("0123456789-= "), "0123456789-= " ) -test_eq( C->encode("!@#$%^&*()_+"), "!@#$%^&*()_+" ) -test_eq( C->encode("[]{};':\",./<>?"),[[ "[]{};':\",./<>?" ]]) -dnl --- End of Jay Kominek ROT 13 conformance test -test_do( C->set_rot_key(2) ) -test_eq( C->encode("Pelle"), "Rgnng" ) -test_eq( C->decode("Rgnng"), "Pelle" ) -test_do( C->set_rot_key(3, "ABCabc���"/1) ) -test_eq( C->encode("Abbas"), "a���s" ) -test_eq( C->decode("a���s"), "Abbas" ) -test_do( C->set_null_chars(0.2, "xyz"/1) ) -test_eq( C->decode(C->encode("A"*100)), "A"*100 ) - -test_do( add_constant("C") ) - -END_MARKER diff --git a/lib/7.4/modules/Locale.pmod/Charset.pmod b/lib/7.4/modules/Locale.pmod/Charset.pmod deleted file mode 100644 index f9099a20ed0241fe085408e8dc597dd93d3eef00..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Locale.pmod/Charset.pmod +++ /dev/null @@ -1,28 +0,0 @@ -#pike 7.6 - -inherit Locale.Charset; - -//! This class does not exist in the Locale module in Pike 7.6. -//! @deprecated ASCIIDec -class ascii { - protected private string s = ""; - object(this_program) feed(string ss) - { - s += ss; - return this_object(); - } - string drain() - { - string ss = s; - s = ""; - return ss; - } - object(this_program) clear() - { - s = ""; - return this_object(); - } -} - -//! @deprecated Encoder -constant _encoder = Encoder; diff --git a/lib/7.4/modules/Protocols.pmod/SMTP.pmod b/lib/7.4/modules/Protocols.pmod/SMTP.pmod deleted file mode 100644 index 31dac8b334c408313bb40bfe658a39c5872959fe..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Protocols.pmod/SMTP.pmod +++ /dev/null @@ -1,12 +0,0 @@ -#pike 7.5 - -//! @deprecated Protocol -class protocol { - inherit Protocols.SMTP.Protocol; -} - -//! @deprecated Client -class client { - inherit Protocols.SMTP.Client; - mapping(int:string) reply_codes = Protocols.SMTP.replycodes; -} diff --git a/lib/7.4/modules/Regexp.pmod b/lib/7.4/modules/Regexp.pmod deleted file mode 100644 index 6207268b2792d3d90efed869980d2028a955573b..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Regexp.pmod +++ /dev/null @@ -1,15 +0,0 @@ - -#pike 7.5 - -class Regexp -{ - inherit global.Regexp.SimpleRegexp; - -#if constant (_Regexp_PCRE._pcre) - // A bit ugly way to provide access to Regexp.PCRE, but it's less - // intrusive than the method used in later versions. - constant PCRE = _Regexp_PCRE; -#endif -} - -constant _module_value = Regexp; diff --git a/lib/7.4/modules/SSL.pmod/cipher.pike b/lib/7.4/modules/SSL.pmod/cipher.pike deleted file mode 100644 index 14b99c370ca92346de64082c3e3ac0e844f17033..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/SSL.pmod/cipher.pike +++ /dev/null @@ -1,435 +0,0 @@ -#pike 7.4 - -#pragma dont_save_parent -// Override if someone set __pragma_save_parent__ globally. Other code -// assumes the constants can be indexed out of this class directly. It -// should probably be a pmod instead. /mast - -//! Encryption and MAC algorithms used in SSL. -//! @deprecated SSL.Cipher - -inherit "constants"; - -class CipherSpec { - program bulk_cipher_algorithm; - int cipher_type; - program mac_algorithm; - int is_exportable; - int hash_size; - int key_material; - int iv_size; - int key_bits; - function sign; - function verify; -} - -class mac_sha -{ - constant pad_1 = "6666666666666666666666666666666666666666"; - constant pad_2 = ("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" - "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"); - - constant algorithm = Crypto.sha; - - string secret; - - string hash_raw(string data) - { -#ifdef SSL3_DEBUG_CRYPT - werror(sprintf("SSL.cipher: hash_raw(%O)\n", data)); -#endif - - object h = algorithm(); - string res = h->update(data)->digest(); -#ifdef SSL3_DEBUG_CRYPT - werror(sprintf("SSL.cipher: hash_raw->%O\n",res)); -#endif - - return res; - } - - string hash(object packet, object seq_num) - { - string s = sprintf("%~8s%c%2c%s", - "\0\0\0\0\0\0\0\0", seq_num->digits(256), - packet->content_type, strlen(packet->fragment), - packet->fragment); -#ifdef SSL3_DEBUG_CRYPT -// werror(sprintf("SSL.cipher: hashing %O\n", s)); -#endif - return hash_raw(secret + pad_2 + - hash_raw(secret + pad_1 + s)); - } - - string hash_master(string data, string|void s) - { - s = s || secret; - return hash_raw(s + pad_2 + - hash_raw(data + s + pad_1)); - } - - void create (string|void s) - { - secret = s || ""; - } -} - -class mac_md5 { - inherit mac_sha; - - constant pad_1 = "666666666666666666666666666666666666666666666666"; - constant pad_2 = ("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" - "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"); - - constant algorithm = Crypto.md5; -} - -class mac_hmac_sha { - - string secret; - object hmac; - - string hash(object packet,object seq_num) { - - string s = sprintf("%~8s%c%c%c%2c%s", - "\0\0\0\0\0\0\0\0", seq_num->digits(256), - packet->content_type, - packet->protocol_version[0],packet->protocol_version[1], - strlen(packet->fragment), - packet->fragment); - - return hmac(secret)(s); - } - - void create(string|void s) { - secret = s || ""; - hmac=Crypto.hmac(Crypto.sha); - } -} - -class mac_hmac_md5 { - inherit mac_hmac_sha; - - void create(string|void s) { - secret = s || ""; - hmac=Crypto.hmac(Crypto.md5); - } -} - -// Hashfn is either a Crypto.md5 or Crypto.sha -protected string P_hash(object hashfn,int hlen,string secret,string seed,int len) { - - Crypto.hmac hmac=Crypto.hmac(hashfn); - string temp=seed; - string res=""; - - int noblocks=(int)ceil((1.0*len)/hlen); - - for(int i=0 ; i<noblocks ; i++) { - temp=hmac(secret)(temp); - res+=hmac(secret)(temp+seed); - } - return res[..(len-1)]; -} - -string prf(string secret,string label,string seed,int len) { - - string s1=secret[..(int)(ceil(strlen(secret)/2.0)-1)]; - string s2=secret[(int)(floor(strlen(secret)/2.0))..]; - - string a=P_hash(Crypto.md5,16,s1,label+seed,len); - string b=P_hash(Crypto.sha,20,s2,label+seed,len); - - return a ^ b; -} - - -class des -{ - inherit Crypto.des_cbc : c; - - object set_encrypt_key(string k) - { - c::set_encrypt_key(Crypto.des_parity(k)); - return this_object(); - } - - object set_decrypt_key(string k) - { - c::set_decrypt_key(Crypto.des_parity(k)); - return this_object(); - } -} - -class des3 -{ - inherit Crypto.des3_cbc : c; - - object set_encrypt_key(string k) - { - c::set_encrypt_key(Crypto.des_parity(k)); - return this_object(); - } - - object set_decrypt_key(string k) - { - c::set_decrypt_key(Crypto.des_parity(k)); - return this_object(); - } -} - -object rsa_sign(object context, string cookie, object struct) -{ - /* Exactly how is the signature process defined? */ - - string params = cookie + struct->contents(); - string digest = Crypto.md5()->update(params)->digest() - + Crypto.sha()->update(params)->digest(); - - object s = context->rsa->raw_sign(digest); -#ifdef SSL3_DEBUG_CRYPT - werror(sprintf(" Digest: '%O'\n" - " Signature: '%O'\n", - digest, s->digits(256))); -#endif - - struct->put_bignum(s); - return struct; -} - -int rsa_verify(object context, string cookie, object struct, - object(Gmp.mpz) signature) -{ - /* Exactly how is the signature process defined? */ - - string params = cookie + struct->contents(); - string digest = Crypto.md5()->update(params)->digest() - + Crypto.sha()->update(params)->digest(); - - return context->rsa->raw_verify(digest, signature); -} - -object dsa_sign(object context, string cookie, object struct) -{ - /* NOTE: The details are not described in the SSL 3 spec. */ - string s = context->dsa->sign_ssl(cookie + struct->contents()); - struct->put_var_string(s, 2); - return struct; -} - -object anon_sign(object context, string cookie, object struct) -{ - return struct; -} - -class dh_parameters -{ - object p, g, order; - - /* Default prime and generator, taken from the ssh2 spec: - * - * "This group was taken from the ISAKMP/Oakley specification, and was - * originally generated by Richard Schroeppel at the University of Arizona. - * Properties of this prime are described in [Orm96]. - *... - * [Orm96] Orman, H., "The Oakley Key Determination Protocol", version 1, - * TR97-92, Department of Computer Science Technical Report, University of - * Arizona." - */ - - /* p = 2^1024 - 2^960 - 1 + 2^64 * floor( 2^894 Pi + 129093 ) */ - - object orm96() - { - p = Gmp.mpz("FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" - "29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" - "EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" - "E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" - "EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381" - "FFFFFFFF FFFFFFFF", 16); - order = (p-1) / 2; - - g = Gmp.mpz(2); - - return this_object(); - } - - void create(object ... args) - { - switch (sizeof(args)) - { - case 0: - orm96(); - break; - case 3: - p = args[0]; g = args[1]; order = args[2]; - break; - default: - error( "SSL.cipher.dh_parameters->create: " - "Wrong number of arguments.\n" ); - } - } -} - -class dh_key_exchange -{ - /* Public parameters */ - object parameters; - - object our; /* Our value */ - object other; /* Other party's value */ - object secret; /* our = g ^ secret mod p */ - - void create(object p) - { - parameters = p; - } - - object new_secret(function random) - { - secret = Gmp.mpz(random( (parameters->order->size() + 10 / 8)), 256) - % (parameters->order - 1) + 1; - - our = parameters->g->powm(secret, parameters->p); - return this_object(); - } - - object set_other(object o) - { - other = o; - return this_object(); - } - - object get_shared() - { - return other->powm(secret, parameters->p); - } -} - -/* Return array of auth_method, cipher_spec */ -array lookup(int suite,int version) -{ - object res = CipherSpec(); - int ke_method; - - array algorithms = CIPHER_SUITES[suite]; - if (!algorithms) - return 0; - - ke_method = algorithms[0]; - - switch(ke_method) - { - case KE_rsa: - case KE_dhe_rsa: - res->sign = rsa_sign; - res->verify = rsa_verify; - break; - case KE_dhe_dss: - res->sign = dsa_sign; - break; - case KE_dh_anon: - res->sign = anon_sign; - break; - default: - error( "SSL.cipher.pike: Internal error.\n" ); - } - - switch(algorithms[1]) - { - case CIPHER_rc4_40: -#if constant(Crypto.arcfour) - res->bulk_cipher_algorithm = Crypto.arcfour; -#else /* !constant(Crypto.arcfour) */ - res->bulk_cipher_algorithm = Crypto.rc4; -#endif /* constant(Crypto.arcfour) */ - res->cipher_type = CIPHER_stream; - res->is_exportable = 1; - res->key_material = 16; - res->iv_size = 0; - res->key_bits = 40; - break; - case CIPHER_des40: - res->bulk_cipher_algorithm = des; - res->cipher_type = CIPHER_block; - res->is_exportable = 1; - res->key_material = 8; - res->iv_size = 8; - res->key_bits = 40; - break; - case CIPHER_null: - res->bulk_cipher_algorithm = 0; - res->cipher_type = CIPHER_stream; - res->is_exportable = 1; - res->key_material = 0; - res->iv_size = 0; - res->key_bits = 0; - break; -#ifndef WEAK_CRYPTO_40BIT - case CIPHER_rc4: -#if constant(Crypto.arcfour) - res->bulk_cipher_algorithm = Crypto.arcfour; -#else /* !constant(Crypto.arcfour) */ - res->bulk_cipher_algorithm = Crypto.rc4; -#endif /* constant(Crypto.arcfour) */ - res->cipher_type = CIPHER_stream; - res->is_exportable = 0; - res->key_material = 16; - res->iv_size = 0; - res->key_bits = 128; - break; - case CIPHER_des: - res->bulk_cipher_algorithm = des; - res->cipher_type = CIPHER_block; - res->is_exportable = 0; - res->key_material = 8; - res->iv_size = 8; - res->key_bits = 56; - break; - case CIPHER_3des: - res->bulk_cipher_algorithm = des3; - res->cipher_type = CIPHER_block; - res->is_exportable = 0; - res->key_material = 24; - res->iv_size = 8; - res->key_bits = 168; - break; - case CIPHER_idea: - res->bulk_cipher_algorithm = Crypto.idea_cbc; - res->cipher_type = CIPHER_block; - res->is_exportable = 0; - res->key_material = 16; - res->iv_size = 8; - res->key_bits = 128; - break; -#endif /* !WEAK_CRYPTO_40BIT (magic comment) */ - default: - return 0; - } - - switch(algorithms[2]) - { - case HASH_sha: - if(version==1) - res->mac_algorithm = mac_hmac_sha; - else - res->mac_algorithm = mac_sha; - res->hash_size = 20; - break; - case HASH_md5: - if(version==1) - res->mac_algorithm = mac_hmac_md5; - else - res->mac_algorithm = mac_md5; - res->hash_size = 16; - break; - case 0: - res->mac_algorithm = 0; - res->hash_size = 0; - break; - default: - return 0; - } - - return ({ ke_method, res }); -} diff --git a/lib/7.4/modules/SSL.pmod/constants.pike b/lib/7.4/modules/SSL.pmod/constants.pike deleted file mode 100644 index 22caf61e2ec96deb42aeb5e0405889e47440419c..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/SSL.pmod/constants.pike +++ /dev/null @@ -1,174 +0,0 @@ -#pike __REAL_VERSION__ - -//! Protocol constants -//! @deprecated SSL.Constants - -/* Packet types */ -constant PACKET_change_cipher_spec = 20; -constant PACKET_alert = 21; -constant PACKET_handshake = 22; -constant PACKET_application_data = 23; -constant PACKET_types = (< PACKET_change_cipher_spec, - PACKET_alert, - PACKET_handshake, - PACKET_application_data >); -constant PACKET_V2 = -1; /* Backwards compatibility */ - -constant PACKET_MAX_SIZE = 0x4000; - -/* Cipher specification */ -constant CIPHER_stream = 0; -constant CIPHER_block = 1; -constant CIPHER_types = (< CIPHER_stream, CIPHER_block >); - -constant CIPHER_null = 0; -constant CIPHER_rc4_40 = 2; -constant CIPHER_rc2 = 3; -constant CIPHER_des40 = 6; -#ifndef WEAK_CRYPTO_40BIT -constant CIPHER_rc4 = 1; -constant CIPHER_des = 4; -constant CIPHER_3des = 5; -constant CIPHER_fortezza = 7; -constant CIPHER_idea = 8; -#endif /* !WEAK_CRYPTO_40BIT (magic comment) */ -constant CIPHER_algorithms = (< CIPHER_null, - CIPHER_rc4_40, - CIPHER_rc2, - CIPHER_des40, -#ifndef WEAK_CRYPTO_40BIT - CIPHER_rc4, - CIPHER_des, - CIPHER_3des, - CIPHER_fortezza, - CIPHER_idea, -#endif /* !WEAK_CRYPTO_40BIT (magic comment) */ - >); - -constant HASH_md5 = 1; -constant HASH_sha = 2; -constant HASH_hashes = (< HASH_md5, HASH_sha >); - -/* Key exchange */ -constant KE_rsa = 1; -/* We ignore the distinction between dh_dss and dh_rsa for now. */ -constant KE_dh = 2; -constant KE_dhe_dss = 3; -constant KE_dhe_rsa = 4; -constant KE_dh_anon = 5; -constant KE_dms = 6; - -/* Compression methods */ -constant COMPRESSION_null = 0; - -/* Alert messages */ -constant ALERT_warning = 1; -constant ALERT_fatal = 2; -constant ALERT_levels = (< ALERT_warning, ALERT_fatal >); - -constant ALERT_close_notify = 0; -constant ALERT_unexpected_message = 10; -constant ALERT_bad_record_mac = 20; -constant ALERT_decompression_failure = 30; -constant ALERT_handshake_failure = 40; -constant ALERT_no_certificate = 41; -constant ALERT_bad_certificate = 42; -constant ALERT_unsupported_certificate = 43; -constant ALERT_certificate_revoked = 44; -constant ALERT_certificate_expired = 45; -constant ALERT_certificate_unknown = 46; -constant ALERT_illegal_parameter = 47; -constant ALERT_descriptions = (< ALERT_close_notify, - ALERT_unexpected_message, - ALERT_bad_record_mac, - ALERT_decompression_failure, - ALERT_handshake_failure, - ALERT_no_certificate, - ALERT_bad_certificate, - ALERT_unsupported_certificate, - ALERT_certificate_revoked, - ALERT_certificate_expired, - ALERT_certificate_unknown, - ALERT_illegal_parameter >); - -constant CONNECTION_client = 0; -constant CONNECTION_server = 1; -constant CONNECTION_client_auth = 2; - -/* Cipher suites */ -constant SSL_null_with_null_null = 0x0000; -constant SSL_rsa_with_null_md5 = 0x0001; -constant SSL_rsa_with_null_sha = 0x0002; -constant SSL_rsa_export_with_rc4_40_md5 = 0x0003; -constant SSL_rsa_export_with_rc2_cbc_40_md5 = 0x0006; -constant SSL_rsa_export_with_des40_cbc_sha = 0x0008; -constant SSL_dh_dss_export_with_des40_cbc_sha = 0x000b; -constant SSL_dh_rsa_export_with_des40_cbc_sha = 0x000e; -constant SSL_dhe_dss_export_with_des40_cbc_sha = 0x0011; -constant SSL_dhe_rsa_export_with_des40_cbc_sha = 0x0014; -constant SSL_dh_anon_export_with_rc4_40_md5 = 0x0017; -constant SSL_dh_anon_export_with_des40_cbc_sha = 0x0019; -#ifndef WEAK_CRYPTO_40BIT -constant SSL_rsa_with_rc4_128_md5 = 0x0004; -constant SSL_rsa_with_rc4_128_sha = 0x0005; -constant SSL_rsa_with_idea_cbc_sha = 0x0007; -constant SSL_rsa_with_des_cbc_sha = 0x0009; -constant SSL_rsa_with_3des_ede_cbc_sha = 0x000a; -constant SSL_dh_dss_with_des_cbc_sha = 0x000c; -constant SSL_dh_dss_with_3des_ede_cbc_sha = 0x000d; -constant SSL_dh_rsa_with_des_cbc_sha = 0x000f; -constant SSL_dh_rsa_with_3des_ede_cbc_sha = 0x0010; -constant SSL_dhe_dss_with_des_cbc_sha = 0x0012; -constant SSL_dhe_dss_with_3des_ede_cbc_sha = 0x0013; -constant SSL_dhe_rsa_with_des_cbc_sha = 0x0015; -constant SSL_dhe_rsa_with_3des_ede_cbc_sha = 0x0016; -constant SSL_dh_anon_with_rc4_128_md5 = 0x0018; -constant SSL_dh_anon_with_des_cbc_sha = 0x001a; -constant SSL_dh_anon_with_3des_ede_cbc_sha = 0x001b; -constant SSL_fortezza_dms_with_null_sha = 0x001c; -constant SSL_fortezza_dms_with_fortezza_cbc_sha = 0x001d; -constant SSL_fortezza_dms_with_rc4_128_sha = 0x001e; -#endif /* !WEAK_CRYPTO_40BIT (magic comment) */ - -constant CIPHER_SUITES = -([ SSL_null_with_null_null : ({ 0, 0, 0 }), - SSL_rsa_with_null_md5 : ({ KE_rsa, 0, HASH_md5 }), - SSL_rsa_with_null_sha : ({ KE_rsa, 0, HASH_sha }), - SSL_rsa_export_with_rc4_40_md5 : ({ KE_rsa, CIPHER_rc4_40, HASH_md5 }), - SSL_dhe_dss_export_with_des40_cbc_sha : - ({ KE_dhe_dss, CIPHER_des40, HASH_sha }), -#ifndef WEAK_CRYPTO_40BIT - SSL_rsa_with_rc4_128_sha : ({ KE_rsa, CIPHER_rc4, HASH_sha }), - SSL_rsa_with_rc4_128_md5 : ({ KE_rsa, CIPHER_rc4, HASH_md5 }), - SSL_rsa_with_idea_cbc_sha : ({ KE_rsa, CIPHER_idea, HASH_sha }), - SSL_rsa_with_des_cbc_sha : ({ KE_rsa, CIPHER_des, HASH_sha }), - SSL_rsa_with_3des_ede_cbc_sha : ({ KE_rsa, CIPHER_3des, HASH_sha }), - SSL_dhe_dss_with_des_cbc_sha : ({ KE_dhe_dss, CIPHER_des, HASH_sha }), - SSL_dhe_dss_with_3des_ede_cbc_sha : ({ KE_dhe_dss, CIPHER_3des, HASH_sha }), -#endif /* !WEAK_CRYPTO_40BIT (magic comment) */ -]); - -constant HANDSHAKE_hello_v2 = -1; /* Backwards compatibility */ -constant HANDSHAKE_hello_request = 0; -constant HANDSHAKE_client_hello = 1; -constant HANDSHAKE_server_hello = 2; -constant HANDSHAKE_certificate = 11; -constant HANDSHAKE_server_key_exchange = 12; -constant HANDSHAKE_certificate_request = 13; -constant HANDSHAKE_server_hello_done = 14; -constant HANDSHAKE_certificate_verify = 15; -constant HANDSHAKE_client_key_exchange = 16; -constant HANDSHAKE_finished = 20; - -constant AUTHLEVEL_none = 1; -constant AUTHLEVEL_ask = 2; -constant AUTHLEVEL_require = 3; - -/* FIXME: CERT_* would be better names for these constants */ -constant AUTH_rsa_sign = 1; -constant AUTH_dss_sign = 2; -constant AUTH_rsa_fixed_dh = 3; -constant AUTH_dss_fixed_dh = 4; -constant AUTH_rsa_ephemeral_dh = 5; -constant AUTH_dss_ephemeral_dh = 6; -constant AUTH_fortezza_dms = 20; diff --git a/lib/7.4/modules/SSL.pmod/sslfile.pike b/lib/7.4/modules/SSL.pmod/sslfile.pike deleted file mode 100644 index 66117074c8e8fa53496c954200bcc051ea87c064..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/SSL.pmod/sslfile.pike +++ /dev/null @@ -1,676 +0,0 @@ -#pike 7.5 - -//! Interface similar to Stdio.File. - -inherit "cipher"; -inherit SSL.connection : connection; - -#ifdef SSL3_DEBUG_TRANSPORT -#define SSL3_DEBUG -#endif /* SSL3_DEBUG_TRANSPORT */ - -#ifdef SSL3_DEBUG -#define SSL3_DEBUG_MSG werror -#else /*! SSL3_DEBUG */ -#define SSL3_DEBUG_MSG -#endif /* SSL3_DEBUG */ -object(Stdio.File) socket; - -int _fd; - -#ifdef THREAD_DEBUG - -protected Thread.Thread cur_thread; - -protected class MyLock -{ - Thread.Thread old_cur_thread; - protected void create (Thread.Thread t) {old_cur_thread = t;} - protected void destroy() {cur_thread = old_cur_thread;} -}; - -#define THREAD_CHECK \ - MyLock lock; \ - { \ - Thread.Thread this_thr = this_thread(); \ - Thread.Thread old_cur_thread = cur_thread; \ - /* Relying on interpreter lock here. */ \ - cur_thread = this_thr; \ - if (old_cur_thread && old_cur_thread != cur_thread) \ - error ("Already called by another thread %O (this is %O):\n" \ - "%s----------\n", \ - old_cur_thread, cur_thread, \ - describe_backtrace (old_cur_thread->backtrace())); \ - lock = MyLock (old_cur_thread); \ - } -#define THREAD_UNLOCK destruct (lock) - -#else // !THREAD_DEBUG - -#define THREAD_CHECK -#define THREAD_UNLOCK - -#endif - -protected string read_buffer; /* Data that is received before there is any - * read_callback - * Data is also buffered here if a blocking read from HLP - * doesnt want to read a full packet of data.*/ -string write_buffer; /* Data to be written */ -function(mixed,string:void) read_callback; -function(mixed:void) write_callback; -function(mixed:void) close_callback; -function(mixed:void) accept_callback; - -int connected; /* 1 if the connect callback has been called */ -int blocking; /* 1 if in blocking mode. - * So far, there's no true blocking i/o, read and write - * requests are just queued up. */ -int is_closed; - -int query_fd() -{ - return -1; -} - -private void ssl_write_callback(mixed id); - -#define CALLBACK_MODE \ - (read_callback || write_callback || close_callback || accept_callback) - -void die(int status) -{ -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslfile->die: is_closed = %d\n", is_closed)); -#endif - THREAD_CHECK; - if (status < 0) - { - /* Other end closed without sending a close_notify alert */ - context->purge_session(this_object()); -#ifdef SSL3_DEBUG - werror("SSL.sslfile: Killed\n"); -#endif - } - is_closed = 1; - if (socket) - { - mixed id; - mixed err = catch(id = socket->query_id()); -#ifdef DEBUG - if (err) master()->handle_error (err); -#endif - //werror ("%d %O %d closing socket %O\n", id, this_thread(), __LINE__, socket); - err = catch(socket->close()); -#ifdef DEBUG - if (err) master()->handle_error (err); -#endif - socket = 0; - // Avoid recursive calls if the close callback closes the socket. - if (close_callback) { - function(mixed:void) f = close_callback; - close_callback = 0; - THREAD_UNLOCK; - f (id); - } - } -} - -/* Return 0 if the connection is still alive, - * 1 if it was closed politely, and -1 if it died unexpectedly - */ -private int queue_write() -{ - int|string data = to_write(); -#ifdef SSL3_DEBUG_TRANSPORT - werror(sprintf("SSL.sslfile->queue_write: '%O'\n", data)); -#else -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslfile->queue_write: '%O'\n", stringp(data)?(string)sizeof(data):data)); -#endif -#endif - if (stringp(data)) - write_buffer += data; -#ifdef SSL3_DEBUG_TRANSPORT - werror(sprintf("SSL.sslfile->queue_write: buffer = '%O'\n", write_buffer)); -#else -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslfile->queue_write: buffer = %O\n", sizeof(write_buffer))); -#endif -#endif - - if(sizeof(write_buffer) && CALLBACK_MODE) { - if (mixed err = catch { - socket->set_write_callback(ssl_write_callback); - }) { -#ifdef DEBUG - master()->handle_error (err); -#endif - return(0); - } - } -#ifdef SSL3_DEBUG - werror("SSL.sslfile->queue_write: end\n"); -#endif - return stringp(data) ? 0 : data; -} - -void close() -{ -#ifdef SSL3_DEBUG - werror("SSL.sslfile->close\n"); -#endif - THREAD_CHECK; - - if (is_closed || !socket) return; - is_closed = 1; - - send_close(); - queue_write(); - read_callback = 0; - write_callback = 0; - close_callback = 0; - - if (socket) { - if (sizeof (write_buffer) && !blocking) { - ssl_write_callback(socket->query_id()); - } - if(sizeof(write_buffer) && blocking) { - write_blocking(); - } - - if (!blocking) - { - // FIXME: Timeout? - return; - } - - if (socket) { - //werror ("%d %O %d closing socket %O\n", id, this_thread(), __LINE__, socket); - socket->close(); - } - } - socket = 0; -} - - -string|int read(string|int ...args) { - -#ifdef SSL3_DEBUG - werror(sprintf("sslfile.read called!, with args: %O \n",args)); -#endif - THREAD_CHECK; - - int nbytes; - int notall; - switch(sizeof(args)) { - case 0: - { - string res=""; - string data=got_data(read_blocking_packet()); - - while(stringp(data)) { - res+=data; - data=got_data(read_blocking_packet()); - } - die(1); - return read_buffer+res; - } - case 1: - { - nbytes=args[0]; - notall=0; - break; - } - case 2: - { - nbytes=args[0]; - notall=args[1]; - break; - } - - default: - - error( "SSL.sslfile->read: Wrong number of arguments\n" ); - } - - string res=""; - int leftToRead=nbytes; - - if(strlen(read_buffer)) { - if(leftToRead<=strlen(read_buffer)) { - res=read_buffer[..leftToRead-1]; - read_buffer=read_buffer[leftToRead..]; - return res; - } else { - res=read_buffer; - leftToRead-=strlen(read_buffer); - if(notall) { - return res; - } - } - } - - string|int data=got_data(read_blocking_packet()); - if(!stringp(data)) { - return ""; //EOF or ssl-fatal error occurred. - } - - while(stringp(data)) { - res+=data; - leftToRead-=strlen(data); - if(leftToRead<=0) break; - if(notall) return res; - data=got_data(read_blocking_packet()); - } - - if(leftToRead<0) { - read_buffer=data[strlen(data)+leftToRead..]; - return res[0..args[0]-1]; - } else { - read_buffer=""; - } - - if(!stringp(data)) { - die(1); - } - - return res; -} - - -int write(string|array(string) s) -{ -#ifdef SSL3_DEBUG - werror("SSL.sslfile->write\n"); -#endif - THREAD_CHECK; - - if (is_closed || !socket) return -1; - - if (arrayp(s)) { - s = s*""; - } - - int call_write = !sizeof (write_buffer); - int len = strlen(s); - object packet; - while(strlen(s)) - { - packet = Packet(); - packet->content_type = PACKET_application_data; - packet->fragment = s[..PACKET_MAX_SIZE-1]; - send_packet(packet); - s = s[PACKET_MAX_SIZE..]; - } - - if (blocking) - write_blocking(); - else { - if (call_write && socket) - ssl_write_callback(socket->query_id()); - } - return len; -} - - -void get_blocking_to_handshake_finished_state() { - - while(socket && !handshake_finished) { - write_blocking(); - string|int s=got_data(read_blocking_packet()); - if(s==1||s==-1) break; - } -} - -// Reads a single record layer packet. -private int|string read_blocking_packet() { - - if (!socket) return -1; - - string header=socket->read(5); - if(!stringp(header)) { - return -1; - } - - if(strlen(header)!=5) { - return 1; - } - - int compressedLen=header[3]*256+header[4]; - return header+socket->read(compressedLen); -} - - -// Writes out everything that is enqued for writing. -private void write_blocking() { - - int res = queue_write(); - - while(strlen(write_buffer) && socket) { - - //werror ("%d %O write_blocking write beg %O\n", id, this_thread(), socket); - int written = socket->write(write_buffer); - //werror ("%d %O write_blocking write end %O\n", id, this_thread(), socket); - if (written > 0) { - write_buffer = write_buffer[written ..]; - } else { - if (written < 0) { - die(-1); - return; - } - } - res=queue_write(); - } -} - - - -private void ssl_read_callback(mixed id, string s) -{ -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslfile->ssl_read_callback, connected=%d, handshake_finished=%d\n", connected, handshake_finished)); -#endif - THREAD_CHECK; - string|int data = got_data(s); - if (socket) { - int res = queue_write(); - if (res) { - die(res); - return; - } - } - if (stringp(data)) - { -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslfile->ssl_read_callback: application_data: '%O'\n", data)); -#endif - read_buffer += data; - if (!connected && handshake_finished) - { - connected = 1; - if (accept_callback) { - THREAD_UNLOCK; - accept_callback(this_object()); - } - } - - if (!blocking && read_callback && strlen(read_buffer)) - { - string received = read_buffer; - read_buffer = ""; - THREAD_UNLOCK; - read_callback(id, received); - } - } else { - if (data > 0) - { - if (close_callback) { - function f = close_callback; - close_callback = 0; - THREAD_UNLOCK; - f(socket->query_id()); - } - } - else - if (data < 0) - { - /* Fatal error, remove from session cache */ - if (this_object()) { - die(-1); - } - return; - } - } -} - -private void ssl_write_callback(mixed id) -{ -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslfile->ssl_write_callback: handshake_finished = %d\n" - "blocking = %d, write_callback = %O\n", - handshake_finished, blocking, write_callback)); -#endif - THREAD_CHECK; - - if (strlen(write_buffer)) - { - //werror ("%d %O ssl_write_callback write beg %O\n", id, this_thread(), socket); - int written = socket->write(write_buffer); - //werror ("%d %O ssl_write_callback write end %O\n", id, this_thread(), socket); - if (written > 0) - { - write_buffer = write_buffer[written ..]; - } else { - if (written < 0) -#ifdef __NT__ - // You don't want to know.. (Bug observed in Pike 0.6.132.) - if (socket->errno() != 1) -#endif - { - die(-1); - return; - } - } - if (strlen(write_buffer)) - return; - } - - if (!this_object()) { - // We've been destructed. - return; - } - int res = queue_write(); -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslport->ssl_write_callback: res = '%O'\n", res)); -#endif - - if (strlen(write_buffer)) - return; - - if (socket) - { - socket->set_write_callback(0); - if (is_closed) - { - //werror ("%d %O %d closing socket %O\n", id, this_thread(), __LINE__, socket); - socket->close(); - socket = 0; - return; - } - } - if (res) { - die(res); - return; - } - - if (connected && !blocking && write_callback && handshake_finished) - { -#ifdef SSL3_DEBUG - werror("SSL.sslport->ssl_write_callback: Calling write_callback\n"); -#endif - THREAD_UNLOCK; - write_callback(id); - } -} - -private void ssl_close_callback(mixed id) -{ -#ifdef SSL3_DEBUG - werror("SSL.sslport: ssl_close_callback\n"); -#endif - THREAD_CHECK; - if (close_callback && socket) { - function f = close_callback; - close_callback = 0; - THREAD_UNLOCK; - f(socket->query_id()); - } - if (this_object()) { - die(closing ? 1 : -1); - } -} - -protected void update_callbacks() -{ - if (CALLBACK_MODE) { - socket->set_read_callback (ssl_read_callback); - socket->set_write_callback ((write_callback || sizeof (write_buffer)) && - ssl_write_callback); - socket->set_close_callback (ssl_close_callback); - } - else { - socket->set_read_callback (0); - socket->set_write_callback (0); - socket->set_close_callback (0); - } -} - -void set_accept_callback(function(mixed:void) a) -{ -#ifdef SSL3_DEBUG - werror("SSL.sslport: set_accept_callback\n"); -#endif - THREAD_CHECK; - accept_callback = a; - if (socket) update_callbacks(); -} - -function query_accept_callback() { return accept_callback; } - -void set_read_callback(function(mixed,string:void) r) -{ -#ifdef SSL3_DEBUG - werror("SSL.sslport: set_read_callback\n"); -#endif - THREAD_CHECK; - read_callback = r; - if (socket) update_callbacks(); -} - -function query_read_callback() { return read_callback; } - -void set_write_callback(function(mixed:void) w) -{ -#ifdef SSL3_DEBUG - werror("SSL.sslfile->set_write_callback\n"); -#endif - THREAD_CHECK; - write_callback = w; - if (socket) update_callbacks(); -} - -function query_write_callback() { return write_callback; } - -void set_close_callback(function(mixed:void) c) -{ -#ifdef SSL3_DEBUG - werror("SSL.sslport: set_close_callback\n"); -#endif - THREAD_CHECK; - close_callback = c; - if (socket) update_callbacks(); -} - -function query_close_callback() { return close_callback; } - -void set_nonblocking(function ...args) -{ -#ifdef SSL3_DEBUG - werror(sprintf("SSL.sslfile->set_nonblocking(%O)\n", args)); -#endif - THREAD_CHECK; - - if (is_closed || !socket) return; - - switch (sizeof(args)) - { - case 0: - break; - case 3: - read_callback = args[0]; - write_callback = args[1]; - close_callback = args[2]; - if (!this_object()) - return; - break; - default: - error( "SSL.sslfile->set_nonblocking: Wrong number of arguments\n" ); - } - blocking = 0; - if (is_closed || !socket) return; - if (CALLBACK_MODE) { - THREAD_UNLOCK; - socket->set_nonblocking(ssl_read_callback,ssl_write_callback, - ssl_close_callback); - } - else { - THREAD_UNLOCK; - socket->set_nonblocking(); - } -} - -void set_blocking() -{ -#ifdef SSL3_DEBUG - werror("SSL.sslfile->set_blocking\n"); -#endif - THREAD_CHECK; - blocking = 1; - - if( !socket ) - return; - socket->set_blocking(); - if ( sizeof (write_buffer) ) - ssl_write_callback(socket->query_id()); - get_blocking_to_handshake_finished_state(); -} - -string query_address(int|void arg) -{ - return socket->query_address(arg); -} - -int errno() -{ - // FIXME: The errno returned here might not be among the expected - // types if we emulate blocking. - return socket ? socket->errno() : System.EBADF; -} - -void create(object f, object c, int|void is_client, int|void is_blocking) -{ -#ifdef SSL3_DEBUG - werror("SSL.sslfile->create\n"); -#endif - THREAD_CHECK; - _fd=f->_fd; - read_buffer = write_buffer = ""; - socket = f; - connection::create(!is_client, c); - blocking=is_blocking; - if(blocking) { - socket->set_blocking(); - get_blocking_to_handshake_finished_state(); - } else { - THREAD_UNLOCK; - socket->set_nonblocking(ssl_read_callback, - ssl_write_callback, - ssl_close_callback); - } -} - -string _sprintf(int t) { - return t=='O' && sprintf("%O(%O,%O)", this_program, _fd, context); -} - -void renegotiate() -{ - THREAD_CHECK; - expect_change_cipher = certificate_state = 0; - if (!socket) return; - send_packet(hello_request()); - if (CALLBACK_MODE) socket->set_write_callback(ssl_write_callback); - handshake_finished = 0; - connected = 0; -} diff --git a/lib/7.4/modules/Sql.pmod/sql.pike b/lib/7.4/modules/Sql.pmod/sql.pike deleted file mode 100644 index 56005c537b0fdff32e2501284b17b725becedfc0..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Sql.pmod/sql.pike +++ /dev/null @@ -1,5 +0,0 @@ -#pike 7.5 - -//! @deprecated Sql.Sql - -inherit Sql.Sql; diff --git a/lib/7.4/modules/Standards.pmod/ASN1.pmod/Encode.pmod b/lib/7.4/modules/Standards.pmod/ASN1.pmod/Encode.pmod deleted file mode 100644 index 2833595845c67337aa3f91b6af366ff9ee413d20..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Standards.pmod/ASN1.pmod/Encode.pmod +++ /dev/null @@ -1,265 +0,0 @@ -/* Encode.pmod - * - * Encodes various asn.1 objects according to the Distinguished - * Encoding Rules (DER) */ - -//! This module is obsolete. All code should use ASN1.Types instead. - -#pike __REAL_VERSION__ - -#if 0 -#define WERROR werror -#else -#define WERROR(x) -#endif - -class asn1_object -{ - constant cls = 0; - constant tag = 0; - constant constructed = 0; - - int get_cls() { return cls; } - int get_tag() { return tag; } - - string to_base_128(int n) - { - if (!n) - return "\0"; - /* Convert tag number to base 128 */ - array(int) digits = ({ }); - - /* Array is built in reverse order, least significant digit first */ - while(n) - { - digits += ({ (n & 0x7f) | 0x80 }); - n >>= 7; - } - digits[0] &= 0x7f; - - return sprintf("%@c", reverse(digits)); - } - - string encode_tag() - { - int tag = get_tag(); - int cls = get_cls(); - if (tag < 31) - return sprintf("%c", (cls << 6) | (constructed << 5) | tag); - - return sprintf("%c%s", (cls << 6) | (constructed << 5) | 0x1f, - to_base_128(tag) ); - } - - string encode_length(int|object len) - { - if (len < 0x80) - return sprintf("%c", len); - string s = Gmp.mpz(len)->digits(256); - if (sizeof(s) >= 0x80) - error( "asn1.encode.asn1_object->encode_length: Max length exceeded.\n" ); - return sprintf("%c%s", sizeof(s) | 0x80, s); - } - - string build_der(string contents) - { - string data = encode_tag() + encode_length(sizeof(contents)) + contents; - // WERROR(sprintf("build_der: '%s'\n", Crypto.string_to_hex(data))); - WERROR(sprintf("build_der: '%s'\n", data)); - return data; - } -} - -class asn1_compound -{ - inherit asn1_object; - - constant constructed = 1; - array(object) elements; - - void create(object ...args) - { - elements = args; - foreach(elements, mixed o) - if (!o || !objectp(o)) - error( "asn1_compound: Non-object argument!\n" ); - WERROR(sprintf("asn1_compound: %O\n", elements)); - } -} - -class asn1_integer -{ - inherit asn1_object; - constant tag = 2; - - object value; - - void create(int|object n) { value = Gmp.mpz(n); } - - string der() - { - string s; - - if (value < 0) - { - object n = value + pow(256, (- value)->size(256)); - s = n->digits(256); - if (!(s[0] & 0x80)) - s = "\377" + s; - } else { - s = value->digits(256); - if (s[0] & 0x80) - s = "\0" + s; - } - return build_der(s); - } -} - -class asn1_bitstring -{ - inherit asn1_object; - constant tag = 3; - - string value; - int unused = 0; - - void create(string s) { value = s; } - - string der() - { - return build_der(sprintf("%c%s", unused, value)); - } - - int set_length(int len) - { - if (len) - { - value = value[..(len + 7)/8]; - unused = (- len) % 8; - value = sprintf("%s%c", value[..sizeof(value)-2], value[-1] - & ({ 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80 })[unused]); - } else { - unused = 0; - value = ""; - } - } -} - -class asn1_octet_string -{ - inherit asn1_object; - constant tag = 4; - string value; - - void create(string s) { value = s; } - - string der() - { - return build_der(value); - } -} - -class asn1_null -{ - inherit asn1_object; - constant tag = 5; - - string der() { return build_der(""); } -} - -class asn1_identifier -{ - inherit asn1_object; - constant tag = 6; - - array(int) id; - - void create(int ...args) - { - if ( (sizeof(args) < 2) - || (args[0] > 2) - || (args[1] >= ( (args[0] < 2) ? 40 : 176) )) - error( "asn1.encode.asn1_identifier->create: Invalid object identifier.\n" ); - id = args; - } - - object append(int ...args) - { - return object_program(this_object())(@id, @args); - } - - string der() - { - return build_der(sprintf("%c%@s", 40 * id[0] + id[1], - Array.map(id[2..], to_base_128))); - } -} - -class asn1_sequence -{ - inherit asn1_compound; - constant tag = 16; - - string der() - { - WERROR(sprintf("asn1_sequence->der: elements = '%O\n", - elements)); - array(string) a = Array.map(elements, "der"); - WERROR(sprintf("asn1_sequence->der: der(elements) = '%O\n", a)); - return build_der(`+("", @ a)); - } -} - -class asn1_set -{ - inherit asn1_compound; - constant tag = 17; - - int compare_octet_strings(string r, string s) - { - for(int i = 0;; i++) - { - if (i == sizeof(r)) - return (i = sizeof(s)) ? 0 : 1; - if (i == sizeof(s)) - return -1; - if (r[i] < s[i]) - return 1; - else if (r[i] > s[i]) - return -1; - } - } - - string der() - { - WERROR(sprintf("asn1_set->der: elements = '%O\n", - elements)); - array(string) a = Array.map(elements, "der"); - WERROR(sprintf("asn1_set->der: der(elements) = '%O\n", a)); - return build_der(`+("", @Array.sort_array(a, compare_octet_strings))); - } -} - -class asn1_printable_string -{ - inherit asn1_octet_string; - constant tag = 19; -} - -class asn1_T61_string -{ - inherit asn1_octet_string; - constant tag = 20; -} - -class asn1_IA5_string -{ - inherit asn1_octet_string; - constant tag = 22; -} - -class asn1_utc -{ - inherit asn1_octet_string; - constant tag = 23; -} diff --git a/lib/7.4/modules/Standards.pmod/PKCS.pmod/Signature.pmod b/lib/7.4/modules/Standards.pmod/PKCS.pmod/Signature.pmod deleted file mode 100644 index c5ccd1b6160cbb16eec86892318a191217eab82b..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Standards.pmod/PKCS.pmod/Signature.pmod +++ /dev/null @@ -1,14 +0,0 @@ - -#pike 7.5 - -inherit Standards.PKCS.Signature; - -//! In Pike 7.6 the @[hash] is required to be a @[Crypto.Hash] object. -string build_digestinfo(string msg, object hash) { - string d = hash->update(msg)->digest(); - string id = hash->identifier(); - - return sprintf("%c%c%c%c%c%c%s%c%c%c%c%s", - 0x30, sizeof(id) + sizeof(d) + 8, 0x30, sizeof(id) + 4, - 0x06, sizeof(id), id, 0x05, 0x00, 0x04, sizeof(d), d); -} diff --git a/lib/7.4/modules/Stdio.pmod/module.pmod b/lib/7.4/modules/Stdio.pmod/module.pmod deleted file mode 100644 index 5ae27682a1bec14605737755836fbf8d45b20326..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Stdio.pmod/module.pmod +++ /dev/null @@ -1,81 +0,0 @@ -#pike 7.5 - -//! The life length of the Fd instance has changed. In newer versions -//! it's always the same as for the File instance. That can -//! theoretically cause incompatibilities in code that uses File.dup -//! and File.assign, which are deprecated and very rarely used. -class File -{ - inherit Stdio.File; - - int is_open() - { - return _fd && ::is_open(); - } - - int errno() - { - return _fd && ::errno(); - } - - int open(string file, string mode, void|int bits) - { - _fd=Stdio.Fd(); - if (query_num_arg() == 3) - return ::open(file, mode, bits); - return ::open(file, mode); - } - -#if constant(files.__HAVE_OPENPT__) - int openpt(string mode) - { - _fd=Stdio.Fd(); - return ::openpt(mode); - } -#endif - - int open_socket(int|string... args) - { - _fd=Stdio.Fd(); - return ::open_socket (@args); - } - - int connect(string host, int|string port, - void|string client, void|int|string client_port) - { - if(!_fd) _fd=Stdio.Fd(); - return ::connect(host, port, client, client_port); - } - -#if constant(files.__HAVE_CONNECT_UNIX__) - int connect_unix(string path) - { - if(!_fd) _fd=Stdio.Fd(); - return ::connect_unix( path ); - } -#endif - - File pipe(void|int required_properties) - { - _fd=Stdio.Fd(); - if (zero_type (required_properties)) - return ::pipe(); - else - return ::pipe (required_properties); - } - - protected void create(int|string... args) - { - ::create (@args); - if (!sizeof (args)) _fd = 0; - } - - int close(void|string how) - { - if (::close (how)) { - _fd = 0; - return 1; - } - return 0; - } -} diff --git a/lib/7.4/modules/Thread.pmod b/lib/7.4/modules/Thread.pmod deleted file mode 100644 index 428dfeb349f83d0b5153e6080496f1816f167874..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Thread.pmod +++ /dev/null @@ -1,13 +0,0 @@ -#pike 7.5 - -#pragma no_deprecation_warnings -inherit Thread; - -#if constant(thread_create) - -//! The Mutex destruct behaviour in Pike 7.4 and below is different -//! from 7.6 in that destructing a mutex destroys the key that is -//! locking it. -optional constant Mutex=__builtin.mutex_compat_7_4; - -#endif /* constant(thread_create) */ diff --git a/lib/7.4/modules/Tools.pmod/Standalone.pmod/extract_autodoc.pike b/lib/7.4/modules/Tools.pmod/Standalone.pmod/extract_autodoc.pike deleted file mode 100644 index e5155f3c691ca1ceb5c8d70181a3c08f5617dbac..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/Tools.pmod/Standalone.pmod/extract_autodoc.pike +++ /dev/null @@ -1,156 +0,0 @@ -/* - * AutoDoc mk II extraction script. - * - * Henrik Grubbstr�m 2001-01-08 - */ - -#pike 7.4 - -constant description = "Extracts autodoc from Pike or C code."; - -string imgsrc; -string imgdir; - -int main(int n, array(string) args) { - - if(n!=5) { - write("%s <srcdir> <imgsrc> <builddir> <imgdir>\n", args[0]); - exit(1); - } - - string srcdir = combine_path(getcwd(), args[1]); - imgsrc = combine_path(getcwd(), args[2]); - string builddir = combine_path(getcwd(), args[3]); - imgdir = combine_path(getcwd(), args[4]); - if(srcdir[-1]!='/') srcdir += "/"; - if(builddir[-1]!='/') builddir += "/"; - if(imgdir[-1]!='/') imgdir += "/"; - recurse(srcdir, builddir, 0, ({"predef::"})); -} - -void recurse(string srcdir, string builddir, int root_ts, array(string) root) -{ - werror("Extracting from %s\n", srcdir); - - Stdio.Stat st; - if(st = file_stat(srcdir+"/.autodoc")) { - // Note .autodoc files are space-separated to allow for namespaces like - // "7.0::". - root = (Stdio.read_file(srcdir+"/.autodoc")/"\n")[0]/" " - ({""}); - if (!sizeof(root) || !has_suffix(root[0], "::")) { - // The default namespace is predef:: - root = ({ "predef::" }) + root; - } - root_ts = st->mtime; - } - - foreach(get_dir(srcdir), string fn) { - if(fn=="CVS") continue; - if(fn[0]=='.') continue; - if(fn[-1]=='~') continue; - if(fn[0]=='#' && fn[-1]=='#') continue; - - Stdio.Stat stat = file_stat(srcdir+fn, 1); - - if(stat->isdir) { - if(!file_stat(builddir+fn)) mkdir(builddir+fn); - string mod_name = fn; - sscanf(mod_name, "%s.pmod", mod_name); - recurse(srcdir+fn+"/", builddir+fn+"/", root_ts, root + ({mod_name})); - continue; - } - - if(stat->size<1) continue; - - if(!has_suffix(fn, ".pike") && !has_suffix(fn, ".pike.in") && - !has_suffix(fn, ".pmod") && !has_suffix(fn, ".pmod.in") && - !has_suffix(fn, ".c")) continue; - - Stdio.Stat dstat = file_stat(builddir+fn+".xml"); - - // Build the xml file if it doesn't exist, if it is older than the - // source file, or if the root has changed since the previous build. - if(!dstat || dstat->mtime < stat->mtime || dstat->mtime < root_ts) { - string res = extract(srcdir+fn, imgdir, 0, builddir, root); - if(!res) exit(1); - Stdio.write_file(builddir+fn+".xml", res); - } - } -} - -string extract(string filename, string imgdest, int(0..1) rootless, - string builddir, array(string) root) { - - werror("Extracting file %O...\n", filename); - string file = Stdio.read_file(filename); - - if (!file) { - werror("WARNING: Failed to read file %O!\n", filename); - return "\n"; - } - - int i; - if (has_value(file, "**""!") || - (((i = search(file, "//! ""module ")) != -1) && - (sizeof(array_sscanf(file[i+11..],"%s\n%*s")[0]/" ") == 1))) { - // Mirar-style markup. - Tools.AutoDoc.MirarDocParser mirar_parser = - Tools.AutoDoc.MirarDocParser(imgsrc); - int lineno = 1; - foreach(file/"\n", string line) { - mirar_parser->process_line(line, filename, lineno++); - } - return mirar_parser->make_doc_files(builddir, imgdest, root[0]); - } - - string name_sans_suffix, suffix; - if (has_suffix(filename, ".in")) { - name_sans_suffix = filename[..sizeof(filename)-4]; - } - else - name_sans_suffix = filename; - if(!has_value(name_sans_suffix, ".")) - error("No suffix in file %O.\n", name_sans_suffix); - suffix = ((name_sans_suffix/"/")[-1]/".")[-1]; - if( !(< "c", "pike", "pmod", >)[suffix] ) - error("Unknown filetype %O.\n", suffix); - name_sans_suffix = - name_sans_suffix[..sizeof(name_sans_suffix)-(sizeof(suffix)+2)]; - - string result; - mixed err = catch { - if( suffix == "c" ) - result = Tools.AutoDoc.ProcessXML.extractXML(filename,0,0,0,root); - else { - string type = ([ "pike":"class", "pmod":"module", ])[suffix]; - string name = (name_sans_suffix/"/")[-1]; - if(name == "master.pike") - name = "/master"; - if(name == "module" && (filename/"/")[-1] != "module.pike") { - if(sizeof(root)<2) - error("Unknown module parent name.\n"); - name = root[-1]; - root = root[..sizeof(root)-2]; - } - - result = - Tools.AutoDoc.ProcessXML.extractXML(filename, 1, type, name, root); - } - }; - - if (err) { - if (arrayp(err) && _typeof(err[0]) <= Tools.AutoDoc.AutoDocError) - werror("%O\n", err[0]); - else if (objectp(err) && _typeof(err) <= Tools.AutoDoc.AutoDocError) - werror("%O\n", err); - else - werror("%s\n", describe_backtrace(err)); - - return 0; - } - - if(result && sizeof(result)) - return Tools.AutoDoc.ProcessXML.moveImages(result, builddir, imgdest); - - return "\n"; -} diff --git a/lib/7.4/modules/_Crypto.pmod b/lib/7.4/modules/_Crypto.pmod deleted file mode 100644 index 4d7fbc7394c4760e8c040c0e03e3823bef4795e1..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/_Crypto.pmod +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Compat for _Crypto. - * - * 2005-05-22 Henrik Grubbstr�m - */ - -/* Note: We base this module on Crypto, which is the reverse of - * the way a true Pike 7.4 did. - */ -#pike 7.4 -#if constant(Crypto) - -constant cast = Crypto.cast; -constant pipe = Crypto.pipe; -constant invert = Crypto.invert; -constant arcfour = Crypto.arcfour; -constant des = Crypto.des; -constant cbc = Crypto.cbc; -constant crypto = Crypto.crypto; -constant sha = Crypto.sha; -constant md4 = Crypto.md4; -constant md5 = Crypto.md5; -constant crypt_md5 = Crypto.crypt_md5; -constant string_to_hex = Crypto.string_to_hex; -constant des_parity = Crypto.des_parity; -constant hex_to_string = Crypto.hex_to_string; -constant md2 = Crypto.md2; -constant rijndael = Crypto.rijndael; - -#endif /* constant(Crypto) */ diff --git a/lib/7.4/modules/__default.pmod b/lib/7.4/modules/__default.pmod deleted file mode 100644 index bfcb9bbcbfd320612e810696f7af252dd3f8c351..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/__default.pmod +++ /dev/null @@ -1,187 +0,0 @@ -// Compatibility namespace - -#pike 7.5 - -//! Pike 7.4 compatibility. -//! -//! The symbols in this namespace will appear in -//! programs that use @tt{#pike 7.4@} or lower. - -//! @decl inherit 7.6:: - -//! Return resource usage. An error is thrown if it isn't supported -//! or if the system fails to return any information. -//! -//! @returns -//! Returns an array of ints describing how much resources the interpreter -//! process has used so far. This array will have at least 29 elements, of -//! which those values not available on this system will be zero. -//! -//! The elements are as follows: -//! @array -//! @elem int user_time -//! Time in milliseconds spent in user code. -//! @elem int system_time -//! Time in milliseconds spent in system calls. -//! @elem int maxrss -//! Maximum used resident size in kilobytes. -//! @elem int ixrss -//! Quote from GNU libc: An integral value expressed in -//! kilobytes times ticks of execution, which indicates the -//! amount of memory used by text that was shared with other -//! processes. -//! @elem int idrss -//! Quote from GNU libc: An integral value expressed the same -//! way, which is the amount of unshared memory used for data. -//! @elem int isrss -//! Quote from GNU libc: An integral value expressed the same -//! way, which is the amount of unshared memory used for stack -//! space. -//! @elem int minor_page_faults -//! Minor page faults, i.e. TLB misses which required no disk I/O. -//! @elem int major_page_faults -//! Major page faults, i.e. paging with disk I/O required. -//! @elem int swaps -//! Number of times the process has been swapped out entirely. -//! @elem int block_input_op -//! Number of block input operations. -//! @elem int block_output_op -//! Number of block output operations. -//! @elem int messages_sent -//! Number of IPC messsages sent. -//! @elem int messages_received -//! Number of IPC messsages received. -//! @elem int signals_received -//! Number of signals received. -//! @elem int voluntary_context_switches -//! Number of voluntary context switches (usually to wait for -//! some service). -//! @elem int involuntary_context_switches -//! Number of preemptions, i.e. context switches due to expired -//! time slices, or when processes with higher priority were -//! scheduled. -//! @elem int sysc -//! Number of system calls. -//! @elem int ioch -//! Number of characters read and written. -//! @elem int rtime -//! Elapsed real time (ms). -//! @elem int ttime -//! Elapsed system trap (system call) time (ms). -//! @elem int tftime -//! Text page fault sleep time (ms). -//! @elem int dftime -//! Data page fault sleep time (ms). -//! @elem int kftime -//! Kernel page fault sleep time (ms). -//! @elem int ltime -//! User lock wait sleep time (ms). -//! @elem int slptime -//! Other sleep time (ms). -//! @elem int wtime -//! Wait CPU (latency) time (ms). -//! @elem int stoptime -//! Time spent in stopped (suspended) state. -//! @elem int brksize -//! Heap size. -//! @elem int stksize -//! Stack size. -//! @endarray -//! -//! The values will not be further explained here; read your system manual -//! for more information. -//! -//! @note -//! All values may not be present on all systems. -//! -//! @deprecated System.getrusage -//! -//! @seealso -//! @[time()], @[System.getrusage()] -array(int) rusage() { - mapping(string:int) m=System.getrusage(); - return ({ m->utime, m->stime, m->maxrss, m->ixrss, m->idrss, - m->isrss, m->minflt, m->majflt, m->nswap, m->inblock, - m->oublock, m->msgsnd, m->msgrcv, m->nsignals, - m->nvcsw, m->nivcsw, m->sysc, m->ioch, m->rtime, - m->ttime, m->tftime, m->dftime, m->kftime, m->ltime, - m->slptime, m->wtime, m->stoptime, m->brksize, - m->stksize }); -} - -object master() -{ - return __REAL_VERSION__::master()->get_compat_master(7, 4); -} - -#pragma no_deprecation_warnings -int hash(string s, int|void modulo) -{ - if (query_num_arg() > 1) { - return predef::hash_7_4(s, modulo); - } else { - return predef::hash_7_4(s); - } -} -#pragma deprecation_warnings - -protected Mapping.ShadowedMapping compat_all_constants = - Mapping.ShadowedMapping(predef::all_constants(), - ([ - "all_constants": all_constants, - "rusage": rusage, - "hash": hash, - "master": master, -#if constant(__builtin.security) - "call_with_creds": - __builtin.security.call_with_creds, - "get_current_creds": - __builtin.security.get_current_creds, - "get_object_creds": - __builtin.security.get_object_creds, -#endif -#if constant(Pipe._pipe_debug) - "_pipe_debug": Pipe._pipe_debug, -#endif /* constant(Pipe._pipe_debug) */ -#if constant(System.getpwent) - "getpwent": System.getpwent, -#endif -#if constant(System.endpwent) - "endpwent": System.endpwent, -#endif -#if constant(System.setpwent) - "setpwent": System.setpwent, -#endif -#if constant(System.getgrent) - "getgrent": System.getgrent, -#endif -#if constant(System.endgrent) - "endgrent": System.endgrent, -#endif -#if constant(System.getgrent) - "setgrent": System.getgrent, -#endif -#if constant(__builtin.security) - "call_with_creds": Pike.Security.call_with_creds, - "get_current_creds": - Pike.Security.get_current_creds, - "get_object_creds": - Pike.Security.get_object_creds, -#endif -#ifdef __NT__ - "explode_path": lambda(string x) { - return replace(x,"\\","/")/"/"; - }, -#else - "explode_path": lambda(string x) { - return x/"/"; - }, -#endif - ]), 1); - -mapping(string:mixed) all_constants() -{ - // Intentional lie in the return type. - mixed x = compat_all_constants; - return x; -} diff --git a/lib/7.4/modules/testsuite.in b/lib/7.4/modules/testsuite.in deleted file mode 100644 index 2c60f85ca521a54a1cec122750846e1442099a92..0000000000000000000000000000000000000000 --- a/lib/7.4/modules/testsuite.in +++ /dev/null @@ -1,52 +0,0 @@ -START_MARKER(7.4) - -test_equal([[ -Array.diff3_old(({"a"}),({"a","b"}),({"b","a"})) ]], - ({({({ }),({"a"}),({ })}), - ({({ }),({"a"}),({"b"})}), - ({({"b"}),({"a"}),({ })})}) ) - -test_true(arrayp( rusage() )) - -ignore_warning("Calling a deprecated value.", [[ - test_eq(hash("hello\12345"), hash_7_4("hello\12345")) -]]) - -test_compile_error( String.String_buffer x; ) -test_eval_error( String.strmult("foo",4); ) - -test_any([[ - int num_ok = 0; - - Thread.Mutex m = Thread.Mutex(); - Thread.MutexKey l = m->lock(); - - void thread_fn() - { - m->lock(); - num_ok++; - }; - - array(Thread.Thread) t = (({Thread.thread_create}) * 5) (thread_fn); - - sleep (0.5); // Make sure they are waiting for the lock. - destruct (m); // Destructs the outstanding lock too. - sleep (0.5); // Wait for them to finish. - - return num_ok; -]], 5) - -test_compile_any([[ - #pragma strict_types - string x (string s) {return s;} - void y (void|string s) {x (s);} -]]) - -// - rusage -test_true(arrayp(rusage())) -test_true(sizeof(rusage())>28) - -test_true([[ programp(Regexp) ]]) - - -END_MARKER diff --git a/lib/7.8/modules/SSL.pmod/testsuite.in b/lib/7.8/modules/SSL.pmod/testsuite.in index 0b26c8affcbf4d7ddac720b61225551926d9dd29..022de6e98bb8bef0bdedb954d4e9a52b6a986d88 100644 --- a/lib/7.8/modules/SSL.pmod/testsuite.in +++ b/lib/7.8/modules/SSL.pmod/testsuite.in @@ -3,16 +3,7 @@ START_MARKER(7.8) dnl Note: This module has some tests with an external test script in dnl src/modules/_Stdio -test_any([[ -#pike 7.4 -return SSL.constants && 1; -]], 1) - cond_resolv(Crypto.Hash, [[ -test_any([[ -#pike 7.4 -return SSL.cipher && 1; -]], 1) test_do([[ #define ASSERT(X) if(!(X)) error("Assertion failed.\n") diff --git a/lib/master.pike.in b/lib/master.pike.in index 4d56771b4d84b3098fa4273fa8602ddcfeeee4ed..6d9258508952d4fc2b19587572cf17c189778e31 100644 --- a/lib/master.pike.in +++ b/lib/master.pike.in @@ -157,19 +157,19 @@ constant NoValue = typeof (no_value); // Some API compatibility stuff. -//! Pike 7.4 master compatibility interface. +//! Pike 7.6 master compatibility interface. //! //! Most of the interface is implemented via mixin, //! or overloading by more recent masters. //! //! This interface is used for compatibility with -//! Pike 7.4. +//! Pike 7.6. //! //! @deprecated predef::MasterObject //! //! @seealso //! @[get_compat_master()], @[master()], @[predef::MasterObject] -protected class Pike_7_4_master +protected class Pike_7_6_master { extern array(string) pike_include_path; extern array(string) pike_module_path; @@ -268,7 +268,6 @@ protected class Pike_7_4_master void remove_program_path(string tmp); mapping(string:program|NoValue) programs; - void create(); extern mapping(program:object) objects; object cast_to_object(string oname, string current_file); class dirnode {}; @@ -323,8 +322,6 @@ protected class Pike_7_4_master mixed handle_import(string what, string|void current_file, object|void handler); mixed resolv_base(string identifier, string|void current_file); - // FIXME: Not in 7.7! - extern mapping resolv_cache; mixed get_inhibit_compile_errors(); string decode_charset(string data, string charset); @@ -379,8 +376,7 @@ protected class Pike_7_4_master void|int mkobj); extern string include_prefix; extern mapping(string:string) predefines; - // FIXME: Not in 7.7! - extern CompatResolver parent_resolver; + void add_predefine (string name, string value); void remove_predefine (string name); mapping get_predefines(); @@ -415,53 +411,16 @@ protected class Pike_7_4_master void decode_object(object o, mixed data); string _sprintf(int t); - local protected object Pike_7_4_compat_handler; - local mixed resolv(string identifier, string|void current_file) - { - if (!Pike_7_4_compat_handler) { - Pike_7_4_compat_handler = global::get_compilation_handler(7, 4); - } - return Pike_7_4_compat_handler->resolv(identifier, current_file); - } - object get_compat_master(int major, int minor) - { - // 0.0 .. 7.4 - if ((major < 7) || (major == 7) && (minor < 5)) - return this_program::this; - return get_compat_master(major, minor); - } - - /* No missing symbols. */ -} - -//! Pike 7.6 master compatibility interface. -//! -//! Most of the interface is implemented via mixin, -//! or overloading by more recent masters. -//! -//! This interface is used for compatibility with -//! Pike 7.5 and 7.6. -//! -//! @deprecated predef::MasterObject -//! -//! @seealso -//! @[get_compat_master()], @[master()], @[predef::MasterObject] -protected class Pike_7_6_master -{ - inherit Pike_7_4_master; + // --- extern int show_if_constant_errors; - protected void create(); extern mapping(string:string) initial_predefines; extern joinnode root_module; extern mapping(object:joinnode) handler_root_modules; extern array(string) system_module_path; - protected extern CompatResolver parent_resolver; - protected extern mapping resolv_cache; extern CompatResolver fallback_resolver; joinnode get_root_module(object|void current_handler); - class Pike06Resolver {} local protected object Pike_7_6_compat_handler; local mixed resolv_or_error(string identifier, string|void current_file, void|object current_handler) @@ -482,10 +441,8 @@ protected class Pike_7_6_master array get_backtrace (object|array err); object get_compat_master(int major, int minor) { - if ((major < 7) || ((major == 7) && (minor < 5))) - return Pike_7_4_master::get_compat_master(major, minor); - // 7.5 & 7.6 - if ((major == 7) && (minor < 7)) + // 0.0 .. 7.6 + if ((major < 7) || ((major == 7) && (minor < 7))) return this_program::this; return get_compat_master(major, minor); } @@ -3126,24 +3083,6 @@ class CompatResolver inherit CompatResolver; -//! -class Pike06Resolver -{ - inherit CompatResolver; - - //! In Pike 0.6 the current directory was implicitly searched. - mixed resolv_base(string identifier, string|void current_file, - object|void current_handler) - { - if (current_file) { - joinnode node = handle_import(".", current_file, current_handler); - return node[identifier] || - ::resolv_base(identifier, current_file, current_handler); - } - return ::resolv_base(identifier, current_file, current_handler); - } -} - //! These are useful if you want to start other Pike processes //! with the same options as this one was started with. string _pike_file_name; @@ -5582,11 +5521,7 @@ CompatResolver get_compilation_handler(int major, int minor) if (!compat_handler) { // Create a new compat handler, that // falls back to the successor version. - if (tmp <= Version(0, 6)) { - compat_handler = Pike06Resolver(tmp, ret); - } else { - compat_handler = CompatResolver(tmp, ret); - } + compat_handler = CompatResolver(tmp, ret); string base; #if "#lib_prefix#"[0]!='#' diff --git a/lib/modules/Pike.pmod/testsuite.in b/lib/modules/Pike.pmod/testsuite.in index 58c02922b679535bc03344d76c935a13e292d8c0..12d28bc7afea7628c4ca92b350c824fd2ae388fa 100644 --- a/lib/modules/Pike.pmod/testsuite.in +++ b/lib/modules/Pike.pmod/testsuite.in @@ -3,15 +3,6 @@ START_MARKER dnl --- Security cond([[ __builtin["security"] ]],[[ -test_true([[ -#pike 7.4 -functionp(call_with_creds)]]) -test_true([[ -#pike 7.4 -functionp(get_current_creds)]]) -test_true([[ -#pike 7.4 -functionp(get_object_creds)]]) test_do([[ rm("security"); ]]) test_do([[ diff --git a/lib/modules/SSL.pmod/testsuite.in b/lib/modules/SSL.pmod/testsuite.in index 08dc54f21d8e7ebb4678ab70422881659f8acbc5..76dbd160b09fa5d7e8e8d0756f75485fe0ddc31d 100644 --- a/lib/modules/SSL.pmod/testsuite.in +++ b/lib/modules/SSL.pmod/testsuite.in @@ -3,16 +3,7 @@ START_MARKER dnl Note: This module has some tests with an external test script in dnl src/modules/_Stdio -test_any([[ -#pike 7.4 -return SSL.constants && 1; -]], 1) - cond_begin( Crypto.Hash ) -test_any([[ -#pike 7.4 -return SSL.cipher && 1; -]], 1) test_do( SSL.https ) diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/BMMLParser.pike b/lib/modules/Tools.pmod/AutoDoc.pmod/BMMLParser.pike index 6e1f4784e0605e5b8b6311a32e2f3549c7fb345a..3103ec6546f0434e1c791b2d63b3e470bc20319c 100644 --- a/lib/modules/Tools.pmod/AutoDoc.pmod/BMMLParser.pike +++ b/lib/modules/Tools.pmod/AutoDoc.pmod/BMMLParser.pike @@ -1,5 +1,5 @@ #!/usr/local/bin/pike -#pike 7.4 +#pike 7.6 // Parse BMML (Black Magic Markup Language) to AutoDoc XML. // Written by Fredrik Hubinette, dark sourceror and inventor of BMML. @@ -147,8 +147,8 @@ string magic(string s, int quote) /* * Magic to convert SYNTAX sections */ -protected inherit Regexp : lastident; -protected inherit Regexp : megamagic; +protected inherit Regexp.SimpleRegexp : lastident; +protected inherit Regexp.SimpleRegexp : megamagic; string syntax_magic(string s) { @@ -241,7 +241,7 @@ string short(string s) } -inherit Regexp:is_example; +inherit Regexp.SimpleRegexp:is_example; multiset(string) indexes_done=(<>); multiset(string) pages_done=(<>); diff --git a/src/cpp.c b/src/cpp.c index ee481cef70fdeef96aec7365e6d9cac8d5227143..01715a6d1001676c3e215c3a61cb4cd696c174bb 100644 --- a/src/cpp.c +++ b/src/cpp.c @@ -880,13 +880,8 @@ static int do_safe_index_call(struct cpp *this, struct pike_string *s) if(!s) return 0; if (SETJMP_SP(recovery, 1)) { - if (CPP_TEST_COMPAT (this, 7, 4)) { - free_svalue (&throw_value); - mark_free_svalue (&throw_value); - } - else if(this->picky_cpp) { + if(this->picky_cpp) cpp_warning (this, "Error indexing module with %S.", s); - } res = 0; push_undefined(); } else { diff --git a/src/language.yacc b/src/language.yacc index 4a6e22360a3e5fa376ef7b123f9afb60cd2aa22e..36ac89761d26d3eae5f64d46166b9ae6f00a44f2 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -1381,9 +1381,8 @@ identifier_type: idents SET_SVAL_TYPE(Pike_sp[-1], T_FUNCTION); }else{ extern void f_object_program(INT32); - if (Pike_compiler->compiler_pass == 2 && !TEST_COMPAT (7, 4)) { + if (Pike_compiler->compiler_pass == 2) yywarning("Using object as program identifier."); - } f_object_program(1); } } diff --git a/src/pike_types.c b/src/pike_types.c index 1ae2bf8f66b30d5720112701c778aa9351ad54df..a500594e484bf8574779b6f82dd7d67f1dd20307 100644 --- a/src/pike_types.c +++ b/src/pike_types.c @@ -3809,20 +3809,6 @@ static struct pike_type *low_match_types2(struct pike_type *a, /* object(* x) =? object(* x) */ if (a->cdr == b->cdr) break; - /* object(x *) =? object(x *) */ - if(TEST_COMPAT(7,4) && a->car == b->car) - { - /* x? */ - if(a->car) - { - /* object(1 x) =? object(1 x) */ - return 0; - }else{ - /* object(0 *) =? object(0 *) */ - break; - } - } - /* Note: In Pike 7.4 and earlier the following was only done * when a->car != b->car. */ @@ -4579,19 +4565,8 @@ static int low_pike_types_le2(struct pike_type *a, struct pike_type *b, * /grubba 2003-11-11 */ - if (TEST_COMPAT(7,4)) { - if ((a->car || !b->car) && - (a->cdr == b->cdr)) - return 1; - - if (b->car) { - return 0; - } - } - else { - if (a->cdr == b->cdr) - return 1; - } + if (a->cdr == b->cdr) + return 1; { struct program *ap = id_to_program(CDR_TO_INT(a)); @@ -4610,8 +4585,7 @@ static int low_pike_types_le2(struct pike_type *a, struct pike_type *b, /* fprintf(stderr, "ap:%p bp:%p\n", ap, bp); */ return 0; } - if ((flags & LE_WEAK_OBJECTS) && - (!TEST_COMPAT(7,4) || (!a->car))) { + if ((flags & LE_WEAK_OBJECTS) && !a->car) { implements_mode = 0; #if 0 fprintf(stderr, " is_compat(%p(%d), %p(%d))\n", diff --git a/src/testsuite.in b/src/testsuite.in index d065a61f20dad226582f227ed48ff835329bfc30..cd56f3de52de871db58553e3d1147dbe7622cee2 100644 --- a/src/testsuite.in +++ b/src/testsuite.in @@ -1,7 +1,6 @@ START_MARKER // This triggered a bug only if run sufficiently early. -test_compile_any([[#pike 7.4]]) test_compile_any([[#pike 7.6]]) test_compile_any([[#pike 7.8]]) test_compile_any([[#pike 8.0]]) @@ -10982,19 +10981,6 @@ define(test_hash_7_4, [[ int i = hash_7_4($1); return ]]dnl ifelse([[$3]],,, [[((i==$2)||(i==$3))?$2:]])dnl -[[i; - ]], $2) - test_any([[ - int i = 7.4::hash($1); - return ]]dnl -ifelse([[$3]],,, [[((i==$2)||(i==$3))?$2:]])dnl -[[i; - ]], $2) - test_any([[ -#pike 7.4 - int i = hash($1); - return ]]dnl -ifelse([[$3]],,, [[((i==$2)||(i==$3))?$2:]])dnl [[i; ]], $2) ]]) diff --git a/src/version.h b/src/version.h index db747e9205805c585b2ffebd202ed7185b2bbeab..7b6eba90e4bd424cb04c5c1add3ad81d5258670f 100644 --- a/src/version.h +++ b/src/version.h @@ -9,7 +9,7 @@ #define PIKE_BUILD_VERSION 5 #define LOWEST_COMPAT_MAJOR 7 -#define LOWEST_COMPAT_MINOR 4 +#define LOWEST_COMPAT_MINOR 6 /* Prototypes begin here */ PMOD_EXPORT void f_version(INT32 args);