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);