@ecency/hive-tx 7.1.0

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 (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +206 -0
  3. package/dist/browser/hive-tx.min.js +3 -0
  4. package/dist/browser/hive-tx.min.js.LICENSE.txt +5 -0
  5. package/dist/browser/hive-tx.min.js.map +1 -0
  6. package/dist/cjs/Transaction.d.ts +71 -0
  7. package/dist/cjs/Transaction.d.ts.map +1 -0
  8. package/dist/cjs/Transaction.js +199 -0
  9. package/dist/cjs/Transaction.js.map +1 -0
  10. package/dist/cjs/config.d.ts +37 -0
  11. package/dist/cjs/config.d.ts.map +1 -0
  12. package/dist/cjs/config.js +54 -0
  13. package/dist/cjs/config.js.map +1 -0
  14. package/dist/cjs/helpers/Asset.d.ts +21 -0
  15. package/dist/cjs/helpers/Asset.d.ts.map +1 -0
  16. package/dist/cjs/helpers/Asset.js +74 -0
  17. package/dist/cjs/helpers/Asset.js.map +1 -0
  18. package/dist/cjs/helpers/ByteBuffer.d.ts +75 -0
  19. package/dist/cjs/helpers/ByteBuffer.d.ts.map +1 -0
  20. package/dist/cjs/helpers/ByteBuffer.js +555 -0
  21. package/dist/cjs/helpers/ByteBuffer.js.map +1 -0
  22. package/dist/cjs/helpers/HexBuffer.d.ts +10 -0
  23. package/dist/cjs/helpers/HexBuffer.d.ts.map +1 -0
  24. package/dist/cjs/helpers/HexBuffer.js +33 -0
  25. package/dist/cjs/helpers/HexBuffer.js.map +1 -0
  26. package/dist/cjs/helpers/PrivateKey.d.ts +114 -0
  27. package/dist/cjs/helpers/PrivateKey.d.ts.map +1 -0
  28. package/dist/cjs/helpers/PrivateKey.js +212 -0
  29. package/dist/cjs/helpers/PrivateKey.js.map +1 -0
  30. package/dist/cjs/helpers/PublicKey.d.ts +47 -0
  31. package/dist/cjs/helpers/PublicKey.d.ts.map +1 -0
  32. package/dist/cjs/helpers/PublicKey.js +97 -0
  33. package/dist/cjs/helpers/PublicKey.js.map +1 -0
  34. package/dist/cjs/helpers/Signature.d.ts +38 -0
  35. package/dist/cjs/helpers/Signature.d.ts.map +1 -0
  36. package/dist/cjs/helpers/Signature.js +85 -0
  37. package/dist/cjs/helpers/Signature.js.map +1 -0
  38. package/dist/cjs/helpers/aes.d.ts +15 -0
  39. package/dist/cjs/helpers/aes.d.ts.map +1 -0
  40. package/dist/cjs/helpers/aes.js +87 -0
  41. package/dist/cjs/helpers/aes.js.map +1 -0
  42. package/dist/cjs/helpers/call.d.ts +119 -0
  43. package/dist/cjs/helpers/call.d.ts.map +1 -0
  44. package/dist/cjs/helpers/call.js +498 -0
  45. package/dist/cjs/helpers/call.js.map +1 -0
  46. package/dist/cjs/helpers/deserializer.d.ts +4 -0
  47. package/dist/cjs/helpers/deserializer.d.ts.map +1 -0
  48. package/dist/cjs/helpers/deserializer.js +58 -0
  49. package/dist/cjs/helpers/deserializer.js.map +1 -0
  50. package/dist/cjs/helpers/memo.d.ts +36 -0
  51. package/dist/cjs/helpers/memo.d.ts.map +1 -0
  52. package/dist/cjs/helpers/memo.js +167 -0
  53. package/dist/cjs/helpers/memo.js.map +1 -0
  54. package/dist/cjs/helpers/serializer.d.ts +14 -0
  55. package/dist/cjs/helpers/serializer.d.ts.map +1 -0
  56. package/dist/cjs/helpers/serializer.js +639 -0
  57. package/dist/cjs/helpers/serializer.js.map +1 -0
  58. package/dist/cjs/helpers/sleep.d.ts +2 -0
  59. package/dist/cjs/helpers/sleep.d.ts.map +1 -0
  60. package/dist/cjs/helpers/sleep.js +8 -0
  61. package/dist/cjs/helpers/sleep.js.map +1 -0
  62. package/dist/cjs/helpers/utils.d.ts +122 -0
  63. package/dist/cjs/helpers/utils.d.ts.map +1 -0
  64. package/dist/cjs/helpers/utils.js +202 -0
  65. package/dist/cjs/helpers/utils.js.map +1 -0
  66. package/dist/cjs/index.d.ts +10 -0
  67. package/dist/cjs/index.d.ts.map +1 -0
  68. package/dist/cjs/index.js +60 -0
  69. package/dist/cjs/index.js.map +1 -0
  70. package/dist/cjs/type_generators/types/balance.d.ts +1096 -0
  71. package/dist/cjs/type_generators/types/balance.d.ts.map +1 -0
  72. package/dist/cjs/type_generators/types/balance.js +3 -0
  73. package/dist/cjs/type_generators/types/balance.js.map +1 -0
  74. package/dist/cjs/type_generators/types/hafah.d.ts +2154 -0
  75. package/dist/cjs/type_generators/types/hafah.d.ts.map +1 -0
  76. package/dist/cjs/type_generators/types/hafah.js +3 -0
  77. package/dist/cjs/type_generators/types/hafah.js.map +1 -0
  78. package/dist/cjs/type_generators/types/hafbe.d.ts +2121 -0
  79. package/dist/cjs/type_generators/types/hafbe.d.ts.map +1 -0
  80. package/dist/cjs/type_generators/types/hafbe.js +3 -0
  81. package/dist/cjs/type_generators/types/hafbe.js.map +1 -0
  82. package/dist/cjs/type_generators/types/hafsql.d.ts +2439 -0
  83. package/dist/cjs/type_generators/types/hafsql.d.ts.map +1 -0
  84. package/dist/cjs/type_generators/types/hafsql.js +3 -0
  85. package/dist/cjs/type_generators/types/hafsql.js.map +1 -0
  86. package/dist/cjs/type_generators/types/hivemind.d.ts +202 -0
  87. package/dist/cjs/type_generators/types/hivemind.d.ts.map +1 -0
  88. package/dist/cjs/type_generators/types/hivemind.js +3 -0
  89. package/dist/cjs/type_generators/types/hivemind.js.map +1 -0
  90. package/dist/cjs/type_generators/types/hivesense.d.ts +448 -0
  91. package/dist/cjs/type_generators/types/hivesense.d.ts.map +1 -0
  92. package/dist/cjs/type_generators/types/hivesense.js +3 -0
  93. package/dist/cjs/type_generators/types/hivesense.js.map +1 -0
  94. package/dist/cjs/type_generators/types/nft-tracker.d.ts +348 -0
  95. package/dist/cjs/type_generators/types/nft-tracker.d.ts.map +1 -0
  96. package/dist/cjs/type_generators/types/nft-tracker.js +3 -0
  97. package/dist/cjs/type_generators/types/nft-tracker.js.map +1 -0
  98. package/dist/cjs/type_generators/types/reputation.d.ts +182 -0
  99. package/dist/cjs/type_generators/types/reputation.d.ts.map +1 -0
  100. package/dist/cjs/type_generators/types/reputation.js +3 -0
  101. package/dist/cjs/type_generators/types/reputation.js.map +1 -0
  102. package/dist/cjs/type_generators/types/status.d.ts +139 -0
  103. package/dist/cjs/type_generators/types/status.d.ts.map +1 -0
  104. package/dist/cjs/type_generators/types/status.js +3 -0
  105. package/dist/cjs/type_generators/types/status.js.map +1 -0
  106. package/dist/cjs/types.d.ts +415 -0
  107. package/dist/cjs/types.d.ts.map +1 -0
  108. package/dist/cjs/types.js +3 -0
  109. package/dist/cjs/types.js.map +1 -0
  110. package/dist/esm/Transaction.d.ts +71 -0
  111. package/dist/esm/Transaction.d.ts.map +1 -0
  112. package/dist/esm/Transaction.js +195 -0
  113. package/dist/esm/Transaction.js.map +1 -0
  114. package/dist/esm/config.d.ts +37 -0
  115. package/dist/esm/config.d.ts.map +1 -0
  116. package/dist/esm/config.js +51 -0
  117. package/dist/esm/config.js.map +1 -0
  118. package/dist/esm/helpers/Asset.d.ts +21 -0
  119. package/dist/esm/helpers/Asset.d.ts.map +1 -0
  120. package/dist/esm/helpers/Asset.js +70 -0
  121. package/dist/esm/helpers/Asset.js.map +1 -0
  122. package/dist/esm/helpers/ByteBuffer.d.ts +75 -0
  123. package/dist/esm/helpers/ByteBuffer.d.ts.map +1 -0
  124. package/dist/esm/helpers/ByteBuffer.js +551 -0
  125. package/dist/esm/helpers/ByteBuffer.js.map +1 -0
  126. package/dist/esm/helpers/HexBuffer.d.ts +10 -0
  127. package/dist/esm/helpers/HexBuffer.d.ts.map +1 -0
  128. package/dist/esm/helpers/HexBuffer.js +29 -0
  129. package/dist/esm/helpers/HexBuffer.js.map +1 -0
  130. package/dist/esm/helpers/PrivateKey.d.ts +114 -0
  131. package/dist/esm/helpers/PrivateKey.d.ts.map +1 -0
  132. package/dist/esm/helpers/PrivateKey.js +205 -0
  133. package/dist/esm/helpers/PrivateKey.js.map +1 -0
  134. package/dist/esm/helpers/PublicKey.d.ts +47 -0
  135. package/dist/esm/helpers/PublicKey.d.ts.map +1 -0
  136. package/dist/esm/helpers/PublicKey.js +90 -0
  137. package/dist/esm/helpers/PublicKey.js.map +1 -0
  138. package/dist/esm/helpers/Signature.d.ts +38 -0
  139. package/dist/esm/helpers/Signature.d.ts.map +1 -0
  140. package/dist/esm/helpers/Signature.js +81 -0
  141. package/dist/esm/helpers/Signature.js.map +1 -0
  142. package/dist/esm/helpers/aes.d.ts +15 -0
  143. package/dist/esm/helpers/aes.d.ts.map +1 -0
  144. package/dist/esm/helpers/aes.js +81 -0
  145. package/dist/esm/helpers/aes.js.map +1 -0
  146. package/dist/esm/helpers/call.d.ts +119 -0
  147. package/dist/esm/helpers/call.d.ts.map +1 -0
  148. package/dist/esm/helpers/call.js +490 -0
  149. package/dist/esm/helpers/call.js.map +1 -0
  150. package/dist/esm/helpers/deserializer.d.ts +4 -0
  151. package/dist/esm/helpers/deserializer.d.ts.map +1 -0
  152. package/dist/esm/helpers/deserializer.js +55 -0
  153. package/dist/esm/helpers/deserializer.js.map +1 -0
  154. package/dist/esm/helpers/memo.d.ts +36 -0
  155. package/dist/esm/helpers/memo.d.ts.map +1 -0
  156. package/dist/esm/helpers/memo.js +128 -0
  157. package/dist/esm/helpers/memo.js.map +1 -0
  158. package/dist/esm/helpers/serializer.d.ts +14 -0
  159. package/dist/esm/helpers/serializer.d.ts.map +1 -0
  160. package/dist/esm/helpers/serializer.js +636 -0
  161. package/dist/esm/helpers/serializer.js.map +1 -0
  162. package/dist/esm/helpers/sleep.d.ts +2 -0
  163. package/dist/esm/helpers/sleep.d.ts.map +1 -0
  164. package/dist/esm/helpers/sleep.js +4 -0
  165. package/dist/esm/helpers/sleep.js.map +1 -0
  166. package/dist/esm/helpers/utils.d.ts +122 -0
  167. package/dist/esm/helpers/utils.d.ts.map +1 -0
  168. package/dist/esm/helpers/utils.js +196 -0
  169. package/dist/esm/helpers/utils.js.map +1 -0
  170. package/dist/esm/index.d.ts +10 -0
  171. package/dist/esm/index.d.ts.map +1 -0
  172. package/dist/esm/index.js +11 -0
  173. package/dist/esm/index.js.map +1 -0
  174. package/dist/esm/type_generators/types/balance.d.ts +1096 -0
  175. package/dist/esm/type_generators/types/balance.d.ts.map +1 -0
  176. package/dist/esm/type_generators/types/balance.js +2 -0
  177. package/dist/esm/type_generators/types/balance.js.map +1 -0
  178. package/dist/esm/type_generators/types/hafah.d.ts +2154 -0
  179. package/dist/esm/type_generators/types/hafah.d.ts.map +1 -0
  180. package/dist/esm/type_generators/types/hafah.js +2 -0
  181. package/dist/esm/type_generators/types/hafah.js.map +1 -0
  182. package/dist/esm/type_generators/types/hafbe.d.ts +2121 -0
  183. package/dist/esm/type_generators/types/hafbe.d.ts.map +1 -0
  184. package/dist/esm/type_generators/types/hafbe.js +2 -0
  185. package/dist/esm/type_generators/types/hafbe.js.map +1 -0
  186. package/dist/esm/type_generators/types/hafsql.d.ts +2439 -0
  187. package/dist/esm/type_generators/types/hafsql.d.ts.map +1 -0
  188. package/dist/esm/type_generators/types/hafsql.js +2 -0
  189. package/dist/esm/type_generators/types/hafsql.js.map +1 -0
  190. package/dist/esm/type_generators/types/hivemind.d.ts +202 -0
  191. package/dist/esm/type_generators/types/hivemind.d.ts.map +1 -0
  192. package/dist/esm/type_generators/types/hivemind.js +2 -0
  193. package/dist/esm/type_generators/types/hivemind.js.map +1 -0
  194. package/dist/esm/type_generators/types/hivesense.d.ts +448 -0
  195. package/dist/esm/type_generators/types/hivesense.d.ts.map +1 -0
  196. package/dist/esm/type_generators/types/hivesense.js +2 -0
  197. package/dist/esm/type_generators/types/hivesense.js.map +1 -0
  198. package/dist/esm/type_generators/types/nft-tracker.d.ts +348 -0
  199. package/dist/esm/type_generators/types/nft-tracker.d.ts.map +1 -0
  200. package/dist/esm/type_generators/types/nft-tracker.js +2 -0
  201. package/dist/esm/type_generators/types/nft-tracker.js.map +1 -0
  202. package/dist/esm/type_generators/types/reputation.d.ts +182 -0
  203. package/dist/esm/type_generators/types/reputation.d.ts.map +1 -0
  204. package/dist/esm/type_generators/types/reputation.js +2 -0
  205. package/dist/esm/type_generators/types/reputation.js.map +1 -0
  206. package/dist/esm/type_generators/types/status.d.ts +139 -0
  207. package/dist/esm/type_generators/types/status.d.ts.map +1 -0
  208. package/dist/esm/type_generators/types/status.js +2 -0
  209. package/dist/esm/type_generators/types/status.js.map +1 -0
  210. package/dist/esm/types.d.ts +415 -0
  211. package/dist/esm/types.d.ts.map +1 -0
  212. package/dist/esm/types.js +2 -0
  213. package/dist/esm/types.js.map +1 -0
  214. package/package.json +83 -0
@@ -0,0 +1,114 @@
1
+ import { PublicKey } from './PublicKey';
2
+ import { Signature } from './Signature';
3
+ export type KeyRole = 'owner' | 'active' | 'posting' | 'memo';
4
+ /**
5
+ * ECDSA (secp256k1) private key for signing and encryption operations.
6
+ * Handles key generation, derivation from seeds/passwords, and cryptographic operations.
7
+ *
8
+ * All private keys are stored internally as Uint8Array and can be converted to/from
9
+ * Wallet Import Format (WIF) strings for storage and transmission.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // From WIF string
14
+ * const key = PrivateKey.from('5JdeC9P7Pbd1uGdFVEsJ41EkEnADbbHGq6p1BwFxm6txNBsQnsw')
15
+ *
16
+ * // Generate random key
17
+ * const randomKey = PrivateKey.randomKey()
18
+ *
19
+ * // From username and password
20
+ * const loginKey = PrivateKey.fromLogin('username', 'password')
21
+ *
22
+ * // Sign a message
23
+ * const signature = key.sign(someHash)
24
+ *
25
+ * // Get public key
26
+ * const pubKey = key.createPublic()
27
+ * ```
28
+ */
29
+ export declare class PrivateKey {
30
+ key: Uint8Array;
31
+ constructor(key: Uint8Array);
32
+ /**
33
+ * Creates a PrivateKey instance from a WIF string or raw Uint8Array.
34
+ * Automatically detects the input type and uses the appropriate method.
35
+ *
36
+ * @param value - WIF formatted string or raw 32-byte key as Uint8Array
37
+ * @returns New PrivateKey instance
38
+ * @throws Error if the key format is invalid
39
+ */
40
+ static from(value: string | Uint8Array): PrivateKey;
41
+ /**
42
+ * Creates a PrivateKey from a Wallet Import Format (WIF) encoded string.
43
+ *
44
+ * @param wif - WIF encoded private key string
45
+ * @returns New PrivateKey instance
46
+ * @throws Error if WIF format is invalid or checksum fails
47
+ */
48
+ static fromString(wif: string): PrivateKey;
49
+ /**
50
+ * Creates a PrivateKey from a seed string or Uint8Array.
51
+ * The seed is hashed with SHA256 to produce the private key.
52
+ *
53
+ * @param seed - Seed string (converted to bytes) or raw byte array
54
+ * @returns New PrivateKey instance derived from seed
55
+ */
56
+ static fromSeed(seed: string | Uint8Array): PrivateKey;
57
+ /**
58
+ * Derives a PrivateKey from username, password, and role using Hive's key derivation scheme.
59
+ * This generates the same keys that the Hive wallet uses for login-based keys.
60
+ *
61
+ * @param username - Hive username
62
+ * @param password - Master password (or seed phrase)
63
+ * @param role - Key role ('owner', 'active', 'posting', 'memo')
64
+ * @returns New PrivateKey instance for the specified role
65
+ */
66
+ static fromLogin(username: string, password: string, role?: KeyRole): PrivateKey;
67
+ /**
68
+ * Signs a 32-byte message hash using ECDSA and returns a recoverable signature.
69
+ * The signature includes recovery information to allow public key recovery.
70
+ *
71
+ * @param message - 32-byte message hash to sign (Uint8Array)
72
+ * @returns Signature object containing the signature data
73
+ */
74
+ sign(message: Uint8Array): Signature;
75
+ /**
76
+ * Derives the corresponding public key for this private key.
77
+ *
78
+ * @param prefix - Optional address prefix (defaults to config.address_prefix)
79
+ * @returns PublicKey instance derived from this private key
80
+ */
81
+ createPublic(prefix?: string): PublicKey;
82
+ /**
83
+ * Returns the private key as a Wallet Import Format (WIF) encoded string.
84
+ * This includes network ID and checksum for safe storage/transmission.
85
+ *
86
+ * @returns WIF encoded private key string
87
+ */
88
+ toString(): string;
89
+ /**
90
+ * Returns a masked representation of the private key for debugging/logging.
91
+ * Shows only the first and last 6 characters to avoid accidental exposure.
92
+ * Use toString() to get the full key for export/serialization.
93
+ *
94
+ * @returns Masked key representation for safe logging
95
+ */
96
+ inspect(): string;
97
+ /**
98
+ * Computes a shared secret using ECDH key exchange for memo encryption.
99
+ * The shared secret is used as a key for AES encryption/decryption.
100
+ *
101
+ * @param publicKey - Other party's public key
102
+ * @returns 64-byte shared secret as Uint8Array
103
+ */
104
+ getSharedSecret(publicKey: PublicKey): Uint8Array;
105
+ /**
106
+ * Generates a new cryptographically secure random private key.
107
+ * Uses the secp256k1 key generation algorithm for security.
108
+ * This method may take up to 250ms due to entropy collection.
109
+ *
110
+ * @returns New randomly generated PrivateKey instance
111
+ */
112
+ static randomKey(): PrivateKey;
113
+ }
114
+ //# sourceMappingURL=PrivateKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrivateKey.d.ts","sourceRoot":"","sources":["../../../src/helpers/PrivateKey.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;AAI7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,UAAU;IACrB,GAAG,EAAE,UAAU,CAAA;gBAEH,GAAG,EAAE,UAAU;IAS3B;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU;IAQnD;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IAI1C;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU;IAatD;;;;;;;;OAQG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,OAAkB,GAAG,UAAU;IAK1F;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS;IAUpC;;;;;OAKG;IACH,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS;IAIxC;;;;;OAKG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;OAMG;IACH,OAAO,IAAI,MAAM;IAKjB;;;;;;OAMG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU;IAMjD;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,IAAI,UAAU;CAG/B"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PrivateKey = void 0;
7
+ const bs58_1 = __importDefault(require("bs58"));
8
+ const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
9
+ const sha2_js_1 = require("@noble/hashes/sha2.js");
10
+ const PublicKey_1 = require("./PublicKey");
11
+ const Signature_1 = require("./Signature");
12
+ const utils_js_1 = require("@noble/hashes/utils.js");
13
+ const NETWORK_ID = new Uint8Array([0x80]);
14
+ /**
15
+ * ECDSA (secp256k1) private key for signing and encryption operations.
16
+ * Handles key generation, derivation from seeds/passwords, and cryptographic operations.
17
+ *
18
+ * All private keys are stored internally as Uint8Array and can be converted to/from
19
+ * Wallet Import Format (WIF) strings for storage and transmission.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // From WIF string
24
+ * const key = PrivateKey.from('5JdeC9P7Pbd1uGdFVEsJ41EkEnADbbHGq6p1BwFxm6txNBsQnsw')
25
+ *
26
+ * // Generate random key
27
+ * const randomKey = PrivateKey.randomKey()
28
+ *
29
+ * // From username and password
30
+ * const loginKey = PrivateKey.fromLogin('username', 'password')
31
+ *
32
+ * // Sign a message
33
+ * const signature = key.sign(someHash)
34
+ *
35
+ * // Get public key
36
+ * const pubKey = key.createPublic()
37
+ * ```
38
+ */
39
+ class PrivateKey {
40
+ constructor(key) {
41
+ this.key = key;
42
+ try {
43
+ secp256k1_js_1.secp256k1.getPublicKey(key);
44
+ }
45
+ catch (e) {
46
+ throw new Error('invalid private key');
47
+ }
48
+ }
49
+ /**
50
+ * Creates a PrivateKey instance from a WIF string or raw Uint8Array.
51
+ * Automatically detects the input type and uses the appropriate method.
52
+ *
53
+ * @param value - WIF formatted string or raw 32-byte key as Uint8Array
54
+ * @returns New PrivateKey instance
55
+ * @throws Error if the key format is invalid
56
+ */
57
+ static from(value) {
58
+ if (typeof value === 'string') {
59
+ return PrivateKey.fromString(value);
60
+ }
61
+ else {
62
+ return new PrivateKey(value);
63
+ }
64
+ }
65
+ /**
66
+ * Creates a PrivateKey from a Wallet Import Format (WIF) encoded string.
67
+ *
68
+ * @param wif - WIF encoded private key string
69
+ * @returns New PrivateKey instance
70
+ * @throws Error if WIF format is invalid or checksum fails
71
+ */
72
+ static fromString(wif) {
73
+ return new PrivateKey(decodePrivate(wif).subarray(1));
74
+ }
75
+ /**
76
+ * Creates a PrivateKey from a seed string or Uint8Array.
77
+ * The seed is hashed with SHA256 to produce the private key.
78
+ *
79
+ * @param seed - Seed string (converted to bytes) or raw byte array
80
+ * @returns New PrivateKey instance derived from seed
81
+ */
82
+ static fromSeed(seed) {
83
+ if (typeof seed === 'string') {
84
+ const isHex = /^[0-9a-fA-F]+$/.test(seed);
85
+ if (isHex) {
86
+ seed = (0, utils_js_1.hexToBytes)(seed);
87
+ }
88
+ else {
89
+ // Convert non-hex string to Uint8Array using UTF-8 encoding
90
+ seed = new TextEncoder().encode(seed);
91
+ }
92
+ }
93
+ return new PrivateKey((0, sha2_js_1.sha256)(seed));
94
+ }
95
+ /**
96
+ * Derives a PrivateKey from username, password, and role using Hive's key derivation scheme.
97
+ * This generates the same keys that the Hive wallet uses for login-based keys.
98
+ *
99
+ * @param username - Hive username
100
+ * @param password - Master password (or seed phrase)
101
+ * @param role - Key role ('owner', 'active', 'posting', 'memo')
102
+ * @returns New PrivateKey instance for the specified role
103
+ */
104
+ static fromLogin(username, password, role = 'active') {
105
+ const seed = username + role + password;
106
+ return PrivateKey.fromSeed(seed);
107
+ }
108
+ /**
109
+ * Signs a 32-byte message hash using ECDSA and returns a recoverable signature.
110
+ * The signature includes recovery information to allow public key recovery.
111
+ *
112
+ * @param message - 32-byte message hash to sign (Uint8Array)
113
+ * @returns Signature object containing the signature data
114
+ */
115
+ sign(message) {
116
+ const rv = secp256k1_js_1.secp256k1.sign(message, this.key, {
117
+ extraEntropy: true,
118
+ format: 'recovered',
119
+ prehash: false // prehash does sha256 on the message
120
+ });
121
+ const recovery = parseInt((0, utils_js_1.bytesToHex)(rv.subarray(0, 1)), 16);
122
+ return Signature_1.Signature.from((recovery + 31).toString(16) + (0, utils_js_1.bytesToHex)(rv.subarray(1)));
123
+ }
124
+ /**
125
+ * Derives the corresponding public key for this private key.
126
+ *
127
+ * @param prefix - Optional address prefix (defaults to config.address_prefix)
128
+ * @returns PublicKey instance derived from this private key
129
+ */
130
+ createPublic(prefix) {
131
+ return new PublicKey_1.PublicKey(secp256k1_js_1.secp256k1.getPublicKey(this.key), prefix);
132
+ }
133
+ /**
134
+ * Returns the private key as a Wallet Import Format (WIF) encoded string.
135
+ * This includes network ID and checksum for safe storage/transmission.
136
+ *
137
+ * @returns WIF encoded private key string
138
+ */
139
+ toString() {
140
+ return encodePrivate(new Uint8Array([...NETWORK_ID, ...this.key]));
141
+ }
142
+ /**
143
+ * Returns a masked representation of the private key for debugging/logging.
144
+ * Shows only the first and last 6 characters to avoid accidental exposure.
145
+ * Use toString() to get the full key for export/serialization.
146
+ *
147
+ * @returns Masked key representation for safe logging
148
+ */
149
+ inspect() {
150
+ const key = this.toString();
151
+ return `PrivateKey: ${key.slice(0, 6)}...${key.slice(-6)}`;
152
+ }
153
+ /**
154
+ * Computes a shared secret using ECDH key exchange for memo encryption.
155
+ * The shared secret is used as a key for AES encryption/decryption.
156
+ *
157
+ * @param publicKey - Other party's public key
158
+ * @returns 64-byte shared secret as Uint8Array
159
+ */
160
+ getSharedSecret(publicKey) {
161
+ const s = secp256k1_js_1.secp256k1.getSharedSecret(this.key, publicKey.key);
162
+ // strip the parity byte
163
+ return (0, sha2_js_1.sha512)(s.subarray(1));
164
+ }
165
+ /**
166
+ * Generates a new cryptographically secure random private key.
167
+ * Uses the secp256k1 key generation algorithm for security.
168
+ * This method may take up to 250ms due to entropy collection.
169
+ *
170
+ * @returns New randomly generated PrivateKey instance
171
+ */
172
+ static randomKey() {
173
+ return new PrivateKey(secp256k1_js_1.secp256k1.keygen().secretKey);
174
+ }
175
+ }
176
+ exports.PrivateKey = PrivateKey;
177
+ const doubleSha256 = (input) => {
178
+ const dbl = (0, sha2_js_1.sha256)((0, sha2_js_1.sha256)(input));
179
+ return dbl;
180
+ };
181
+ /** Encode bs58+doubleSha256-checksum private key. */
182
+ const encodePrivate = (key) => {
183
+ // assert.equal(key.readUInt8(0), 0x80, 'private key network id mismatch')
184
+ const checksum = doubleSha256(key);
185
+ return bs58_1.default.encode(new Uint8Array([...key, ...checksum.slice(0, 4)]));
186
+ };
187
+ /** Decode bs58+doubleSha256-checksum encoded private key. */
188
+ const decodePrivate = (encodedKey) => {
189
+ const buffer = bs58_1.default.decode(encodedKey);
190
+ if (!isUint8ArrayEqual(buffer.slice(0, 1), NETWORK_ID)) {
191
+ throw new Error('Private key network id mismatch');
192
+ }
193
+ const checksum = buffer.slice(-4);
194
+ const key = buffer.slice(0, -4);
195
+ const checksumVerify = doubleSha256(key).slice(0, 4);
196
+ if (!isUint8ArrayEqual(checksum, checksumVerify)) {
197
+ throw new Error('Private key checksum mismatch');
198
+ }
199
+ return key;
200
+ };
201
+ const isUint8ArrayEqual = (a, b) => {
202
+ if (a === b)
203
+ return true;
204
+ if (a.byteLength !== b.byteLength)
205
+ return false;
206
+ const len = a.byteLength;
207
+ let i = 0;
208
+ while (i < len && a[i] === b[i])
209
+ i++;
210
+ return i === len;
211
+ };
212
+ //# sourceMappingURL=PrivateKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrivateKey.js","sourceRoot":"","sources":["../../../src/helpers/PrivateKey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { Signature } from './Signature';
2
+ export declare class PublicKey {
3
+ key: Uint8Array;
4
+ prefix: string;
5
+ /**
6
+ * Creates a new PublicKey instance from raw bytes.
7
+ * @param key Raw public key bytes (33 bytes, compressed format)
8
+ * @param prefix Optional address prefix (defaults to config.address_prefix)
9
+ */
10
+ constructor(key: Uint8Array, prefix?: string);
11
+ /**
12
+ * Creates a PublicKey from a string representation.
13
+ * @param wif Public key string (e.g., "STM8m5UgaFAAYQRuaNejYdS8FVLVp9Ss3K1qAVk5de6F8s3HnVbvA")
14
+ * @returns New PublicKey instance
15
+ * @throws Error if the key format is invalid
16
+ */
17
+ static fromString(wif: string): PublicKey;
18
+ /**
19
+ * Creates a PublicKey from a string or returns the instance if already a PublicKey.
20
+ * @param value Public key string or PublicKey instance
21
+ * @returns New or existing PublicKey instance
22
+ */
23
+ static from(value: string | PublicKey): PublicKey;
24
+ /**
25
+ * Verifies a signature against a message hash.
26
+ * @param message 32-byte message hash to verify
27
+ * @param signature Signature to verify
28
+ * @returns True if signature is valid, false otherwise
29
+ */
30
+ verify(message: Uint8Array, signature: Signature | string): boolean;
31
+ /**
32
+ * Returns the public key as a string for storage or transmission.
33
+ * @returns Public key string with prefix (e.g., "STM8m5UgaFAAYQRuaNejYdS8FVLVp9Ss3K1qAVk5de6F8s3HnVbvA")
34
+ */
35
+ toString(): string;
36
+ /**
37
+ * Returns JSON representation (same as toString()).
38
+ * @returns Public key string
39
+ */
40
+ toJSON(): string;
41
+ /**
42
+ * Returns a string representation for debugging.
43
+ * @returns Formatted public key string
44
+ */
45
+ inspect(): string;
46
+ }
47
+ //# sourceMappingURL=PublicKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicKey.d.ts","sourceRoot":"","sources":["../../../src/helpers/PublicKey.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIvC,qBAAa,SAAS;IACpB,GAAG,EAAE,UAAU,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IAEd;;;;OAIG;gBACS,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM;IAM5C;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IAKzC;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAQjD;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO;IAUnE;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,MAAM,IAAI,MAAM;IAIhB;;;OAGG;IACH,OAAO,IAAI,MAAM;CAGlB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PublicKey = void 0;
7
+ const legacy_js_1 = require("@noble/hashes/legacy.js");
8
+ const bs58_1 = __importDefault(require("bs58"));
9
+ const config_1 = require("../config");
10
+ const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
11
+ const Signature_1 = require("./Signature");
12
+ const DEFAULT_ADDRESS_PREFIX = config_1.config.address_prefix;
13
+ class PublicKey {
14
+ /**
15
+ * Creates a new PublicKey instance from raw bytes.
16
+ * @param key Raw public key bytes (33 bytes, compressed format)
17
+ * @param prefix Optional address prefix (defaults to config.address_prefix)
18
+ */
19
+ constructor(key, prefix) {
20
+ this.key = key;
21
+ this.prefix = prefix ?? DEFAULT_ADDRESS_PREFIX;
22
+ // assert(secp256k1.publicKeyVerify(key), 'invalid public key')
23
+ }
24
+ /**
25
+ * Creates a PublicKey from a string representation.
26
+ * @param wif Public key string (e.g., "STM8m5UgaFAAYQRuaNejYdS8FVLVp9Ss3K1qAVk5de6F8s3HnVbvA")
27
+ * @returns New PublicKey instance
28
+ * @throws Error if the key format is invalid
29
+ */
30
+ static fromString(wif) {
31
+ const { key, prefix } = decodePublic(wif);
32
+ return new PublicKey(key, prefix);
33
+ }
34
+ /**
35
+ * Creates a PublicKey from a string or returns the instance if already a PublicKey.
36
+ * @param value Public key string or PublicKey instance
37
+ * @returns New or existing PublicKey instance
38
+ */
39
+ static from(value) {
40
+ if (value instanceof PublicKey) {
41
+ return value;
42
+ }
43
+ else {
44
+ return PublicKey.fromString(value);
45
+ }
46
+ }
47
+ /**
48
+ * Verifies a signature against a message hash.
49
+ * @param message 32-byte message hash to verify
50
+ * @param signature Signature to verify
51
+ * @returns True if signature is valid, false otherwise
52
+ */
53
+ verify(message, signature) {
54
+ if (typeof signature === 'string') {
55
+ signature = Signature_1.Signature.from(signature);
56
+ }
57
+ return secp256k1_js_1.secp256k1.verify(signature.data, message, this.key, {
58
+ prehash: false,
59
+ format: 'compact'
60
+ });
61
+ }
62
+ /**
63
+ * Returns the public key as a string for storage or transmission.
64
+ * @returns Public key string with prefix (e.g., "STM8m5UgaFAAYQRuaNejYdS8FVLVp9Ss3K1qAVk5de6F8s3HnVbvA")
65
+ */
66
+ toString() {
67
+ return encodePublic(this.key, this.prefix);
68
+ }
69
+ /**
70
+ * Returns JSON representation (same as toString()).
71
+ * @returns Public key string
72
+ */
73
+ toJSON() {
74
+ return this.toString();
75
+ }
76
+ /**
77
+ * Returns a string representation for debugging.
78
+ * @returns Formatted public key string
79
+ */
80
+ inspect() {
81
+ return `PublicKey: ${this.toString()}`;
82
+ }
83
+ }
84
+ exports.PublicKey = PublicKey;
85
+ const encodePublic = (key, prefix) => {
86
+ const checksum = (0, legacy_js_1.ripemd160)(key);
87
+ return prefix + bs58_1.default.encode(new Uint8Array([...key, ...checksum.subarray(0, 4)]));
88
+ };
89
+ /** Decode bs58+ripemd160-checksum encoded public key. */
90
+ const decodePublic = (encodedKey) => {
91
+ const prefix = encodedKey.slice(0, 3);
92
+ encodedKey = encodedKey.slice(3);
93
+ const buffer = bs58_1.default.decode(encodedKey);
94
+ const key = buffer.subarray(0, buffer.length - 4);
95
+ return { key: key, prefix };
96
+ };
97
+ //# sourceMappingURL=PublicKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicKey.js","sourceRoot":"","sources":["../../../src/helpers/PublicKey.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAmD;AACnD,gDAAuB;AACvB,sCAAkC;AAClC,6DAAsD;AACtD,2CAAuC;AAEvC,MAAM,sBAAsB,GAAG,eAAM,CAAC,cAAc,CAAA;AAEpD,MAAa,SAAS;IAIpB;;;;OAIG;IACH,YAAY,GAAe,EAAE,MAAe;QAC1C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,sBAAsB,CAAA;QAC9C,+DAA+D;IACjE,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,GAAW;QAC3B,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;QACzC,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,KAAyB;QACnC,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC,UAAU,CAAC,KAAe,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAmB,EAAE,SAA6B;QACvD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,SAAS,GAAG,qBAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACvC,CAAC;QACD,OAAO,wBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACzD,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS;SAClB,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5C,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,cAAc,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAA;IACxC,CAAC;CACF;AA9ED,8BA8EC;AAED,MAAM,YAAY,GAAG,CAAC,GAAe,EAAE,MAAc,EAAU,EAAE;IAC/D,MAAM,QAAQ,GAAG,IAAA,qBAAS,EAAC,GAAG,CAAC,CAAA;IAC/B,OAAO,MAAM,GAAG,cAAI,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnF,CAAC,CAAA;AAED,yDAAyD;AACzD,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,EAAE;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACrC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,MAAM,GAAG,cAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACjD,OAAO,EAAE,GAAG,EAAE,GAAiB,EAAE,MAAM,EAAE,CAAA;AAC3C,CAAC,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { PublicKey } from './PublicKey';
2
+ export declare class Signature {
3
+ data: Uint8Array;
4
+ recovery: number;
5
+ private compressed;
6
+ /**
7
+ * Creates a new Signature instance.
8
+ * @param data Raw signature data (64 bytes)
9
+ * @param recovery Recovery byte (0-3)
10
+ * @param compressed Whether signature is compressed (default: true)
11
+ */
12
+ constructor(data: Uint8Array, recovery: number, compressed?: boolean);
13
+ /**
14
+ * Creates a Signature from a hex string.
15
+ * @param string 130-character hex string containing signature and recovery data
16
+ * @returns New Signature instance
17
+ * @throws Error if input is not a string
18
+ */
19
+ static from(string: string): Signature;
20
+ /**
21
+ * Converts signature to 65-byte buffer format.
22
+ * @returns 65-byte buffer containing recovery byte + signature data
23
+ */
24
+ toBuffer(): Uint8Array<ArrayBuffer>;
25
+ /**
26
+ * Returns signature as 130-character hex string.
27
+ * @returns Hex string representation of signature
28
+ */
29
+ customToString(): string;
30
+ /**
31
+ * Recovers the public key from this signature and message.
32
+ * @param message 32-byte message hash (Uint8Array) or 64-character hex string
33
+ * @returns PublicKey that created this signature
34
+ * @throws Error if message is not a valid 32-byte SHA256 hash
35
+ */
36
+ getPublicKey(message: Uint8Array | string): PublicKey;
37
+ }
38
+ //# sourceMappingURL=Signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../../src/helpers/Signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIvC,qBAAa,SAAS;IACpB,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;;OAKG;gBACS,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO;IAMpE;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAkB1B;;;OAGG;IACH,QAAQ;IAWR;;;OAGG;IACH,cAAc;IAId;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS;CActD"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Signature = void 0;
4
+ const PublicKey_1 = require("./PublicKey");
5
+ const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
6
+ const utils_js_1 = require("@noble/hashes/utils.js");
7
+ class Signature {
8
+ /**
9
+ * Creates a new Signature instance.
10
+ * @param data Raw signature data (64 bytes)
11
+ * @param recovery Recovery byte (0-3)
12
+ * @param compressed Whether signature is compressed (default: true)
13
+ */
14
+ constructor(data, recovery, compressed) {
15
+ this.data = data;
16
+ this.recovery = recovery;
17
+ this.compressed = compressed ?? true;
18
+ }
19
+ /**
20
+ * Creates a Signature from a hex string.
21
+ * @param string 130-character hex string containing signature and recovery data
22
+ * @returns New Signature instance
23
+ * @throws Error if input is not a string
24
+ */
25
+ static from(string) {
26
+ if (typeof string === 'string') {
27
+ const temp = (0, utils_js_1.hexToBytes)(string);
28
+ let recovery = parseInt((0, utils_js_1.bytesToHex)(temp.subarray(0, 1)), 16) - 31;
29
+ let compressed = true;
30
+ // non-compressed signatures have -4
31
+ // https://github.com/bitcoin/bitcoin/blob/95ea54ba089610019a74c1176a2c7c0dba144b1c/src/key.cpp#L257
32
+ if (recovery < 0) {
33
+ compressed = false;
34
+ recovery = recovery + 4;
35
+ }
36
+ const data = temp.subarray(1);
37
+ return new Signature(data, recovery, compressed);
38
+ }
39
+ else {
40
+ throw new Error('Expected string for data');
41
+ }
42
+ }
43
+ /**
44
+ * Converts signature to 65-byte buffer format.
45
+ * @returns 65-byte buffer containing recovery byte + signature data
46
+ */
47
+ toBuffer() {
48
+ const buffer = new Uint8Array(65).fill(0);
49
+ if (this.compressed) {
50
+ buffer[0] = (this.recovery + 31) & 0xff;
51
+ }
52
+ else {
53
+ buffer[0] = (this.recovery + 27) & 0xff;
54
+ }
55
+ buffer.set(this.data, 1);
56
+ return buffer;
57
+ }
58
+ /**
59
+ * Returns signature as 130-character hex string.
60
+ * @returns Hex string representation of signature
61
+ */
62
+ customToString() {
63
+ return (0, utils_js_1.bytesToHex)(this.toBuffer());
64
+ }
65
+ /**
66
+ * Recovers the public key from this signature and message.
67
+ * @param message 32-byte message hash (Uint8Array) or 64-character hex string
68
+ * @returns PublicKey that created this signature
69
+ * @throws Error if message is not a valid 32-byte SHA256 hash
70
+ */
71
+ getPublicKey(message) {
72
+ if ((message instanceof Uint8Array && message.length !== 32) ||
73
+ (typeof message === 'string' && message.length !== 64)) {
74
+ throw new Error('Expected a valid sha256 hash as message');
75
+ }
76
+ if (typeof message === 'string') {
77
+ message = (0, utils_js_1.hexToBytes)(message);
78
+ }
79
+ const sig = secp256k1_js_1.secp256k1.Signature.fromBytes(this.data, 'compact');
80
+ const temp = new secp256k1_js_1.secp256k1.Signature(sig.r, sig.s, this.recovery);
81
+ return new PublicKey_1.PublicKey(temp.recoverPublicKey(message).toBytes());
82
+ }
83
+ }
84
+ exports.Signature = Signature;
85
+ //# sourceMappingURL=Signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Signature.js","sourceRoot":"","sources":["../../../src/helpers/Signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { PrivateKey } from './PrivateKey';
2
+ import { PublicKey } from './PublicKey';
3
+ export declare const encrypt: (privateKey: PrivateKey, publicKey: PublicKey, message: Uint8Array, nonce?: bigint) => {
4
+ nonce: bigint;
5
+ message: Uint8Array;
6
+ checksum: number;
7
+ };
8
+ export declare const decrypt: (privateKey: PrivateKey, publicKey: PublicKey, nonce: bigint, message: Uint8Array, checksum: number) => Uint8Array;
9
+ /**
10
+ * This method does not use a checksum, the returned data must be validated some other way.
11
+ * @arg {string|Uint8Array} plaintext - binary format
12
+ * @return {Uint8Array} binary
13
+ */
14
+ export declare const cryptoJsEncrypt: (message: Uint8Array, tag: Uint8Array, iv: Uint8Array) => Uint8Array;
15
+ //# sourceMappingURL=aes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes.d.ts","sourceRoot":"","sources":["../../../src/helpers/aes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,eAAO,MAAM,OAAO,GAClB,YAAY,UAAU,EACtB,WAAW,SAAS,EACpB,SAAS,UAAU,EACnB,QAAO,MAAsB;WAwBnB,MAAM;aAAW,UAAU;cAAY,MAAM;CAvBR,CAAA;AAEjD,eAAO,MAAM,OAAO,GAClB,YAAY,UAAU,EACtB,WAAW,SAAS,EACpB,OAAO,MAAM,EACb,SAAS,UAAU,EACnB,UAAU,MAAM,KACf,UAGF,CAAA;AAsDD;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,UAAU,EACnB,KAAK,UAAU,EACf,IAAI,UAAU,KACb,UAMF,CAAA"}