@okee-e2ee/protocol 0.1.0 → 0.1.2
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/constants/index.d.ts +2 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +1 -0
- package/dist/constants/protocol.d.ts +2 -0
- package/dist/constants/protocol.d.ts.map +1 -0
- package/dist/constants/protocol.js +1 -0
- package/dist/crypto-core/constants/algorithms.d.ts +27 -0
- package/dist/crypto-core/constants/algorithms.d.ts.map +1 -0
- package/dist/crypto-core/constants/algorithms.js +26 -0
- package/dist/crypto-core/constants/context.d.ts +2 -0
- package/dist/crypto-core/constants/context.d.ts.map +1 -0
- package/dist/crypto-core/constants/context.js +5 -0
- package/dist/crypto-core/constants/index.d.ts +4 -0
- package/dist/crypto-core/constants/index.d.ts.map +1 -0
- package/dist/crypto-core/constants/index.js +3 -0
- package/dist/crypto-core/constants/protocol.d.ts +3 -0
- package/dist/crypto-core/constants/protocol.d.ts.map +1 -0
- package/dist/crypto-core/constants/protocol.js +2 -0
- package/dist/crypto-core/contracts/CodecContract.d.ts +7 -0
- package/dist/crypto-core/contracts/CodecContract.d.ts.map +1 -0
- package/dist/crypto-core/contracts/CodecContract.js +1 -0
- package/dist/crypto-core/contracts/index.d.ts +2 -0
- package/dist/crypto-core/contracts/index.d.ts.map +1 -0
- package/dist/crypto-core/contracts/index.js +1 -0
- package/dist/crypto-core/encoding/ByteReader.d.ts +20 -0
- package/dist/crypto-core/encoding/ByteReader.d.ts.map +1 -0
- package/dist/crypto-core/encoding/ByteReader.js +79 -0
- package/dist/crypto-core/encoding/ByteWriter.d.ts +20 -0
- package/dist/crypto-core/encoding/ByteWriter.d.ts.map +1 -0
- package/dist/crypto-core/encoding/ByteWriter.js +95 -0
- package/dist/crypto-core/encoding/helpers/encode-signature-input.d.ts +3 -0
- package/dist/crypto-core/encoding/helpers/encode-signature-input.d.ts.map +1 -0
- package/dist/crypto-core/encoding/helpers/encode-signature-input.js +7 -0
- package/dist/crypto-core/encoding/helpers/index.d.ts +2 -0
- package/dist/crypto-core/encoding/helpers/index.d.ts.map +1 -0
- package/dist/crypto-core/encoding/helpers/index.js +1 -0
- package/dist/crypto-core/encoding/index.d.ts +4 -0
- package/dist/crypto-core/encoding/index.d.ts.map +1 -0
- package/dist/crypto-core/encoding/index.js +3 -0
- package/dist/crypto-core/errors/CryptoCoreError.d.ts +11 -0
- package/dist/crypto-core/errors/CryptoCoreError.d.ts.map +1 -0
- package/dist/crypto-core/errors/CryptoCoreError.js +10 -0
- package/dist/crypto-core/errors/error-codes.d.ts +7 -0
- package/dist/crypto-core/errors/error-codes.d.ts.map +1 -0
- package/dist/crypto-core/errors/error-codes.js +5 -0
- package/dist/crypto-core/errors/error-messages.d.ts +3 -0
- package/dist/crypto-core/errors/error-messages.d.ts.map +1 -0
- package/dist/crypto-core/errors/error-messages.js +6 -0
- package/dist/crypto-core/errors/helpers/execute-crypto-core-or-throw.d.ts +13 -0
- package/dist/crypto-core/errors/helpers/execute-crypto-core-or-throw.d.ts.map +1 -0
- package/dist/crypto-core/errors/helpers/execute-crypto-core-or-throw.js +22 -0
- package/dist/crypto-core/errors/helpers/index.d.ts +2 -0
- package/dist/crypto-core/errors/helpers/index.d.ts.map +1 -0
- package/dist/crypto-core/errors/helpers/index.js +1 -0
- package/dist/crypto-core/errors/index.d.ts +5 -0
- package/dist/crypto-core/errors/index.d.ts.map +1 -0
- package/dist/crypto-core/errors/index.js +4 -0
- package/dist/crypto-core/index.d.ts +8 -0
- package/dist/crypto-core/index.d.ts.map +1 -0
- package/dist/crypto-core/index.js +7 -0
- package/dist/crypto-core/model/brand.d.ts +11 -0
- package/dist/crypto-core/model/brand.d.ts.map +1 -0
- package/dist/crypto-core/model/brand.js +1 -0
- package/dist/crypto-core/model/crypto-inputs.d.ts +20 -0
- package/dist/crypto-core/model/crypto-inputs.d.ts.map +1 -0
- package/dist/crypto-core/model/crypto-inputs.js +1 -0
- package/dist/crypto-core/model/index.d.ts +5 -0
- package/dist/crypto-core/model/index.d.ts.map +1 -0
- package/dist/crypto-core/model/index.js +4 -0
- package/dist/crypto-core/model/keys.d.ts +15 -0
- package/dist/crypto-core/model/keys.d.ts.map +1 -0
- package/dist/crypto-core/model/keys.js +1 -0
- package/dist/crypto-core/model/x-wing.d.ts +10 -0
- package/dist/crypto-core/model/x-wing.d.ts.map +1 -0
- package/dist/crypto-core/model/x-wing.js +1 -0
- package/dist/crypto-core/primitives/CryptoPrimitivesFacade.d.ts +19 -0
- package/dist/crypto-core/primitives/CryptoPrimitivesFacade.d.ts.map +1 -0
- package/dist/crypto-core/primitives/CryptoPrimitivesFacade.js +145 -0
- package/dist/crypto-core/primitives/contracts/CryptoPrimitivesFacadeContract.d.ts +16 -0
- package/dist/crypto-core/primitives/contracts/CryptoPrimitivesFacadeContract.d.ts.map +1 -0
- package/dist/crypto-core/primitives/contracts/CryptoPrimitivesFacadeContract.js +1 -0
- package/dist/crypto-core/primitives/contracts/CryptoPrimitivesPort.d.ts +18 -0
- package/dist/crypto-core/primitives/contracts/CryptoPrimitivesPort.d.ts.map +1 -0
- package/dist/crypto-core/primitives/contracts/CryptoPrimitivesPort.js +1 -0
- package/dist/crypto-core/primitives/contracts/XWingPort.d.ts +8 -0
- package/dist/crypto-core/primitives/contracts/XWingPort.d.ts.map +1 -0
- package/dist/crypto-core/primitives/contracts/XWingPort.js +1 -0
- package/dist/crypto-core/primitives/contracts/index.d.ts +4 -0
- package/dist/crypto-core/primitives/contracts/index.d.ts.map +1 -0
- package/dist/crypto-core/primitives/contracts/index.js +3 -0
- package/dist/crypto-core/primitives/index.d.ts +3 -0
- package/dist/crypto-core/primitives/index.d.ts.map +1 -0
- package/dist/crypto-core/primitives/index.js +2 -0
- package/dist/crypto-core/signature/SignatureFacade.d.ts +23 -0
- package/dist/crypto-core/signature/SignatureFacade.d.ts.map +1 -0
- package/dist/crypto-core/signature/SignatureFacade.js +112 -0
- package/dist/crypto-core/signature/contracts/Ed25519Port.d.ts +9 -0
- package/dist/crypto-core/signature/contracts/Ed25519Port.d.ts.map +1 -0
- package/dist/crypto-core/signature/contracts/Ed25519Port.js +1 -0
- package/dist/crypto-core/signature/contracts/MlDsaPort.d.ts +9 -0
- package/dist/crypto-core/signature/contracts/MlDsaPort.d.ts.map +1 -0
- package/dist/crypto-core/signature/contracts/MlDsaPort.js +1 -0
- package/dist/crypto-core/signature/contracts/SignatureFacadeContract.d.ts +12 -0
- package/dist/crypto-core/signature/contracts/SignatureFacadeContract.d.ts.map +1 -0
- package/dist/crypto-core/signature/contracts/SignatureFacadeContract.js +1 -0
- package/dist/crypto-core/signature/contracts/index.d.ts +4 -0
- package/dist/crypto-core/signature/contracts/index.d.ts.map +1 -0
- package/dist/crypto-core/signature/contracts/index.js +3 -0
- package/dist/crypto-core/signature/index.d.ts +4 -0
- package/dist/crypto-core/signature/index.d.ts.map +1 -0
- package/dist/crypto-core/signature/index.js +3 -0
- package/dist/crypto-core/signature/model/index.d.ts +2 -0
- package/dist/crypto-core/signature/model/index.d.ts.map +1 -0
- package/dist/crypto-core/signature/model/index.js +1 -0
- package/dist/crypto-core/signature/model/signature-model.d.ts +18 -0
- package/dist/crypto-core/signature/model/signature-model.d.ts.map +1 -0
- package/dist/crypto-core/signature/model/signature-model.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/transport/codecs/RelayEncryptionKeyBundleCodec.d.ts +10 -0
- package/dist/transport/codecs/RelayEncryptionKeyBundleCodec.d.ts.map +1 -0
- package/dist/transport/codecs/RelayEncryptionKeyBundleCodec.js +42 -0
- package/dist/transport/codecs/RelayIdentityPublicKeyCodec.d.ts +10 -0
- package/dist/transport/codecs/RelayIdentityPublicKeyCodec.d.ts.map +1 -0
- package/dist/transport/codecs/RelayIdentityPublicKeyCodec.js +27 -0
- package/dist/transport/codecs/index.d.ts +3 -0
- package/dist/transport/codecs/index.d.ts.map +1 -0
- package/dist/transport/codecs/index.js +2 -0
- package/dist/transport/constants/index.d.ts +3 -0
- package/dist/transport/constants/index.d.ts.map +1 -0
- package/dist/transport/constants/index.js +2 -0
- package/dist/transport/constants/relay-constants.d.ts +4 -0
- package/dist/transport/constants/relay-constants.d.ts.map +1 -0
- package/dist/transport/constants/relay-constants.js +4 -0
- package/dist/transport/constants/transport-context.d.ts +3 -0
- package/dist/transport/constants/transport-context.d.ts.map +1 -0
- package/dist/transport/constants/transport-context.js +5 -0
- package/dist/transport/helpers/derive-relay-identity-fingerprint.d.ts +4 -0
- package/dist/transport/helpers/derive-relay-identity-fingerprint.d.ts.map +1 -0
- package/dist/transport/helpers/derive-relay-identity-fingerprint.js +7 -0
- package/dist/transport/helpers/encode-relay-key-bundle-signature-input.d.ts +4 -0
- package/dist/transport/helpers/encode-relay-key-bundle-signature-input.d.ts.map +1 -0
- package/dist/transport/helpers/encode-relay-key-bundle-signature-input.js +7 -0
- package/dist/transport/helpers/index.d.ts +3 -0
- package/dist/transport/helpers/index.d.ts.map +1 -0
- package/dist/transport/helpers/index.js +2 -0
- package/dist/transport/index.d.ts +5 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +4 -0
- package/dist/transport/model/index.d.ts +4 -0
- package/dist/transport/model/index.d.ts.map +1 -0
- package/dist/transport/model/index.js +3 -0
- package/dist/transport/model/queue-model.d.ts +16 -0
- package/dist/transport/model/queue-model.d.ts.map +1 -0
- package/dist/transport/model/queue-model.js +1 -0
- package/dist/transport/model/relay-address.d.ts +7 -0
- package/dist/transport/model/relay-address.d.ts.map +1 -0
- package/dist/transport/model/relay-address.js +1 -0
- package/dist/transport/model/relay-key-bundle.d.ts +15 -0
- package/dist/transport/model/relay-key-bundle.d.ts.map +1 -0
- package/dist/transport/model/relay-key-bundle.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto-core/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Branded } from "./brand";
|
|
2
|
+
declare const cryptoKeyType: unique symbol;
|
|
3
|
+
type CryptoPrivateKeyType<T, Brand extends string> = T & {
|
|
4
|
+
readonly [cryptoKeyType]: Brand;
|
|
5
|
+
};
|
|
6
|
+
export type Bytes = Uint8Array<ArrayBuffer>;
|
|
7
|
+
export type PrivateKey<TNative, Type extends string> = CryptoPrivateKeyType<TNative, `PrivateKey:${Type}`>;
|
|
8
|
+
export type PublicKey<TNative, Role extends string> = CryptoPrivateKeyType<TNative, `PublicKey:${Role}`>;
|
|
9
|
+
export type Signature<Role extends string> = Branded<Bytes, `Signature:${Role}`>;
|
|
10
|
+
export type KeyPair<TPrivate, TPublic = Bytes> = {
|
|
11
|
+
privateKey: TPrivate;
|
|
12
|
+
publicKey: TPublic;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/crypto-core/model/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,CAAC,MAAM,aAAa,EAAE,OAAO,MAAM,CAAC;AAE3C,KAAK,oBAAoB,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,GAAG;IACxD,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;AAE5C,MAAM,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,SAAS,MAAM,IAAI,oBAAoB,CAC1E,OAAO,EACP,cAAc,IAAI,EAAE,CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,SAAS,MAAM,IAAI,oBAAoB,CACzE,OAAO,EACP,aAAa,IAAI,EAAE,CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;AAEjF,MAAM,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,IAAI;IAChD,UAAU,EAAE,QAAQ,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Branded } from "./brand";
|
|
2
|
+
import { Bytes, PublicKey } from "./keys";
|
|
3
|
+
export type XWingPublicKey = PublicKey<Bytes, "XWing">;
|
|
4
|
+
export type XWingCiphertext = Branded<Bytes, "XWingCiphertext">;
|
|
5
|
+
export type XWingSharedSecret = Branded<Bytes, "XWingSharedSecret">;
|
|
6
|
+
export type XWingEncapsulation = {
|
|
7
|
+
readonly ciphertext: XWingCiphertext;
|
|
8
|
+
readonly sharedSecret: XWingSharedSecret;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=x-wing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-wing.d.ts","sourceRoot":"","sources":["../../../src/crypto-core/model/x-wing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE1C,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG;IAChC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AeadDecryptInput, AeadEncryptInput, Bytes, HkdfInput, KeyPair, XWingCiphertext, XWingEncapsulation, XWingPublicKey, XWingSharedSecret } from "../../crypto-core/model";
|
|
2
|
+
import { CryptoPrimitivesFacadeContract, CryptoPrimitivesPort, XWingPort } from "../../crypto-core/primitives/contracts";
|
|
3
|
+
export declare class CryptoPrimitivesFacade<TDhPrivateKey = unknown, TXWingPrivateKey = unknown> implements CryptoPrimitivesFacadeContract<TDhPrivateKey, TXWingPrivateKey> {
|
|
4
|
+
private readonly _primitivesPort;
|
|
5
|
+
private readonly _xWingPort;
|
|
6
|
+
constructor(_primitivesPort: CryptoPrimitivesPort<TDhPrivateKey>, _xWingPort: XWingPort<TXWingPrivateKey>);
|
|
7
|
+
random(byteLength: number): Bytes;
|
|
8
|
+
sha256(data: Bytes): Promise<Bytes>;
|
|
9
|
+
hmacSha256(key: Bytes, data: Bytes): Promise<Bytes>;
|
|
10
|
+
generateDhKeyPair(): Promise<KeyPair<TDhPrivateKey>>;
|
|
11
|
+
dh(privateKey: TDhPrivateKey, publicKey: Bytes): Promise<Bytes>;
|
|
12
|
+
generateXWingKeyPair(): Promise<KeyPair<TXWingPrivateKey, XWingPublicKey>>;
|
|
13
|
+
xWingEncapsulate(publicKey: XWingPublicKey): Promise<XWingEncapsulation>;
|
|
14
|
+
xWingDecapsulate(privateKey: TXWingPrivateKey, ciphertext: XWingCiphertext): Promise<XWingSharedSecret>;
|
|
15
|
+
hkdf(input: HkdfInput): Promise<Bytes>;
|
|
16
|
+
encrypt(input: AeadEncryptInput): Promise<Bytes>;
|
|
17
|
+
decrypt(input: AeadDecryptInput): Promise<Bytes>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=CryptoPrimitivesFacade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CryptoPrimitivesFacade.d.ts","sourceRoot":"","sources":["../../../src/crypto-core/primitives/CryptoPrimitivesFacade.ts"],"names":[],"mappings":"AAQA,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACN,8BAA8B,EAC9B,oBAAoB,EACpB,SAAS,EACT,MAAM,sDAAsD,CAAC;AAI9D,qBAAa,sBAAsB,CAClC,aAAa,GAAG,OAAO,EACvB,gBAAgB,GAAG,OAAO,CACzB,YAAW,8BAA8B,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAE1E,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAF5B,YACkB,eAAe,EAAE,oBAAoB,CAAC,aAAa,CAAC,EACpD,UAAU,EAAE,SAAS,CAAC,gBAAgB,CAAC,EACrD;IAEG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAWvC;IAEY,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAa/C;IAEY,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAa/D;IAEY,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAahE;IAEY,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAmB3E;IAEY,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAatF;IAEY,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAwBpF;IAEY,gBAAgB,CAC5B,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,eAAe,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAmB5B;IAEY,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAYlD;IAEY,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,CAsB5D;IAEY,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,CAyB5D;CACD"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { assertByteLength, assertNonNegativeSafeInteger } from "@okee-e2ee/core/helpers";
|
|
2
|
+
import { CRYPTO_ALGORITHMS, CRYPTO_SIZES_BYTES } from "../../crypto-core/constants";
|
|
3
|
+
import { CRYPTO_CORE_ERROR_CODES, CryptoCoreError, executeAsyncCryptoCoreOrThrow, executeSyncCryptoCoreOrThrow } from "../../crypto-core/errors";
|
|
4
|
+
import { HKDF_SHA_256_MAX_OUTPUT_BYTES } from "../constants";
|
|
5
|
+
export class CryptoPrimitivesFacade {
|
|
6
|
+
_primitivesPort;
|
|
7
|
+
_xWingPort;
|
|
8
|
+
constructor(_primitivesPort, _xWingPort) {
|
|
9
|
+
this._primitivesPort = _primitivesPort;
|
|
10
|
+
this._xWingPort = _xWingPort;
|
|
11
|
+
}
|
|
12
|
+
random(byteLength) {
|
|
13
|
+
assertNonNegativeSafeInteger(byteLength, "byteLength");
|
|
14
|
+
return executeSyncCryptoCoreOrThrow({
|
|
15
|
+
operationName: "random",
|
|
16
|
+
operation: () => {
|
|
17
|
+
const result = this._primitivesPort.random(byteLength);
|
|
18
|
+
assertByteLength(result, byteLength, "Random bytes length");
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async sha256(data) {
|
|
24
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
25
|
+
operationName: "sha256",
|
|
26
|
+
operation: async () => {
|
|
27
|
+
const result = await this._primitivesPort.sha256(data);
|
|
28
|
+
assertByteLength(result, CRYPTO_SIZES_BYTES.sha256, `${CRYPTO_ALGORITHMS.hash} length`);
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async hmacSha256(key, data) {
|
|
34
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
35
|
+
operationName: "hmacSha256",
|
|
36
|
+
operation: async () => {
|
|
37
|
+
const result = await this._primitivesPort.hmacSha256(key, data);
|
|
38
|
+
assertByteLength(result, CRYPTO_SIZES_BYTES.sha256, `${CRYPTO_ALGORITHMS.hmac} length`);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async generateDhKeyPair() {
|
|
44
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
45
|
+
operationName: "generateDhKeyPair",
|
|
46
|
+
operation: async () => {
|
|
47
|
+
const result = await this._primitivesPort.generateDhKeyPair();
|
|
48
|
+
assertByteLength(result.publicKey, CRYPTO_SIZES_BYTES.dhPublicKey, `${CRYPTO_ALGORITHMS.dh} publicKey`);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async dh(privateKey, publicKey) {
|
|
54
|
+
assertByteLength(publicKey, CRYPTO_SIZES_BYTES.dhPublicKey, `${CRYPTO_ALGORITHMS.dh} publicKey`);
|
|
55
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
56
|
+
operationName: "dh",
|
|
57
|
+
operation: async () => {
|
|
58
|
+
const result = await this._primitivesPort.dh(privateKey, publicKey);
|
|
59
|
+
if (result.every(byte => byte === 0)) {
|
|
60
|
+
throw new CryptoCoreError(CRYPTO_CORE_ERROR_CODES.dhSharedSecretInvalid, {
|
|
61
|
+
details: { algorithm: CRYPTO_ALGORITHMS.dh, operation: "dh" }
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async generateXWingKeyPair() {
|
|
69
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
70
|
+
operationName: "generateXWingKeyPair",
|
|
71
|
+
operation: async () => {
|
|
72
|
+
const result = await this._xWingPort.generateXWingKeyPair();
|
|
73
|
+
assertByteLength(result.publicKey, CRYPTO_SIZES_BYTES.xWingPublicKey, `${CRYPTO_ALGORITHMS.xWing} publicKey`);
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async xWingEncapsulate(publicKey) {
|
|
79
|
+
assertByteLength(publicKey, CRYPTO_SIZES_BYTES.xWingPublicKey, `${CRYPTO_ALGORITHMS.xWing} publicKey`);
|
|
80
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
81
|
+
operationName: "xWingEncapsulate",
|
|
82
|
+
operation: async () => {
|
|
83
|
+
const result = await this._xWingPort.xWingEncapsulate(publicKey);
|
|
84
|
+
assertByteLength(result.ciphertext, CRYPTO_SIZES_BYTES.xWingCiphertext, `${CRYPTO_ALGORITHMS.xWing} ciphertext`);
|
|
85
|
+
assertByteLength(result.sharedSecret, CRYPTO_SIZES_BYTES.xWingSharedSecret, `${CRYPTO_ALGORITHMS.xWing} sharedSecret`);
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async xWingDecapsulate(privateKey, ciphertext) {
|
|
91
|
+
assertByteLength(ciphertext, CRYPTO_SIZES_BYTES.xWingCiphertext, `${CRYPTO_ALGORITHMS.xWing} ciphertext`);
|
|
92
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
93
|
+
operationName: "xWingDecapsulate",
|
|
94
|
+
operation: async () => {
|
|
95
|
+
const result = await this._xWingPort.xWingDecapsulate(privateKey, ciphertext);
|
|
96
|
+
assertByteLength(result, CRYPTO_SIZES_BYTES.xWingSharedSecret, `${CRYPTO_ALGORITHMS.xWing} sharedSecret`);
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async hkdf(input) {
|
|
102
|
+
assertNonNegativeSafeInteger(input.outputLength, "outputLength");
|
|
103
|
+
if (input.outputLength > HKDF_SHA_256_MAX_OUTPUT_BYTES) {
|
|
104
|
+
throw new RangeError(`outputLength must not exceed ${HKDF_SHA_256_MAX_OUTPUT_BYTES} bytes for ${CRYPTO_ALGORITHMS.hkdf}`);
|
|
105
|
+
}
|
|
106
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
107
|
+
operationName: "hkdf",
|
|
108
|
+
operation: async () => this._primitivesPort.hkdf(input)
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async encrypt(input) {
|
|
112
|
+
assertByteLength(input.nonce, CRYPTO_SIZES_BYTES.aeadNonce, `${CRYPTO_ALGORITHMS.aead256} nonce`);
|
|
113
|
+
assertByteLength(input.key, CRYPTO_SIZES_BYTES.aeadKey, `${CRYPTO_ALGORITHMS.aead256} key`);
|
|
114
|
+
const plaintextLength = input.plaintext.byteLength;
|
|
115
|
+
if (!plaintextLength)
|
|
116
|
+
throw new RangeError(`plaintext mustn't be empty`);
|
|
117
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
118
|
+
operationName: "encrypt",
|
|
119
|
+
operation: async () => {
|
|
120
|
+
const result = await this._primitivesPort.encrypt(input);
|
|
121
|
+
assertByteLength(result, CRYPTO_SIZES_BYTES.aeadTag + plaintextLength, `${CRYPTO_ALGORITHMS.aead256} tag`);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async decrypt(input) {
|
|
127
|
+
assertByteLength(input.nonce, CRYPTO_SIZES_BYTES.aeadNonce, `${CRYPTO_ALGORITHMS.aead256} nonce`);
|
|
128
|
+
assertByteLength(input.key, CRYPTO_SIZES_BYTES.aeadKey, `${CRYPTO_ALGORITHMS.aead256} key`);
|
|
129
|
+
if (input.ciphertext.byteLength < CRYPTO_SIZES_BYTES.aeadTag) {
|
|
130
|
+
throw new RangeError(`${CRYPTO_ALGORITHMS.aead256} ciphertext must include a ${CRYPTO_SIZES_BYTES.aeadTag}-byte tag`);
|
|
131
|
+
}
|
|
132
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
133
|
+
operationName: "decrypt",
|
|
134
|
+
operation: async () => {
|
|
135
|
+
const result = await this._primitivesPort.decrypt(input);
|
|
136
|
+
if (!result.success) {
|
|
137
|
+
throw new CryptoCoreError(CRYPTO_CORE_ERROR_CODES.aeadAuthenticationFailed, {
|
|
138
|
+
details: { operation: "decrypt", algorithm: CRYPTO_ALGORITHMS.aead256 }
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return result.plaintext;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MaybePromise } from "@okee-e2ee/core";
|
|
2
|
+
import { AeadDecryptInput, AeadEncryptInput, Bytes, HkdfInput, KeyPair, XWingCiphertext, XWingEncapsulation, XWingPublicKey, XWingSharedSecret } from "../../../crypto-core/model";
|
|
3
|
+
export interface CryptoPrimitivesFacadeContract<TDhPrivateKey = unknown, TXWingPrivateKey = unknown> {
|
|
4
|
+
random(byteLength: number): Bytes;
|
|
5
|
+
sha256(data: Bytes): MaybePromise<Bytes>;
|
|
6
|
+
hmacSha256(key: Bytes, data: Bytes): MaybePromise<Bytes>;
|
|
7
|
+
generateDhKeyPair(): MaybePromise<KeyPair<TDhPrivateKey>>;
|
|
8
|
+
dh(privateKey: TDhPrivateKey, publicKey: Bytes): MaybePromise<Bytes>;
|
|
9
|
+
generateXWingKeyPair(): MaybePromise<KeyPair<TXWingPrivateKey, XWingPublicKey>>;
|
|
10
|
+
xWingEncapsulate(publicKey: XWingPublicKey): MaybePromise<XWingEncapsulation>;
|
|
11
|
+
xWingDecapsulate(privateKey: TXWingPrivateKey, ciphertext: XWingCiphertext): MaybePromise<XWingSharedSecret>;
|
|
12
|
+
hkdf(input: HkdfInput): MaybePromise<Bytes>;
|
|
13
|
+
encrypt(input: AeadEncryptInput): MaybePromise<Bytes>;
|
|
14
|
+
decrypt(input: AeadDecryptInput): MaybePromise<Bytes>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=CryptoPrimitivesFacadeContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CryptoPrimitivesFacadeContract.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/primitives/contracts/CryptoPrimitivesFacadeContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,MAAM,uCAAuC,CAAC;AAE/C,MAAM,WAAW,8BAA8B,CAC9C,aAAa,GAAG,OAAO,EACvB,gBAAgB,GAAG,OAAO;IAE1B,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAElC,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEzD,iBAAiB,IAAI,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1D,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAErE,oBAAoB,IAAI,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;IAChF,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAC9E,gBAAgB,CACf,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,eAAe,GACzB,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAEnC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;CACtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MaybePromise } from "@okee-e2ee/core";
|
|
2
|
+
import { AeadDecryptInput, AeadEncryptInput, Bytes, HkdfInput, KeyPair } from "../../../crypto-core/model";
|
|
3
|
+
export interface CryptoPrimitivesPort<TDhPrivateKey = unknown> {
|
|
4
|
+
random(byteLength: number): Bytes;
|
|
5
|
+
sha256(data: Bytes): MaybePromise<Bytes>;
|
|
6
|
+
hmacSha256(key: Bytes, data: Bytes): MaybePromise<Bytes>;
|
|
7
|
+
generateDhKeyPair(): MaybePromise<KeyPair<TDhPrivateKey>>;
|
|
8
|
+
dh(privateKey: TDhPrivateKey, publicKey: Bytes): MaybePromise<Bytes>;
|
|
9
|
+
hkdf(input: HkdfInput): MaybePromise<Bytes>;
|
|
10
|
+
encrypt(input: AeadEncryptInput): MaybePromise<Bytes>;
|
|
11
|
+
decrypt(input: AeadDecryptInput): MaybePromise<{
|
|
12
|
+
success: true;
|
|
13
|
+
plaintext: Bytes;
|
|
14
|
+
} | {
|
|
15
|
+
success: false;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=CryptoPrimitivesPort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CryptoPrimitivesPort.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/primitives/contracts/CryptoPrimitivesPort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,OAAO,EACP,MAAM,uCAAuC,CAAC;AAE/C,MAAM,WAAW,oBAAoB,CAAC,aAAa,GAAG,OAAO;IAC5D,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAElC,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEzD,iBAAiB,IAAI,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1D,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAErE,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAE5C,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,CACN,KAAK,EAAE,gBAAgB,GACrB,YAAY,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;CAC1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MaybePromise } from "@okee-e2ee/core";
|
|
2
|
+
import { KeyPair, XWingCiphertext, XWingEncapsulation, XWingPublicKey, XWingSharedSecret } from "../../../crypto-core/model";
|
|
3
|
+
export interface XWingPort<TXWingPrivateKey = unknown> {
|
|
4
|
+
generateXWingKeyPair(): MaybePromise<KeyPair<TXWingPrivateKey, XWingPublicKey>>;
|
|
5
|
+
xWingEncapsulate(publicKey: XWingPublicKey): MaybePromise<XWingEncapsulation>;
|
|
6
|
+
xWingDecapsulate(privateKey: TXWingPrivateKey, ciphertext: XWingCiphertext): MaybePromise<XWingSharedSecret>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=XWingPort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XWingPort.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/primitives/contracts/XWingPort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACN,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,MAAM,uCAAuC,CAAC;AAE/C,MAAM,WAAW,SAAS,CAAC,gBAAgB,GAAG,OAAO;IACpD,oBAAoB,IAAI,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;IAChF,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAC9E,gBAAgB,CACf,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,eAAe,GACzB,YAAY,CAAC,iBAAiB,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/primitives/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto-core/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Bytes, KeyPair } from "../../crypto-core/model";
|
|
2
|
+
import { Ed25519Port, MlDsaPort, SignatureFacadeContract } from "../../crypto-core/signature/contracts";
|
|
3
|
+
import { Ed25519PublicKey, Ed25519Signature, HybridSignature, HybridSignaturePrivateKey, HybridSignaturePublicKey } from "../../crypto-core/signature/model";
|
|
4
|
+
export declare class SignatureFacade<TEd25519PrivateKey = unknown, TMlDsaPrivateKey = unknown> implements SignatureFacadeContract<TEd25519PrivateKey, TMlDsaPrivateKey> {
|
|
5
|
+
private readonly _ed25519Port;
|
|
6
|
+
private readonly _mlDsaPort;
|
|
7
|
+
constructor(_ed25519Port: Ed25519Port<TEd25519PrivateKey>, _mlDsaPort: MlDsaPort<TMlDsaPrivateKey>);
|
|
8
|
+
generateEd25519KeyPair(): Promise<KeyPair<TEd25519PrivateKey, Ed25519PublicKey>>;
|
|
9
|
+
signEd25519(privateKey: TEd25519PrivateKey, data: Bytes): Promise<Ed25519Signature>;
|
|
10
|
+
verifyEd25519(publicKey: Bytes, data: Bytes, signature: Bytes): Promise<boolean>;
|
|
11
|
+
generateKeyPair(): Promise<KeyPair<HybridSignaturePrivateKey<TEd25519PrivateKey, TMlDsaPrivateKey>, HybridSignaturePublicKey>>;
|
|
12
|
+
sign(privateKey: HybridSignaturePrivateKey<TEd25519PrivateKey, TMlDsaPrivateKey>, data: Bytes): Promise<HybridSignature>;
|
|
13
|
+
verify(publicKey: HybridSignaturePublicKey, data: Bytes, signature: HybridSignature): Promise<boolean>;
|
|
14
|
+
private _generateEd25519KeyPair;
|
|
15
|
+
private _generateMlDsaKeyPair;
|
|
16
|
+
private _signEd25519;
|
|
17
|
+
private _signMlDsa;
|
|
18
|
+
private _assertEd25519PublicKey;
|
|
19
|
+
private _assertEd25519Signature;
|
|
20
|
+
private _assertMlDsaPublicKey;
|
|
21
|
+
private _assertMlDsaSignature;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=SignatureFacade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureFacade.d.ts","sourceRoot":"","sources":["../../../src/crypto-core/signature/SignatureFacade.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EACN,WAAW,EACX,SAAS,EACT,uBAAuB,EACvB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,wBAAwB,EAGxB,MAAM,iDAAiD,CAAC;AAEzD,qBAAa,eAAe,CAC3B,kBAAkB,GAAG,OAAO,EAC5B,gBAAgB,GAAG,OAAO,CACzB,YAAW,uBAAuB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAExE,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAF5B,YACkB,YAAY,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAC7C,UAAU,EAAE,SAAS,CAAC,gBAAgB,CAAC,EACrD;IAES,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAK5F;IAEY,WAAW,CACvB,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,KAAK,GACT,OAAO,CAAC,gBAAgB,CAAC,CAK3B;IAEY,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ5F;IAEY,eAAe,IAAI,OAAO,CACtC,OAAO,CACN,yBAAyB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAC/D,wBAAwB,CACxB,CACD,CAqBA;IAEY,IAAI,CAChB,UAAU,EAAE,yBAAyB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAC3E,IAAI,EAAE,KAAK,GACT,OAAO,CAAC,eAAe,CAAC,CAW1B;IAEY,MAAM,CAClB,SAAS,EAAE,wBAAwB,EACnC,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,eAAe,GACxB,OAAO,CAAC,OAAO,CAAC,CAgBlB;YAEa,uBAAuB;YAQvB,qBAAqB;YAMrB,YAAY;YASZ,UAAU;IAMxB,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,qBAAqB;CAO7B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { assertByteLength } from "@okee-e2ee/core/helpers";
|
|
2
|
+
import { CRYPTO_ALGORITHMS, CRYPTO_SIZES_BYTES } from "../../crypto-core/constants";
|
|
3
|
+
import { executeAsyncCryptoCoreOrThrow } from "../../crypto-core/errors";
|
|
4
|
+
export class SignatureFacade {
|
|
5
|
+
_ed25519Port;
|
|
6
|
+
_mlDsaPort;
|
|
7
|
+
constructor(_ed25519Port, _mlDsaPort) {
|
|
8
|
+
this._ed25519Port = _ed25519Port;
|
|
9
|
+
this._mlDsaPort = _mlDsaPort;
|
|
10
|
+
}
|
|
11
|
+
async generateEd25519KeyPair() {
|
|
12
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
13
|
+
operationName: "generateEd25519KeyPair",
|
|
14
|
+
operation: () => this._generateEd25519KeyPair()
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async signEd25519(privateKey, data) {
|
|
18
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
19
|
+
operationName: "signEd25519",
|
|
20
|
+
operation: () => this._signEd25519(privateKey, data)
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async verifyEd25519(publicKey, data, signature) {
|
|
24
|
+
this._assertEd25519PublicKey(publicKey);
|
|
25
|
+
this._assertEd25519Signature(signature);
|
|
26
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
27
|
+
operationName: "verifyEd25519",
|
|
28
|
+
operation: async () => this._ed25519Port.verifyEd25519(publicKey, data, signature)
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async generateKeyPair() {
|
|
32
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
33
|
+
operationName: "generateHybridSignatureKeyPair",
|
|
34
|
+
operation: async () => {
|
|
35
|
+
const [ed25519, mlDsa] = await Promise.all([
|
|
36
|
+
this._generateEd25519KeyPair(),
|
|
37
|
+
this._generateMlDsaKeyPair()
|
|
38
|
+
]);
|
|
39
|
+
return {
|
|
40
|
+
privateKey: {
|
|
41
|
+
ed25519: ed25519.privateKey,
|
|
42
|
+
mlDsa: mlDsa.privateKey
|
|
43
|
+
},
|
|
44
|
+
publicKey: {
|
|
45
|
+
ed25519: ed25519.publicKey,
|
|
46
|
+
mlDsa: mlDsa.publicKey
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async sign(privateKey, data) {
|
|
53
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
54
|
+
operationName: "signHybrid",
|
|
55
|
+
operation: async () => {
|
|
56
|
+
const [ed25519, mlDsa] = await Promise.all([
|
|
57
|
+
this._signEd25519(privateKey.ed25519, data),
|
|
58
|
+
this._signMlDsa(privateKey.mlDsa, data)
|
|
59
|
+
]);
|
|
60
|
+
return { ed25519, mlDsa };
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async verify(publicKey, data, signature) {
|
|
65
|
+
this._assertEd25519PublicKey(publicKey.ed25519);
|
|
66
|
+
this._assertEd25519Signature(signature.ed25519);
|
|
67
|
+
this._assertMlDsaPublicKey(publicKey.mlDsa);
|
|
68
|
+
this._assertMlDsaSignature(signature.mlDsa);
|
|
69
|
+
return executeAsyncCryptoCoreOrThrow({
|
|
70
|
+
operationName: "verifyHybrid",
|
|
71
|
+
operation: async () => {
|
|
72
|
+
const [ed25519IsValid, mlDsaIsValid] = await Promise.all([
|
|
73
|
+
this._ed25519Port.verifyEd25519(publicKey.ed25519, data, signature.ed25519),
|
|
74
|
+
this._mlDsaPort.verifyMlDsa(publicKey.mlDsa, data, signature.mlDsa)
|
|
75
|
+
]);
|
|
76
|
+
return ed25519IsValid && mlDsaIsValid;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async _generateEd25519KeyPair() {
|
|
81
|
+
const result = await this._ed25519Port.generateEd25519KeyPair();
|
|
82
|
+
this._assertEd25519PublicKey(result.publicKey);
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
async _generateMlDsaKeyPair() {
|
|
86
|
+
const result = await this._mlDsaPort.generateMlDsaKeyPair();
|
|
87
|
+
this._assertMlDsaPublicKey(result.publicKey);
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
async _signEd25519(privateKey, data) {
|
|
91
|
+
const result = await this._ed25519Port.signEd25519(privateKey, data);
|
|
92
|
+
this._assertEd25519Signature(result);
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
async _signMlDsa(privateKey, data) {
|
|
96
|
+
const result = await this._mlDsaPort.signMlDsa(privateKey, data);
|
|
97
|
+
this._assertMlDsaSignature(result);
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
_assertEd25519PublicKey(value) {
|
|
101
|
+
assertByteLength(value, CRYPTO_SIZES_BYTES.ed25519PublicKey, `${CRYPTO_ALGORITHMS.ed25519} publicKey`);
|
|
102
|
+
}
|
|
103
|
+
_assertEd25519Signature(value) {
|
|
104
|
+
assertByteLength(value, CRYPTO_SIZES_BYTES.ed25519Signature, `${CRYPTO_ALGORITHMS.ed25519} signature`);
|
|
105
|
+
}
|
|
106
|
+
_assertMlDsaPublicKey(value) {
|
|
107
|
+
assertByteLength(value, CRYPTO_SIZES_BYTES.mlDsaPublicKey, `${CRYPTO_ALGORITHMS.mlDsa} publicKey`);
|
|
108
|
+
}
|
|
109
|
+
_assertMlDsaSignature(value) {
|
|
110
|
+
assertByteLength(value, CRYPTO_SIZES_BYTES.mlDsaSignature, `${CRYPTO_ALGORITHMS.mlDsa} signature`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MaybePromise } from "@okee-e2ee/core";
|
|
2
|
+
import { Bytes, KeyPair } from "../../../crypto-core/model";
|
|
3
|
+
import { Ed25519PublicKey, Ed25519Signature } from "../../../crypto-core/signature/model";
|
|
4
|
+
export interface Ed25519Port<TEd25519PrivateKey = unknown> {
|
|
5
|
+
generateEd25519KeyPair(): MaybePromise<KeyPair<TEd25519PrivateKey, Ed25519PublicKey>>;
|
|
6
|
+
signEd25519(privateKey: TEd25519PrivateKey, data: Bytes): MaybePromise<Ed25519Signature>;
|
|
7
|
+
verifyEd25519(publicKey: Bytes, data: Bytes, signature: Bytes): MaybePromise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Ed25519Port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ed25519Port.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/signature/contracts/Ed25519Port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AAErG,MAAM,WAAW,WAAW,CAAC,kBAAkB,GAAG,OAAO;IACxD,sBAAsB,IAAI,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACtF,WAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACzF,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;CACtF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MaybePromise } from "@okee-e2ee/core";
|
|
2
|
+
import { Bytes, KeyPair } from "../../../crypto-core/model";
|
|
3
|
+
import { MlDsaPublicKey, MlDsaSignature } from "../../../crypto-core/signature/model";
|
|
4
|
+
export interface MlDsaPort<TMlDsaPrivateKey = unknown> {
|
|
5
|
+
generateMlDsaKeyPair(): MaybePromise<KeyPair<TMlDsaPrivateKey, MlDsaPublicKey>>;
|
|
6
|
+
signMlDsa(privateKey: TMlDsaPrivateKey, data: Bytes): MaybePromise<MlDsaSignature>;
|
|
7
|
+
verifyMlDsa(publicKey: MlDsaPublicKey, data: Bytes, signature: MlDsaSignature): MaybePromise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=MlDsaPort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MlDsaPort.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/signature/contracts/MlDsaPort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEjG,MAAM,WAAW,SAAS,CAAC,gBAAgB,GAAG,OAAO;IACpD,oBAAoB,IAAI,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;IAChF,SAAS,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IACnF,WAAW,CACV,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,cAAc,GACvB,YAAY,CAAC,OAAO,CAAC,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MaybePromise } from "@okee-e2ee/core";
|
|
2
|
+
import { Bytes, KeyPair } from "../../../crypto-core/model";
|
|
3
|
+
import { Ed25519PublicKey, Ed25519Signature, HybridSignature, HybridSignaturePrivateKey, HybridSignaturePublicKey } from "../../../crypto-core/signature/model";
|
|
4
|
+
export interface SignatureFacadeContract<TEd25519PrivateKey = unknown, TMlDsaPrivateKey = unknown> {
|
|
5
|
+
generateEd25519KeyPair(): MaybePromise<KeyPair<TEd25519PrivateKey, Ed25519PublicKey>>;
|
|
6
|
+
signEd25519(privateKey: TEd25519PrivateKey, data: Bytes): MaybePromise<Ed25519Signature>;
|
|
7
|
+
verifyEd25519(publicKey: Bytes, data: Bytes, signature: Bytes): MaybePromise<boolean>;
|
|
8
|
+
generateKeyPair(): MaybePromise<KeyPair<HybridSignaturePrivateKey<TEd25519PrivateKey, TMlDsaPrivateKey>, HybridSignaturePublicKey>>;
|
|
9
|
+
sign(privateKey: HybridSignaturePrivateKey<TEd25519PrivateKey, TMlDsaPrivateKey>, data: Bytes): MaybePromise<HybridSignature>;
|
|
10
|
+
verify(publicKey: HybridSignaturePublicKey, data: Bytes, signature: HybridSignature): MaybePromise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=SignatureFacadeContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureFacadeContract.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/signature/contracts/SignatureFacadeContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,wBAAwB,EACxB,MAAM,iDAAiD,CAAC;AAEzD,MAAM,WAAW,uBAAuB,CAAC,kBAAkB,GAAG,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAChG,sBAAsB,IAAI,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACtF,WAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACzF,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtF,eAAe,IAAI,YAAY,CAC9B,OAAO,CACN,yBAAyB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAC/D,wBAAwB,CACxB,CACD,CAAC;IACF,IAAI,CACH,UAAU,EAAE,yBAAyB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAC3E,IAAI,EAAE,KAAK,GACT,YAAY,CAAC,eAAe,CAAC,CAAC;IACjC,MAAM,CACL,SAAS,EAAE,wBAAwB,EACnC,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,eAAe,GACxB,YAAY,CAAC,OAAO,CAAC,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/signature/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto-core/signature/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/signature/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./signature-model";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Branded, Bytes, PublicKey } from "../../../crypto-core/model";
|
|
2
|
+
export type Ed25519PublicKey = PublicKey<Bytes, "Ed25519">;
|
|
3
|
+
export type Ed25519Signature = Branded<Bytes, "Ed25519Signature">;
|
|
4
|
+
export type MlDsaPublicKey = PublicKey<Bytes, "ML-DSA-65">;
|
|
5
|
+
export type MlDsaSignature = Branded<Bytes, "ML-DSA-65Signature">;
|
|
6
|
+
export type HybridSignaturePrivateKey<TEd25519PrivateKey, TMlDsaPrivateKey> = {
|
|
7
|
+
readonly ed25519: TEd25519PrivateKey;
|
|
8
|
+
readonly mlDsa: TMlDsaPrivateKey;
|
|
9
|
+
};
|
|
10
|
+
export type HybridSignaturePublicKey = {
|
|
11
|
+
readonly ed25519: Ed25519PublicKey;
|
|
12
|
+
readonly mlDsa: MlDsaPublicKey;
|
|
13
|
+
};
|
|
14
|
+
export type HybridSignature = {
|
|
15
|
+
readonly ed25519: Ed25519Signature;
|
|
16
|
+
readonly mlDsa: MlDsaSignature;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=signature-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature-model.d.ts","sourceRoot":"","sources":["../../../../src/crypto-core/signature/model/signature-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3D,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC3D,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAElE,MAAM,MAAM,yBAAyB,CAAC,kBAAkB,EAAE,gBAAgB,IAAI;IAC7E,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED