@helios-lang/effect 0.2.0 → 0.3.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.
- package/dist/Cardano/Ledger/Address.js +1 -1
- package/dist/Cardano/Ledger/Address.js.map +1 -1
- package/dist/Cardano/Ledger/PubKey.js +16 -14
- package/dist/Cardano/Ledger/PubKey.js.map +1 -1
- package/dist/Cardano/Ledger/index.js +1 -0
- package/dist/Cardano/Ledger/index.js.map +1 -1
- package/dist/Cardano/TxBuilder.js +26 -9
- package/dist/Cardano/TxBuilder.js.map +1 -1
- package/dist/Cardano/Uplc/Data.js.map +1 -1
- package/dist/Cardano/Wallet.js +48 -0
- package/dist/Cardano/Wallet.js.map +1 -0
- package/dist/Cardano/index.js +1 -0
- package/dist/Cardano/index.js.map +1 -1
- package/dist/Codecs/LittleEndian.js +4 -0
- package/dist/Codecs/LittleEndian.js.map +1 -1
- package/dist/Crypto/Bip32.js +131 -0
- package/dist/Crypto/Bip32.js.map +1 -0
- package/dist/Crypto/Bip39.js +2176 -0
- package/dist/Crypto/Bip39.js.map +1 -0
- package/package.json +1 -1
- package/types/Cardano/Ledger/Address.d.ts +2 -2
- package/types/Cardano/Ledger/Address.d.ts.map +1 -1
- package/types/Cardano/Ledger/PubKey.d.ts +11 -7
- package/types/Cardano/Ledger/PubKey.d.ts.map +1 -1
- package/types/Cardano/Ledger/Signature.d.ts +1 -1
- package/types/Cardano/Ledger/Tx.d.ts +8 -8
- package/types/Cardano/Ledger/TxOutput.d.ts +4 -4
- package/types/Cardano/Ledger/UTxO.d.ts +23 -23
- package/types/Cardano/Ledger/index.d.ts +1 -0
- package/types/Cardano/Ledger/index.d.ts.map +1 -1
- package/types/Cardano/TxBuilder.d.ts +6 -35
- package/types/Cardano/TxBuilder.d.ts.map +1 -1
- package/types/Cardano/Uplc/Data.d.ts.map +1 -1
- package/types/Cardano/Wallet.d.ts +73 -0
- package/types/Cardano/Wallet.d.ts.map +1 -0
- package/types/Cardano/index.d.ts +1 -0
- package/types/Cardano/index.d.ts.map +1 -1
- package/types/Codecs/LittleEndian.d.ts +1 -0
- package/types/Codecs/LittleEndian.d.ts.map +1 -1
- package/types/Crypto/Bip32.d.ts +29 -0
- package/types/Crypto/Bip32.d.ts.map +1 -0
- package/types/Crypto/Bip39.d.ts +43 -0
- package/types/Crypto/Bip39.d.ts.map +1 -0
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Either, ParseResult, Schema } from "effect";
|
|
2
|
+
import * as Bech32 from "../Codecs/Bech32.js";
|
|
3
|
+
import * as BigEndian from "../Codecs/BigEndian.js";
|
|
4
|
+
import * as Bytes from "../Codecs/Bytes.js";
|
|
5
|
+
import * as LE from "../Codecs/LittleEndian.js";
|
|
6
|
+
import * as Ed25519 from "./Ed25519.js";
|
|
7
|
+
import * as Hmac from "./Hmac.js";
|
|
8
|
+
import * as Pbkdf2 from "./Pbkdf2.js";
|
|
9
|
+
/**
|
|
10
|
+
* Used during `PrivateKey` derivation, to create a new `PrivateKey` instance with a non-publicly deriveable `PubKey`.
|
|
11
|
+
*/
|
|
12
|
+
export const HARDEN = 0x80000000;
|
|
13
|
+
export function isValidSigningKey(sk) {
|
|
14
|
+
if (sk.startsWith("addr_sk")) {
|
|
15
|
+
const decodeResult = Bech32.decode(sk);
|
|
16
|
+
if (decodeResult._tag == "Left") {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const { prefix, bytes } = decodeResult.right;
|
|
20
|
+
if (bytes.length != 96) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (prefix != "addr_sk") {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
export const SigningKey = Schema.String.pipe(Schema.filter((pk) => {
|
|
31
|
+
return isValidSigningKey(pk) || "Invalid Bip32 Private Signing Key";
|
|
32
|
+
}), Schema.brand("Crypto.Bip32.SigningKey"));
|
|
33
|
+
function makeSigningKeyUnsafe(bytes) {
|
|
34
|
+
return Bech32.encode("addr_sk", Bytes.toUint8Array(bytes));
|
|
35
|
+
}
|
|
36
|
+
export function isValidVerificationKey(pk) {
|
|
37
|
+
if (pk.startsWith("addr_vk")) {
|
|
38
|
+
const decodeResult = Bech32.decode(pk);
|
|
39
|
+
if (decodeResult._tag == "Left") {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const { prefix, bytes } = decodeResult.right;
|
|
43
|
+
if (bytes.length != 32) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (prefix != "addr_vk") {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
export const VerificationKey = Schema.String.pipe(Schema.filter((pk) => {
|
|
54
|
+
return isValidSigningKey(pk) || "Invalid Bip32 Public Verification Key";
|
|
55
|
+
}), Schema.brand("Crypto.Bip32.VerificationKey"));
|
|
56
|
+
export const makeVerificationKeyUnsafe = (bytes) => Bech32.encode("addr_vk", Bytes.toUint8Array(bytes));
|
|
57
|
+
export const makeVerificationKey = (bytes) => {
|
|
58
|
+
const vk = makeVerificationKeyUnsafe(bytes);
|
|
59
|
+
if (!isValidVerificationKey(vk)) {
|
|
60
|
+
return Either.left(new ParseResult.Unexpected(vk, "Invalid Verification Key"));
|
|
61
|
+
}
|
|
62
|
+
return Either.right(vk);
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* @param {number[]} entropy
|
|
66
|
+
* @param {boolean} force
|
|
67
|
+
* @returns {Bip32PrivateKey}
|
|
68
|
+
*/
|
|
69
|
+
export function skFromEntropy(entropy, force = true) {
|
|
70
|
+
const bytes = Pbkdf2.deriveSync(Hmac.sha2_512Sync, new Uint8Array([]), Bytes.toUint8Array(entropy), 4096, 96);
|
|
71
|
+
const kl = bytes.slice(0, 32);
|
|
72
|
+
const kr = bytes.slice(32, 64);
|
|
73
|
+
if (!force) {
|
|
74
|
+
if ((kl[31] & 0b00100000) != 0) {
|
|
75
|
+
throw new Error("invalid root secret");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
kl[0] &= 0b11111000;
|
|
79
|
+
kl[31] &= 0b00011111;
|
|
80
|
+
kl[31] |= 0b01000000;
|
|
81
|
+
const c = bytes.slice(64, 96);
|
|
82
|
+
return makeSigningKeyUnsafe(Bytes.concat(kl, kr, c));
|
|
83
|
+
}
|
|
84
|
+
export const skBytes = (sk) => Bytes.toUint8Array(Either.getOrThrow(Bech32.decode(sk)).bytes);
|
|
85
|
+
export const vkBytes = (vk) => Bytes.toUint8Array(Either.getOrThrow(Bech32.decode(vk)).bytes);
|
|
86
|
+
export const deriveVerificationKey = (sk) => Bech32.encode("addr_vk", Either.getOrThrow(Ed25519.derivePublicKey(skBytes(sk), false)));
|
|
87
|
+
const k = (sk) => skBytes(sk).slice(0, 64);
|
|
88
|
+
const kl = (sk) => skBytes(sk).slice(0, 32);
|
|
89
|
+
const kr = (sk) => skBytes(sk).slice(32, 64);
|
|
90
|
+
const c = (sk) => skBytes(sk).slice(64, 96);
|
|
91
|
+
const calcChildZorC = (sk, i, d) => {
|
|
92
|
+
const ib = BigEndian.encode(BigInt(i)).reverse();
|
|
93
|
+
while (ib.length < 4) {
|
|
94
|
+
ib.push(0);
|
|
95
|
+
}
|
|
96
|
+
if (ib.length != 4) {
|
|
97
|
+
throw new Error("child index too big");
|
|
98
|
+
}
|
|
99
|
+
if (i < HARDEN) {
|
|
100
|
+
const A = vkBytes(deriveVerificationKey(sk));
|
|
101
|
+
return Hmac.sha2_512Sync(c(sk), Bytes.concat([0x02 + d], A, ib));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return Hmac.sha2_512Sync(c(sk), Bytes.concat([0x00 + d], k(sk), ib));
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const calcChildZ = (sk, i) => calcChildZorC(sk, i, 0);
|
|
108
|
+
const calcChildC = (sk, i) => calcChildZorC(sk, i, 1);
|
|
109
|
+
const deriveSingleChildSigningKey = (sk, i) => {
|
|
110
|
+
const Z = calcChildZ(sk, i);
|
|
111
|
+
const kl$ = LE.encode32(8n * LE.decodeOrThrow(Z.slice(0, 28)) + LE.decodeOrThrow(kl(sk))).slice(0, 32);
|
|
112
|
+
const kr$ = LE.encode32(LE.decodeOrThrow(Z.slice(32, 64)) +
|
|
113
|
+
(LE.decodeOrThrow(kr(sk)) %
|
|
114
|
+
115792089237316195423570985008687907853269984665640564039457584007913129639936n)).slice(0, 32);
|
|
115
|
+
const c = calcChildC(sk, i).slice(32, 64);
|
|
116
|
+
// TODO: discard child key whose public key is the identity point
|
|
117
|
+
return Bech32.encode("addr_sk", Bytes.concat(kl$, kr$, c));
|
|
118
|
+
};
|
|
119
|
+
export const derivePath = (sk, path) => {
|
|
120
|
+
path.forEach((i) => {
|
|
121
|
+
sk = deriveSingleChildSigningKey(sk, i);
|
|
122
|
+
});
|
|
123
|
+
return sk;
|
|
124
|
+
};
|
|
125
|
+
export const sign = (sk) => (message) => {
|
|
126
|
+
return {
|
|
127
|
+
pubKey: deriveVerificationKey(sk),
|
|
128
|
+
signature: Either.getOrThrow(Ed25519.sign(Bytes.toUint8Array(message), k(sk), false))
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=Bip32.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bip32.js","sourceRoot":"","sources":["../../src/Crypto/Bip32.ts"],"names":[],"mappings":"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"}
|