pike.git / lib / modules / SSL.pmod / https.pike

version» Context lines:

pike.git/lib/modules/SSL.pmod/https.pike:1: - /* $Id: https.pike,v 1.7 1997/05/31 22:03:58 grubba Exp $ + /* $Id: https.pike,v 1.8 1999/03/17 02:53:34 grubba Exp $    *    * dummy https server    */      #define PORT 25678      import Stdio;      inherit "sslport";   
pike.git/lib/modules/SSL.pmod/https.pike:80:    sha->update(secret);    rc4->set_encrypt_key(sha->digest());    }       string read(int size)    {    return rc4->crypt(replace(allocate(size), 0, "\021") * "");    }   }    - #if 0 - /* ad-hoc asn.1-decoder */ -  - class ber_decode { -  inherit ADT.struct; -  -  array get_asn1() -  { -  int tag = get_int(1); -  int len; -  string contents; -  - #ifdef SSL3_DEBUG -  werror(sprintf("decoding tag %x\n", tag)); - #endif -  if ( (tag & 0x1f) == 0x1f) -  throw( ({ "high tag numbers is not supported\n", backtrace() }) ); -  int len = get_int(1); -  if (len & 0x80) -  len = get_int(len & 0x7f); -  - #ifdef SSL3_DEBUG -  werror(sprintf("len : %d\n", len)); - #endif -  -  contents = get_fix_string(len); - #ifdef SSL3_DEBUG -  werror(sprintf("contents: %O\n", contents)); - #endif -  if (tag & 0x20) -  { -  object seq = object_program(this_object())(contents); -  array res = ({ }); -  while(! seq->is_empty()) -  { -  array elem = seq->get_asn1(); - #ifdef SSL3_DEBUG -  // werror(sprintf("elem: %O\n", elem)); - #endif -  res += ({ elem }); -  } -  return ({ tag, res }); -  } -  else -  return ({ tag, contents }); -  } - } - #endif -  +    /* PKCS#1 Private key structure:      RSAPrivateKey ::= SEQUENCE {    version Version,    modulus INTEGER, -- n    publicExponent INTEGER, -- e    privateExponent INTEGER, -- d    prime1 INTEGER, -- p    prime2 INTEGER, -- q    exponent1 INTEGER, -- d mod (p-1)
pike.git/lib/modules/SSL.pmod/https.pike:159:    conn(accept());   }      int main()   {   #ifdef SSL3_DEBUG    werror(sprintf("Cert: '%s'\n", Crypto.string_to_hex(my_certificate)));    werror(sprintf("Key: '%s'\n", Crypto.string_to_hex(my_key)));   // werror(sprintf("Decoded cert: %O\n", SSL.asn1.ber_decode(my_certificate)->get_asn1()));   #endif + #if 0    array key = SSL.asn1.ber_decode(my_key)->get_asn1()[1];   #ifdef SSL3_DEBUG    werror(sprintf("Decoded key: %O\n", key));   #endif    object n = key[1][1];    object e = key[2][1];    object d = key[3][1];    object p = key[4][1];    object q = key[5][1];       werror(sprintf("n = %s\np = %s\nq = %s\npq = %s\n",    n->digits(), p->digits(), q->digits(), (p*q)->digits()));       rsa = Crypto.rsa();    rsa->set_public_key(n, e);    rsa->set_private_key(d); -  + #else /* !0 */ +  // FIXME: Is this correct? +  rsa = Standards.PKCS.RSA.parse_private_key(my_key); + #endif /* 0 */    certificates = ({ my_certificate });    random = no_random()->read;    werror("Starting\n");    if (!bind(PORT, my_accept_callback))    {    perror("");    return 17;    }    else    return -17;   }      void create()   {   #ifdef SSL3_DEBUG    werror("https->create\n");   #endif    sslport::create();   }