@super-protocol/sdk-js 2.2.0-beta.4 → 2.2.0-beta.6
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.
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import { CryptoAlgorithm } from '@super-protocol/dto-js';
|
|
4
3
|
import { PublicKey, Signature } from './../types/index.js';
|
|
5
|
-
import { CryptoKeyType } from '../crypto/types.js';
|
|
6
4
|
import { KeyObject } from 'crypto';
|
|
7
5
|
type SignedData = {
|
|
8
6
|
signedTime: number;
|
|
@@ -13,7 +11,9 @@ export declare class CryptoKeysTransformer {
|
|
|
13
11
|
static getStructuredPublicKeyFromKeyObj(publicKeyObj: KeyObject): PublicKey;
|
|
14
12
|
static getBufferFromTransformedPublicKey(publicKey: PublicKey): Buffer;
|
|
15
13
|
static parseDerSignature(derSignature: string): Signature;
|
|
16
|
-
static
|
|
14
|
+
static appendNumberToBuffer(val: number, data: Buffer): Buffer;
|
|
15
|
+
static sign(privateKey: KeyObject, data: Buffer): SignedData;
|
|
16
|
+
static verify(publicKey: KeyObject, data: Buffer, signature: string, signedTime: number): boolean;
|
|
17
17
|
static privateKeyObjToDer(key: KeyObject): Buffer;
|
|
18
18
|
static publicKeyObjToDer(key: KeyObject): Buffer;
|
|
19
19
|
static keyObjectsToDer({ privateKey, publicKey, }: {
|
|
@@ -41,14 +41,16 @@ class CryptoKeysTransformer {
|
|
|
41
41
|
v: 27,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
static
|
|
45
|
-
const signedTime = Math.floor(Date.now() / 1000);
|
|
44
|
+
static appendNumberToBuffer(val, data) {
|
|
46
45
|
const signedTimeBuffer = Buffer.alloc(4);
|
|
47
|
-
signedTimeBuffer.writeUInt32BE(
|
|
48
|
-
|
|
46
|
+
signedTimeBuffer.writeUInt32BE(val, 0);
|
|
47
|
+
return Buffer.concat([data, signedTimeBuffer]);
|
|
48
|
+
}
|
|
49
|
+
static sign(privateKey, data) {
|
|
50
|
+
const signedTime = Math.floor(Date.now() / 1000);
|
|
49
51
|
const signatureOrigin = index_js_1.default.sign({
|
|
50
|
-
data:
|
|
51
|
-
privateKey
|
|
52
|
+
data: CryptoKeysTransformer.appendNumberToBuffer(signedTime, data),
|
|
53
|
+
privateKey,
|
|
52
54
|
outputFormat: 'hex',
|
|
53
55
|
});
|
|
54
56
|
const signature = CryptoKeysTransformer.parseDerSignature(signatureOrigin);
|
|
@@ -57,6 +59,13 @@ class CryptoKeysTransformer {
|
|
|
57
59
|
signature,
|
|
58
60
|
};
|
|
59
61
|
}
|
|
62
|
+
static verify(publicKey, data, signature, signedTime) {
|
|
63
|
+
return index_js_1.default.verify({
|
|
64
|
+
data: CryptoKeysTransformer.appendNumberToBuffer(signedTime, data),
|
|
65
|
+
publicKey,
|
|
66
|
+
signature,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
60
69
|
static privateKeyObjToDer(key) {
|
|
61
70
|
return key.export({ type: 'pkcs8', format: 'der' });
|
|
62
71
|
}
|
|
@@ -99,4 +108,4 @@ class CryptoKeysTransformer {
|
|
|
99
108
|
}
|
|
100
109
|
}
|
|
101
110
|
exports.CryptoKeysTransformer = CryptoKeysTransformer;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvS2V5c1RyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL0NyeXB0b0tleXNUcmFuc2Zvcm1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrRUFBd0M7QUFDeEMsbURBQWtEO0FBRWxELG9EQUE2RDtBQUM3RCxtQ0FBZ0M7QUFDaEMsbUNBQXNFO0FBT3RFLE1BQWEscUJBQXFCO0lBQ2hDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxhQUF3QjtRQUMvRCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDOUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxNQUFNLENBQUMsZ0NBQWdDLENBQUMsWUFBdUI7UUFDN0QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU87WUFDTCxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUk7WUFDdEIsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFJO1lBQ3RCLE1BQU0sRUFBRSxlQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDM0IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQ2pFO1lBQ0QsTUFBTSxFQUFFLGVBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUMzQixJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDakU7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
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import { CryptoAlgorithm } from '@super-protocol/dto-js';
|
|
4
3
|
import { PublicKey, Signature } from './../types/index.js';
|
|
5
|
-
import { CryptoKeyType } from '../crypto/types.js';
|
|
6
4
|
import { KeyObject } from 'crypto';
|
|
7
5
|
type SignedData = {
|
|
8
6
|
signedTime: number;
|
|
@@ -13,7 +11,9 @@ export declare class CryptoKeysTransformer {
|
|
|
13
11
|
static getStructuredPublicKeyFromKeyObj(publicKeyObj: KeyObject): PublicKey;
|
|
14
12
|
static getBufferFromTransformedPublicKey(publicKey: PublicKey): Buffer;
|
|
15
13
|
static parseDerSignature(derSignature: string): Signature;
|
|
16
|
-
static
|
|
14
|
+
static appendNumberToBuffer(val: number, data: Buffer): Buffer;
|
|
15
|
+
static sign(privateKey: KeyObject, data: Buffer): SignedData;
|
|
16
|
+
static verify(publicKey: KeyObject, data: Buffer, signature: string, signedTime: number): boolean;
|
|
17
17
|
static privateKeyObjToDer(key: KeyObject): Buffer;
|
|
18
18
|
static publicKeyObjToDer(key: KeyObject): Buffer;
|
|
19
19
|
static keyObjectsToDer({ privateKey, publicKey, }: {
|
|
@@ -35,14 +35,16 @@ export class CryptoKeysTransformer {
|
|
|
35
35
|
v: 27,
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
static
|
|
39
|
-
const signedTime = Math.floor(Date.now() / 1000);
|
|
38
|
+
static appendNumberToBuffer(val, data) {
|
|
40
39
|
const signedTimeBuffer = Buffer.alloc(4);
|
|
41
|
-
signedTimeBuffer.writeUInt32BE(
|
|
42
|
-
|
|
40
|
+
signedTimeBuffer.writeUInt32BE(val, 0);
|
|
41
|
+
return Buffer.concat([data, signedTimeBuffer]);
|
|
42
|
+
}
|
|
43
|
+
static sign(privateKey, data) {
|
|
44
|
+
const signedTime = Math.floor(Date.now() / 1000);
|
|
43
45
|
const signatureOrigin = Crypto.sign({
|
|
44
|
-
data:
|
|
45
|
-
privateKey
|
|
46
|
+
data: CryptoKeysTransformer.appendNumberToBuffer(signedTime, data),
|
|
47
|
+
privateKey,
|
|
46
48
|
outputFormat: 'hex',
|
|
47
49
|
});
|
|
48
50
|
const signature = CryptoKeysTransformer.parseDerSignature(signatureOrigin);
|
|
@@ -51,6 +53,13 @@ export class CryptoKeysTransformer {
|
|
|
51
53
|
signature,
|
|
52
54
|
};
|
|
53
55
|
}
|
|
56
|
+
static verify(publicKey, data, signature, signedTime) {
|
|
57
|
+
return Crypto.verify({
|
|
58
|
+
data: CryptoKeysTransformer.appendNumberToBuffer(signedTime, data),
|
|
59
|
+
publicKey,
|
|
60
|
+
signature,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
54
63
|
static privateKeyObjToDer(key) {
|
|
55
64
|
return key.export({ type: 'pkcs8', format: 'der' });
|
|
56
65
|
}
|
|
@@ -92,4 +101,4 @@ export class CryptoKeysTransformer {
|
|
|
92
101
|
});
|
|
93
102
|
}
|
|
94
103
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvS2V5c1RyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL0NyeXB0b0tleXNUcmFuc2Zvcm1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsSUFBSSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFPdEUsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLENBQUMsaUNBQWlDLENBQUMsYUFBd0I7UUFDL0QsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLFlBQXVCO1FBQzdELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPO1lBQ0wsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFJO1lBQ3RCLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBSTtZQUN0QixNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzNCLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxD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
|