@sudoplatform/sudo-common 8.3.1 → 8.5.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/cjs/sudoKeyManager/sudoKeyManager.js +112 -0
- package/cjs/sudoKeyManager/sudoKeyManager.js.map +1 -1
- package/lib/sudoKeyManager/sudoKeyManager.js +111 -0
- package/lib/sudoKeyManager/sudoKeyManager.js.map +1 -1
- package/package.json +19 -15
- package/types/sudoKeyManager/sudoKeyManager.d.ts +21 -1
|
@@ -1,7 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultSudoKeyManager = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const buffer_1 = require("../utils/buffer");
|
|
6
|
+
const publicKey_1 = require("./publicKey");
|
|
7
|
+
const pkijs = tslib_1.__importStar(require("pkijs"));
|
|
8
|
+
const asn1js = tslib_1.__importStar(require("asn1js"));
|
|
9
|
+
const base64_1 = require("../utils/base64");
|
|
10
|
+
const error_1 = require("../errors/error");
|
|
11
|
+
/**
|
|
12
|
+
* ASN.1 OIDs.
|
|
13
|
+
*/
|
|
14
|
+
var OID;
|
|
15
|
+
(function (OID) {
|
|
16
|
+
OID["rsaEncryption"] = "1.2.840.113549.1.1.1";
|
|
17
|
+
})(OID || (OID = {}));
|
|
18
|
+
/**
|
|
19
|
+
* PEM headers.
|
|
20
|
+
*/
|
|
21
|
+
var PEMHeader;
|
|
22
|
+
(function (PEMHeader) {
|
|
23
|
+
PEMHeader["rsaPublicKey"] = "-----BEGIN RSA PUBLIC KEY-----";
|
|
24
|
+
PEMHeader["publicKey"] = "-----BEGIN PUBLIC KEY-----";
|
|
25
|
+
})(PEMHeader || (PEMHeader = {}));
|
|
26
|
+
/**
|
|
27
|
+
* PEM footers.
|
|
28
|
+
*/
|
|
29
|
+
var PEMFooter;
|
|
30
|
+
(function (PEMFooter) {
|
|
31
|
+
PEMFooter["rsaPublicKey"] = "-----END RSA PUBLIC KEY-----";
|
|
32
|
+
PEMFooter["publicKey"] = "-----END PUBLIC KEY-----";
|
|
33
|
+
})(PEMFooter || (PEMFooter = {}));
|
|
5
34
|
class DefaultSudoKeyManager {
|
|
6
35
|
/**
|
|
7
36
|
* @param namespace A namespace to use as part of the key name. If a namespace is specified then
|
|
@@ -62,6 +91,74 @@ class DefaultSudoKeyManager {
|
|
|
62
91
|
getPublicKey(name) {
|
|
63
92
|
return this.sudoCryptoProvider.getPublicKey(name);
|
|
64
93
|
}
|
|
94
|
+
async exportPublicKeyAsPEM(name, format) {
|
|
95
|
+
const publicKey = await this.getPublicKey(name);
|
|
96
|
+
if (!publicKey) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
if (publicKey.keyFormat === publicKey_1.PublicKeyFormat.RSAPublicKey) {
|
|
100
|
+
if (format === publicKey_1.PublicKeyFormat.RSAPublicKey) {
|
|
101
|
+
return this.publicKeyToPEM(publicKey.keyData, format);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Convert RSAPublicKey (RFC3447) to SPKI (RFC5280).
|
|
105
|
+
const spki = new pkijs.PublicKeyInfo();
|
|
106
|
+
spki.algorithm = new pkijs.AlgorithmIdentifier({
|
|
107
|
+
algorithmId: OID.rsaEncryption,
|
|
108
|
+
algorithmParams: new asn1js.Null(),
|
|
109
|
+
});
|
|
110
|
+
spki.subjectPublicKey = new asn1js.BitString({
|
|
111
|
+
valueHex: publicKey.keyData,
|
|
112
|
+
});
|
|
113
|
+
return this.publicKeyToPEM(spki.toSchema().toBER(), format);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
if (format === publicKey_1.PublicKeyFormat.SPKI) {
|
|
118
|
+
return this.publicKeyToPEM(publicKey.keyData, format);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Convert SPKI (RFC5280) to RSAPublicKey (RFC3447).
|
|
122
|
+
const publicKeyInfo = pkijs.PublicKeyInfo.fromBER(publicKey.keyData);
|
|
123
|
+
const keyData = publicKeyInfo.subjectPublicKey.valueBlock.valueHexView;
|
|
124
|
+
return this.publicKeyToPEM(keyData, format);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async importPublicKeyFromPEM(name, publicKey) {
|
|
129
|
+
let format;
|
|
130
|
+
if (publicKey.includes(PEMHeader.rsaPublicKey) &&
|
|
131
|
+
publicKey.includes(PEMFooter.rsaPublicKey)) {
|
|
132
|
+
format = publicKey_1.PublicKeyFormat.RSAPublicKey;
|
|
133
|
+
}
|
|
134
|
+
else if (publicKey.includes(PEMHeader.publicKey) &&
|
|
135
|
+
publicKey.includes(PEMFooter.publicKey)) {
|
|
136
|
+
format = publicKey_1.PublicKeyFormat.SPKI;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
throw new error_1.IllegalArgumentError();
|
|
140
|
+
}
|
|
141
|
+
const stripped = publicKey
|
|
142
|
+
.replace(/-{5}(BEGIN|END) .*-{5}/gm, '')
|
|
143
|
+
.replace(/\s/gm, '');
|
|
144
|
+
let keyData = base64_1.Base64.decode(stripped);
|
|
145
|
+
if (format === publicKey_1.PublicKeyFormat.RSAPublicKey) {
|
|
146
|
+
// Web Crypto Provider currently only accepts SPKI and
|
|
147
|
+
// none of the native providers support adding a public
|
|
148
|
+
// key so we will need to convert RSAPublicKey (RFC3447)
|
|
149
|
+
// to SPKI (RFC5280).
|
|
150
|
+
const spki = new pkijs.PublicKeyInfo();
|
|
151
|
+
spki.algorithm = new pkijs.AlgorithmIdentifier({
|
|
152
|
+
algorithmId: OID.rsaEncryption,
|
|
153
|
+
algorithmParams: new asn1js.Null(),
|
|
154
|
+
});
|
|
155
|
+
spki.subjectPublicKey = new asn1js.BitString({
|
|
156
|
+
valueHex: keyData,
|
|
157
|
+
});
|
|
158
|
+
keyData = spki.toSchema().toBER();
|
|
159
|
+
}
|
|
160
|
+
await this.sudoCryptoProvider.addPublicKey(keyData, name);
|
|
161
|
+
}
|
|
65
162
|
deleteKeyPair(name) {
|
|
66
163
|
return this.sudoCryptoProvider.deleteKeyPair(name);
|
|
67
164
|
}
|
|
@@ -135,6 +232,21 @@ class DefaultSudoKeyManager {
|
|
|
135
232
|
exportKeys() {
|
|
136
233
|
return this.sudoCryptoProvider.exportKeys();
|
|
137
234
|
}
|
|
235
|
+
publicKeyToPEM(key, format) {
|
|
236
|
+
const encoded = base64_1.Base64.encode(key);
|
|
237
|
+
const lines = encoded.match(/.{1,64}/g);
|
|
238
|
+
if (!lines) {
|
|
239
|
+
throw new error_1.IllegalArgumentError();
|
|
240
|
+
}
|
|
241
|
+
const formatted = lines.join('\n');
|
|
242
|
+
return ('-----BEGIN ' +
|
|
243
|
+
(format === publicKey_1.PublicKeyFormat.RSAPublicKey ? 'RSA ' : '') +
|
|
244
|
+
'PUBLIC KEY-----\n' +
|
|
245
|
+
formatted +
|
|
246
|
+
'\n-----END ' +
|
|
247
|
+
(format === publicKey_1.PublicKeyFormat.RSAPublicKey ? 'RSA ' : '') +
|
|
248
|
+
'PUBLIC KEY-----');
|
|
249
|
+
}
|
|
138
250
|
}
|
|
139
251
|
exports.DefaultSudoKeyManager = DefaultSudoKeyManager;
|
|
140
252
|
//# sourceMappingURL=sudoKeyManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sudoKeyManager.js","sourceRoot":"","sources":["../../src/sudoKeyManager/sudoKeyManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sudoKeyManager.js","sourceRoot":"","sources":["../../src/sudoKeyManager/sudoKeyManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,32 @@
|
|
|
1
1
|
import { Buffer as BufferUtil } from '../utils/buffer';
|
|
2
|
+
import { PublicKeyFormat } from './publicKey';
|
|
3
|
+
import * as pkijs from 'pkijs';
|
|
4
|
+
import * as asn1js from 'asn1js';
|
|
5
|
+
import { Base64 } from '../utils/base64';
|
|
6
|
+
import { IllegalArgumentError } from '../errors/error';
|
|
7
|
+
/**
|
|
8
|
+
* ASN.1 OIDs.
|
|
9
|
+
*/
|
|
10
|
+
var OID;
|
|
11
|
+
(function (OID) {
|
|
12
|
+
OID["rsaEncryption"] = "1.2.840.113549.1.1.1";
|
|
13
|
+
})(OID || (OID = {}));
|
|
14
|
+
/**
|
|
15
|
+
* PEM headers.
|
|
16
|
+
*/
|
|
17
|
+
var PEMHeader;
|
|
18
|
+
(function (PEMHeader) {
|
|
19
|
+
PEMHeader["rsaPublicKey"] = "-----BEGIN RSA PUBLIC KEY-----";
|
|
20
|
+
PEMHeader["publicKey"] = "-----BEGIN PUBLIC KEY-----";
|
|
21
|
+
})(PEMHeader || (PEMHeader = {}));
|
|
22
|
+
/**
|
|
23
|
+
* PEM footers.
|
|
24
|
+
*/
|
|
25
|
+
var PEMFooter;
|
|
26
|
+
(function (PEMFooter) {
|
|
27
|
+
PEMFooter["rsaPublicKey"] = "-----END RSA PUBLIC KEY-----";
|
|
28
|
+
PEMFooter["publicKey"] = "-----END PUBLIC KEY-----";
|
|
29
|
+
})(PEMFooter || (PEMFooter = {}));
|
|
2
30
|
export class DefaultSudoKeyManager {
|
|
3
31
|
/**
|
|
4
32
|
* @param namespace A namespace to use as part of the key name. If a namespace is specified then
|
|
@@ -59,6 +87,74 @@ export class DefaultSudoKeyManager {
|
|
|
59
87
|
getPublicKey(name) {
|
|
60
88
|
return this.sudoCryptoProvider.getPublicKey(name);
|
|
61
89
|
}
|
|
90
|
+
async exportPublicKeyAsPEM(name, format) {
|
|
91
|
+
const publicKey = await this.getPublicKey(name);
|
|
92
|
+
if (!publicKey) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
if (publicKey.keyFormat === PublicKeyFormat.RSAPublicKey) {
|
|
96
|
+
if (format === PublicKeyFormat.RSAPublicKey) {
|
|
97
|
+
return this.publicKeyToPEM(publicKey.keyData, format);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Convert RSAPublicKey (RFC3447) to SPKI (RFC5280).
|
|
101
|
+
const spki = new pkijs.PublicKeyInfo();
|
|
102
|
+
spki.algorithm = new pkijs.AlgorithmIdentifier({
|
|
103
|
+
algorithmId: OID.rsaEncryption,
|
|
104
|
+
algorithmParams: new asn1js.Null(),
|
|
105
|
+
});
|
|
106
|
+
spki.subjectPublicKey = new asn1js.BitString({
|
|
107
|
+
valueHex: publicKey.keyData,
|
|
108
|
+
});
|
|
109
|
+
return this.publicKeyToPEM(spki.toSchema().toBER(), format);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
if (format === PublicKeyFormat.SPKI) {
|
|
114
|
+
return this.publicKeyToPEM(publicKey.keyData, format);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Convert SPKI (RFC5280) to RSAPublicKey (RFC3447).
|
|
118
|
+
const publicKeyInfo = pkijs.PublicKeyInfo.fromBER(publicKey.keyData);
|
|
119
|
+
const keyData = publicKeyInfo.subjectPublicKey.valueBlock.valueHexView;
|
|
120
|
+
return this.publicKeyToPEM(keyData, format);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async importPublicKeyFromPEM(name, publicKey) {
|
|
125
|
+
let format;
|
|
126
|
+
if (publicKey.includes(PEMHeader.rsaPublicKey) &&
|
|
127
|
+
publicKey.includes(PEMFooter.rsaPublicKey)) {
|
|
128
|
+
format = PublicKeyFormat.RSAPublicKey;
|
|
129
|
+
}
|
|
130
|
+
else if (publicKey.includes(PEMHeader.publicKey) &&
|
|
131
|
+
publicKey.includes(PEMFooter.publicKey)) {
|
|
132
|
+
format = PublicKeyFormat.SPKI;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
throw new IllegalArgumentError();
|
|
136
|
+
}
|
|
137
|
+
const stripped = publicKey
|
|
138
|
+
.replace(/-{5}(BEGIN|END) .*-{5}/gm, '')
|
|
139
|
+
.replace(/\s/gm, '');
|
|
140
|
+
let keyData = Base64.decode(stripped);
|
|
141
|
+
if (format === PublicKeyFormat.RSAPublicKey) {
|
|
142
|
+
// Web Crypto Provider currently only accepts SPKI and
|
|
143
|
+
// none of the native providers support adding a public
|
|
144
|
+
// key so we will need to convert RSAPublicKey (RFC3447)
|
|
145
|
+
// to SPKI (RFC5280).
|
|
146
|
+
const spki = new pkijs.PublicKeyInfo();
|
|
147
|
+
spki.algorithm = new pkijs.AlgorithmIdentifier({
|
|
148
|
+
algorithmId: OID.rsaEncryption,
|
|
149
|
+
algorithmParams: new asn1js.Null(),
|
|
150
|
+
});
|
|
151
|
+
spki.subjectPublicKey = new asn1js.BitString({
|
|
152
|
+
valueHex: keyData,
|
|
153
|
+
});
|
|
154
|
+
keyData = spki.toSchema().toBER();
|
|
155
|
+
}
|
|
156
|
+
await this.sudoCryptoProvider.addPublicKey(keyData, name);
|
|
157
|
+
}
|
|
62
158
|
deleteKeyPair(name) {
|
|
63
159
|
return this.sudoCryptoProvider.deleteKeyPair(name);
|
|
64
160
|
}
|
|
@@ -132,5 +228,20 @@ export class DefaultSudoKeyManager {
|
|
|
132
228
|
exportKeys() {
|
|
133
229
|
return this.sudoCryptoProvider.exportKeys();
|
|
134
230
|
}
|
|
231
|
+
publicKeyToPEM(key, format) {
|
|
232
|
+
const encoded = Base64.encode(key);
|
|
233
|
+
const lines = encoded.match(/.{1,64}/g);
|
|
234
|
+
if (!lines) {
|
|
235
|
+
throw new IllegalArgumentError();
|
|
236
|
+
}
|
|
237
|
+
const formatted = lines.join('\n');
|
|
238
|
+
return ('-----BEGIN ' +
|
|
239
|
+
(format === PublicKeyFormat.RSAPublicKey ? 'RSA ' : '') +
|
|
240
|
+
'PUBLIC KEY-----\n' +
|
|
241
|
+
formatted +
|
|
242
|
+
'\n-----END ' +
|
|
243
|
+
(format === PublicKeyFormat.RSAPublicKey ? 'RSA ' : '') +
|
|
244
|
+
'PUBLIC KEY-----');
|
|
245
|
+
}
|
|
135
246
|
}
|
|
136
247
|
//# sourceMappingURL=sudoKeyManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sudoKeyManager.js","sourceRoot":"","sources":["../../src/sudoKeyManager/sudoKeyManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"sudoKeyManager.js","sourceRoot":"","sources":["../../src/sudoKeyManager/sudoKeyManager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudoplatform/sudo-common",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.5.0",
|
|
4
4
|
"author": "Anonyome Labs, Inc.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -54,11 +54,13 @@
|
|
|
54
54
|
"json5": "^1.0.2"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@aws-sdk/client-s3": "3.
|
|
57
|
+
"@aws-sdk/client-s3": "3.295.0",
|
|
58
58
|
"apollo-client": "^2.6.10",
|
|
59
|
+
"asn1js": "^3.0.5",
|
|
59
60
|
"browser-bunyan": "^1.8.0",
|
|
60
61
|
"fflate": "^0.7.4",
|
|
61
62
|
"graphql": "^15.8.0",
|
|
63
|
+
"pkijs": "^3.0.14",
|
|
62
64
|
"tslib": "^2.5.0"
|
|
63
65
|
},
|
|
64
66
|
"peerDependencies": {
|
|
@@ -66,13 +68,13 @@
|
|
|
66
68
|
},
|
|
67
69
|
"devDependencies": {
|
|
68
70
|
"@types/jest": "^27.5.2",
|
|
69
|
-
"@types/node": "^16.18.
|
|
70
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
71
|
-
"@typescript-eslint/parser": "^5.
|
|
71
|
+
"@types/node": "^16.18.18",
|
|
72
|
+
"@typescript-eslint/eslint-plugin": "^5.56.0",
|
|
73
|
+
"@typescript-eslint/parser": "^5.56.0",
|
|
72
74
|
"aws-sdk-mock": "^5.8.0",
|
|
73
75
|
"concurrently": "^7.6.0",
|
|
74
|
-
"eslint": "^8.
|
|
75
|
-
"eslint-config-prettier": "^8.
|
|
76
|
+
"eslint": "^8.36.0",
|
|
77
|
+
"eslint-config-prettier": "^8.8.0",
|
|
76
78
|
"eslint-plugin-import": "^2.27.5",
|
|
77
79
|
"eslint-plugin-prettier": "^4.2.1",
|
|
78
80
|
"eslint-plugin-tree-shaking": "^1.10.0",
|
|
@@ -84,21 +86,23 @@
|
|
|
84
86
|
"jest": "^27.5.1",
|
|
85
87
|
"monocle-ts": "^2.3.13",
|
|
86
88
|
"newtype-ts": "^0.3.5",
|
|
87
|
-
"prettier": "^2.8.
|
|
88
|
-
"rimraf": "^
|
|
89
|
+
"prettier": "^2.8.5",
|
|
90
|
+
"rimraf": "^4.4.0",
|
|
89
91
|
"ts-jest": "^27.1.5",
|
|
90
92
|
"ts-mockito": "^2.6.1",
|
|
91
93
|
"ts-node": "^10.9.1",
|
|
92
|
-
"typedoc": "^0.23.
|
|
94
|
+
"typedoc": "^0.23.28",
|
|
93
95
|
"typescript": "^4.9.5"
|
|
94
96
|
},
|
|
95
97
|
"outdatedSuppressions": {
|
|
96
98
|
"major": {
|
|
97
|
-
"@types/jest":
|
|
98
|
-
"@types/node":
|
|
99
|
-
"graphql":
|
|
100
|
-
"jest":
|
|
101
|
-
"ts-jest":
|
|
99
|
+
"@types/jest": 1681893993,
|
|
100
|
+
"@types/node": 1681893993,
|
|
101
|
+
"graphql": 1681893994,
|
|
102
|
+
"jest": 1681893994,
|
|
103
|
+
"ts-jest": 1681893994,
|
|
104
|
+
"typescript": 1681893994,
|
|
105
|
+
"json5": 1681893994
|
|
102
106
|
}
|
|
103
107
|
}
|
|
104
108
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { KeyData } from './keyData';
|
|
2
|
-
import { PublicKey } from './publicKey';
|
|
2
|
+
import { PublicKey, PublicKeyFormat } from './publicKey';
|
|
3
3
|
import { AsymmetricEncryptionOptions, SignatureOptions, SudoCryptoProvider, SymmetricEncryptionOptions } from './sudoCryptoProvider';
|
|
4
4
|
/**
|
|
5
5
|
* Interface for a set of methods for securely storing keys and performing
|
|
@@ -109,6 +109,23 @@ export interface SudoKeyManager {
|
|
|
109
109
|
* @returns The public key or undefined if the key was not found.
|
|
110
110
|
*/
|
|
111
111
|
getPublicKey(name: string): Promise<PublicKey | undefined>;
|
|
112
|
+
/**
|
|
113
|
+
* Exports the public key from the secure store as PEM encoded
|
|
114
|
+
* string.
|
|
115
|
+
*
|
|
116
|
+
* @param name The name of the public key.
|
|
117
|
+
* @param format The key format to use.
|
|
118
|
+
*
|
|
119
|
+
* @returns The public key or undefined if the key was not found.
|
|
120
|
+
*/
|
|
121
|
+
exportPublicKeyAsPEM(name: string, format: PublicKeyFormat): Promise<string | undefined>;
|
|
122
|
+
/**
|
|
123
|
+
* Imports a PEM encoded public key into the secure store.
|
|
124
|
+
*
|
|
125
|
+
* @param name The name of the public key.
|
|
126
|
+
* @param publicKey The public key to import.
|
|
127
|
+
*/
|
|
128
|
+
importPublicKeyFromPEM(name: string, publicKey: string): Promise<void>;
|
|
112
129
|
/**
|
|
113
130
|
* Deletes a key pair from the secure store.
|
|
114
131
|
*
|
|
@@ -326,6 +343,8 @@ export declare class DefaultSudoKeyManager implements SudoKeyManager {
|
|
|
326
343
|
addPublicKey(key: ArrayBuffer, name: string): Promise<void>;
|
|
327
344
|
deletePublicKey(name: string): Promise<void>;
|
|
328
345
|
getPublicKey(name: string): Promise<PublicKey | undefined>;
|
|
346
|
+
exportPublicKeyAsPEM(name: string, format: PublicKeyFormat): Promise<string | undefined>;
|
|
347
|
+
importPublicKeyFromPEM(name: string, publicKey: string): Promise<void>;
|
|
329
348
|
deleteKeyPair(name: string): Promise<void>;
|
|
330
349
|
generateSignatureWithPrivateKey(name: string, data: ArrayBuffer, options?: SignatureOptions): Promise<ArrayBuffer>;
|
|
331
350
|
verifySignatureWithPublicKey(name: string, data: ArrayBuffer, signature: ArrayBuffer, options?: SignatureOptions): Promise<boolean>;
|
|
@@ -343,4 +362,5 @@ export declare class DefaultSudoKeyManager implements SudoKeyManager {
|
|
|
343
362
|
generateRandomData(size: number): Promise<ArrayBuffer>;
|
|
344
363
|
generateHash(data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
345
364
|
exportKeys(): Promise<KeyData[]>;
|
|
365
|
+
private publicKeyToPEM;
|
|
346
366
|
}
|