| Index: net/third_party/nss/ssl/sslnonce.c | 
| diff --git a/net/third_party/nss/ssl/sslnonce.c b/net/third_party/nss/ssl/sslnonce.c | 
| deleted file mode 100644 | 
| index 99591cc1488ce1e2875ca82fda456e38cc01bb30..0000000000000000000000000000000000000000 | 
| --- a/net/third_party/nss/ssl/sslnonce.c | 
| +++ /dev/null | 
| @@ -1,467 +0,0 @@ | 
| -/* | 
| - * This file implements the CLIENT Session ID cache. | 
| - * | 
| - * This Source Code Form is subject to the terms of the Mozilla Public | 
| - * License, v. 2.0. If a copy of the MPL was not distributed with this | 
| - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 
| - | 
| -#include "cert.h" | 
| -#include "pk11pub.h" | 
| -#include "secitem.h" | 
| -#include "ssl.h" | 
| -#include "nss.h" | 
| - | 
| -#include "sslimpl.h" | 
| -#include "sslproto.h" | 
| -#include "nssilock.h" | 
| -#if defined(XP_UNIX) || defined(XP_WIN) || defined(_WINDOWS) || defined(XP_BEOS) | 
| -#include <time.h> | 
| -#endif | 
| - | 
| -PRUint32 ssl_sid_timeout = 100; | 
| -PRUint32 ssl3_sid_timeout = 86400L; /* 24 hours */ | 
| - | 
| -static sslSessionID *cache = NULL; | 
| -static PZLock *cacheLock = NULL; | 
| - | 
| -/* sids can be in one of 4 states: | 
| - * | 
| - * never_cached,        created, but not yet put into cache. | 
| - * in_client_cache,     in the client cache's linked list. | 
| - * in_server_cache,     entry came from the server's cache file. | 
| - * invalid_cache        has been removed from the cache. | 
| - */ | 
| - | 
| -#define LOCK_CACHE lock_cache() | 
| -#define UNLOCK_CACHE PZ_Unlock(cacheLock) | 
| - | 
| -static PRCallOnceType lockOnce; | 
| - | 
| -/* FreeSessionCacheLocks is a callback from NSS_RegisterShutdown which destroys | 
| - * the session cache locks on shutdown and resets them to their initial | 
| - * state. */ | 
| -static SECStatus | 
| -FreeSessionCacheLocks(void *appData, void *nssData) | 
| -{ | 
| -    static const PRCallOnceType pristineCallOnce; | 
| -    SECStatus rv; | 
| - | 
| -    if (!cacheLock) { | 
| -        PORT_SetError(SEC_ERROR_NOT_INITIALIZED); | 
| -        return SECFailure; | 
| -    } | 
| - | 
| -    PZ_DestroyLock(cacheLock); | 
| -    cacheLock = NULL; | 
| - | 
| -    rv = ssl_FreeSymWrapKeysLock(); | 
| -    if (rv != SECSuccess) { | 
| -        return rv; | 
| -    } | 
| - | 
| -    lockOnce = pristineCallOnce; | 
| -    return SECSuccess; | 
| -} | 
| - | 
| -/* InitSessionCacheLocks is called, protected by lockOnce, to create the | 
| - * session cache locks. */ | 
| -static PRStatus | 
| -InitSessionCacheLocks(void) | 
| -{ | 
| -    SECStatus rv; | 
| - | 
| -    cacheLock = PZ_NewLock(nssILockCache); | 
| -    if (cacheLock == NULL) { | 
| -        return PR_FAILURE; | 
| -    } | 
| -    rv = ssl_InitSymWrapKeysLock(); | 
| -    if (rv != SECSuccess) { | 
| -        PRErrorCode error = PORT_GetError(); | 
| -        PZ_DestroyLock(cacheLock); | 
| -        cacheLock = NULL; | 
| -        PORT_SetError(error); | 
| -        return PR_FAILURE; | 
| -    } | 
| - | 
| -    rv = NSS_RegisterShutdown(FreeSessionCacheLocks, NULL); | 
| -    PORT_Assert(SECSuccess == rv); | 
| -    if (SECSuccess != rv) { | 
| -        return PR_FAILURE; | 
| -    } | 
| -    return PR_SUCCESS; | 
| -} | 
| - | 
| -SECStatus | 
| -ssl_InitSessionCacheLocks() | 
| -{ | 
| -    return (PR_SUCCESS == | 
| -            PR_CallOnce(&lockOnce, InitSessionCacheLocks)) | 
| -               ? SECSuccess | 
| -               : SECFailure; | 
| -} | 
| - | 
| -static void | 
| -lock_cache(void) | 
| -{ | 
| -    ssl_InitSessionCacheLocks(); | 
| -    PZ_Lock(cacheLock); | 
| -} | 
| - | 
| -/* BEWARE: This function gets called for both client and server SIDs !! | 
| - * If the unreferenced sid is not in the cache, Free sid and its contents. | 
| - */ | 
| -static void | 
| -ssl_DestroySID(sslSessionID *sid) | 
| -{ | 
| -    int i; | 
| -    SSL_TRC(8, ("SSL: destroy sid: sid=0x%x cached=%d", sid, sid->cached)); | 
| -    PORT_Assert(sid->references == 0); | 
| -    PORT_Assert(sid->cached != in_client_cache); | 
| - | 
| -    if (sid->version < SSL_LIBRARY_VERSION_3_0) { | 
| -        SECITEM_ZfreeItem(&sid->u.ssl2.masterKey, PR_FALSE); | 
| -        SECITEM_ZfreeItem(&sid->u.ssl2.cipherArg, PR_FALSE); | 
| -    } else { | 
| -        if (sid->u.ssl3.locked.sessionTicket.ticket.data) { | 
| -            SECITEM_FreeItem(&sid->u.ssl3.locked.sessionTicket.ticket, | 
| -                             PR_FALSE); | 
| -        } | 
| -        if (sid->u.ssl3.srvName.data) { | 
| -            SECITEM_FreeItem(&sid->u.ssl3.srvName, PR_FALSE); | 
| -        } | 
| -        if (sid->u.ssl3.signedCertTimestamps.data) { | 
| -            SECITEM_FreeItem(&sid->u.ssl3.signedCertTimestamps, PR_FALSE); | 
| -        } | 
| -        if (sid->u.ssl3.originalHandshakeHash.data) { | 
| -            SECITEM_FreeItem(&sid->u.ssl3.originalHandshakeHash, PR_FALSE); | 
| -        } | 
| - | 
| -        if (sid->u.ssl3.lock) { | 
| -            PR_DestroyRWLock(sid->u.ssl3.lock); | 
| -        } | 
| -    } | 
| - | 
| -    if (sid->peerID != NULL) | 
| -        PORT_Free((void *)sid->peerID); /* CONST */ | 
| - | 
| -    if (sid->urlSvrName != NULL) | 
| -        PORT_Free((void *)sid->urlSvrName); /* CONST */ | 
| - | 
| -    if (sid->peerCert) { | 
| -        CERT_DestroyCertificate(sid->peerCert); | 
| -    } | 
| -    for (i = 0; i < MAX_PEER_CERT_CHAIN_SIZE && sid->peerCertChain[i]; i++) { | 
| -	CERT_DestroyCertificate(sid->peerCertChain[i]); | 
| -    } | 
| -    if (sid->peerCertStatus.items) { | 
| -        SECITEM_FreeArray(&sid->peerCertStatus, PR_FALSE); | 
| -    } | 
| - | 
| -    if (sid->localCert) { | 
| -        CERT_DestroyCertificate(sid->localCert); | 
| -    } | 
| - | 
| -    PORT_ZFree(sid, sizeof(sslSessionID)); | 
| -} | 
| - | 
| -/* BEWARE: This function gets called for both client and server SIDs !! | 
| - * Decrement reference count, and | 
| - *    free sid if ref count is zero, and sid is not in the cache. | 
| - * Does NOT remove from the cache first. | 
| - * If the sid is still in the cache, it is left there until next time | 
| - * the cache list is traversed. | 
| - */ | 
| -static void | 
| -ssl_FreeLockedSID(sslSessionID *sid) | 
| -{ | 
| -    PORT_Assert(sid->references >= 1); | 
| -    if (--sid->references == 0) { | 
| -        ssl_DestroySID(sid); | 
| -    } | 
| -} | 
| - | 
| -/* BEWARE: This function gets called for both client and server SIDs !! | 
| - * Decrement reference count, and | 
| - *    free sid if ref count is zero, and sid is not in the cache. | 
| - * Does NOT remove from the cache first. | 
| - * These locks are necessary because the sid _might_ be in the cache list. | 
| - */ | 
| -void | 
| -ssl_FreeSID(sslSessionID *sid) | 
| -{ | 
| -    LOCK_CACHE; | 
| -    ssl_FreeLockedSID(sid); | 
| -    UNLOCK_CACHE; | 
| -} | 
| - | 
| -/************************************************************************/ | 
| - | 
| -/* | 
| -**  Lookup sid entry in cache by Address, port, and peerID string. | 
| -**  If found, Increment reference count, and return pointer to caller. | 
| -**  If it has timed out or ref count is zero, remove from list and free it. | 
| -*/ | 
| - | 
| -sslSessionID * | 
| -ssl_LookupSID(const PRIPv6Addr *addr, PRUint16 port, const char *peerID, | 
| -              const char *urlSvrName) | 
| -{ | 
| -    sslSessionID **sidp; | 
| -    sslSessionID *sid; | 
| -    PRUint32 now; | 
| - | 
| -    if (!urlSvrName) | 
| -        return NULL; | 
| -    now = ssl_Time(); | 
| -    LOCK_CACHE; | 
| -    sidp = &cache; | 
| -    while ((sid = *sidp) != 0) { | 
| -        PORT_Assert(sid->cached == in_client_cache); | 
| -        PORT_Assert(sid->references >= 1); | 
| - | 
| -        SSL_TRC(8, ("SSL: Lookup1: sid=0x%x", sid)); | 
| - | 
| -        if (sid->expirationTime < now) { | 
| -            /* | 
| -            ** This session-id timed out. | 
| -            ** Don't even care who it belongs to, blow it out of our cache. | 
| -            */ | 
| -            SSL_TRC(7, ("SSL: lookup1, throwing sid out, age=%d refs=%d", | 
| -                        now - sid->creationTime, sid->references)); | 
| - | 
| -            *sidp = sid->next;                                      /* delink it from the list. */ | 
| -            sid->cached = invalid_cache;                            /* mark not on list. */ | 
| -            ssl_FreeLockedSID(sid);                                 /* drop ref count, free. */ | 
| -        } else if (!memcmp(&sid->addr, addr, sizeof(PRIPv6Addr)) && /* server IP addr matches */ | 
| -                   (sid->port == port) &&                           /* server port matches */ | 
| -                   /* proxy (peerID) matches */ | 
| -                   (((peerID == NULL) && (sid->peerID == NULL)) || | 
| -                    ((peerID != NULL) && (sid->peerID != NULL) && | 
| -                     PORT_Strcmp(sid->peerID, peerID) == 0)) && | 
| -                   /* is cacheable */ | 
| -                   (sid->version < SSL_LIBRARY_VERSION_3_0 || | 
| -                    sid->u.ssl3.keys.resumable) && | 
| -                   /* server hostname matches. */ | 
| -                   (sid->urlSvrName != NULL) && | 
| -                   (0 == PORT_Strcmp(urlSvrName, sid->urlSvrName))) { | 
| -            /* Hit */ | 
| -            sid->lastAccessTime = now; | 
| -            sid->references++; | 
| -            break; | 
| -        } else { | 
| -            sidp = &sid->next; | 
| -        } | 
| -    } | 
| -    UNLOCK_CACHE; | 
| -    return sid; | 
| -} | 
| - | 
| -/* | 
| -** Add an sid to the cache or return a previously cached entry to the cache. | 
| -** Although this is static, it is called via ss->sec.cache(). | 
| -*/ | 
| -static void | 
| -CacheSID(sslSessionID *sid) | 
| -{ | 
| -    PRUint32 expirationPeriod; | 
| - | 
| -    PORT_Assert(sid->cached == never_cached); | 
| - | 
| -    SSL_TRC(8, ("SSL: Cache: sid=0x%x cached=%d addr=0x%08x%08x%08x%08x port=0x%04x " | 
| -                "time=%x cached=%d", | 
| -                sid, sid->cached, sid->addr.pr_s6_addr32[0], | 
| -                sid->addr.pr_s6_addr32[1], sid->addr.pr_s6_addr32[2], | 
| -                sid->addr.pr_s6_addr32[3], sid->port, sid->creationTime, | 
| -                sid->cached)); | 
| - | 
| -    if (!sid->urlSvrName) { | 
| -        /* don't cache this SID because it can never be matched */ | 
| -        return; | 
| -    } | 
| - | 
| -    /* XXX should be different trace for version 2 vs. version 3 */ | 
| -    if (sid->version < SSL_LIBRARY_VERSION_3_0) { | 
| -        expirationPeriod = ssl_sid_timeout; | 
| -        PRINT_BUF(8, (0, "sessionID:", | 
| -                      sid->u.ssl2.sessionID, sizeof(sid->u.ssl2.sessionID))); | 
| -        PRINT_BUF(8, (0, "masterKey:", | 
| -                      sid->u.ssl2.masterKey.data, sid->u.ssl2.masterKey.len)); | 
| -        PRINT_BUF(8, (0, "cipherArg:", | 
| -                      sid->u.ssl2.cipherArg.data, sid->u.ssl2.cipherArg.len)); | 
| -    } else { | 
| -        if (sid->u.ssl3.sessionIDLength == 0 && | 
| -            sid->u.ssl3.locked.sessionTicket.ticket.data == NULL) | 
| -            return; | 
| - | 
| -        /* Client generates the SessionID if this was a stateless resume. */ | 
| -        if (sid->u.ssl3.sessionIDLength == 0) { | 
| -            SECStatus rv; | 
| -            rv = PK11_GenerateRandom(sid->u.ssl3.sessionID, | 
| -                                     SSL3_SESSIONID_BYTES); | 
| -            if (rv != SECSuccess) | 
| -                return; | 
| -            sid->u.ssl3.sessionIDLength = SSL3_SESSIONID_BYTES; | 
| -        } | 
| -        expirationPeriod = ssl3_sid_timeout; | 
| -        PRINT_BUF(8, (0, "sessionID:", | 
| -                      sid->u.ssl3.sessionID, sid->u.ssl3.sessionIDLength)); | 
| - | 
| -        sid->u.ssl3.lock = PR_NewRWLock(PR_RWLOCK_RANK_NONE, NULL); | 
| -        if (!sid->u.ssl3.lock) { | 
| -            return; | 
| -        } | 
| -    } | 
| -    PORT_Assert(sid->creationTime != 0 && sid->expirationTime != 0); | 
| -    if (!sid->creationTime) | 
| -        sid->lastAccessTime = sid->creationTime = ssl_Time(); | 
| -    if (!sid->expirationTime) | 
| -        sid->expirationTime = sid->creationTime + expirationPeriod; | 
| - | 
| -    /* | 
| -     * Put sid into the cache.  Bump reference count to indicate that | 
| -     * cache is holding a reference. Uncache will reduce the cache | 
| -     * reference. | 
| -     */ | 
| -    LOCK_CACHE; | 
| -    sid->references++; | 
| -    sid->cached = in_client_cache; | 
| -    sid->next = cache; | 
| -    cache = sid; | 
| -    UNLOCK_CACHE; | 
| -} | 
| - | 
| -/* | 
| - * If sid "zap" is in the cache, | 
| - *    removes sid from cache, and decrements reference count. | 
| - * Caller must hold cache lock. | 
| - */ | 
| -static void | 
| -UncacheSID(sslSessionID *zap) | 
| -{ | 
| -    sslSessionID **sidp = &cache; | 
| -    sslSessionID *sid; | 
| - | 
| -    if (zap->cached != in_client_cache) { | 
| -        return; | 
| -    } | 
| - | 
| -    SSL_TRC(8, ("SSL: Uncache: zap=0x%x cached=%d addr=0x%08x%08x%08x%08x port=0x%04x " | 
| -                "time=%x cipher=%d", | 
| -                zap, zap->cached, zap->addr.pr_s6_addr32[0], | 
| -                zap->addr.pr_s6_addr32[1], zap->addr.pr_s6_addr32[2], | 
| -                zap->addr.pr_s6_addr32[3], zap->port, zap->creationTime, | 
| -                zap->u.ssl2.cipherType)); | 
| -    if (zap->version < SSL_LIBRARY_VERSION_3_0) { | 
| -        PRINT_BUF(8, (0, "sessionID:", | 
| -                      zap->u.ssl2.sessionID, sizeof(zap->u.ssl2.sessionID))); | 
| -        PRINT_BUF(8, (0, "masterKey:", | 
| -                      zap->u.ssl2.masterKey.data, zap->u.ssl2.masterKey.len)); | 
| -        PRINT_BUF(8, (0, "cipherArg:", | 
| -                      zap->u.ssl2.cipherArg.data, zap->u.ssl2.cipherArg.len)); | 
| -    } | 
| - | 
| -    /* See if it's in the cache, if so nuke it */ | 
| -    while ((sid = *sidp) != 0) { | 
| -        if (sid == zap) { | 
| -            /* | 
| -            ** Bingo. Reduce reference count by one so that when | 
| -            ** everyone is done with the sid we can free it up. | 
| -            */ | 
| -            *sidp = zap->next; | 
| -            zap->cached = invalid_cache; | 
| -            ssl_FreeLockedSID(zap); | 
| -            return; | 
| -        } | 
| -        sidp = &sid->next; | 
| -    } | 
| -} | 
| - | 
| -/* If sid "zap" is in the cache, | 
| - *    removes sid from cache, and decrements reference count. | 
| - * Although this function is static, it is called externally via | 
| - *    ss->sec.uncache(). | 
| - */ | 
| -static void | 
| -LockAndUncacheSID(sslSessionID *zap) | 
| -{ | 
| -    LOCK_CACHE; | 
| -    UncacheSID(zap); | 
| -    UNLOCK_CACHE; | 
| -} | 
| - | 
| -/* choose client or server cache functions for this sslsocket. */ | 
| -void | 
| -ssl_ChooseSessionIDProcs(sslSecurityInfo *sec) | 
| -{ | 
| -    if (sec->isServer) { | 
| -        sec->cache = ssl_sid_cache; | 
| -        sec->uncache = ssl_sid_uncache; | 
| -    } else { | 
| -        sec->cache = CacheSID; | 
| -        sec->uncache = LockAndUncacheSID; | 
| -    } | 
| -} | 
| - | 
| -/* wipe out the entire client session cache. */ | 
| -void | 
| -SSL_ClearSessionCache(void) | 
| -{ | 
| -    LOCK_CACHE; | 
| -    while (cache != NULL) | 
| -        UncacheSID(cache); | 
| -    UNLOCK_CACHE; | 
| -} | 
| - | 
| -/* returns an unsigned int containing the number of seconds in PR_Now() */ | 
| -PRUint32 | 
| -ssl_Time(void) | 
| -{ | 
| -    PRUint32 myTime; | 
| -#if defined(XP_UNIX) || defined(XP_WIN) || defined(_WINDOWS) || defined(XP_BEOS) | 
| -    myTime = time(NULL); /* accurate until the year 2038. */ | 
| -#else | 
| -    /* portable, but possibly slower */ | 
| -    PRTime now; | 
| -    PRInt64 ll; | 
| - | 
| -    now = PR_Now(); | 
| -    LL_I2L(ll, 1000000L); | 
| -    LL_DIV(now, now, ll); | 
| -    LL_L2UI(myTime, now); | 
| -#endif | 
| -    return myTime; | 
| -} | 
| - | 
| -void | 
| -ssl3_SetSIDSessionTicket(sslSessionID *sid, | 
| -                         /*in/out*/ NewSessionTicket *newSessionTicket) | 
| -{ | 
| -    PORT_Assert(sid); | 
| -    PORT_Assert(newSessionTicket); | 
| -    PORT_Assert(newSessionTicket->ticket.data); | 
| -    PORT_Assert(newSessionTicket->ticket.len != 0); | 
| - | 
| -    /* if sid->u.ssl3.lock, we are updating an existing entry that is already | 
| -     * cached or was once cached, so we need to acquire and release the write | 
| -     * lock. Otherwise, this is a new session that isn't shared with anything | 
| -     * yet, so no locking is needed. | 
| -     */ | 
| -    if (sid->u.ssl3.lock) { | 
| -        PR_RWLock_Wlock(sid->u.ssl3.lock); | 
| -        if (sid->u.ssl3.locked.sessionTicket.ticket.data) { | 
| -            SECITEM_FreeItem(&sid->u.ssl3.locked.sessionTicket.ticket, | 
| -                             PR_FALSE); | 
| -        } | 
| -    } | 
| - | 
| -    PORT_Assert(!sid->u.ssl3.locked.sessionTicket.ticket.data); | 
| - | 
| -    /* Do a shallow copy, moving the ticket data. */ | 
| -    sid->u.ssl3.locked.sessionTicket = *newSessionTicket; | 
| -    newSessionTicket->ticket.data = NULL; | 
| -    newSessionTicket->ticket.len = 0; | 
| - | 
| -    if (sid->u.ssl3.lock) { | 
| -        PR_RWLock_Unlock(sid->u.ssl3.lock); | 
| -    } | 
| -} | 
|  |