lab12: init
This commit is contained in:
39
lab12/chatServer.js
Normal file
39
lab12/chatServer.js
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
const net = require('net');
|
||||||
|
const eol = require('os').EOL;
|
||||||
|
const crypto = require('crypto');
|
||||||
|
|
||||||
|
const HASH_ALG = 'sha256';
|
||||||
|
const NAME_LEN = 10;
|
||||||
|
|
||||||
|
var srvr = net.createServer();
|
||||||
|
var clientList = [];
|
||||||
|
|
||||||
|
srvr.on('connection', function(client) {
|
||||||
|
client.name = calcName(client.remoteAddress, client.remotePort);
|
||||||
|
client.write('Welcome, ' + client.name + eol);
|
||||||
|
|
||||||
|
//
|
||||||
|
// **YOUR CODE HERE**
|
||||||
|
//
|
||||||
|
// First, add the client to clientList.
|
||||||
|
//
|
||||||
|
// Next, add a listener to the client for a 'data' event.
|
||||||
|
// This event means that the client typed something in.
|
||||||
|
// Broadcast that message to all **other** clients in clientList.
|
||||||
|
//
|
||||||
|
// For extra challenges, try adding the following functionality:
|
||||||
|
// 1) Typing '\list' will list the names of all other users.
|
||||||
|
// 2) Typing '\rename <newname>' will let the user specify a new name for himself/herself.
|
||||||
|
// 3) Typing '\private <name> <msg>' will send a message only to the specified user.
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
function calcName(remoteAddress, remotePort) {
|
||||||
|
let data = remoteAddress + ":" + remotePort;
|
||||||
|
let h = crypto.createHash(HASH_ALG).update(data).digest('hex')
|
||||||
|
return h.substring(0, NAME_LEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
srvr.listen(9000);
|
||||||
|
|
||||||
|
|
||||||
25
lab12/keys/alicePriv.txt
Normal file
25
lab12/keys/alicePriv.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEAifK0oKcMmyyCBSSramC4RtcxGNkXUPcs3towqvEAhPisZeXaskG5JnvK
|
||||||
|
Tk1tdIsDcG9ioUOO3SKo1UwSC1tWf0XZiSxRWDh4fM7m+SoMBHcyE2rAo/EtOtv+hsa9Jsjg
|
||||||
|
q28eD9BJZyZJkFrz+pY6hrIQNeLJp4Iq1BlLwzni6Mhea7rBoU0pUG3rrvXMPoG/lPcOC5yi
|
||||||
|
bjL2fKAojG66ML5nfFDp3Cda/ccs8K6e/89cSwgYQBgz1qntd7djSW8moURrPsDdwhFo6/Dm
|
||||||
|
Ctds4Ct/sCilkGyz6NydK3n1wKk+JiRQlvmCZcOpiy9ywsq+t336Ly8JIIQ8fBdOKvSjAwID
|
||||||
|
AQABAoIBAB3Fg7YoV1AmCumRQG108lBXoQD72UxgDA8Mh/RcjwAjqxFSyiAujwb/MGo1y6mb
|
||||||
|
VuKtJ1wmeG7BTC68fCh3TfOp34j7R5MCnP5SqQadTHqqPuRx5aF8K4bIc+YifjAgqlxVXueK
|
||||||
|
zEy2tqmw93bddUQcqeL3Tw4XyaZ8zx0TISWbx6S8cI8VKYOz5l+8itNM8lH79i0IxKfAMeUR
|
||||||
|
QF0jfRxzWLCuOedY1/19/Q9rY9BB6pgi+7bh6hgMUbPRzWegMpuMuGHjk+23Ah6QKfSO4bd4
|
||||||
|
9Wq8CqYVLCqRpTUiSfHChXopnm3jGp6ELGYOOqxrI38M3X4izW2kv0mnk/o7UAECgYEAvw8L
|
||||||
|
laZs1j8LrisSiEp+453qlGB+Pq3h4OJK6gnKZDiD0K8K4sXl5a6wNTOlx77gdL6Xmmevqp8J
|
||||||
|
I787+TG/K4nrBnRObPPo/Jr6Ug/ON3oCRzhm5Ul5WMcJmkxEIgdJOzTxmuPdlMco9hU1rN3R
|
||||||
|
OzMgce9smZ0RUdEWN66naaMCgYEAuNY9RBjj7v95zfTGsbYv7xj2UYq0FBqU9s+PpMQFKfPg
|
||||||
|
bsPhoxOZgaWR2olVhj8XimhIv2eClOkISSORZryCVFzdFlYalrfzbj4ZLMzUrcEwhEY1x8Sj
|
||||||
|
GRwSb6LW23hH2CR47OBCAB/I1pskClXPhjqDPeoI4w2LlmzoOch6NyECgYBC65coLKnUhTKn
|
||||||
|
J6kPGeDGAysGG6I8fBUw+rI4tYMxhWYOMzGB6sUypPRNPjDj/OSLn7JkP8sU3S2LWtE74IPQ
|
||||||
|
UTeEBDrwCKLjz7i8A5M8dTzVC1lnGEwrn1OquunmbVzmIw45LXUQRo3/W8B4Mx21OZw0rCMC
|
||||||
|
zzQgzzaT/FXhNwKBgQCKl3lQuikOZ1j5aPQjBCxk5x6qfYoRGO1hMrjOHnyQvGAoLY/eKzAK
|
||||||
|
2g7HAfqyslQAX7lMa1yqMyEXVigMFITUpNzRhrZhFITewIk34k4GCrlKNSrWI0b36OiZ9EuO
|
||||||
|
PF4CXzacxno2hZ6d663WYgk86FrH7dfEB8AGhpqJ2RxqgQKBgD+NoVR7ER6o40pmCiBIT6O6
|
||||||
|
A8C3gSUZcNpNFRzB6EOZHPtRvmJ9xSmw5V/nRqIL744f+UYgTggbSmW1IJLnbbUX+hKkrscV
|
||||||
|
ldcil/J5xr56lm3eHpNiQc/h0mIWMSJwYl2YfMYmK6alASQzyfi1ibyw6PXMCYXm2MPKadI3
|
||||||
|
FjHP
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
7
lab12/keys/alicePub.txt
Normal file
7
lab12/keys/alicePub.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN RSA PUBLIC KEY-----
|
||||||
|
MIIBCgKCAQEAifK0oKcMmyyCBSSramC4RtcxGNkXUPcs3towqvEAhPisZeXaskG5JnvKTk1t
|
||||||
|
dIsDcG9ioUOO3SKo1UwSC1tWf0XZiSxRWDh4fM7m+SoMBHcyE2rAo/EtOtv+hsa9Jsjgq28e
|
||||||
|
D9BJZyZJkFrz+pY6hrIQNeLJp4Iq1BlLwzni6Mhea7rBoU0pUG3rrvXMPoG/lPcOC5yibjL2
|
||||||
|
fKAojG66ML5nfFDp3Cda/ccs8K6e/89cSwgYQBgz1qntd7djSW8moURrPsDdwhFo6/DmCtds
|
||||||
|
4Ct/sCilkGyz6NydK3n1wKk+JiRQlvmCZcOpiy9ywsq+t336Ly8JIIQ8fBdOKvSjAwIDAQAB
|
||||||
|
-----END RSA PUBLIC KEY-----
|
||||||
25
lab12/keys/bobPriv.txt
Normal file
25
lab12/keys/bobPriv.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEpQIBAAKCAQEA4g5WrWWU+FRbrBbT0J8vADRic+kYkggBFARM3VxWIKOA3o6/6oUi4PIE
|
||||||
|
dAocsLmYegL8c/xp/OTP/qpOZdFWOZ4/QgO/9ru9hbCIEUDQ1E3FwDCP835OHAZ7yv75gRD2
|
||||||
|
zcxsX95FZnN9Z3InwW3tNr59k97921OIV+Zjc55+HDHjovN+dM29jP72o1zBIRYsJxBSt1Op
|
||||||
|
hwkuDGA/IFwDrHqbidrFDR8cgGw6S0OV8TqhOaLmvCwXskJfp3/9uxo0JOO/rxKBU0WaqgU/
|
||||||
|
p816qtwVqdHmYkI04WxbihVvMdFFEMdv9l6igJlC6vbVO+qaCVBa17939nyuhexmJQP8IwID
|
||||||
|
AQABAoIBAELje0JTjIDudTG2j3Zro7yrw3YIwvxy4d7KZvQZHmMJ/lfcZW0/d9KXyjmLxHGG
|
||||||
|
eVehCpJHXhU2n1T7j7cQ+jKSYKVn9qVLaAjm81wnkaNAYAM+W1nxRauFP5wRVkKagmzi0C6N
|
||||||
|
1ns6MSEq5hiWLlrEguP+V59OWEmqIkNT4nz0t8iuF7HPaIHIx9X/+tDCRjJT9+y3L7qKkXjm
|
||||||
|
CdZf9x8MZCj9PffwjGwLhGUW5PTm140p4g3+KgVkQxDyaJnXmsMJxSrs9x4QTfJtrdtNt+Yv
|
||||||
|
jKF+e0kwEiKSKbGBGl/KeaFSA3O8lxMnSswim3/3R09Hwd5DTIaJPafYXjmBsgECgYEA8jRh
|
||||||
|
qmhzX09OcKkQOWcUUc6CtV/FL57hlP4t5cWR83ABAWmiagw4JStsnfw75VKo9zl9mlicXyYB
|
||||||
|
w4AVJo0eDKaxYn7YF8N441vQtpuvrGayulQg9CdggRfOWulIQH6g48JcpS06TeLAcTMDd6Py
|
||||||
|
4I9CzpAb3H/EJty7DNhdl9cCgYEA7u599/UGYIx1QSLADq/oNA3boY6ybkRSh0RhoF9OiDkM
|
||||||
|
kdE0di7Bu9AJHBboS+wkgnMH8vA7Vn6LsWslpStylqp+S5hU/845IAj7gHrazm0KRSSKi+XS
|
||||||
|
Ijipqz8TJqloptqDpzmC0JtVd3tdTD1RL6yMDePf38UB+sMX7BLGxJUCgYEAmNISOZpUCXQZ
|
||||||
|
sx4JPZ7bhE5/zH8UBNsDzKWgQhUp5Obry39iWfVBy7ode4V2KVjBgdQFe0ijyalKfZcoQT3T
|
||||||
|
EvpufA46vKu6cAIzq7SJ4IagCM8iR8s8qddifZwp2X/MdkjhedsSqagD8qjUbD3G9oeOCJWG
|
||||||
|
7tay5i5p2039p9sCgYEAkvEnlYQijOQ1BH8LoLy8UK8pIN2yjLAGFVyPseKLWKnFOjRwUDKH
|
||||||
|
QSs7PwQzjuXGuldmTxlBVPt0jAN6Xm8vBMwL6g/gToYUicgcbLKhuIxE4asMbedEaXlxl3iu
|
||||||
|
HXvYea0vhHuRIRw23smG4mlfcbNrWuuG9oahpgevwab2iVUCgYEAj0F7DiCUg2sJsLf1aZfi
|
||||||
|
5bjPCqA5oszwyuzB9j6SYDJ15Jprc744u7MdOTcnTVM/5k2hOgjTSWJYm9ghm7V9NAWFpyaP
|
||||||
|
2k4IR6686XF3us4Oh+LYNd1YqjgB+XW/cjS6bWtyk/nFJYAw9Ois2mTyuc0wba0xrP/n3oxT
|
||||||
|
QyzNeNs=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
7
lab12/keys/bobPub.txt
Normal file
7
lab12/keys/bobPub.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN RSA PUBLIC KEY-----
|
||||||
|
MIIBCgKCAQEA4g5WrWWU+FRbrBbT0J8vADRic+kYkggBFARM3VxWIKOA3o6/6oUi4PIEdAoc
|
||||||
|
sLmYegL8c/xp/OTP/qpOZdFWOZ4/QgO/9ru9hbCIEUDQ1E3FwDCP835OHAZ7yv75gRD2zcxs
|
||||||
|
X95FZnN9Z3InwW3tNr59k97921OIV+Zjc55+HDHjovN+dM29jP72o1zBIRYsJxBSt1Ophwku
|
||||||
|
DGA/IFwDrHqbidrFDR8cgGw6S0OV8TqhOaLmvCwXskJfp3/9uxo0JOO/rxKBU0WaqgU/p816
|
||||||
|
qtwVqdHmYkI04WxbihVvMdFFEMdv9l6igJlC6vbVO+qaCVBa17939nyuhexmJQP8IwIDAQAB
|
||||||
|
-----END RSA PUBLIC KEY-----
|
||||||
25
lab12/keys/charliePriv.txt
Normal file
25
lab12/keys/charliePriv.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEogIBAAKCAQEAh3tLOaiZvejIsA08OBMqYB4zdn5emWjcJpIHObW8H5jrcj9hpGe1IZ+Q
|
||||||
|
BpZ53318aD0uoJPSnOLXcLQR5v8AVdddmwaJr3meaW8PL/J5BPMpDyknxk2GgvZRxXy/eQkv
|
||||||
|
VLXbEIRzG5+8Zj8PXkc6rV+qlJEkK/0kuN2y9wz/vYN5z5Fq5qmGnZO665HBh15OxM9b30Fl
|
||||||
|
iBA/DXmD+zK8oR3Gwk3W8GISWmckAqFegZQr9ocY73JHFGTXYmxVbGiWvpmEIuES57bKQX4f
|
||||||
|
g3Xa2yQnW8jco48YX6ScPSpVWRiP+56YgAsoojHYr/Evn+fVE4OLqlLrNgWp9UWE6OKqVwID
|
||||||
|
AQABAoIBAHdfGxjihRPfV3RHNRfzSxMFiTKOhauFyPPzFoqypd7xTgKL9ex1tBK8FJq5Wwif
|
||||||
|
+E2gGsVBegDhnhGfl2aAqDr6V2+QgyApeHpNcIQ+kILb/QFusaz4AdzCS6pGEC8E+L8avLoA
|
||||||
|
+asNQ2KTjWb0O68m65WbjNN1aDW6oUUsHulK8wKC9M2pDs+nTd18IAkFVOop31rJ09bZcsnr
|
||||||
|
qiofRxjLhilvmH0F4nmUTfjrvNxNR0dWpeMEOnoIOg3OtTDqGcJFUI7ELwhYFt3vRP1sRXMS
|
||||||
|
mqgBmLmHK1p8B02YlVjXfmxAMR1ONk+G4uhLLdKkA+9DTNuc8PfEm7Ox+TXV9gECgYEA159D
|
||||||
|
kR/FnZhf64gylHKJei554oGB/EapC+LIViwHptSJ38Vk3vkWKomKPKmi3Se+S4e0FkEbgSqv
|
||||||
|
Tje6IzZwYFxEoZE+UNJSLXYTtnus4yhCItc0FHbCz+4bKuLf7Kij0b1L22LVJ6mObtG1ij1F
|
||||||
|
nJj381pkopQ579RT/14yT+cCgYEAoNop/ygCEp6tDAPr63HfaKDWY7Xy2B85nh62DiWqZ+eX
|
||||||
|
hkh/+mSKryRkkQiVSOxEzR5S2G68yXeiuGHF1N0XuwveDvSRP0wNJ5XVXY3F+cI9Y/Kdt2Kj
|
||||||
|
Hqf7Nm9bxlDHxj4LrL1PvJniG7Pk3e3eV+NIS8eNeWngEdZCrwDeRBECgYBYQM+e7qorvtpD
|
||||||
|
xRMuv1KVt8AbfXZ+k01NmBz3aD4ZgpSMCncm7DyuXG1ANw56BnJU585F7ZAcZiQql5SQJRAJ
|
||||||
|
4LoWhyRCYFNSWCnpXuV8dFXdfMfMOG+0O3jTLNkKPFwQ1LHfsawc98FcimkLk9iSJ+oUqMLX
|
||||||
|
6GNuTjGzLBLbsQKBgEwglKm/HKQFVy8NmBV5clvJa04LqeBhftp3/H/bkbfVYuBZ5b/y37Qe
|
||||||
|
jD4cCtNVhwZxKJJobo8HQQr0szWYYgfTiQgY9bk4XC10+2Nomt8m7/kitUQ6uarjo8BSmePV
|
||||||
|
DYeki8/4VQmU5u9nh5UFZCrCVdAPpMRmuHaYqjy7M3aRAoGAVKyUCZnu9AIkmCmuPEvF/7mQ
|
||||||
|
88zJ3y8BF44iTjKLquMb4SgK0Hur9EiPcufuzEHMiiHE/m6DPhE8OeV984ZlgwrXXcLvdnDL
|
||||||
|
N3lVkTGSNQjRmjK66ITqyTAscc/Hi/W/LzLl0ZjlgynJjtrJQRCIv5tEAaCWeEEY9zS1rD4j
|
||||||
|
4Jo=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
7
lab12/keys/charliePub.txt
Normal file
7
lab12/keys/charliePub.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN RSA PUBLIC KEY-----
|
||||||
|
MIIBCgKCAQEAh3tLOaiZvejIsA08OBMqYB4zdn5emWjcJpIHObW8H5jrcj9hpGe1IZ+QBpZ5
|
||||||
|
3318aD0uoJPSnOLXcLQR5v8AVdddmwaJr3meaW8PL/J5BPMpDyknxk2GgvZRxXy/eQkvVLXb
|
||||||
|
EIRzG5+8Zj8PXkc6rV+qlJEkK/0kuN2y9wz/vYN5z5Fq5qmGnZO665HBh15OxM9b30FliBA/
|
||||||
|
DXmD+zK8oR3Gwk3W8GISWmckAqFegZQr9ocY73JHFGTXYmxVbGiWvpmEIuES57bKQX4fg3Xa
|
||||||
|
2yQnW8jco48YX6ScPSpVWRiP+56YgAsoojHYr/Evn+fVE4OLqlLrNgWp9UWE6OKqVwIDAQAB
|
||||||
|
-----END RSA PUBLIC KEY-----
|
||||||
51
lab12/signingExample.js
Normal file
51
lab12/signingExample.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
var crypto = require('crypto');
|
||||||
|
var fs = require('fs');
|
||||||
|
var events = require('events');
|
||||||
|
|
||||||
|
function Signer(privKeyFile) {
|
||||||
|
// Reads in and stores the private key
|
||||||
|
this.privateKey = fs.readFileSync(privKeyFile).toString('ascii');
|
||||||
|
}
|
||||||
|
|
||||||
|
Signer.prototype.signMessage = function(messageFileName) {
|
||||||
|
// Read in the file
|
||||||
|
var msg = fs.readFileSync(messageFileName).toString('ascii');
|
||||||
|
// Specify which signing algorithm we want to use
|
||||||
|
var sign = crypto.createSign('RSA-SHA256');
|
||||||
|
// Sign the message and return the signature in hexadecimal form
|
||||||
|
return sign.update(msg).sign(this.privateKey,'hex');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Verifier(pubKeyFile) {
|
||||||
|
// Reads in and stores the public key
|
||||||
|
this.publicKey = fs.readFileSync(pubKeyFile).toString('ascii');
|
||||||
|
}
|
||||||
|
Verifier.prototype = new events.EventEmitter();
|
||||||
|
|
||||||
|
Verifier.prototype.verifySignature = function(messageFileName, signature) {
|
||||||
|
// Read in the file
|
||||||
|
var msg = fs.readFileSync(messageFileName).toString('ascii');
|
||||||
|
// Test the signature
|
||||||
|
var legit = crypto.createVerify('RSA-SHA256').update(msg)
|
||||||
|
.verify(this.publicKey, signature, 'hex');
|
||||||
|
if (legit) {
|
||||||
|
console.log("Signature is valid");
|
||||||
|
} else {
|
||||||
|
console.log("Invalid signature");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var verifier = new Verifier('./keys/charliePub.txt');
|
||||||
|
Verifier.prototype.on('signing', verifier.verifySignature);
|
||||||
|
|
||||||
|
// Valid signing
|
||||||
|
var signer = new Signer('./keys/charliePriv.txt');
|
||||||
|
var signature = signer.signMessage('./message.txt');
|
||||||
|
verifier.emit('signing', './message.txt', signature);
|
||||||
|
|
||||||
|
// Wrong signature used
|
||||||
|
signer = new Signer('./keys/bobPriv.txt');
|
||||||
|
signature = signer.signMessage('./message.txt');
|
||||||
|
verifier.emit('signing', './message.txt', signature);
|
||||||
|
|
||||||
23
lab12/tcpserver.js
Normal file
23
lab12/tcpserver.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
var net = require('net');
|
||||||
|
var eol = require('os').EOL;
|
||||||
|
|
||||||
|
var srvr = net.createServer();
|
||||||
|
|
||||||
|
srvr.on('connection', function(client) {
|
||||||
|
client.write('Hello there!' + eol);
|
||||||
|
client.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
srvr.listen(9000);
|
||||||
|
|
||||||
|
// node tcpserver.js
|
||||||
|
|
||||||
|
/*
|
||||||
|
$ telnet 127.0.0.1 9000
|
||||||
|
Trying 127.0.0.1...
|
||||||
|
Connected to localhost.
|
||||||
|
Escape character is '^]'.
|
||||||
|
Hello there!
|
||||||
|
Connection closed by foreign host.
|
||||||
|
*/
|
||||||
|
|
||||||
Reference in New Issue
Block a user