commit cbd243e81813ad4f7df94191b7abc28ddabdd31e
Author: Tom Ritter <t...@ritter.vg>
Date:   Sun Mar 8 13:43:35 2015 -0500

    Print Identity and Signing Key Lengths
---
 website.py |   48 ++++++++++++++++++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 14 deletions(-)

diff --git a/website.py b/website.py
index 3b95a57..d33d3fc 100755
--- a/website.py
+++ b/website.py
@@ -10,6 +10,8 @@ import os
 import time
 import operator
 import datetime
+from base64 import b64decode
+from Crypto.PublicKey import RSA
 
 class WebsiteWriter:
        consensus = None
@@ -43,7 +45,7 @@ class WebsiteWriter:
        def set_consensuses(self, c):
                self.consensuses = c
                self.consensus = max(c.itervalues(), 
key=operator.attrgetter('valid_after'))
-                # XXX - Change this to be a list of known dir auths, don't 
calculate it off the consensus because sometimes they're missing entirely
+               # XXX - Change this to be a list of known dir auths, don't 
calculate it off the consensus because sometimes they're missing entirely
                self.known_authorities = set([r.nickname for r in 
self.consensus.routers.values() if 'Authority' in r.flags and r.nickname != 
"Tonga"])
                self.known_authorities.update([r.nickname for r in 
self.consensus.directory_authorities])
        def set_votes(self, v):
@@ -150,7 +152,6 @@ class WebsiteWriter:
                + "    <col width=\"480\">\n"
                + "  </colgroup>\n")
    
-               # XXX Should also write the keysize here
                # XXX Should also write if the displayed consensus is out of 
date
                signingFPs = {sig.identity:sig.method for sig in 
self.consensus.signatures}
                for dirauth_nickname in self.known_authorities: 
@@ -468,6 +469,14 @@ class WebsiteWriter:
                + "</table>\n")
 
        
#-----------------------------------------------------------------------------------------
+       def getKeySize(self, key):
+               key = key.replace("-----BEGIN RSA PUBLIC KEY-----", "")
+               key = key.replace("-----END RSA PUBLIC KEY-----", "")
+               key = key.replace("\n", "")
+               keyDER = b64decode(key)
+               keyPub = RSA.importKey(keyDER)
+               return str(keyPub.size() + 1)
+
        def _write_authority_keys(self):
                """
                Write authority keys and their expiration dates.
@@ -481,8 +490,17 @@ class WebsiteWriter:
                + "<table border=\"0\" cellpadding=\"4\" cellspacing=\"0\" 
summary=\"\">\n"
                + "  <colgroup>\n"
                + "    <col width=\"160\">\n"
-               + "    <col width=\"640\">\n"
-               + "  </colgroup>\n")
+               + "    <col width=\"300\">\n"
+               + "    <col width=\"170\">\n"
+               + "    <col width=\"170\">\n"
+               + "  </colgroup>\n"
+               + "  <tr>\n"
+               + "    <th>Name</th>"
+               + "    <th>Expirey</th>"
+               + "    <th>Identity Key Len.</th>"
+               + "    <th>Signing Key Len.</th>"
+               + "  </tr>\n")
+
                if not self.votes:
                        self.site.write("  <tr><td>(No 
votes.)</td><td></td></tr>\n")
                else:
@@ -493,25 +511,27 @@ class WebsiteWriter:
                                        voteDirKeyExpires = 
vote.directory_authorities[0].key_certificate.expires
                                        if voteDirKeyExpires - 
self.directory_key_warning_time < datetime.datetime.now():
                                                self.site.write("  <tr>\n"
-                                               +  "    <td><span 
class=\"oiv\">" + dirauth_nickname + "</span></td>\n"
-                                               +  "    <td><span 
class=\"oiv\">dir-key-expires "
-                                               + 
voteDirKeyExpires.isoformat().replace("T", " ") + "</span></td>\n"
-                                               + "  </tr>\n");
+                                               + "    <td><span 
class=\"oiv\">" + dirauth_nickname + "</span></td>\n"
+                                               + "    <td><span class=\"oiv\">"
+                                               + 
voteDirKeyExpires.isoformat().replace("T", " ") + "</span></td>\n")
                                        else:
                                                self.site.write("  <tr>\n"
-                                               +  "    <td>" + 
dirauth_nickname + "</td>\n"
-                                               +  "    <td>dir-key-expires "  
-                                               + 
voteDirKeyExpires.isoformat().replace("T", " ") + "</td>\n"
-                                               + "  </tr>\n");
+                                               + "    <td>" + dirauth_nickname 
+ "</td>\n"
+                                               + "    <td>"
+                                               + 
voteDirKeyExpires.isoformat().replace("T", " ") + "</td>\n")
+
+                                       self.site.write("    <td>" + 
self.getKeySize(vote.directory_authorities[0].key_certificate.identity_key) + 
"</td>\n"
+                                       + "    <td>" + 
self.getKeySize(vote.directory_authorities[0].key_certificate.signing_key) + 
"</td>\n"
+                                       + "  </tr>\n");
                                else:
                                        self.site.write("  <tr>\n"
                                        + "    <td>" + dirauth_nickname + 
"</td>\n"
-                                       + "    <td><span class=\"oiv\">Vote Not 
Present<span></td>\n"
+                                       + "    <td colspan=\"3\"><span 
class=\"oiv\">Vote Not Present<span></td>\n"
                                        + "  </tr>\n")
 
                        self.site.write("</table>\n"
                        + "<br>\n"
-                       + "<p><i>Note that expiration dates of legacy keys are "
+                       + "<p><i>Note that expiration dates of any legacy keys 
are "
                        + "not included in votes and therefore not listed 
here!</i>"
                        + "</p>\n")
 



_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to