@nmshd/crypto 2.1.2 → 2.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CryptoDerivation.js +6 -0
- package/dist/CryptoDerivation.js.map +1 -1
- package/dist/CryptoErrorCode.d.ts +12 -1
- package/dist/CryptoErrorCode.js +11 -0
- package/dist/CryptoErrorCode.js.map +1 -1
- package/dist/CryptoSerializable.d.ts +5 -1
- package/dist/CryptoSerializable.js +10 -1
- package/dist/CryptoSerializable.js.map +1 -1
- package/dist/CryptoValidation.js +18 -0
- package/dist/CryptoValidation.js.map +1 -1
- package/dist/buildInformation.js +5 -5
- package/dist/crypto-layer/CryptoDerivationHandle.d.ts +40 -0
- package/dist/crypto-layer/CryptoDerivationHandle.js +75 -0
- package/dist/crypto-layer/CryptoDerivationHandle.js.map +1 -0
- package/dist/crypto-layer/CryptoLayerConfig.d.ts +18 -0
- package/dist/crypto-layer/CryptoLayerConfig.js +3 -0
- package/dist/crypto-layer/CryptoLayerConfig.js.map +1 -0
- package/dist/crypto-layer/CryptoLayerProviders.d.ts +18 -0
- package/dist/crypto-layer/CryptoLayerProviders.js +105 -0
- package/dist/crypto-layer/CryptoLayerProviders.js.map +1 -0
- package/dist/crypto-layer/CryptoLayerUtils.d.ts +14 -0
- package/dist/crypto-layer/CryptoLayerUtils.js +106 -0
- package/dist/crypto-layer/CryptoLayerUtils.js.map +1 -0
- package/dist/crypto-layer/encryption/BaseKeyHandle.d.ts +59 -0
- package/dist/crypto-layer/encryption/BaseKeyHandle.js +119 -0
- package/dist/crypto-layer/encryption/BaseKeyHandle.js.map +1 -0
- package/dist/crypto-layer/encryption/CryptoEncryptionHandle.d.ts +27 -0
- package/dist/crypto-layer/encryption/CryptoEncryptionHandle.js +181 -0
- package/dist/crypto-layer/encryption/CryptoEncryptionHandle.js.map +1 -0
- package/dist/crypto-layer/encryption/DeviceBoundDerivedKeyHandle.d.ts +7 -0
- package/dist/crypto-layer/encryption/DeviceBoundDerivedKeyHandle.js +36 -0
- package/dist/crypto-layer/encryption/DeviceBoundDerivedKeyHandle.js.map +1 -0
- package/dist/crypto-layer/encryption/DeviceBoundKeyHandle.d.ts +7 -0
- package/dist/crypto-layer/encryption/DeviceBoundKeyHandle.js +36 -0
- package/dist/crypto-layer/encryption/DeviceBoundKeyHandle.js.map +1 -0
- package/dist/crypto-layer/encryption/PortableDerivedKeyHandle.d.ts +6 -0
- package/dist/crypto-layer/encryption/PortableDerivedKeyHandle.js +35 -0
- package/dist/crypto-layer/encryption/PortableDerivedKeyHandle.js.map +1 -0
- package/dist/crypto-layer/encryption/PortableKeyHandle.d.ts +7 -0
- package/dist/crypto-layer/encryption/PortableKeyHandle.js +36 -0
- package/dist/crypto-layer/encryption/PortableKeyHandle.js.map +1 -0
- package/dist/crypto-layer/index.d.ts +10 -0
- package/dist/crypto-layer/index.js +27 -0
- package/dist/crypto-layer/index.js.map +1 -0
- package/dist/encryption/CryptoEncryption.d.ts +4 -1
- package/dist/encryption/CryptoEncryption.js +15 -0
- package/dist/encryption/CryptoEncryption.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CryptoLayerUtils = void 0;
|
|
4
|
+
const CryptoError_1 = require("../CryptoError");
|
|
5
|
+
const CryptoErrorCode_1 = require("../CryptoErrorCode");
|
|
6
|
+
class CryptoLayerUtils {
|
|
7
|
+
static asymSpecFromCryptoExchangeOrSignatureAlgorithm(algorithm) {
|
|
8
|
+
switch (algorithm) {
|
|
9
|
+
case 1 /* CryptoExchangeAlgorithm.ECDH_P256 */:
|
|
10
|
+
return "P256";
|
|
11
|
+
case 2 /* CryptoExchangeAlgorithm.ECDH_P521 */:
|
|
12
|
+
return "P521";
|
|
13
|
+
case 3 /* CryptoExchangeAlgorithm.ECDH_X25519 */:
|
|
14
|
+
return "Curve25519";
|
|
15
|
+
case 1 /* CryptoSignatureAlgorithm.ECDSA_P256 */:
|
|
16
|
+
return "P256";
|
|
17
|
+
case 2 /* CryptoSignatureAlgorithm.ECDSA_P521 */:
|
|
18
|
+
return "P521";
|
|
19
|
+
case 3 /* CryptoSignatureAlgorithm.ECDSA_ED25519 */:
|
|
20
|
+
return "Curve25519";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
static cryptoHashAlgorithmFromCryptoHash(cryptoHash) {
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
|
|
25
|
+
switch (cryptoHash) {
|
|
26
|
+
case "Sha2_256":
|
|
27
|
+
return 1 /* CryptoHashAlgorithm.SHA256 */;
|
|
28
|
+
case "Sha2_512":
|
|
29
|
+
return 2 /* CryptoHashAlgorithm.SHA512 */;
|
|
30
|
+
case "Blake2b":
|
|
31
|
+
return 3 /* CryptoHashAlgorithm.BLAKE2B */;
|
|
32
|
+
default:
|
|
33
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.CalUnsupportedAlgorithm, `Hash function ${cryptoHash} is not supported by ts crypto.`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
static cryptoHashFromCryptoHashAlgorithm(algorithm) {
|
|
37
|
+
switch (algorithm) {
|
|
38
|
+
case 1 /* CryptoHashAlgorithm.SHA256 */:
|
|
39
|
+
return "Sha2_256";
|
|
40
|
+
case 2 /* CryptoHashAlgorithm.SHA512 */:
|
|
41
|
+
return "Sha2_512";
|
|
42
|
+
case 3 /* CryptoHashAlgorithm.BLAKE2B */:
|
|
43
|
+
return "Blake2b";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
static cipherFromCryptoEncryptionAlgorithm(alg) {
|
|
47
|
+
switch (alg) {
|
|
48
|
+
case 1 /* CryptoEncryptionAlgorithm.AES128_GCM */:
|
|
49
|
+
return "AesGcm128";
|
|
50
|
+
case 2 /* CryptoEncryptionAlgorithm.AES256_GCM */:
|
|
51
|
+
return "AesGcm256";
|
|
52
|
+
case 3 /* CryptoEncryptionAlgorithm.XCHACHA20_POLY1305 */:
|
|
53
|
+
return "XChaCha20Poly1305";
|
|
54
|
+
case 4 /* CryptoEncryptionAlgorithm.AES128_CBC */:
|
|
55
|
+
return "AesCbc128";
|
|
56
|
+
case 5 /* CryptoEncryptionAlgorithm.AES256_CBC */:
|
|
57
|
+
return "AesCbc256";
|
|
58
|
+
case 6 /* CryptoEncryptionAlgorithm.CHACHA20_POLY1305 */:
|
|
59
|
+
return "ChaCha20Poly1305";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
static cryptoEncryptionAlgorithmFromCipher(cipher) {
|
|
63
|
+
switch (cipher) {
|
|
64
|
+
case "AesGcm128":
|
|
65
|
+
return 1 /* CryptoEncryptionAlgorithm.AES128_GCM */;
|
|
66
|
+
case "AesGcm256":
|
|
67
|
+
return 2 /* CryptoEncryptionAlgorithm.AES256_GCM */;
|
|
68
|
+
case "AesCbc128":
|
|
69
|
+
return 4 /* CryptoEncryptionAlgorithm.AES128_CBC */;
|
|
70
|
+
case "AesCbc256":
|
|
71
|
+
return 5 /* CryptoEncryptionAlgorithm.AES256_CBC */;
|
|
72
|
+
case "XChaCha20Poly1305":
|
|
73
|
+
return 3 /* CryptoEncryptionAlgorithm.XCHACHA20_POLY1305 */;
|
|
74
|
+
case "ChaCha20Poly1305":
|
|
75
|
+
return 6 /* CryptoEncryptionAlgorithm.CHACHA20_POLY1305 */;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
static argon2OptionsFromIterationsMemLimitAndParallelism(iterations, memlimit, parallelism) {
|
|
79
|
+
const kibiByteBase = 2 ^ 10;
|
|
80
|
+
if (memlimit % kibiByteBase !== 0) {
|
|
81
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.WrongParameters, "rust-crypto uses kibibytes for Argon2. The `memlimit` parameter (in bytes) is not a multiple of `2^10` and thus not convertible without loss.").setContext(CryptoLayerUtils.argon2OptionsFromIterationsMemLimitAndParallelism);
|
|
82
|
+
}
|
|
83
|
+
const memory = memlimit / kibiByteBase;
|
|
84
|
+
const options = {
|
|
85
|
+
memory: memory,
|
|
86
|
+
iterations: iterations,
|
|
87
|
+
parallelism: parallelism
|
|
88
|
+
};
|
|
89
|
+
return options;
|
|
90
|
+
}
|
|
91
|
+
static kdfFromCryptoDerivation(derivationAlgorithm, iterations, memlimit, parallelism) {
|
|
92
|
+
const options = CryptoLayerUtils.argon2OptionsFromIterationsMemLimitAndParallelism(iterations, memlimit, parallelism);
|
|
93
|
+
switch (derivationAlgorithm) {
|
|
94
|
+
case "argon2id" /* CryptoDerivationAlgorithm.ARGON2ID */:
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
96
|
+
return { Argon2id: options };
|
|
97
|
+
case "argon2i" /* CryptoDerivationAlgorithm.ARGON2I */:
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
99
|
+
return { Argon2i: options };
|
|
100
|
+
default:
|
|
101
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.WrongParameters, `Crypto derivation algorithm '${derivationAlgorithm}' not supported.`).setContext(CryptoLayerUtils.kdfFromCryptoDerivation);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.CryptoLayerUtils = CryptoLayerUtils;
|
|
106
|
+
//# sourceMappingURL=CryptoLayerUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CryptoLayerUtils.js","sourceRoot":"","sources":["../../src/crypto-layer/CryptoLayerUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ISerializable, ISerialized, SerializableAsync } from "@js-soft/ts-serval";
|
|
2
|
+
import { KeyHandle, KeySpec, Provider } from "@nmshd/rs-crypto-types";
|
|
3
|
+
import { CoreBuffer, ICoreBuffer } from "../../CoreBuffer";
|
|
4
|
+
import { CryptoSerializableAsync } from "../../CryptoSerializable";
|
|
5
|
+
import { ProviderIdentifier } from "../CryptoLayerProviders";
|
|
6
|
+
export interface IBaseKeyHandleSerialized extends ISerialized {
|
|
7
|
+
kid: string;
|
|
8
|
+
pnm: string;
|
|
9
|
+
spc: KeySpec;
|
|
10
|
+
}
|
|
11
|
+
export interface IBaseKeyHandle extends ISerializable {
|
|
12
|
+
id: string;
|
|
13
|
+
providerName: string;
|
|
14
|
+
spec: KeySpec;
|
|
15
|
+
}
|
|
16
|
+
export interface BaseKeyHandleConstructor<T extends BaseKeyHandle> {
|
|
17
|
+
new (): T;
|
|
18
|
+
deserialize(value: string): Promise<T>;
|
|
19
|
+
fromProviderAndKeyHandle(provider: Provider, keyHandle: KeyHandle, other?: {
|
|
20
|
+
providerName?: string;
|
|
21
|
+
keyId?: string;
|
|
22
|
+
keySpec?: KeySpec;
|
|
23
|
+
}): Promise<T>;
|
|
24
|
+
fromAny(value: any): Promise<T>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Represents a handle to a secret key used for symmetric encryption/decryption within the crypto layer.
|
|
28
|
+
* This handle encapsulates a reference to the key material, managed by the underlying crypto provider,
|
|
29
|
+
* without exposing the raw key material directly.
|
|
30
|
+
*/
|
|
31
|
+
export declare abstract class BaseKeyHandle extends CryptoSerializableAsync implements IBaseKeyHandle {
|
|
32
|
+
id: string;
|
|
33
|
+
providerName: string;
|
|
34
|
+
spec: KeySpec;
|
|
35
|
+
provider: Provider;
|
|
36
|
+
keyHandle: KeyHandle;
|
|
37
|
+
/**
|
|
38
|
+
* Deserializes an object representation of a {@link BaseKeyHandle}.
|
|
39
|
+
*
|
|
40
|
+
* This method is not able to import raw keys or {@link KeyHandle}.
|
|
41
|
+
*/
|
|
42
|
+
static from<T extends BaseKeyHandle>(this: BaseKeyHandleConstructor<T>, value: BaseKeyHandleConstructor<T> | IBaseKeyHandle | CoreBuffer): Promise<T>;
|
|
43
|
+
/** @see from */
|
|
44
|
+
static fromJSON<T extends BaseKeyHandle>(this: BaseKeyHandleConstructor<T>, value: IBaseKeyHandleSerialized): Promise<T>;
|
|
45
|
+
/** @see from */
|
|
46
|
+
static fromBase64<T extends BaseKeyHandle>(this: BaseKeyHandleConstructor<T>, value: string): Promise<T>;
|
|
47
|
+
/**
|
|
48
|
+
* Creates a new {@link BaseKeyHandle} or its child from an existing {@link KeyHandle}.
|
|
49
|
+
*/
|
|
50
|
+
static fromProviderAndKeyHandle<T extends BaseKeyHandle>(this: new () => T, provider: Provider, keyHandle: KeyHandle): Promise<T>;
|
|
51
|
+
protected static preFrom(value: any): any;
|
|
52
|
+
static postFrom<T extends SerializableAsync>(value: T): Promise<T>;
|
|
53
|
+
}
|
|
54
|
+
export declare abstract class ImportableBaseKeyHandle extends BaseKeyHandle {
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new {@link BaseKeyHandle} or its child by importing a raw key into a provider.
|
|
57
|
+
*/
|
|
58
|
+
static fromRawKey<T extends ImportableBaseKeyHandle>(this: BaseKeyHandleConstructor<T>, providerIdent: ProviderIdentifier, rawKey: ICoreBuffer, spec: KeySpec): Promise<T>;
|
|
59
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ImportableBaseKeyHandle = exports.BaseKeyHandle = void 0;
|
|
13
|
+
const ts_serval_1 = require("@js-soft/ts-serval");
|
|
14
|
+
const checks_1 = require("@nmshd/rs-crypto-types/checks");
|
|
15
|
+
const CoreBuffer_1 = require("../../CoreBuffer");
|
|
16
|
+
const CryptoError_1 = require("../../CryptoError");
|
|
17
|
+
const CryptoErrorCode_1 = require("../../CryptoErrorCode");
|
|
18
|
+
const CryptoSerializable_1 = require("../../CryptoSerializable");
|
|
19
|
+
const CryptoLayerProviders_1 = require("../CryptoLayerProviders");
|
|
20
|
+
/**
|
|
21
|
+
* Represents a handle to a secret key used for symmetric encryption/decryption within the crypto layer.
|
|
22
|
+
* This handle encapsulates a reference to the key material, managed by the underlying crypto provider,
|
|
23
|
+
* without exposing the raw key material directly.
|
|
24
|
+
*/
|
|
25
|
+
let BaseKeyHandle = class BaseKeyHandle extends CryptoSerializable_1.CryptoSerializableAsync {
|
|
26
|
+
/**
|
|
27
|
+
* Deserializes an object representation of a {@link BaseKeyHandle}.
|
|
28
|
+
*
|
|
29
|
+
* This method is not able to import raw keys or {@link KeyHandle}.
|
|
30
|
+
*/
|
|
31
|
+
static async from(value) {
|
|
32
|
+
return await this.fromAny(value);
|
|
33
|
+
}
|
|
34
|
+
/** @see from */
|
|
35
|
+
static async fromJSON(value) {
|
|
36
|
+
return await this.fromAny(value);
|
|
37
|
+
}
|
|
38
|
+
/** @see from */
|
|
39
|
+
static async fromBase64(value) {
|
|
40
|
+
return await this.deserialize(CoreBuffer_1.CoreBuffer.base64_utf8(value));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new {@link BaseKeyHandle} or its child from an existing {@link KeyHandle}.
|
|
44
|
+
*/
|
|
45
|
+
static async fromProviderAndKeyHandle(provider, keyHandle) {
|
|
46
|
+
const result = new this();
|
|
47
|
+
[result.providerName, result.id, result.spec] = await Promise.all([
|
|
48
|
+
provider.providerName(),
|
|
49
|
+
keyHandle.id(),
|
|
50
|
+
keyHandle.spec()
|
|
51
|
+
]);
|
|
52
|
+
result.provider = provider;
|
|
53
|
+
result.keyHandle = keyHandle;
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
static preFrom(value) {
|
|
57
|
+
if (value.kid) {
|
|
58
|
+
value = {
|
|
59
|
+
id: value.kid,
|
|
60
|
+
providerName: value.pnm,
|
|
61
|
+
spec: value.spc
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
static async postFrom(value) {
|
|
67
|
+
if (!(value instanceof this)) {
|
|
68
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.DeserializeValidation, "Expected 'BaseKeyHandle' in postFrom.");
|
|
69
|
+
}
|
|
70
|
+
const provider = (0, CryptoLayerProviders_1.getProvider)({ providerName: value.providerName });
|
|
71
|
+
const keyHandle = await provider.loadKey(value.id);
|
|
72
|
+
value.keyHandle = keyHandle;
|
|
73
|
+
value.provider = provider;
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
exports.BaseKeyHandle = BaseKeyHandle;
|
|
78
|
+
__decorate([
|
|
79
|
+
(0, ts_serval_1.validate)(),
|
|
80
|
+
(0, ts_serval_1.serialize)(),
|
|
81
|
+
__metadata("design:type", String)
|
|
82
|
+
], BaseKeyHandle.prototype, "id", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, ts_serval_1.validate)(),
|
|
85
|
+
(0, ts_serval_1.serialize)(),
|
|
86
|
+
__metadata("design:type", String)
|
|
87
|
+
], BaseKeyHandle.prototype, "providerName", void 0);
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, ts_serval_1.validate)({
|
|
90
|
+
customValidator: (value) => {
|
|
91
|
+
if ((0, checks_1.isKeySpec)(value))
|
|
92
|
+
return undefined;
|
|
93
|
+
return "Is not of type KeySpec.";
|
|
94
|
+
}
|
|
95
|
+
}),
|
|
96
|
+
(0, ts_serval_1.serialize)(),
|
|
97
|
+
__metadata("design:type", Object)
|
|
98
|
+
], BaseKeyHandle.prototype, "spec", void 0);
|
|
99
|
+
exports.BaseKeyHandle = BaseKeyHandle = __decorate([
|
|
100
|
+
(0, ts_serval_1.type)("BaseKeyHandle")
|
|
101
|
+
], BaseKeyHandle);
|
|
102
|
+
class ImportableBaseKeyHandle extends BaseKeyHandle {
|
|
103
|
+
/**
|
|
104
|
+
* Creates a new {@link BaseKeyHandle} or its child by importing a raw key into a provider.
|
|
105
|
+
*/
|
|
106
|
+
static async fromRawKey(providerIdent, rawKey, spec) {
|
|
107
|
+
const provider = (0, CryptoLayerProviders_1.getProvider)(providerIdent);
|
|
108
|
+
let keyHandle;
|
|
109
|
+
try {
|
|
110
|
+
keyHandle = await provider.importKey(spec, rawKey.buffer);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.CalImportOfKey, "Failed to import raw symmetric key.", undefined, e, ImportableBaseKeyHandle.fromRawKey);
|
|
114
|
+
}
|
|
115
|
+
return await this.fromProviderAndKeyHandle(provider, keyHandle);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.ImportableBaseKeyHandle = ImportableBaseKeyHandle;
|
|
119
|
+
//# sourceMappingURL=BaseKeyHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseKeyHandle.js","sourceRoot":"","sources":["../../../src/crypto-layer/encryption/BaseKeyHandle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Provider } from "@nmshd/rs-crypto-types";
|
|
2
|
+
import { CoreBuffer } from "../../CoreBuffer";
|
|
3
|
+
import { CryptoCipher } from "../../encryption/CryptoCipher";
|
|
4
|
+
import { CryptoEncryptionAlgorithm } from "../../encryption/CryptoEncryption";
|
|
5
|
+
import { CryptoSecretKey } from "../../encryption/CryptoSecretKey";
|
|
6
|
+
import { CryptoHashAlgorithm } from "../../hash/CryptoHash";
|
|
7
|
+
import { ProviderIdentifier } from "../CryptoLayerProviders";
|
|
8
|
+
import { BaseKeyHandle } from "./BaseKeyHandle";
|
|
9
|
+
import { DeviceBoundKeyHandle } from "./DeviceBoundKeyHandle";
|
|
10
|
+
import { PortableDerivedKeyHandle } from "./PortableDerivedKeyHandle";
|
|
11
|
+
import { PortableKeyHandle } from "./PortableKeyHandle";
|
|
12
|
+
export declare class CryptoEncryptionHandle {
|
|
13
|
+
private static generateKeyHandle;
|
|
14
|
+
static generateDeviceBoundKeyHandle(providerIdent: ProviderIdentifier, encryptionAlgorithm: CryptoEncryptionAlgorithm, hashAlgorithm: CryptoHashAlgorithm): Promise<DeviceBoundKeyHandle>;
|
|
15
|
+
static generatePortableKeyHandle(providerIdent: ProviderIdentifier, encryptionAlgorithm: CryptoEncryptionAlgorithm, hashAlgorithm: CryptoHashAlgorithm): Promise<PortableKeyHandle>;
|
|
16
|
+
static encrypt<T extends BaseKeyHandle>(plaintext: CoreBuffer, secretKeyHandle: T, nonce?: CoreBuffer): Promise<CryptoCipher>;
|
|
17
|
+
static encryptWithCounter<T extends BaseKeyHandle>(plaintext: CoreBuffer, secretKeyHandle: T, nonce: CoreBuffer, counter: number): Promise<CryptoCipher>;
|
|
18
|
+
static decrypt<T extends BaseKeyHandle>(cipher: CryptoCipher, secretKeyHandle: T, nonce?: CoreBuffer): Promise<CoreBuffer>;
|
|
19
|
+
static decryptWithCounter<T extends BaseKeyHandle>(cipher: CryptoCipher, secretKeyHandle: T, nonce: CoreBuffer, counter: number): Promise<CoreBuffer>;
|
|
20
|
+
static createNonce(algorithm: CryptoEncryptionAlgorithm, provider: Provider): Promise<CoreBuffer>;
|
|
21
|
+
static extractRawKey(portableKeyHandle: PortableKeyHandle | PortableDerivedKeyHandle): Promise<CoreBuffer>;
|
|
22
|
+
static cryptoSecretKeyFromPortableKeyHandle(portableKeyHandle: PortableKeyHandle | PortableDerivedKeyHandle): Promise<CryptoSecretKey>;
|
|
23
|
+
private static keyHandleFromCryptoSecretKey;
|
|
24
|
+
static portableKeyHandleFromCryptoSecretKey(providerIdent: ProviderIdentifier, cryptoSecretKey: CryptoSecretKey, signingHash?: CryptoHashAlgorithm): Promise<PortableKeyHandle>;
|
|
25
|
+
static portableDerivedKeyHandleFromCryptoSecretKey(providerIdent: ProviderIdentifier, cryptoSecretKey: CryptoSecretKey, signingHash?: CryptoHashAlgorithm): Promise<PortableDerivedKeyHandle>;
|
|
26
|
+
private static _addCounter;
|
|
27
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CryptoEncryptionHandle = void 0;
|
|
4
|
+
const CoreBuffer_1 = require("../../CoreBuffer");
|
|
5
|
+
const CryptoError_1 = require("../../CryptoError");
|
|
6
|
+
const CryptoErrorCode_1 = require("../../CryptoErrorCode");
|
|
7
|
+
const CryptoValidation_1 = require("../../CryptoValidation");
|
|
8
|
+
const CryptoCipher_1 = require("../../encryption/CryptoCipher");
|
|
9
|
+
const CryptoSecretKey_1 = require("../../encryption/CryptoSecretKey");
|
|
10
|
+
const CryptoLayerProviders_1 = require("../CryptoLayerProviders");
|
|
11
|
+
const CryptoLayerUtils_1 = require("../CryptoLayerUtils");
|
|
12
|
+
const DeviceBoundKeyHandle_1 = require("./DeviceBoundKeyHandle");
|
|
13
|
+
const PortableDerivedKeyHandle_1 = require("./PortableDerivedKeyHandle");
|
|
14
|
+
const PortableKeyHandle_1 = require("./PortableKeyHandle");
|
|
15
|
+
class CryptoEncryptionHandle {
|
|
16
|
+
static async generateKeyHandle(constructor, providerIdent, spec) {
|
|
17
|
+
const provider = (0, CryptoLayerProviders_1.getProvider)(providerIdent);
|
|
18
|
+
const keyHandle = await provider.createKey(spec);
|
|
19
|
+
const secretKeyHandle = await constructor.fromProviderAndKeyHandle(provider, keyHandle, {
|
|
20
|
+
keySpec: spec
|
|
21
|
+
});
|
|
22
|
+
return secretKeyHandle;
|
|
23
|
+
}
|
|
24
|
+
static async generateDeviceBoundKeyHandle(providerIdent, encryptionAlgorithm, hashAlgorithm) {
|
|
25
|
+
const deviceBoundSpec = {
|
|
26
|
+
cipher: CryptoLayerUtils_1.CryptoLayerUtils.cipherFromCryptoEncryptionAlgorithm(encryptionAlgorithm),
|
|
27
|
+
signing_hash: CryptoLayerUtils_1.CryptoLayerUtils.cryptoHashFromCryptoHashAlgorithm(hashAlgorithm),
|
|
28
|
+
ephemeral: false,
|
|
29
|
+
non_exportable: true
|
|
30
|
+
};
|
|
31
|
+
return await this.generateKeyHandle(DeviceBoundKeyHandle_1.DeviceBoundKeyHandle, providerIdent, deviceBoundSpec);
|
|
32
|
+
}
|
|
33
|
+
static async generatePortableKeyHandle(providerIdent, encryptionAlgorithm, hashAlgorithm) {
|
|
34
|
+
const portableSpec = {
|
|
35
|
+
cipher: CryptoLayerUtils_1.CryptoLayerUtils.cipherFromCryptoEncryptionAlgorithm(encryptionAlgorithm),
|
|
36
|
+
signing_hash: CryptoLayerUtils_1.CryptoLayerUtils.cryptoHashFromCryptoHashAlgorithm(hashAlgorithm),
|
|
37
|
+
ephemeral: false,
|
|
38
|
+
non_exportable: false
|
|
39
|
+
};
|
|
40
|
+
return await this.generateKeyHandle(PortableKeyHandle_1.PortableKeyHandle, providerIdent, portableSpec);
|
|
41
|
+
}
|
|
42
|
+
static async encrypt(plaintext, secretKeyHandle, nonce) {
|
|
43
|
+
const encryptionAlgorithm = CryptoLayerUtils_1.CryptoLayerUtils.cryptoEncryptionAlgorithmFromCipher(secretKeyHandle.spec.cipher);
|
|
44
|
+
if (nonce === undefined || nonce.buffer.length === 0) {
|
|
45
|
+
nonce = await this.createNonce(encryptionAlgorithm, secretKeyHandle.provider);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
CryptoValidation_1.CryptoValidation.checkNonceForAlgorithm(nonce, encryptionAlgorithm);
|
|
49
|
+
}
|
|
50
|
+
let cipher;
|
|
51
|
+
try {
|
|
52
|
+
cipher = await secretKeyHandle.keyHandle.encryptWithIv(plaintext.buffer, nonce.buffer);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.EncryptionEncrypt, `${e}`, undefined, e, CryptoEncryptionHandle.encrypt);
|
|
56
|
+
}
|
|
57
|
+
return CryptoCipher_1.CryptoCipher.from({
|
|
58
|
+
cipher: CoreBuffer_1.CoreBuffer.from(cipher),
|
|
59
|
+
algorithm: encryptionAlgorithm,
|
|
60
|
+
nonce
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
static async encryptWithCounter(plaintext, secretKeyHandle, nonce, counter) {
|
|
64
|
+
const encryptionAlgorithm = CryptoLayerUtils_1.CryptoLayerUtils.cryptoEncryptionAlgorithmFromCipher(secretKeyHandle.spec.cipher);
|
|
65
|
+
CryptoValidation_1.CryptoValidation.checkCounter(counter);
|
|
66
|
+
CryptoValidation_1.CryptoValidation.checkNonceForAlgorithm(nonce, encryptionAlgorithm);
|
|
67
|
+
const publicNonce = this._addCounter(nonce.buffer, counter);
|
|
68
|
+
let cipher;
|
|
69
|
+
try {
|
|
70
|
+
cipher = await secretKeyHandle.keyHandle.encryptWithIv(plaintext.buffer, publicNonce.buffer);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.EncryptionEncrypt, `${e}`, undefined, e, CryptoEncryptionHandle.encryptWithCounter);
|
|
74
|
+
}
|
|
75
|
+
return CryptoCipher_1.CryptoCipher.from({
|
|
76
|
+
cipher: CoreBuffer_1.CoreBuffer.from(cipher),
|
|
77
|
+
algorithm: encryptionAlgorithm,
|
|
78
|
+
counter
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
static async decrypt(cipher, secretKeyHandle, nonce) {
|
|
82
|
+
const encryptionAlgorithm = CryptoLayerUtils_1.CryptoLayerUtils.cryptoEncryptionAlgorithmFromCipher(secretKeyHandle.spec.cipher);
|
|
83
|
+
let publicNonce;
|
|
84
|
+
if (nonce !== undefined) {
|
|
85
|
+
CryptoValidation_1.CryptoValidation.checkNonceForAlgorithm(nonce, encryptionAlgorithm);
|
|
86
|
+
publicNonce = nonce.buffer;
|
|
87
|
+
}
|
|
88
|
+
else if (cipher.nonce !== undefined) {
|
|
89
|
+
publicNonce = cipher.nonce.buffer;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.EncryptionWrongNonce, "Cipher does not contain a nonce and no nonce is given.").setContext(CryptoEncryptionHandle.decrypt);
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const buffer = await secretKeyHandle.keyHandle.decryptData(cipher.cipher.buffer, publicNonce);
|
|
96
|
+
return CoreBuffer_1.CoreBuffer.from(buffer);
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.EncryptionEncrypt, `${e}`, undefined, e, CryptoEncryptionHandle.decrypt);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
static async decryptWithCounter(cipher, secretKeyHandle, nonce, counter) {
|
|
103
|
+
const encryptionAlgorithm = CryptoLayerUtils_1.CryptoLayerUtils.cryptoEncryptionAlgorithmFromCipher(secretKeyHandle.spec.cipher);
|
|
104
|
+
CryptoValidation_1.CryptoValidation.checkCounter(counter);
|
|
105
|
+
CryptoValidation_1.CryptoValidation.checkNonceForAlgorithm(nonce, encryptionAlgorithm);
|
|
106
|
+
const publicNonce = this._addCounter(nonce.buffer, counter);
|
|
107
|
+
try {
|
|
108
|
+
const buffer = await secretKeyHandle.keyHandle.decryptData(cipher.cipher.buffer, publicNonce.buffer);
|
|
109
|
+
return CoreBuffer_1.CoreBuffer.from(buffer);
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.EncryptionDecrypt, `${e}`, undefined, e, CryptoEncryptionHandle.decryptWithCounter);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
static async createNonce(algorithm, provider) {
|
|
116
|
+
let nonceLength;
|
|
117
|
+
switch (algorithm) {
|
|
118
|
+
case 1 /* CryptoEncryptionAlgorithm.AES128_GCM */:
|
|
119
|
+
case 2 /* CryptoEncryptionAlgorithm.AES256_GCM */:
|
|
120
|
+
case 6 /* CryptoEncryptionAlgorithm.CHACHA20_POLY1305 */:
|
|
121
|
+
nonceLength = 12;
|
|
122
|
+
break;
|
|
123
|
+
case 4 /* CryptoEncryptionAlgorithm.AES128_CBC */:
|
|
124
|
+
case 5 /* CryptoEncryptionAlgorithm.AES256_CBC */:
|
|
125
|
+
nonceLength = 16;
|
|
126
|
+
break;
|
|
127
|
+
case 3 /* CryptoEncryptionAlgorithm.XCHACHA20_POLY1305 */:
|
|
128
|
+
nonceLength = 24;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
const buffer = await provider.getRandom(nonceLength);
|
|
132
|
+
return CoreBuffer_1.CoreBuffer.from(buffer);
|
|
133
|
+
}
|
|
134
|
+
static async extractRawKey(portableKeyHandle) {
|
|
135
|
+
const rawKey = await portableKeyHandle.keyHandle.extractKey();
|
|
136
|
+
return new CoreBuffer_1.CoreBuffer(rawKey);
|
|
137
|
+
}
|
|
138
|
+
static async cryptoSecretKeyFromPortableKeyHandle(portableKeyHandle) {
|
|
139
|
+
const rawKeyPromise = CryptoEncryptionHandle.extractRawKey(portableKeyHandle);
|
|
140
|
+
const algorithm = CryptoLayerUtils_1.CryptoLayerUtils.cryptoEncryptionAlgorithmFromCipher(portableKeyHandle.spec.cipher);
|
|
141
|
+
const cryptoSecretKeyObj = {
|
|
142
|
+
algorithm: algorithm,
|
|
143
|
+
secretKey: await rawKeyPromise
|
|
144
|
+
};
|
|
145
|
+
return CryptoSecretKey_1.CryptoSecretKey.from(cryptoSecretKeyObj);
|
|
146
|
+
}
|
|
147
|
+
static async keyHandleFromCryptoSecretKey(constructor, providerIdent, cryptoSecretKey, signingHash, ephemeral) {
|
|
148
|
+
const cipher = CryptoLayerUtils_1.CryptoLayerUtils.cipherFromCryptoEncryptionAlgorithm(cryptoSecretKey.algorithm);
|
|
149
|
+
const keySpec = {
|
|
150
|
+
cipher: cipher,
|
|
151
|
+
ephemeral: ephemeral,
|
|
152
|
+
signing_hash: CryptoLayerUtils_1.CryptoLayerUtils.cryptoHashFromCryptoHashAlgorithm(signingHash),
|
|
153
|
+
non_exportable: false
|
|
154
|
+
};
|
|
155
|
+
const provider = (0, CryptoLayerProviders_1.getProvider)(providerIdent);
|
|
156
|
+
const keyHandle = await provider.importKey(keySpec, cryptoSecretKey.secretKey.buffer);
|
|
157
|
+
return await constructor.fromProviderAndKeyHandle(provider, keyHandle);
|
|
158
|
+
}
|
|
159
|
+
static async portableKeyHandleFromCryptoSecretKey(providerIdent, cryptoSecretKey, signingHash = 2 /* CryptoHashAlgorithm.SHA512 */) {
|
|
160
|
+
return await CryptoEncryptionHandle.keyHandleFromCryptoSecretKey(PortableKeyHandle_1.PortableKeyHandle, providerIdent, cryptoSecretKey, signingHash, false);
|
|
161
|
+
}
|
|
162
|
+
static async portableDerivedKeyHandleFromCryptoSecretKey(providerIdent, cryptoSecretKey, signingHash = 2 /* CryptoHashAlgorithm.SHA512 */) {
|
|
163
|
+
return await CryptoEncryptionHandle.keyHandleFromCryptoSecretKey(PortableDerivedKeyHandle_1.PortableDerivedKeyHandle, providerIdent, cryptoSecretKey, signingHash, true);
|
|
164
|
+
}
|
|
165
|
+
static _addCounter(nonce, counter) {
|
|
166
|
+
let buffer;
|
|
167
|
+
if (nonce instanceof Uint8Array) {
|
|
168
|
+
buffer = new CoreBuffer_1.CoreBuffer(nonce);
|
|
169
|
+
}
|
|
170
|
+
else if (nonce instanceof CoreBuffer_1.CoreBuffer) {
|
|
171
|
+
buffer = nonce;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
throw new CryptoError_1.CryptoError(CryptoErrorCode_1.CryptoErrorCode.EncryptionWrongNonce).setContext(CryptoEncryptionHandle.decryptWithCounter);
|
|
175
|
+
}
|
|
176
|
+
const clone = buffer.clone().add(counter);
|
|
177
|
+
return clone;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.CryptoEncryptionHandle = CryptoEncryptionHandle;
|
|
181
|
+
//# sourceMappingURL=CryptoEncryptionHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CryptoEncryptionHandle.js","sourceRoot":"","sources":["../../../src/crypto-layer/encryption/CryptoEncryptionHandle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseKeyHandle, IBaseKeyHandleSerialized } from "./BaseKeyHandle";
|
|
2
|
+
/** Non exportable, ephemeral key handle that is derived from a device bound key handle. */
|
|
3
|
+
export declare class DeviceBoundDerivedKeyHandle extends BaseKeyHandle {
|
|
4
|
+
readonly _isDeviceBoundDerivedKeyHandle = true;
|
|
5
|
+
toJSON(verbose?: boolean): IBaseKeyHandleSerialized;
|
|
6
|
+
toBase64(verbose?: boolean): string;
|
|
7
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DeviceBoundDerivedKeyHandle = void 0;
|
|
10
|
+
const ts_serval_1 = require("@js-soft/ts-serval");
|
|
11
|
+
const CoreBuffer_1 = require("../../CoreBuffer");
|
|
12
|
+
const BaseKeyHandle_1 = require("./BaseKeyHandle");
|
|
13
|
+
/** Non exportable, ephemeral key handle that is derived from a device bound key handle. */
|
|
14
|
+
let DeviceBoundDerivedKeyHandle = class DeviceBoundDerivedKeyHandle extends BaseKeyHandle_1.BaseKeyHandle {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
// Phantom marker to make this type incompatible to other types that extend `BaseKeyHandle`.
|
|
18
|
+
this._isDeviceBoundDerivedKeyHandle = true;
|
|
19
|
+
}
|
|
20
|
+
toJSON(verbose = true) {
|
|
21
|
+
return {
|
|
22
|
+
kid: this.id,
|
|
23
|
+
pnm: this.providerName,
|
|
24
|
+
spc: this.spec,
|
|
25
|
+
"@type": verbose ? "DeviceBoundDerivedKeyHandle" : undefined
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
toBase64(verbose = true) {
|
|
29
|
+
return CoreBuffer_1.CoreBuffer.utf8_base64(this.serialize(verbose));
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
exports.DeviceBoundDerivedKeyHandle = DeviceBoundDerivedKeyHandle;
|
|
33
|
+
exports.DeviceBoundDerivedKeyHandle = DeviceBoundDerivedKeyHandle = __decorate([
|
|
34
|
+
(0, ts_serval_1.type)("DeviceBoundDerivedKeyHandle")
|
|
35
|
+
], DeviceBoundDerivedKeyHandle);
|
|
36
|
+
//# sourceMappingURL=DeviceBoundDerivedKeyHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceBoundDerivedKeyHandle.js","sourceRoot":"","sources":["../../../src/crypto-layer/encryption/DeviceBoundDerivedKeyHandle.ts"],"names":[],"mappings":";;;;;;;;;AAAA,kDAA0C;AAC1C,iDAA8C;AAC9C,mDAA0E;AAE1E,2FAA2F;AAEpF,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,6BAAa;IAAvD;;QACH,4FAA4F;QAC5E,mCAA8B,GAAG,IAAI,CAAC;IAc1D,CAAC;IAZmB,MAAM,CAAC,OAAO,GAAG,IAAI;QACjC,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,EAAE;YACZ,GAAG,EAAE,IAAI,CAAC,YAAY;YACtB,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAC;IACN,CAAC;IAEe,QAAQ,CAAC,OAAO,GAAG,IAAI;QACnC,OAAO,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ,CAAA;AAhBY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,gBAAI,EAAC,6BAA6B,CAAC;GACvB,2BAA2B,CAgBvC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseKeyHandle, IBaseKeyHandleSerialized } from "./BaseKeyHandle";
|
|
2
|
+
/** Key handle that is non exportable (the key cannot be extracted). */
|
|
3
|
+
export declare class DeviceBoundKeyHandle extends BaseKeyHandle {
|
|
4
|
+
readonly _isDeviceBoundKeyHandle = true;
|
|
5
|
+
toJSON(verbose?: boolean): IBaseKeyHandleSerialized;
|
|
6
|
+
toBase64(verbose?: boolean): string;
|
|
7
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DeviceBoundKeyHandle = void 0;
|
|
10
|
+
const ts_serval_1 = require("@js-soft/ts-serval");
|
|
11
|
+
const CoreBuffer_1 = require("../../CoreBuffer");
|
|
12
|
+
const BaseKeyHandle_1 = require("./BaseKeyHandle");
|
|
13
|
+
/** Key handle that is non exportable (the key cannot be extracted). */
|
|
14
|
+
let DeviceBoundKeyHandle = class DeviceBoundKeyHandle extends BaseKeyHandle_1.BaseKeyHandle {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
// Phantom marker to make this type incompatible to other types that extend `BaseKeyHandle`.
|
|
18
|
+
this._isDeviceBoundKeyHandle = true;
|
|
19
|
+
}
|
|
20
|
+
toJSON(verbose = true) {
|
|
21
|
+
return {
|
|
22
|
+
kid: this.id,
|
|
23
|
+
pnm: this.providerName,
|
|
24
|
+
spc: this.spec,
|
|
25
|
+
"@type": verbose ? "DeviceBoundKeyHandle" : undefined
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
toBase64(verbose = true) {
|
|
29
|
+
return CoreBuffer_1.CoreBuffer.utf8_base64(this.serialize(verbose));
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
exports.DeviceBoundKeyHandle = DeviceBoundKeyHandle;
|
|
33
|
+
exports.DeviceBoundKeyHandle = DeviceBoundKeyHandle = __decorate([
|
|
34
|
+
(0, ts_serval_1.type)("DeviceBoundKeyHandle")
|
|
35
|
+
], DeviceBoundKeyHandle);
|
|
36
|
+
//# sourceMappingURL=DeviceBoundKeyHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceBoundKeyHandle.js","sourceRoot":"","sources":["../../../src/crypto-layer/encryption/DeviceBoundKeyHandle.ts"],"names":[],"mappings":";;;;;;;;;AAAA,kDAA0C;AAC1C,iDAA8C;AAC9C,mDAA0E;AAE1E,uEAAuE;AAEhE,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,6BAAa;IAAhD;;QACH,4FAA4F;QAC5E,4BAAuB,GAAG,IAAI,CAAC;IAcnD,CAAC;IAZmB,MAAM,CAAC,OAAO,GAAG,IAAI;QACjC,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,EAAE;YACZ,GAAG,EAAE,IAAI,CAAC,YAAY;YACtB,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC;IACN,CAAC;IAEe,QAAQ,CAAC,OAAO,GAAG,IAAI;QACnC,OAAO,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ,CAAA;AAhBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,gBAAI,EAAC,sBAAsB,CAAC;GAChB,oBAAoB,CAgBhC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseKeyHandle, IBaseKeyHandleSerialized } from "./BaseKeyHandle";
|
|
2
|
+
export declare class PortableDerivedKeyHandle extends BaseKeyHandle {
|
|
3
|
+
readonly _isPortableDeriveKeyHandle = true;
|
|
4
|
+
toJSON(verbose?: boolean): IBaseKeyHandleSerialized;
|
|
5
|
+
toBase64(verbose?: boolean): string;
|
|
6
|
+
}
|