Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(263)

Unified Diff: crypto/nss_util.cc

Issue 7756025: Changed OAuth token+secret encryption to use supplemental user key. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: crypto/nss_util.cc
===================================================================
--- crypto/nss_util.cc (revision 99168)
+++ crypto/nss_util.cc (working copy)
@@ -31,6 +31,10 @@
#include "base/threading/thread_restrictions.h"
#include "crypto/scoped_nss_types.h"
+#if defined(OS_CHROMEOS)
+#include "crypto/symmetric_key.h"
+#endif
+
// USE_NSS means we use NSS for everything crypto-related. If USE_NSS is not
// defined, such as on Mac and Windows, we use NSS for SSL only -- we don't
// use NSS for crypto or certificate verification, and we don't use the NSS
@@ -83,6 +87,17 @@
return dir;
}
+#if defined(OS_CHROMEOS)
+// Supplemental user key id.
+static unsigned char kSupplementalUserKeyId[] = {
+ 0xCC, 0x13, 0x19, 0xDE, 0x75, 0x5E, 0xFE, 0xFA,
+ 0x5E, 0x71, 0xD4, 0xA6, 0xFB, 0x00, 0x00, 0xCC
+};
wtc 2011/09/06 21:35:17 Nit: on line 92, remove 'static'. You said:
zel 2011/09/06 22:33:35 Done.
+// Supplemental user key nickname.
+const char kSupplementalKeyNickname[] = "ChromeOS_SupplementalUserKey";
wtc 2011/09/06 21:35:17 I believe the nickname can contain spaces, so you
zel 2011/09/06 22:33:35 I have removed the nickname, I have no good use fo
+#endif // defined(OS_CHROMEOS)
+
+
// On non-chromeos platforms, return the default config directory.
// On chromeos, return a read-only directory with fake root CA certs for testing
// (which will not exist on non-testing images). These root CA certs are used
@@ -288,6 +303,51 @@
return FindSlotWithTokenName(token_name);
}
+ SymmetricKey* GetSupplementalUserKey() {
+ DCHECK(chromeos_user_logged_in_);
+
+ PK11SlotInfo* slot = NULL;
+ PK11SymKey *key = NULL;
+ PLArenaPool *arena = 0;
wtc 2011/09/06 21:35:17 Nit: on line 310, put '*' next to the type. On li
zel 2011/09/06 22:33:35 Done.
+ SECItem keyID;
+ CK_MECHANISM_TYPE type = CKM_AES_ECB;
Will Drewry 2011/09/06 20:20:21 Not that it really matters for this usage, but mig
zel 2011/09/06 21:02:22 crypto::Encryptor class seems to support CKM_AES_C
+
+ arena = PORT_NewArena(SEC_ASN1_DEFAULT_ARENA_SIZE);
+ if (!arena)
+ goto done;
+
+ slot = GetPublicNSSKeySlot();
+ if (!slot)
+ goto done;
+
+ if (PK11_Authenticate(slot, PR_TRUE, NULL) != SECSuccess)
+ goto done;
+
+ keyID.type = siBuffer;
+ keyID.data = kSupplementalUserKeyId;
+ keyID.len = static_cast<int>(sizeof(kSupplementalUserKeyId));
+
+ // Find/generate AES key.
+ key = PK11_FindFixedKey(slot, type, &keyID, NULL);
+ if (!key) {
+ key = PK11_TokenKeyGen(slot, type, NULL,
+ 32, /* keysize in bytes*/
wtc 2011/09/06 21:35:17 Nit: use C++ style comment: // keysize in bytes
zel 2011/09/06 22:33:35 Done.
+ &keyID, PR_TRUE, NULL);
+ if (key && PK11_SetSymKeyNickname(key,
+ kSupplementalKeyNickname) != SECSuccess) {
wtc 2011/09/06 21:35:17 I think this if statement should say: if (!key
zel 2011/09/06 22:33:35 Done.
+ goto done;
Will Drewry 2011/09/06 20:20:21 How is this any different than doing nothing since
zel 2011/09/06 21:02:22 Done.
+ }
+ }
+
+ done:
+ if (arena)
+ PORT_FreeArena(arena, PR_TRUE);
+
+ if (slot)
+ PK11_FreeSlot(slot);
+
+ return key ? new SymmetricKey(key) : NULL;
+ }
#endif // defined(OS_CHROMEOS)
@@ -702,6 +762,9 @@
return g_nss_singleton.Get().EnsureTPMTokenReady();
}
+SymmetricKey* GetSupplementalUserKey() {
+ return g_nss_singleton.Get().GetSupplementalUserKey();
+}
#endif // defined(OS_CHROMEOS)
// TODO(port): Implement this more simply. We can convert by subtracting an

Powered by Google App Engine
This is Rietveld 408576698