diff options
author | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-04 03:35:51 +0000 |
---|---|---|
committer | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-04 03:35:51 +0000 |
commit | efbe3c63f38d26d8fb707a28e17854243fc72f82 (patch) | |
tree | 5e1908c6b2fa2da53713363595d22b5773bc6539 | |
parent | ce47a3c7f3296d5fb72b2c980377b613c35d4c33 (diff) | |
download | chromium_src-efbe3c63f38d26d8fb707a28e17854243fc72f82.zip chromium_src-efbe3c63f38d26d8fb707a28e17854243fc72f82.tar.gz chromium_src-efbe3c63f38d26d8fb707a28e17854243fc72f82.tar.bz2 |
Linux certificate viewer: add decoding of rsa public key.
BUG=18119
TEST=compare to firefox
Review URL: http://codereview.chromium.org/669032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40597 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 29 insertions, 6 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 8db5e7e..2e20c2a 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -2666,6 +2666,9 @@ each locale. --> <message name="IDS_CERT_DETAILS_SUBJECT_KEY" desc="The label of the Subject's Public Key element in the details page of the certificate info dialog. (In this case, subject refers to the entity the certificate was issued to.)"> Subject's Public Key </message> + <message name="IDS_CERT_RSA_PUBLIC_KEY_DUMP_FORMAT" desc="Format for displaying a textual dump of an RSA public key."> + Modulus (<ph name="MODULUS_NUM_BITS">$1<ex>1024</ex></ph> bits):\n<ph name="MODULUS_HEX_DUMP">$2<ex>00 0A 38 CF ...</ex></ph>\n\nPublic Exponent (<ph name="PUBLIC_EXPONENT_NUM_BITS">$3<ex>24</ex></ph> bits):\n<ph name="EXPONENT_HEX_DUMP">$4<ex>01 00 01</ex></ph> + </message> <message name="IDS_CERT_DETAILS_EXTENSIONS" desc="The label of the Extensions element in the details page of the certificate info dialog."> Extensions </message> diff --git a/chrome/browser/gtk/certificate_viewer.cc b/chrome/browser/gtk/certificate_viewer.cc index 75a9d4a..8df61b4 100644 --- a/chrome/browser/gtk/certificate_viewer.cc +++ b/chrome/browser/gtk/certificate_viewer.cc @@ -84,11 +84,6 @@ std::string ProcessExtension(CERTCertExtension* extension) { return rv; } -std::string ProcessSubjectPublicKeyInfo(CERTSubjectPublicKeyInfo* spki) { - // TODO(mattm): firefox decodes the key and displays modulus and exponent. - return psm::ProcessRawBits(&spki->subjectPublicKey); -} - //////////////////////////////////////////////////////////////////////////////// // Gtk utility functions. @@ -485,7 +480,7 @@ void CertificateViewer::FillTreeStoreWithCertFields(GtkTreeStore* store, FIELDS_NAME, l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY).c_str(), FIELDS_VALUE, - ProcessSubjectPublicKeyInfo(&cert->subjectPublicKeyInfo).c_str(), + psm::ProcessSubjectPublicKeyInfo(&cert->subjectPublicKeyInfo).c_str(), -1); if (cert->extensions) { diff --git a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp index 3c16cf0..5006405 100644 --- a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp +++ b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp @@ -40,6 +40,7 @@ #include "chrome/third_party/mozilla_security_manager/nsNSSCertHelper.h" +#include <keyhi.h> #include <prprf.h> #include "app/l10n_util.h" @@ -832,4 +833,27 @@ std::string ProcessExtensionData(SECOidTag oid_tag, SECItem* extension_data) { } } +std::string ProcessSubjectPublicKeyInfo(CERTSubjectPublicKeyInfo* spki) { + std::string rv; + SECKEYPublicKey* key = SECKEY_ExtractPublicKey(spki); + if (key) { + switch (key->keyType) { + case rsaKey: { + rv = l10n_util::GetStringFUTF8( + IDS_CERT_RSA_PUBLIC_KEY_DUMP_FORMAT, + UintToString16(key->u.rsa.modulus.len * 8), + UTF8ToUTF16(ProcessRawBytes(&key->u.rsa.modulus)), + UintToString16(key->u.rsa.publicExponent.len * 8), + UTF8ToUTF16(ProcessRawBytes(&key->u.rsa.publicExponent))); + break; + } + default: + rv = ProcessRawBits(&spki->subjectPublicKey); + break; + } + SECKEY_DestroyPublicKey(key); + } + return rv; +} + } // namespace mozilla_security_manager diff --git a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.h b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.h index 5741c69..eaa6e8b 100644 --- a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.h +++ b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.h @@ -92,6 +92,7 @@ std::string ProcessKeyUsageBitString(SECItem* bitstring, char sep); std::string ProcessKeyUsageExtension(SECItem* extension_data); std::string ProcessExtKeyUsage(SECItem* extension_data); std::string ProcessExtensionData(SECOidTag oid_tag, SECItem* extension_data); +std::string ProcessSubjectPublicKeyInfo(CERTSubjectPublicKeyInfo* spki); } // namespace mozilla_security_manager |