@super-protocol/sdk-js 2.2.0-beta.4 → 2.2.0-beta.5
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,8 @@ 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 sign(
|
|
14
|
+
static sign(privateKey: KeyObject, data: Buffer): SignedData;
|
|
15
|
+
static verify(publicKey: KeyObject, data: Buffer, signature: string, signedTime: number): boolean;
|
|
17
16
|
static privateKeyObjToDer(key: KeyObject): Buffer;
|
|
18
17
|
static publicKeyObjToDer(key: KeyObject): Buffer;
|
|
19
18
|
static keyObjectsToDer({ privateKey, publicKey, }: {
|
|
@@ -41,15 +41,14 @@ class CryptoKeysTransformer {
|
|
|
41
41
|
v: 27,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
static sign(
|
|
44
|
+
static sign(privateKey, data) {
|
|
45
45
|
const signedTime = Math.floor(Date.now() / 1000);
|
|
46
46
|
const signedTimeBuffer = Buffer.alloc(4);
|
|
47
47
|
signedTimeBuffer.writeUInt32BE(signedTime, 0);
|
|
48
48
|
const msg = Buffer.concat([data, signedTimeBuffer]);
|
|
49
49
|
const signatureOrigin = index_js_1.default.sign({
|
|
50
50
|
data: msg,
|
|
51
|
-
privateKey
|
|
52
|
-
outputFormat: 'hex',
|
|
51
|
+
privateKey,
|
|
53
52
|
});
|
|
54
53
|
const signature = CryptoKeysTransformer.parseDerSignature(signatureOrigin);
|
|
55
54
|
return {
|
|
@@ -57,6 +56,16 @@ class CryptoKeysTransformer {
|
|
|
57
56
|
signature,
|
|
58
57
|
};
|
|
59
58
|
}
|
|
59
|
+
static verify(publicKey, data, signature, signedTime) {
|
|
60
|
+
const signedTimeBuffer = Buffer.alloc(4);
|
|
61
|
+
signedTimeBuffer.writeUInt32BE(signedTime, 0);
|
|
62
|
+
const msg = Buffer.concat([data, signedTimeBuffer]);
|
|
63
|
+
return index_js_1.default.verify({
|
|
64
|
+
data: msg,
|
|
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,8 @@ 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 sign(
|
|
14
|
+
static sign(privateKey: KeyObject, data: Buffer): SignedData;
|
|
15
|
+
static verify(publicKey: KeyObject, data: Buffer, signature: string, signedTime: number): boolean;
|
|
17
16
|
static privateKeyObjToDer(key: KeyObject): Buffer;
|
|
18
17
|
static publicKeyObjToDer(key: KeyObject): Buffer;
|
|
19
18
|
static keyObjectsToDer({ privateKey, publicKey, }: {
|
|
@@ -35,15 +35,14 @@ export class CryptoKeysTransformer {
|
|
|
35
35
|
v: 27,
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
static sign(
|
|
38
|
+
static sign(privateKey, data) {
|
|
39
39
|
const signedTime = Math.floor(Date.now() / 1000);
|
|
40
40
|
const signedTimeBuffer = Buffer.alloc(4);
|
|
41
41
|
signedTimeBuffer.writeUInt32BE(signedTime, 0);
|
|
42
42
|
const msg = Buffer.concat([data, signedTimeBuffer]);
|
|
43
43
|
const signatureOrigin = Crypto.sign({
|
|
44
44
|
data: msg,
|
|
45
|
-
privateKey
|
|
46
|
-
outputFormat: 'hex',
|
|
45
|
+
privateKey,
|
|
47
46
|
});
|
|
48
47
|
const signature = CryptoKeysTransformer.parseDerSignature(signatureOrigin);
|
|
49
48
|
return {
|
|
@@ -51,6 +50,16 @@ export class CryptoKeysTransformer {
|
|
|
51
50
|
signature,
|
|
52
51
|
};
|
|
53
52
|
}
|
|
53
|
+
static verify(publicKey, data, signature, signedTime) {
|
|
54
|
+
const signedTimeBuffer = Buffer.alloc(4);
|
|
55
|
+
signedTimeBuffer.writeUInt32BE(signedTime, 0);
|
|
56
|
+
const msg = Buffer.concat([data, signedTimeBuffer]);
|
|
57
|
+
return Crypto.verify({
|
|
58
|
+
data: msg,
|
|
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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
|