зеркало из https://github.com/mozilla/gecko-dev.git
126 строки
3.7 KiB
C++
126 строки
3.7 KiB
C++
/* -*- 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_WebCryptoCommon_h
|
|
#define mozilla_dom_WebCryptoCommon_h
|
|
|
|
#include "pk11pub.h"
|
|
#include "nsString.h"
|
|
#include "mozilla/dom/CryptoBuffer.h"
|
|
#include "js/StructuredClone.h"
|
|
|
|
// WebCrypto algorithm names
|
|
#define WEBCRYPTO_ALG_AES_CBC "AES-CBC"
|
|
#define WEBCRYPTO_ALG_AES_CTR "AES-CTR"
|
|
#define WEBCRYPTO_ALG_AES_GCM "AES-GCM"
|
|
#define WEBCRYPTO_ALG_SHA1 "SHA-1"
|
|
#define WEBCRYPTO_ALG_SHA256 "SHA-256"
|
|
#define WEBCRYPTO_ALG_SHA384 "SHA-384"
|
|
#define WEBCRYPTO_ALG_SHA512 "SHA-512"
|
|
#define WEBCRYPTO_ALG_HMAC "HMAC"
|
|
#define WEBCRYPTO_ALG_RSAES_PKCS1 "RSAES-PKCS1-v1_5"
|
|
#define WEBCRYPTO_ALG_RSASSA_PKCS1 "RSASSA-PKCS1-v1_5"
|
|
|
|
// WebCrypto key formats
|
|
#define WEBCRYPTO_KEY_FORMAT_RAW "raw"
|
|
#define WEBCRYPTO_KEY_FORMAT_PKCS8 "pkcs8"
|
|
#define WEBCRYPTO_KEY_FORMAT_SPKI "spki"
|
|
#define WEBCRYPTO_KEY_FORMAT_JWK "jwk"
|
|
|
|
// WebCrypto key types
|
|
#define WEBCRYPTO_KEY_TYPE_PUBLIC "public"
|
|
#define WEBCRYPTO_KEY_TYPE_PRIVATE "private"
|
|
#define WEBCRYPTO_KEY_TYPE_SECRET "secret"
|
|
|
|
// WebCrypto key usages
|
|
#define WEBCRYPTO_KEY_USAGE_ENCRYPT "encrypt"
|
|
#define WEBCRYPTO_KEY_USAGE_DECRYPT "decrypt"
|
|
#define WEBCRYPTO_KEY_USAGE_SIGN "sign"
|
|
#define WEBCRYPTO_KEY_USAGE_VERIFY "verify"
|
|
#define WEBCRYPTO_KEY_USAGE_DERIVEKEY "deriveKey"
|
|
#define WEBCRYPTO_KEY_USAGE_DERIVEBITS "deriveBits"
|
|
#define WEBCRYPTO_KEY_USAGE_WRAPKEY "wrapKey"
|
|
#define WEBCRYPTO_KEY_USAGE_UNWRAPKEY "unwrapKey"
|
|
|
|
// JWK key types
|
|
#define JWK_TYPE_SYMMETRIC "oct"
|
|
#define JWK_TYPE_RSA "RSA"
|
|
#define JWK_TYPE_EC "EC"
|
|
|
|
// JWK algorithms
|
|
#define JWK_ALG_RS1 "RS1"
|
|
#define JWK_ALG_RS256 "RS256"
|
|
#define JWK_ALG_RS384 "RS384"
|
|
#define JWK_ALG_RS512 "RS512"
|
|
|
|
// Define an unknown mechanism type
|
|
#define UNKNOWN_CK_MECHANISM CKM_VENDOR_DEFINED+1
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
// Helper functions for structured cloning
|
|
inline bool
|
|
ReadString(JSStructuredCloneReader* aReader, nsString& aString)
|
|
{
|
|
bool read;
|
|
uint32_t nameLength, zero;
|
|
read = JS_ReadUint32Pair(aReader, &nameLength, &zero);
|
|
if (!read) {
|
|
return false;
|
|
}
|
|
|
|
aString.SetLength(nameLength);
|
|
size_t charSize = sizeof(nsString::char_type);
|
|
read = JS_ReadBytes(aReader, (void*) aString.BeginWriting(), nameLength * charSize);
|
|
if (!read) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
inline bool
|
|
WriteString(JSStructuredCloneWriter* aWriter, const nsString& aString)
|
|
{
|
|
size_t charSize = sizeof(nsString::char_type);
|
|
return JS_WriteUint32Pair(aWriter, aString.Length(), 0) &&
|
|
JS_WriteBytes(aWriter, aString.get(), aString.Length() * charSize);
|
|
}
|
|
|
|
inline bool
|
|
ReadBuffer(JSStructuredCloneReader* aReader, CryptoBuffer& aBuffer)
|
|
{
|
|
uint32_t length, zero;
|
|
bool ret = JS_ReadUint32Pair(aReader, &length, &zero);
|
|
if (!ret) {
|
|
return false;
|
|
}
|
|
|
|
if (length > 0) {
|
|
if (!aBuffer.SetLength(length)) {
|
|
return false;
|
|
}
|
|
ret = JS_ReadBytes(aReader, aBuffer.Elements(), aBuffer.Length());
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
inline bool
|
|
WriteBuffer(JSStructuredCloneWriter* aWriter, const CryptoBuffer& aBuffer)
|
|
{
|
|
bool ret = JS_WriteUint32Pair(aWriter, aBuffer.Length(), 0);
|
|
if (ret && aBuffer.Length() > 0) {
|
|
ret = JS_WriteBytes(aWriter, aBuffer.Elements(), aBuffer.Length());
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_WebCryptoCommon_h
|