pike.git
/
lib
/
modules
/
SSL.pmod
/
https.pike
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/lib/modules/SSL.pmod/https.pike:83:
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
"
struct
"
;
+
inherit
ADT.
struct;
array get_asn1() { int tag = get_int(1); int len; string contents; werror(sprintf("decoding tag %x\n", tag)); if ( (tag & 0x1f) == 0x1f) throw( ({ "high tag numbers is not supported\n", backtrace() }) );
pike.git/lib/modules/SSL.pmod/https.pike:121:
array elem = seq->get_asn1(); // werror(sprintf("elem: %O\n", elem)); 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
pike.git/lib/modules/SSL.pmod/https.pike:150:
{ werror("Accept!\n"); conn(f->accept()); } int main() { 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", ber_decode(my_certificate)->get_asn1()));
-
array key = ber_decode(my_key)->get_asn1()[1];
+
array key =
asn1.
ber_decode(my_key)->get_asn1()[1];
werror(sprintf("Decoded key: %O\n", key));
-
object n =
Gmp.mpz(
key[1][1]
, 256)
;
-
object e =
Gmp.mpz(
key[2][1]
, 256)
;
-
object d =
Gmp.mpz(
key[3][1]
, 256)
;
-
object p =
Gmp.mpz(
key[4][1]
, 256)
;
-
object q =
Gmp.mpz(
key[5][1]
, 256)
;
+
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); certificates = ({ my_certificate }); random = no_random()->read; werror("Starting\n");
-
return
bind(PORT, my_accept_callback)
?
-17
:
17;
+
if
(!
bind(PORT, my_accept_callback)
)
+
{
+
perror("");
+
return
17;
}
-
+
else
+
return -17;
+
}