@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.
Files changed (163) hide show
  1. package/dist/constants/index.d.ts +2 -0
  2. package/dist/constants/index.d.ts.map +1 -0
  3. package/dist/constants/index.js +1 -0
  4. package/dist/constants/protocol.d.ts +2 -0
  5. package/dist/constants/protocol.d.ts.map +1 -0
  6. package/dist/constants/protocol.js +1 -0
  7. package/dist/crypto-core/constants/algorithms.d.ts +27 -0
  8. package/dist/crypto-core/constants/algorithms.d.ts.map +1 -0
  9. package/dist/crypto-core/constants/algorithms.js +26 -0
  10. package/dist/crypto-core/constants/context.d.ts +2 -0
  11. package/dist/crypto-core/constants/context.d.ts.map +1 -0
  12. package/dist/crypto-core/constants/context.js +5 -0
  13. package/dist/crypto-core/constants/index.d.ts +4 -0
  14. package/dist/crypto-core/constants/index.d.ts.map +1 -0
  15. package/dist/crypto-core/constants/index.js +3 -0
  16. package/dist/crypto-core/constants/protocol.d.ts +3 -0
  17. package/dist/crypto-core/constants/protocol.d.ts.map +1 -0
  18. package/dist/crypto-core/constants/protocol.js +2 -0
  19. package/dist/crypto-core/contracts/CodecContract.d.ts +7 -0
  20. package/dist/crypto-core/contracts/CodecContract.d.ts.map +1 -0
  21. package/dist/crypto-core/contracts/CodecContract.js +1 -0
  22. package/dist/crypto-core/contracts/index.d.ts +2 -0
  23. package/dist/crypto-core/contracts/index.d.ts.map +1 -0
  24. package/dist/crypto-core/contracts/index.js +1 -0
  25. package/dist/crypto-core/encoding/ByteReader.d.ts +20 -0
  26. package/dist/crypto-core/encoding/ByteReader.d.ts.map +1 -0
  27. package/dist/crypto-core/encoding/ByteReader.js +79 -0
  28. package/dist/crypto-core/encoding/ByteWriter.d.ts +20 -0
  29. package/dist/crypto-core/encoding/ByteWriter.d.ts.map +1 -0
  30. package/dist/crypto-core/encoding/ByteWriter.js +95 -0
  31. package/dist/crypto-core/encoding/helpers/encode-signature-input.d.ts +3 -0
  32. package/dist/crypto-core/encoding/helpers/encode-signature-input.d.ts.map +1 -0
  33. package/dist/crypto-core/encoding/helpers/encode-signature-input.js +7 -0
  34. package/dist/crypto-core/encoding/helpers/index.d.ts +2 -0
  35. package/dist/crypto-core/encoding/helpers/index.d.ts.map +1 -0
  36. package/dist/crypto-core/encoding/helpers/index.js +1 -0
  37. package/dist/crypto-core/encoding/index.d.ts +4 -0
  38. package/dist/crypto-core/encoding/index.d.ts.map +1 -0
  39. package/dist/crypto-core/encoding/index.js +3 -0
  40. package/dist/crypto-core/errors/CryptoCoreError.d.ts +11 -0
  41. package/dist/crypto-core/errors/CryptoCoreError.d.ts.map +1 -0
  42. package/dist/crypto-core/errors/CryptoCoreError.js +10 -0
  43. package/dist/crypto-core/errors/error-codes.d.ts +7 -0
  44. package/dist/crypto-core/errors/error-codes.d.ts.map +1 -0
  45. package/dist/crypto-core/errors/error-codes.js +5 -0
  46. package/dist/crypto-core/errors/error-messages.d.ts +3 -0
  47. package/dist/crypto-core/errors/error-messages.d.ts.map +1 -0
  48. package/dist/crypto-core/errors/error-messages.js +6 -0
  49. package/dist/crypto-core/errors/helpers/execute-crypto-core-or-throw.d.ts +13 -0
  50. package/dist/crypto-core/errors/helpers/execute-crypto-core-or-throw.d.ts.map +1 -0
  51. package/dist/crypto-core/errors/helpers/execute-crypto-core-or-throw.js +22 -0
  52. package/dist/crypto-core/errors/helpers/index.d.ts +2 -0
  53. package/dist/crypto-core/errors/helpers/index.d.ts.map +1 -0
  54. package/dist/crypto-core/errors/helpers/index.js +1 -0
  55. package/dist/crypto-core/errors/index.d.ts +5 -0
  56. package/dist/crypto-core/errors/index.d.ts.map +1 -0
  57. package/dist/crypto-core/errors/index.js +4 -0
  58. package/dist/crypto-core/index.d.ts +8 -0
  59. package/dist/crypto-core/index.d.ts.map +1 -0
  60. package/dist/crypto-core/index.js +7 -0
  61. package/dist/crypto-core/model/brand.d.ts +11 -0
  62. package/dist/crypto-core/model/brand.d.ts.map +1 -0
  63. package/dist/crypto-core/model/brand.js +1 -0
  64. package/dist/crypto-core/model/crypto-inputs.d.ts +20 -0
  65. package/dist/crypto-core/model/crypto-inputs.d.ts.map +1 -0
  66. package/dist/crypto-core/model/crypto-inputs.js +1 -0
  67. package/dist/crypto-core/model/index.d.ts +5 -0
  68. package/dist/crypto-core/model/index.d.ts.map +1 -0
  69. package/dist/crypto-core/model/index.js +4 -0
  70. package/dist/crypto-core/model/keys.d.ts +15 -0
  71. package/dist/crypto-core/model/keys.d.ts.map +1 -0
  72. package/dist/crypto-core/model/keys.js +1 -0
  73. package/dist/crypto-core/model/x-wing.d.ts +10 -0
  74. package/dist/crypto-core/model/x-wing.d.ts.map +1 -0
  75. package/dist/crypto-core/model/x-wing.js +1 -0
  76. package/dist/crypto-core/primitives/CryptoPrimitivesFacade.d.ts +19 -0
  77. package/dist/crypto-core/primitives/CryptoPrimitivesFacade.d.ts.map +1 -0
  78. package/dist/crypto-core/primitives/CryptoPrimitivesFacade.js +145 -0
  79. package/dist/crypto-core/primitives/contracts/CryptoPrimitivesFacadeContract.d.ts +16 -0
  80. package/dist/crypto-core/primitives/contracts/CryptoPrimitivesFacadeContract.d.ts.map +1 -0
  81. package/dist/crypto-core/primitives/contracts/CryptoPrimitivesFacadeContract.js +1 -0
  82. package/dist/crypto-core/primitives/contracts/CryptoPrimitivesPort.d.ts +18 -0
  83. package/dist/crypto-core/primitives/contracts/CryptoPrimitivesPort.d.ts.map +1 -0
  84. package/dist/crypto-core/primitives/contracts/CryptoPrimitivesPort.js +1 -0
  85. package/dist/crypto-core/primitives/contracts/XWingPort.d.ts +8 -0
  86. package/dist/crypto-core/primitives/contracts/XWingPort.d.ts.map +1 -0
  87. package/dist/crypto-core/primitives/contracts/XWingPort.js +1 -0
  88. package/dist/crypto-core/primitives/contracts/index.d.ts +4 -0
  89. package/dist/crypto-core/primitives/contracts/index.d.ts.map +1 -0
  90. package/dist/crypto-core/primitives/contracts/index.js +3 -0
  91. package/dist/crypto-core/primitives/index.d.ts +3 -0
  92. package/dist/crypto-core/primitives/index.d.ts.map +1 -0
  93. package/dist/crypto-core/primitives/index.js +2 -0
  94. package/dist/crypto-core/signature/SignatureFacade.d.ts +23 -0
  95. package/dist/crypto-core/signature/SignatureFacade.d.ts.map +1 -0
  96. package/dist/crypto-core/signature/SignatureFacade.js +112 -0
  97. package/dist/crypto-core/signature/contracts/Ed25519Port.d.ts +9 -0
  98. package/dist/crypto-core/signature/contracts/Ed25519Port.d.ts.map +1 -0
  99. package/dist/crypto-core/signature/contracts/Ed25519Port.js +1 -0
  100. package/dist/crypto-core/signature/contracts/MlDsaPort.d.ts +9 -0
  101. package/dist/crypto-core/signature/contracts/MlDsaPort.d.ts.map +1 -0
  102. package/dist/crypto-core/signature/contracts/MlDsaPort.js +1 -0
  103. package/dist/crypto-core/signature/contracts/SignatureFacadeContract.d.ts +12 -0
  104. package/dist/crypto-core/signature/contracts/SignatureFacadeContract.d.ts.map +1 -0
  105. package/dist/crypto-core/signature/contracts/SignatureFacadeContract.js +1 -0
  106. package/dist/crypto-core/signature/contracts/index.d.ts +4 -0
  107. package/dist/crypto-core/signature/contracts/index.d.ts.map +1 -0
  108. package/dist/crypto-core/signature/contracts/index.js +3 -0
  109. package/dist/crypto-core/signature/index.d.ts +4 -0
  110. package/dist/crypto-core/signature/index.d.ts.map +1 -0
  111. package/dist/crypto-core/signature/index.js +3 -0
  112. package/dist/crypto-core/signature/model/index.d.ts +2 -0
  113. package/dist/crypto-core/signature/model/index.d.ts.map +1 -0
  114. package/dist/crypto-core/signature/model/index.js +1 -0
  115. package/dist/crypto-core/signature/model/signature-model.d.ts +18 -0
  116. package/dist/crypto-core/signature/model/signature-model.d.ts.map +1 -0
  117. package/dist/crypto-core/signature/model/signature-model.js +1 -0
  118. package/dist/index.d.ts +4 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +3 -0
  121. package/dist/transport/codecs/RelayEncryptionKeyBundleCodec.d.ts +10 -0
  122. package/dist/transport/codecs/RelayEncryptionKeyBundleCodec.d.ts.map +1 -0
  123. package/dist/transport/codecs/RelayEncryptionKeyBundleCodec.js +42 -0
  124. package/dist/transport/codecs/RelayIdentityPublicKeyCodec.d.ts +10 -0
  125. package/dist/transport/codecs/RelayIdentityPublicKeyCodec.d.ts.map +1 -0
  126. package/dist/transport/codecs/RelayIdentityPublicKeyCodec.js +27 -0
  127. package/dist/transport/codecs/index.d.ts +3 -0
  128. package/dist/transport/codecs/index.d.ts.map +1 -0
  129. package/dist/transport/codecs/index.js +2 -0
  130. package/dist/transport/constants/index.d.ts +3 -0
  131. package/dist/transport/constants/index.d.ts.map +1 -0
  132. package/dist/transport/constants/index.js +2 -0
  133. package/dist/transport/constants/relay-constants.d.ts +4 -0
  134. package/dist/transport/constants/relay-constants.d.ts.map +1 -0
  135. package/dist/transport/constants/relay-constants.js +4 -0
  136. package/dist/transport/constants/transport-context.d.ts +3 -0
  137. package/dist/transport/constants/transport-context.d.ts.map +1 -0
  138. package/dist/transport/constants/transport-context.js +5 -0
  139. package/dist/transport/helpers/derive-relay-identity-fingerprint.d.ts +4 -0
  140. package/dist/transport/helpers/derive-relay-identity-fingerprint.d.ts.map +1 -0
  141. package/dist/transport/helpers/derive-relay-identity-fingerprint.js +7 -0
  142. package/dist/transport/helpers/encode-relay-key-bundle-signature-input.d.ts +4 -0
  143. package/dist/transport/helpers/encode-relay-key-bundle-signature-input.d.ts.map +1 -0
  144. package/dist/transport/helpers/encode-relay-key-bundle-signature-input.js +7 -0
  145. package/dist/transport/helpers/index.d.ts +3 -0
  146. package/dist/transport/helpers/index.d.ts.map +1 -0
  147. package/dist/transport/helpers/index.js +2 -0
  148. package/dist/transport/index.d.ts +5 -0
  149. package/dist/transport/index.d.ts.map +1 -0
  150. package/dist/transport/index.js +4 -0
  151. package/dist/transport/model/index.d.ts +4 -0
  152. package/dist/transport/model/index.d.ts.map +1 -0
  153. package/dist/transport/model/index.js +3 -0
  154. package/dist/transport/model/queue-model.d.ts +16 -0
  155. package/dist/transport/model/queue-model.d.ts.map +1 -0
  156. package/dist/transport/model/queue-model.js +1 -0
  157. package/dist/transport/model/relay-address.d.ts +7 -0
  158. package/dist/transport/model/relay-address.d.ts.map +1 -0
  159. package/dist/transport/model/relay-address.js +1 -0
  160. package/dist/transport/model/relay-key-bundle.d.ts +15 -0
  161. package/dist/transport/model/relay-key-bundle.d.ts.map +1 -0
  162. package/dist/transport/model/relay-key-bundle.js +1 -0
  163. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export * from "./brand";
