Socket
Socket
Sign inDemoInstall

webcrypto-core

Package Overview
Dependencies
Maintainers
2
Versions
78
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

webcrypto-core - npm Package Compare versions

Comparing version 1.0.6 to 1.0.7

types/utils/is_jwk.d.ts

146

build/webcrypto-core.es.js

@@ -28,2 +28,65 @@ /**

class PemConverter {
static toArrayBuffer(pem) {
const base64 = pem
.replace(/-{5}(BEGIN|END) .*-{5}/g, "")
.replace("\r", "")
.replace("\n", "");
return Convert.FromBase64(base64);
}
static toUint8Array(pem) {
const bytes = this.toArrayBuffer(pem);
return new Uint8Array(bytes);
}
static fromBufferSource(buffer, tag) {
const base64 = Convert.ToBase64(buffer);
let sliced;
let offset = 0;
const rows = [];
while (true) {
sliced = base64.slice(offset, offset = offset + 64);
if (sliced.length) {
rows.push(sliced);
if (sliced.length < 64) {
break;
}
}
else {
break;
}
}
const upperCaseTag = tag.toUpperCase();
return `-----BEGIN ${upperCaseTag}-----\n${rows.join("\n")}\n-----END ${upperCaseTag}-----`;
}
static isPEM(data) {
return /-----BEGIN .+-----[A-Za-z0-9+\/\+\=\s\n]+-----END .+-----/i.test(data);
}
static getTagName(pem) {
if (!this.isPEM(pem)) {
throw new Error("Bad parameter. Incoming data is not right PEM");
}
const res = /-----BEGIN (.+)-----/.exec(pem);
if (!res) {
throw new Error("Cannot get tag from PEM");
}
return res[1];
}
static hasTagName(pem, tagName) {
const tag = this.getTagName(pem);
return tagName.toLowerCase() === tag.toLowerCase();
}
static isCertificate(pem) {
return this.hasTagName(pem, "certificate");
}
static isCertificateRequest(pem) {
return this.hasTagName(pem, "certificate request");
}
static isCRL(pem) {
return this.hasTagName(pem, "x509 crl");
}
static isPublicKey(pem) {
return this.hasTagName(pem, "public key");
}
}
class BufferSourceConverter {

@@ -50,2 +113,6 @@ static toArrayBuffer(data) {

function isJWK(data) {
return typeof data === "object" && "kty" in data;
}
class ProviderCrypto {

@@ -169,2 +236,3 @@ async digest(algorithm, data) {

this.checkKeyFormat(format);
this.checkKeyData(format, keyData);
this.checkAlgorithmName(algorithm);

@@ -227,2 +295,15 @@ this.checkImportParams(algorithm);

}
checkKeyData(format, keyData) {
if (!keyData) {
throw new TypeError("keyData: Cannot be empty on empty on key importing");
}
if (format === "jwk") {
if (!isJWK(keyData)) {
throw new TypeError("keyData: Is not JsonWebToken");
}
}
else if (!BufferSourceConverter.isBufferSource(keyData)) {
throw new TypeError("keyData: Is not ArrayBufferView or ArrrayBuffer");
}
}
prepareData(data) {

@@ -807,65 +888,2 @@ return BufferSourceConverter.toArrayBuffer(data);

class PemConverter {
static toArrayBuffer(pem) {
const base64 = pem
.replace(/-{5}(BEGIN|END) .*-{5}/g, "")
.replace("\r", "")
.replace("\n", "");
return Convert.FromBase64(base64);
}
static toUint8Array(pem) {
const bytes = this.toArrayBuffer(pem);
return new Uint8Array(bytes);
}
static fromBufferSource(buffer, tag) {
const base64 = Convert.ToBase64(buffer);
let sliced;
let offset = 0;
const rows = [];
while (true) {
sliced = base64.slice(offset, offset = offset + 64);
if (sliced.length) {
rows.push(sliced);
if (sliced.length < 64) {
break;
}
}
else {
break;
}
}
const upperCaseTag = tag.toUpperCase();
return `-----BEGIN ${upperCaseTag}-----\n${rows.join("\n")}\n-----END ${upperCaseTag}-----`;
}
static isPEM(data) {
return /-----BEGIN .+-----[A-Za-z0-9+\/\+\=\s\n]+-----END .+-----/i.test(data);
}
static getTagName(pem) {
if (!this.isPEM(pem)) {
throw new Error("Bad parameter. Incoming data is not right PEM");
}
const res = /-----BEGIN (.+)-----/.exec(pem);
if (!res) {
throw new Error("Cannot get tag from PEM");
}
return res[1];
}
static hasTagName(pem, tagName) {
const tag = this.getTagName(pem);
return tagName.toLowerCase() === tag.toLowerCase();
}
static isCertificate(pem) {
return this.hasTagName(pem, "certificate");
}
static isCertificateRequest(pem) {
return this.hasTagName(pem, "certificate request");
}
static isCRL(pem) {
return this.hasTagName(pem, "x509 crl");
}
static isPublicKey(pem) {
return this.hasTagName(pem, "public key");
}
}
export { AlgorithmError, CryptoError, UnsupportedOperationError, OperationError, RequiredPropertyError, AesProvider, AesCbcProvider, AesCmacProvider, AesCtrProvider, AesEcbProvider, AesGcmProvider, AesKwProvider, DesProvider, RsaProvider, RsaSsaProvider, RsaPssProvider, RsaOaepProvider, EllipticProvider, EcdsaProvider, EcdhProvider, HmacProvider, Pbkdf2Provider, Crypto, ProviderCrypto, ProviderStorage, SubtleCrypto, CryptoKey, PemConverter, BufferSourceConverter };
export { AlgorithmError, CryptoError, UnsupportedOperationError, OperationError, RequiredPropertyError, AesProvider, AesCbcProvider, AesCmacProvider, AesCtrProvider, AesEcbProvider, AesGcmProvider, AesKwProvider, DesProvider, RsaProvider, RsaSsaProvider, RsaPssProvider, RsaOaepProvider, EllipticProvider, EcdsaProvider, EcdhProvider, HmacProvider, Pbkdf2Provider, Crypto, ProviderCrypto, ProviderStorage, SubtleCrypto, CryptoKey, PemConverter, BufferSourceConverter, isJWK };

@@ -32,2 +32,65 @@ /**

class PemConverter {
static toArrayBuffer(pem) {
const base64 = pem
.replace(/-{5}(BEGIN|END) .*-{5}/g, "")
.replace("\r", "")
.replace("\n", "");
return pvtsutils.Convert.FromBase64(base64);
}
static toUint8Array(pem) {
const bytes = this.toArrayBuffer(pem);
return new Uint8Array(bytes);
}
static fromBufferSource(buffer, tag) {
const base64 = pvtsutils.Convert.ToBase64(buffer);
let sliced;
let offset = 0;
const rows = [];
while (true) {
sliced = base64.slice(offset, offset = offset + 64);
if (sliced.length) {
rows.push(sliced);
if (sliced.length < 64) {
break;
}
}
else {
break;
}
}
const upperCaseTag = tag.toUpperCase();
return `-----BEGIN ${upperCaseTag}-----\n${rows.join("\n")}\n-----END ${upperCaseTag}-----`;
}
static isPEM(data) {
return /-----BEGIN .+-----[A-Za-z0-9+\/\+\=\s\n]+-----END .+-----/i.test(data);
}
static getTagName(pem) {
if (!this.isPEM(pem)) {
throw new Error("Bad parameter. Incoming data is not right PEM");
}
const res = /-----BEGIN (.+)-----/.exec(pem);
if (!res) {
throw new Error("Cannot get tag from PEM");
}
return res[1];
}
static hasTagName(pem, tagName) {
const tag = this.getTagName(pem);
return tagName.toLowerCase() === tag.toLowerCase();
}
static isCertificate(pem) {
return this.hasTagName(pem, "certificate");
}
static isCertificateRequest(pem) {
return this.hasTagName(pem, "certificate request");
}
static isCRL(pem) {
return this.hasTagName(pem, "x509 crl");
}
static isPublicKey(pem) {
return this.hasTagName(pem, "public key");
}
}
class BufferSourceConverter {

@@ -54,2 +117,6 @@ static toArrayBuffer(data) {

function isJWK(data) {
return typeof data === "object" && "kty" in data;
}
class ProviderCrypto {

@@ -173,2 +240,3 @@ async digest(algorithm, data) {

this.checkKeyFormat(format);
this.checkKeyData(format, keyData);
this.checkAlgorithmName(algorithm);

@@ -231,2 +299,15 @@ this.checkImportParams(algorithm);

}
checkKeyData(format, keyData) {
if (!keyData) {
throw new TypeError("keyData: Cannot be empty on empty on key importing");
}
if (format === "jwk") {
if (!isJWK(keyData)) {
throw new TypeError("keyData: Is not JsonWebToken");
}
}
else if (!BufferSourceConverter.isBufferSource(keyData)) {
throw new TypeError("keyData: Is not ArrayBufferView or ArrrayBuffer");
}
}
prepareData(data) {

@@ -811,65 +892,2 @@ return BufferSourceConverter.toArrayBuffer(data);

class PemConverter {
static toArrayBuffer(pem) {
const base64 = pem
.replace(/-{5}(BEGIN|END) .*-{5}/g, "")
.replace("\r", "")
.replace("\n", "");
return pvtsutils.Convert.FromBase64(base64);
}
static toUint8Array(pem) {
const bytes = this.toArrayBuffer(pem);
return new Uint8Array(bytes);
}
static fromBufferSource(buffer, tag) {
const base64 = pvtsutils.Convert.ToBase64(buffer);
let sliced;
let offset = 0;
const rows = [];
while (true) {
sliced = base64.slice(offset, offset = offset + 64);
if (sliced.length) {
rows.push(sliced);
if (sliced.length < 64) {
break;
}
}
else {
break;
}
}
const upperCaseTag = tag.toUpperCase();
return `-----BEGIN ${upperCaseTag}-----\n${rows.join("\n")}\n-----END ${upperCaseTag}-----`;
}
static isPEM(data) {
return /-----BEGIN .+-----[A-Za-z0-9+\/\+\=\s\n]+-----END .+-----/i.test(data);
}
static getTagName(pem) {
if (!this.isPEM(pem)) {
throw new Error("Bad parameter. Incoming data is not right PEM");
}
const res = /-----BEGIN (.+)-----/.exec(pem);
if (!res) {
throw new Error("Cannot get tag from PEM");
}
return res[1];
}
static hasTagName(pem, tagName) {
const tag = this.getTagName(pem);
return tagName.toLowerCase() === tag.toLowerCase();
}
static isCertificate(pem) {
return this.hasTagName(pem, "certificate");
}
static isCertificateRequest(pem) {
return this.hasTagName(pem, "certificate request");
}
static isCRL(pem) {
return this.hasTagName(pem, "x509 crl");
}
static isPublicKey(pem) {
return this.hasTagName(pem, "public key");
}
}
exports.AlgorithmError = AlgorithmError;

@@ -904,1 +922,2 @@ exports.CryptoError = CryptoError;

exports.BufferSourceConverter = BufferSourceConverter;
exports.isJWK = isJWK;
{
"name": "webcrypto-core",
"version": "1.0.6",
"version": "1.0.7",
"description": "Common layer to be used by crypto libraries based on WebCrypto API for input validation.",

@@ -44,3 +44,4 @@ "main": "build/webcrypto-core.js",

"mocha": "^5.2.0",
"nyc": "^13.1.0",
"nyc": "^13.3.0",
"reflect-metadata": "^0.1.13",
"rollup": "^1.1.2",

@@ -47,0 +48,0 @@ "rollup-plugin-typescript": "^1.0.0",

@@ -5,2 +5,5 @@ import { ProviderCrypto } from "../provider";

checkDerivedKeyParams(algorithm: AesKeyGenParams): void;
abstract onGenerateKey(algorithm: AesKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
abstract onExportKey(format: KeyFormat, key: CryptoKey): Promise<JsonWebKey | ArrayBuffer>;
abstract onImportKey(format: KeyFormat, keyData: JsonWebKey | ArrayBuffer, algorithm: Algorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
}
import { KeyUsages } from "../types";
import { AesProvider } from "./base";
export declare class AesCbcProvider extends AesProvider {
export declare abstract class AesCbcProvider extends AesProvider {
readonly name = "AES-CBC";
usages: KeyUsages;
checkAlgorithmParams(algorithm: AesCbcParams): void;
abstract onEncrypt(algorithm: AesCbcParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onDecrypt(algorithm: AesCbcParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
}
import { KeyUsages } from "../types";
import { AesProvider } from "./base";
export declare class AesCmacProvider extends AesProvider {
export declare abstract class AesCmacProvider extends AesProvider {
readonly name = "AES-CMAC";
usages: KeyUsages;
checkAlgorithmParams(algorithm: AesCmacParams): void;
abstract onSign(algorithm: AesCmacParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onVerify(algorithm: AesCmacParams, key: CryptoKey, signature: ArrayBuffer, data: ArrayBuffer): Promise<boolean>;
}
import { KeyUsages } from "../types";
import { AesProvider } from "./base";
export declare class AesCtrProvider extends AesProvider {
export declare abstract class AesCtrProvider extends AesProvider {
readonly name = "AES-CTR";
usages: KeyUsages;
checkAlgorithmParams(algorithm: AesCtrParams): void;
abstract onEncrypt(algorithm: AesCtrParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onDecrypt(algorithm: AesCtrParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
}
import { KeyUsages } from "../types";
import { AesProvider } from "./base";
export declare class AesEcbProvider extends AesProvider {
export declare abstract class AesEcbProvider extends AesProvider {
readonly name = "AES-ECB";
usages: KeyUsages;
abstract onEncrypt(algorithm: Algorithm, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onDecrypt(algorithm: Algorithm, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
}
import { KeyUsages } from "../types";
import { AesProvider } from "./base";
export declare class AesGcmProvider extends AesProvider {
export declare abstract class AesGcmProvider extends AesProvider {
readonly name = "AES-GCM";
usages: KeyUsages;
checkAlgorithmParams(algorithm: AesGcmParams): void;
abstract onEncrypt(algorithm: AesGcmParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onDecrypt(algorithm: AesGcmParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
}
import { KeyUsages } from "../types";
import { AesProvider } from "./base";
export declare class AesKwProvider extends AesProvider {
export declare abstract class AesKwProvider extends AesProvider {
readonly name = "AES-KW";
usages: KeyUsages;
}

@@ -25,2 +25,7 @@ import { KeyAlgorithm } from "../key";

checkDerivedKeyParams(algorithm: DesDerivedKeyParams): void;
abstract onGenerateKey(algorithm: DesKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
abstract onExportKey(format: KeyFormat, key: CryptoKey): Promise<JsonWebKey | ArrayBuffer>;
abstract onImportKey(format: KeyFormat, keyData: JsonWebKey | ArrayBuffer, algorithm: DesImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
abstract onEncrypt(algorithm: DesParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onDecrypt(algorithm: DesParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
}

@@ -6,2 +6,5 @@ import { ProviderCrypto } from "../provider";

checkNamedCurve(namedCurve: string): void;
abstract onGenerateKey(algorithm: EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
abstract onExportKey(format: KeyFormat, key: CryptoKey): Promise<JsonWebKey | ArrayBuffer>;
abstract onImportKey(format: KeyFormat, keyData: JsonWebKey | ArrayBuffer, algorithm: EcKeyImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
}

@@ -0,4 +1,5 @@

import { CryptoKey } from "../key";
import { ProviderKeyUsages } from "../types";
import { EllipticProvider } from "./base";
export declare class EcdhProvider extends EllipticProvider {
export declare abstract class EcdhProvider extends EllipticProvider {
readonly name = "ECDH";

@@ -8,2 +9,3 @@ usages: ProviderKeyUsages;

checkAlgorithmParams(algorithm: EcdhKeyDeriveParams): void;
abstract onDeriveBits(algorithm: EcdhKeyDeriveParams, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
}
import { ProviderKeyUsages } from "../types";
import { EllipticProvider } from "./base";
export declare class EcdsaProvider extends EllipticProvider {
export declare abstract class EcdsaProvider extends EllipticProvider {
readonly name = "ECDSA";

@@ -9,2 +9,4 @@ readonly hashAlgorithms: string[];

checkAlgorithmParams(algorithm: EcdsaParams): void;
abstract onSign(algorithm: EcdsaParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onVerify(algorithm: EcdsaParams, key: CryptoKey, signature: ArrayBuffer, data: ArrayBuffer): Promise<boolean>;
}
import { ProviderCrypto } from "../provider";
import { KeyUsages } from "../types";
export declare class HmacProvider extends ProviderCrypto {
export declare abstract class HmacProvider extends ProviderCrypto {
name: string;

@@ -14,2 +14,5 @@ hashAlgorithms: string[];

checkImportParams(algorithm: HmacImportParams): void;
abstract onGenerateKey(algorithm: HmacKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
abstract onExportKey(format: KeyFormat, key: CryptoKey): Promise<JsonWebKey | ArrayBuffer>;
abstract onImportKey(format: KeyFormat, keyData: JsonWebKey | ArrayBuffer, algorithm: HmacImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
}
import { ProviderCrypto } from "../provider";
import { KeyUsages } from "../types";
export declare class Pbkdf2Provider extends ProviderCrypto {
export declare abstract class Pbkdf2Provider extends ProviderCrypto {
name: string;

@@ -9,2 +9,4 @@ hashAlgorithms: string[];

checkImportKey(format: KeyFormat, keyData: JsonWebKey | ArrayBuffer, algorithm: Algorithm, extractable: boolean, keyUsages: KeyUsage[]): void;
abstract onImportKey(format: KeyFormat, keyData: JsonWebKey | ArrayBuffer, algorithm: Algorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
abstract onDeriveBits(algorithm: Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
}

@@ -52,3 +52,4 @@ import { CryptoKey } from "./key";

checkKeyFormat(format: any): void;
checkKeyData(format: KeyFormat, keyData: any): void;
protected prepareData(data: any): ArrayBuffer;
}

@@ -6,2 +6,5 @@ import { ProviderCrypto } from "../provider";

checkImportParams(algorithm: RsaHashedImportParams): void;
abstract onGenerateKey(algorithm: RsaHashedKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
abstract onExportKey(format: KeyFormat, key: CryptoKey): Promise<JsonWebKey | ArrayBuffer>;
abstract onImportKey(format: KeyFormat, keyData: JsonWebKey | ArrayBuffer, algorithm: RsaHashedImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
}
import { ProviderKeyUsages } from "../types";
import { RsaProvider } from "./base";
export declare class RsaOaepProvider extends RsaProvider {
export declare abstract class RsaOaepProvider extends RsaProvider {
readonly name = "RSA-OAEP";
usages: ProviderKeyUsages;
checkAlgorithmParams(algorithm: RsaOaepParams): void;
abstract onEncrypt(algorithm: RsaOaepParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onDecrypt(algorithm: RsaOaepParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
}
import { ProviderKeyUsages } from "../types";
import { RsaProvider } from "./base";
export declare class RsaPssProvider extends RsaProvider {
export declare abstract class RsaPssProvider extends RsaProvider {
readonly name = "RSA-PSS";
usages: ProviderKeyUsages;
checkAlgorithmParams(algorithm: RsaPssParams): void;
abstract onSign(algorithm: RsaPssParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onVerify(algorithm: RsaPssParams, key: CryptoKey, signature: ArrayBuffer, data: ArrayBuffer): Promise<boolean>;
}
import { ProviderKeyUsages } from "../types";
import { RsaProvider } from "./base";
export declare class RsaSsaProvider extends RsaProvider {
export interface RsaSsaParams extends Algorithm {
}
export declare abstract class RsaSsaProvider extends RsaProvider {
readonly name = "RSASSA-PKCS1-v1_5";
usages: ProviderKeyUsages;
abstract onSign(algorithm: RsaSsaParams, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
abstract onVerify(algorithm: RsaSsaParams, key: CryptoKey, signature: ArrayBuffer, data: ArrayBuffer): Promise<boolean>;
}
export * from "./pem_converter";
export * from "./buffer_converter";
export * from "./is_jwk";
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc