зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1034855 - Introduce EcKeyAlgorithm r=rbarnes,smaug
This commit is contained in:
Родитель
d8e11b813f
Коммит
77ac66adc8
|
@ -0,0 +1,43 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
||||
/* 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 "mozilla/dom/EcKeyAlgorithm.h"
|
||||
#include "mozilla/dom/SubtleCryptoBinding.h"
|
||||
#include "mozilla/dom/WebCryptoCommon.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
JSObject*
|
||||
EcKeyAlgorithm::WrapObject(JSContext* aCx)
|
||||
{
|
||||
return EcKeyAlgorithmBinding::Wrap(aCx, this);
|
||||
}
|
||||
|
||||
bool
|
||||
EcKeyAlgorithm::WriteStructuredClone(JSStructuredCloneWriter* aWriter) const
|
||||
{
|
||||
return JS_WriteUint32Pair(aWriter, SCTAG_ECKEYALG, 0) &&
|
||||
WriteString(aWriter, mNamedCurve) &&
|
||||
WriteString(aWriter, mName);
|
||||
}
|
||||
|
||||
KeyAlgorithm*
|
||||
EcKeyAlgorithm::Create(nsIGlobalObject* aGlobal, JSStructuredCloneReader* aReader)
|
||||
{
|
||||
nsString name;
|
||||
nsString namedCurve;
|
||||
bool read = ReadString(aReader, namedCurve) &&
|
||||
ReadString(aReader, name);
|
||||
if (!read) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return new EcKeyAlgorithm(aGlobal, name, namedCurve);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
|
@ -0,0 +1,48 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
||||
/* 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/. */
|
||||
|
||||
#ifndef mozilla_dom_EcKeyAlgorithm_h
|
||||
#define mozilla_dom_EcKeyAlgorithm_h
|
||||
|
||||
#include "mozilla/ErrorResult.h"
|
||||
#include "mozilla/dom/KeyAlgorithm.h"
|
||||
#include "js/TypeDecls.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class EcKeyAlgorithm : public KeyAlgorithm
|
||||
{
|
||||
public:
|
||||
EcKeyAlgorithm(nsIGlobalObject* aGlobal,
|
||||
const nsString& aName,
|
||||
const nsString& aNamedCurve)
|
||||
: KeyAlgorithm(aGlobal, aName)
|
||||
, mNamedCurve(aNamedCurve)
|
||||
{}
|
||||
|
||||
~EcKeyAlgorithm()
|
||||
{}
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
|
||||
|
||||
void GetNamedCurve(nsString& aRetVal) const
|
||||
{
|
||||
aRetVal.Assign(mNamedCurve);
|
||||
}
|
||||
|
||||
virtual bool WriteStructuredClone(JSStructuredCloneWriter* aWriter) const MOZ_OVERRIDE;
|
||||
static KeyAlgorithm* Create(nsIGlobalObject* aGlobal,
|
||||
JSStructuredCloneReader* aReader);
|
||||
|
||||
protected:
|
||||
nsString mNamedCurve;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_dom_EcKeyAlgorithm_h
|
|
@ -7,6 +7,7 @@
|
|||
#include "mozilla/dom/KeyAlgorithm.h"
|
||||
#include "mozilla/dom/WebCryptoCommon.h"
|
||||
#include "mozilla/dom/AesKeyAlgorithm.h"
|
||||
#include "mozilla/dom/EcKeyAlgorithm.h"
|
||||
#include "mozilla/dom/HmacKeyAlgorithm.h"
|
||||
#include "mozilla/dom/RsaKeyAlgorithm.h"
|
||||
#include "mozilla/dom/RsaHashedKeyAlgorithm.h"
|
||||
|
@ -89,6 +90,10 @@ KeyAlgorithm::Create(nsIGlobalObject* aGlobal, JSStructuredCloneReader* aReader)
|
|||
algorithm = AesKeyAlgorithm::Create(aGlobal, aReader);
|
||||
break;
|
||||
}
|
||||
case SCTAG_ECKEYALG: {
|
||||
algorithm = EcKeyAlgorithm::Create(aGlobal, aReader);
|
||||
break;
|
||||
}
|
||||
case SCTAG_HMACKEYALG: {
|
||||
algorithm = HmacKeyAlgorithm::Create(aGlobal, aReader);
|
||||
break;
|
||||
|
|
|
@ -24,6 +24,7 @@ class KeyAlgorithm;
|
|||
enum KeyAlgorithmStructuredCloneTags {
|
||||
SCTAG_KEYALG,
|
||||
SCTAG_AESKEYALG,
|
||||
SCTAG_ECKEYALG,
|
||||
SCTAG_HMACKEYALG,
|
||||
SCTAG_RSAKEYALG,
|
||||
SCTAG_RSAHASHEDKEYALG
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#define WEBCRYPTO_ALG_RSAES_PKCS1 "RSAES-PKCS1-v1_5"
|
||||
#define WEBCRYPTO_ALG_RSASSA_PKCS1 "RSASSA-PKCS1-v1_5"
|
||||
#define WEBCRYPTO_ALG_RSA_OAEP "RSA-OAEP"
|
||||
#define WEBCRYPTO_ALG_ECDH "ECDH"
|
||||
|
||||
// WebCrypto key formats
|
||||
#define WEBCRYPTO_KEY_FORMAT_RAW "raw"
|
||||
|
@ -176,6 +177,8 @@ MapAlgorithmNameToMechanism(const nsString& aName)
|
|||
mechanism = CKM_RSA_PKCS;
|
||||
} else if (aName.EqualsLiteral(WEBCRYPTO_ALG_RSA_OAEP)) {
|
||||
mechanism = CKM_RSA_PKCS_OAEP;
|
||||
} else if (aName.EqualsLiteral(WEBCRYPTO_ALG_ECDH)) {
|
||||
mechanism = CKM_ECDH1_DERIVE;
|
||||
}
|
||||
|
||||
return mechanism;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "mozilla/dom/CryptoBuffer.h"
|
||||
#include "mozilla/dom/CryptoKey.h"
|
||||
#include "mozilla/dom/CryptoKeyPair.h"
|
||||
#include "mozilla/dom/EcKeyAlgorithm.h"
|
||||
#include "mozilla/dom/HmacKeyAlgorithm.h"
|
||||
#include "mozilla/dom/KeyAlgorithm.h"
|
||||
#include "mozilla/dom/RsaHashedKeyAlgorithm.h"
|
||||
|
@ -159,6 +160,8 @@ GetAlgorithmName(JSContext* aCx, const OOS& aAlgorithm, nsString& aName)
|
|||
aName.AssignLiteral(WEBCRYPTO_ALG_RSASSA_PKCS1);
|
||||
} else if (aName.EqualsIgnoreCase(WEBCRYPTO_ALG_RSA_OAEP)) {
|
||||
aName.AssignLiteral(WEBCRYPTO_ALG_RSA_OAEP);
|
||||
} else if (aName.EqualsIgnoreCase(WEBCRYPTO_ALG_ECDH)) {
|
||||
aName.AssignLiteral(WEBCRYPTO_ALG_ECDH);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
|
|
@ -10,6 +10,7 @@ EXPORTS.mozilla.dom += [
|
|||
'CryptoBuffer.h',
|
||||
'CryptoKey.h',
|
||||
'CryptoKeyPair.h',
|
||||
'EcKeyAlgorithm.h',
|
||||
'HmacKeyAlgorithm.h',
|
||||
'KeyAlgorithm.h',
|
||||
'RsaHashedKeyAlgorithm.h',
|
||||
|
@ -23,6 +24,7 @@ UNIFIED_SOURCES += [
|
|||
'CryptoBuffer.cpp',
|
||||
'CryptoKey.cpp',
|
||||
'CryptoKeyPair.cpp',
|
||||
'EcKeyAlgorithm.cpp',
|
||||
'HmacKeyAlgorithm.cpp',
|
||||
'KeyAlgorithm.cpp',
|
||||
'RsaHashedKeyAlgorithm.cpp',
|
||||
|
|
|
@ -41,6 +41,11 @@ interface RsaHashedKeyAlgorithm : RsaKeyAlgorithm {
|
|||
readonly attribute KeyAlgorithm hash;
|
||||
};
|
||||
|
||||
[NoInterfaceObject]
|
||||
interface EcKeyAlgorithm : KeyAlgorithm {
|
||||
readonly attribute NamedCurve namedCurve;
|
||||
};
|
||||
|
||||
|
||||
/***** Algorithm dictionaries *****/
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче