@blockchyp/blockchyp-ts 2.27.2 → 2.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_bundles/blockchyp.js +26364 -55109
- package/_bundles/blockchyp.js.map +1 -1
- package/_bundles/blockchyp.min.js +1 -1
- package/_bundles/blockchyp.min.js.LICENSE.txt +4 -2
- package/_bundles/blockchyp.min.js.map +1 -1
- package/lib/src/cryptoutils.js +21 -14
- package/lib/src/cryptoutils.js.map +1 -1
- package/package.json +3 -9
- package/src/cryptoutils.ts +26 -12
package/lib/src/cryptoutils.js
CHANGED
|
@@ -27,12 +27,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.BlockChypCrypto = void 0;
|
|
30
|
-
const
|
|
31
|
-
const
|
|
30
|
+
const hmac_1 = require("@noble/hashes/hmac");
|
|
31
|
+
const sha256_1 = require("@noble/hashes/sha256");
|
|
32
|
+
const utils_1 = require("@noble/hashes/utils");
|
|
32
33
|
const moment_1 = __importDefault(require("moment"));
|
|
33
34
|
const base32 = require('base32');
|
|
34
|
-
const
|
|
35
|
-
const EC = __importStar(require("elliptic"));
|
|
35
|
+
const nist_1 = require("@noble/curves/nist");
|
|
36
36
|
const aesjs = __importStar(require("aes-js"));
|
|
37
37
|
const buffer_1 = require("buffer");
|
|
38
38
|
class BlockChypCrypto {
|
|
@@ -41,9 +41,8 @@ class BlockChypCrypto {
|
|
|
41
41
|
const ts = this.generateIsoTimestamp();
|
|
42
42
|
const toSign = creds.apiKey + creds.bearerToken + ts + nonce;
|
|
43
43
|
const key = buffer_1.Buffer.from(creds.signingKey, 'hex');
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
const sig = hmac.digest('hex');
|
|
44
|
+
const mac = (0, hmac_1.hmac)(sha256_1.sha256, key, (0, utils_1.utf8ToBytes)(toSign));
|
|
45
|
+
const sig = (0, utils_1.bytesToHex)(mac);
|
|
47
46
|
const results = {
|
|
48
47
|
'Nonce': nonce,
|
|
49
48
|
'Timestamp': ts,
|
|
@@ -54,21 +53,29 @@ class BlockChypCrypto {
|
|
|
54
53
|
encrypt(hexKey, plainText) {
|
|
55
54
|
const key = buffer_1.Buffer.from(hexKey, 'hex').slice(0, 32);
|
|
56
55
|
const keyArr = [...key];
|
|
57
|
-
const iv = (0,
|
|
56
|
+
const iv = (0, utils_1.randomBytes)(16);
|
|
58
57
|
const ivArr = [...iv];
|
|
59
58
|
const aesCbc = new aesjs.ModeOfOperation.cbc(keyArr, ivArr);
|
|
60
59
|
const plainBytes = aesjs.padding.pkcs7.pad(aesjs.utils.utf8.toBytes(plainText));
|
|
61
60
|
const encryptedBytes = aesCbc.encrypt(plainBytes);
|
|
62
|
-
return
|
|
61
|
+
return (0, utils_1.bytesToHex)(iv) + aesjs.utils.hex.fromBytes(encryptedBytes);
|
|
63
62
|
}
|
|
64
63
|
sha256Hash(msg) {
|
|
65
|
-
|
|
64
|
+
const msgBytes = buffer_1.Buffer.from(msg, 'hex');
|
|
65
|
+
return (0, utils_1.bytesToHex)((0, sha256_1.sha256)(msgBytes));
|
|
66
66
|
}
|
|
67
67
|
validateSignature(publicKey, msg, sig) {
|
|
68
|
-
const ec = new EC.ec('p256');
|
|
69
|
-
const key = ec.keyFromPublic({ x: publicKey.x, y: publicKey.y });
|
|
70
68
|
const msgHash = this.sha256Hash(msg);
|
|
71
|
-
|
|
69
|
+
const msgHashBytes = buffer_1.Buffer.from(msgHash, 'hex');
|
|
70
|
+
const pubKeyPoint = nist_1.p256.ProjectivePoint.fromAffine({
|
|
71
|
+
x: BigInt('0x' + publicKey.x),
|
|
72
|
+
y: BigInt('0x' + publicKey.y)
|
|
73
|
+
});
|
|
74
|
+
const pubKeyBytes = pubKeyPoint.toRawBytes(false);
|
|
75
|
+
const signature = new nist_1.p256.Signature(BigInt('0x' + sig.r), BigInt('0x' + sig.s));
|
|
76
|
+
const sigBytes = signature.toCompactRawBytes();
|
|
77
|
+
// Verify signature (prehash: true means we already hashed the message)
|
|
78
|
+
return nist_1.p256.verify(sigBytes, msgHashBytes, pubKeyBytes, { prehash: true });
|
|
72
79
|
}
|
|
73
80
|
decrypt(hexKey, cipherText) {
|
|
74
81
|
const key = buffer_1.Buffer.from(hexKey, 'hex').slice(0, 32);
|
|
@@ -82,7 +89,7 @@ class BlockChypCrypto {
|
|
|
82
89
|
return aesjs.utils.utf8.fromBytes(decryptedBytes);
|
|
83
90
|
}
|
|
84
91
|
generateNonce() {
|
|
85
|
-
return base32.encode((0,
|
|
92
|
+
return base32.encode((0, utils_1.randomBytes)(32)).toUpperCase();
|
|
86
93
|
}
|
|
87
94
|
generateIsoTimestamp() {
|
|
88
95
|
return (0, moment_1.default)().utc().format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cryptoutils.js","sourceRoot":"","sources":["../../src/cryptoutils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"cryptoutils.js","sourceRoot":"","sources":["../../src/cryptoutils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blockchyp/blockchyp-ts",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.28.1",
|
|
4
4
|
"description": "BlockChyp Typescript Client",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -39,7 +39,6 @@
|
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/aes-js": "^3.1.4",
|
|
41
41
|
"@types/create-hmac": "^1.1.3",
|
|
42
|
-
"@types/elliptic": "^6.4.18",
|
|
43
42
|
"@types/is-windows": "^1.0.2",
|
|
44
43
|
"@types/jasmine": "^5.1.4",
|
|
45
44
|
"@types/node": "^20.12.12",
|
|
@@ -69,15 +68,10 @@
|
|
|
69
68
|
"bn.js": "^4.12.2",
|
|
70
69
|
"buffer": "^6.0.3",
|
|
71
70
|
"cached-path-relative": "^1.0.2",
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"elliptic": "^6.6.1",
|
|
71
|
+
"@noble/curves": "^1.6.0",
|
|
72
|
+
"@noble/hashes": "^1.5.0",
|
|
75
73
|
"glob": "^13.0.0",
|
|
76
74
|
"moment": "^2.22.2",
|
|
77
|
-
"npm": "^11.6.3",
|
|
78
|
-
"randombytes": "^2.0.6",
|
|
79
|
-
"pbkdf2": "^3.1.5",
|
|
80
|
-
"sha.js": "^2.4.12",
|
|
81
75
|
"stream-browserify": "^3.0.0",
|
|
82
76
|
"uuidv4": "^6.2.13"
|
|
83
77
|
}
|
package/src/cryptoutils.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { hmac } from '@noble/hashes/hmac'
|
|
2
|
+
import { sha256 } from '@noble/hashes/sha256'
|
|
3
|
+
import { randomBytes, bytesToHex, utf8ToBytes } from '@noble/hashes/utils'
|
|
3
4
|
import moment from 'moment'
|
|
4
5
|
const base32 = require('base32')
|
|
5
|
-
import
|
|
6
|
-
import * as EC from 'elliptic'
|
|
6
|
+
import { p256 } from '@noble/curves/nist'
|
|
7
7
|
import * as aesjs from 'aes-js'
|
|
8
8
|
import { Buffer } from 'buffer';
|
|
9
9
|
import { BlockChypCredentials } from './client'
|
|
10
10
|
|
|
11
|
+
|
|
11
12
|
export class BlockChypCrypto {
|
|
12
13
|
generateGatewayHeaders (creds: BlockChypCredentials) {
|
|
13
14
|
const nonce = this.generateNonce()
|
|
14
15
|
const ts = this.generateIsoTimestamp()
|
|
15
16
|
const toSign = creds.apiKey + creds.bearerToken + ts + nonce
|
|
16
17
|
const key = Buffer.from(creds.signingKey, 'hex')
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const sig = hmac.digest('hex')
|
|
18
|
+
const mac = hmac(sha256, key, utf8ToBytes(toSign))
|
|
19
|
+
const sig = bytesToHex(mac)
|
|
20
20
|
|
|
21
21
|
const results = {
|
|
22
22
|
'Nonce': nonce,
|
|
@@ -38,18 +38,32 @@ export class BlockChypCrypto {
|
|
|
38
38
|
const plainBytes = aesjs.padding.pkcs7.pad(aesjs.utils.utf8.toBytes(plainText))
|
|
39
39
|
const encryptedBytes = aesCbc.encrypt(plainBytes)
|
|
40
40
|
|
|
41
|
-
return iv
|
|
41
|
+
return bytesToHex(iv) + aesjs.utils.hex.fromBytes(encryptedBytes)
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
sha256Hash (msg: string) {
|
|
45
|
-
|
|
45
|
+
const msgBytes = Buffer.from(msg, 'hex')
|
|
46
|
+
return bytesToHex(sha256(msgBytes))
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
validateSignature (publicKey: any, msg: string, sig: any) {
|
|
49
|
-
const ec = new EC.ec('p256')
|
|
50
|
-
const key = ec.keyFromPublic({x: publicKey.x, y: publicKey.y})
|
|
51
50
|
const msgHash = this.sha256Hash(msg)
|
|
52
|
-
|
|
51
|
+
const msgHashBytes = Buffer.from(msgHash, 'hex')
|
|
52
|
+
|
|
53
|
+
const pubKeyPoint = p256.ProjectivePoint.fromAffine({
|
|
54
|
+
x: BigInt('0x' + publicKey.x),
|
|
55
|
+
y: BigInt('0x' + publicKey.y)
|
|
56
|
+
})
|
|
57
|
+
const pubKeyBytes = pubKeyPoint.toRawBytes(false)
|
|
58
|
+
|
|
59
|
+
const signature = new p256.Signature(
|
|
60
|
+
BigInt('0x' + sig.r),
|
|
61
|
+
BigInt('0x' + sig.s)
|
|
62
|
+
)
|
|
63
|
+
const sigBytes = signature.toCompactRawBytes()
|
|
64
|
+
|
|
65
|
+
// Verify signature (prehash: true means we already hashed the message)
|
|
66
|
+
return p256.verify(sigBytes, msgHashBytes, pubKeyBytes, { prehash: true })
|
|
53
67
|
}
|
|
54
68
|
|
|
55
69
|
decrypt (hexKey: string, cipherText: string) {
|