Mozilla/mozilla/security/manager/ssl/src/nsCipherInfo.cpp
kaie%netscape.com 0c1d5a1bc2 b=184940 Enable additional SSL ciphers, add configuration UI
r=javi sr=jaggernaut


git-svn-id: svn://10.0.0.236/trunk@135917 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-07 00:58:24 +00:00

200 lines
5.1 KiB
C++

/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2002
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Kai Engert <kaie@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsCipherInfo.h"
#include "nsReadableUtils.h"
#include "nsEnumeratorUtils.h"
#include "nsCRT.h"
#include "nsNSSComponent.h"
#include "ssl.h"
#include "sslproto.h"
NS_IMPL_ISUPPORTS1(nsCipherInfoService, nsICipherInfoService)
nsCipherInfoService::nsCipherInfoService()
{
}
nsCipherInfoService::~nsCipherInfoService()
{
}
NS_IMETHODIMP nsCipherInfoService::GetCipherInfoByPrefString(const nsACString &aPrefString, nsICipherInfo * *aCipherInfo)
{
NS_ENSURE_ARG_POINTER(aCipherInfo);
PRUint16 cipher_id = 0;
nsresult rv = nsNSSComponent::GetNSSCipherIDFromPrefString(aPrefString, cipher_id);
if (NS_FAILED(rv))
return rv;
*aCipherInfo = new nsCipherInfo(cipher_id);
NS_IF_ADDREF(*aCipherInfo);
rv = *aCipherInfo != nsnull ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
return rv;
}
NS_IMPL_ISUPPORTS1(nsCipherInfo, nsICipherInfo)
nsCipherInfo::nsCipherInfo(PRUint16 aCipherId)
:mHaveInfo(PR_FALSE)
{
for (PRUint16 i = 0; i < SSL_NumImplementedCiphers; ++i)
{
const PRUint16 i_id = SSL_ImplementedCiphers[i];
if (i_id != aCipherId)
continue;
PRBool isGood = (
(SECSuccess == SSL_GetCipherSuiteInfo(i_id, &mInfo, sizeof(mInfo)))
&&
(sizeof(mInfo) == mInfo.length));
if (!isGood)
{
NS_ASSERTION(0, "unable to get info for implemented cipher");
continue;
}
mHaveInfo = PR_TRUE;
}
}
nsCipherInfo::~nsCipherInfo()
{
}
NS_IMETHODIMP nsCipherInfo::GetLongName(nsACString &aLongName)
{
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
aLongName = ToNewCString(nsDependentCString(mInfo.cipherSuiteName));
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetIsSSL2(PRBool *aIsSSL2)
{
NS_ENSURE_ARG_POINTER(aIsSSL2);
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
*aIsSSL2 = SSL_IS_SSL2_CIPHER(mInfo.cipherSuite);
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetIsFIPS(PRBool *aIsFIPS)
{
NS_ENSURE_ARG_POINTER(aIsFIPS);
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
*aIsFIPS = mInfo.isFIPS;
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetIsExportable(PRBool *aIsExportable)
{
NS_ENSURE_ARG_POINTER(aIsExportable);
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
*aIsExportable = mInfo.isExportable;
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetNonStandard(PRBool *aNonStandard)
{
NS_ENSURE_ARG_POINTER(aNonStandard);
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
*aNonStandard = mInfo.nonStandard;
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetSymCipherName(nsACString &aSymCipherName)
{
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
aSymCipherName = mInfo.symCipherName;
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetAuthAlgorithmName(nsACString &aAuthAlgorithmName)
{
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
aAuthAlgorithmName = mInfo.authAlgorithmName;
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetKeaTypeName(nsACString &aKeaTypeName)
{
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
aKeaTypeName = mInfo.keaTypeName;
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetMacAlgorithmName(nsACString &aMacAlgorithmName)
{
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
aMacAlgorithmName = mInfo.macAlgorithmName;
return NS_OK;
}
NS_IMETHODIMP nsCipherInfo::GetEffectiveKeyBits(PRInt32 *aEffectiveKeyBits)
{
NS_ENSURE_ARG_POINTER(aEffectiveKeyBits);
if (!mHaveInfo)
return NS_ERROR_NOT_AVAILABLE;
*aEffectiveKeyBits = mInfo.effectiveKeyBits;
return NS_OK;
}