2
+ export * from "./keys";
3
+ export * from "./crypto-inputs";
4
+ export * from "./x-wing";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export * from "./brand";
2
+ export * from "./keys";
3
+ export * from "./crypto-inputs";
4
+ export * from "./x-wing";
@@ -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,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,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,4 @@
1
+ export * from "./CryptoPrimitivesFacadeContract";
2
+ export * from "./CryptoPrimitivesPort";
3
+ export * from "./XWingPort";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from "./CryptoPrimitivesFacadeContract";
2
+ export * from "./CryptoPrimitivesPort";
3
+ export * from "./XWingPort";
@@ -0,0 +1,3 @@
1
+ export * from "./contracts";
2
+ export * from "./CryptoPrimitivesFacade";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export * from "./contracts";
2
+ export * from "./CryptoPrimitivesFacade";
@@ -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,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,4 @@
1
+ export * from "./Ed25519Port";
2
+ export * from "./MlDsaPort";
3
+ export * from "./SignatureFacadeContract";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from "./Ed25519Port";
2
+ export * from "./MlDsaPort";
3
+ export * from "./SignatureFacadeContract";
@@ -0,0 +1,4 @@
1
+ export * from "./contracts";
2
+ export * from "./model";
3
+ export * from "./SignatureFacade";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from "./contracts";
2
+ export * from "./model";
3
+ export * from "./SignatureFacade";
@@ -0,0 +1,2 @@
1
+ export * from "./signature-model";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export * from "./constants";
2
+ export * from "./crypto-core";
3
+ export * from "./transport";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -0,0 +1,3 @@
1
+ export * from "./constants";
2
+ export * from "./crypto-core";
3
+ export * from "./transport";