@qpher/sdk 0.1.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/LICENSE +21 -0
- package/README.md +266 -0
- package/dist/client.d.ts +32 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +55 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +106 -0
- package/dist/errors.js.map +1 -0
- package/dist/esm/client.d.ts +32 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +51 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/errors.d.ts +35 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +93 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/http-client.d.ts +21 -0
- package/dist/esm/http-client.d.ts.map +1 -0
- package/dist/esm/http-client.js +104 -0
- package/dist/esm/http-client.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/kem.d.ts +24 -0
- package/dist/esm/kem.d.ts.map +1 -0
- package/dist/esm/kem.js +52 -0
- package/dist/esm/kem.js.map +1 -0
- package/dist/esm/keys.d.ts +52 -0
- package/dist/esm/keys.d.ts.map +1 -0
- package/dist/esm/keys.js +110 -0
- package/dist/esm/keys.js.map +1 -0
- package/dist/esm/signatures.d.ts +24 -0
- package/dist/esm/signatures.d.ts.map +1 -0
- package/dist/esm/signatures.js +49 -0
- package/dist/esm/signatures.js.map +1 -0
- package/dist/esm/types.d.ts +122 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/http-client.d.ts +21 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +108 -0
- package/dist/http-client.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/kem.d.ts +24 -0
- package/dist/kem.d.ts.map +1 -0
- package/dist/kem.js +56 -0
- package/dist/kem.js.map +1 -0
- package/dist/keys.d.ts +52 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +114 -0
- package/dist/keys.js.map +1 -0
- package/dist/signatures.d.ts +24 -0
- package/dist/signatures.d.ts.map +1 -0
- package/dist/signatures.js +53 -0
- package/dist/signatures.js.map +1 -0
- package/dist/types.d.ts +122 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript types for Qpher SDK.
|
|
3
|
+
*/
|
|
4
|
+
export interface QpherOptions {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
maxRetries?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface EncryptInput {
|
|
11
|
+
plaintext: Buffer;
|
|
12
|
+
keyVersion: number;
|
|
13
|
+
mode?: 'standard' | 'deterministic';
|
|
14
|
+
salt?: Buffer;
|
|
15
|
+
}
|
|
16
|
+
export interface EncryptResult {
|
|
17
|
+
ciphertext: Buffer;
|
|
18
|
+
keyVersion: number;
|
|
19
|
+
algorithm: string;
|
|
20
|
+
requestId: string;
|
|
21
|
+
}
|
|
22
|
+
export interface DecryptInput {
|
|
23
|
+
ciphertext: Buffer;
|
|
24
|
+
keyVersion: number;
|
|
25
|
+
}
|
|
26
|
+
export interface DecryptResult {
|
|
27
|
+
plaintext: Buffer;
|
|
28
|
+
keyVersion: number;
|
|
29
|
+
algorithm: string;
|
|
30
|
+
requestId: string;
|
|
31
|
+
}
|
|
32
|
+
export interface SignInput {
|
|
33
|
+
message: Buffer;
|
|
34
|
+
keyVersion: number;
|
|
35
|
+
}
|
|
36
|
+
export interface SignResult {
|
|
37
|
+
signature: Buffer;
|
|
38
|
+
keyVersion: number;
|
|
39
|
+
algorithm: string;
|
|
40
|
+
requestId: string;
|
|
41
|
+
}
|
|
42
|
+
export interface VerifyInput {
|
|
43
|
+
message: Buffer;
|
|
44
|
+
signature: Buffer;
|
|
45
|
+
keyVersion: number;
|
|
46
|
+
}
|
|
47
|
+
export interface VerifyResult {
|
|
48
|
+
valid: boolean;
|
|
49
|
+
keyVersion: number;
|
|
50
|
+
algorithm: string;
|
|
51
|
+
requestId: string;
|
|
52
|
+
}
|
|
53
|
+
export interface KeyInfo {
|
|
54
|
+
keyVersion: number;
|
|
55
|
+
algorithm: string;
|
|
56
|
+
status: string;
|
|
57
|
+
publicKey: Buffer;
|
|
58
|
+
createdAt: string;
|
|
59
|
+
}
|
|
60
|
+
export interface KeyListResult {
|
|
61
|
+
keys: KeyInfo[];
|
|
62
|
+
total: number;
|
|
63
|
+
requestId: string;
|
|
64
|
+
}
|
|
65
|
+
export interface GenerateInput {
|
|
66
|
+
algorithm: string;
|
|
67
|
+
}
|
|
68
|
+
export interface GenerateResult {
|
|
69
|
+
keyVersion: number;
|
|
70
|
+
algorithm: string;
|
|
71
|
+
status: string;
|
|
72
|
+
publicKey: Buffer;
|
|
73
|
+
createdAt: string;
|
|
74
|
+
requestId: string;
|
|
75
|
+
}
|
|
76
|
+
export interface RotateInput {
|
|
77
|
+
algorithm: string;
|
|
78
|
+
}
|
|
79
|
+
export interface RotateResult {
|
|
80
|
+
keyVersion: number;
|
|
81
|
+
algorithm: string;
|
|
82
|
+
publicKey: Buffer;
|
|
83
|
+
oldKeyVersion: number;
|
|
84
|
+
requestId: string;
|
|
85
|
+
}
|
|
86
|
+
export interface GetActiveInput {
|
|
87
|
+
algorithm: string;
|
|
88
|
+
}
|
|
89
|
+
export interface GetKeyInput {
|
|
90
|
+
algorithm: string;
|
|
91
|
+
keyVersion: number;
|
|
92
|
+
}
|
|
93
|
+
export interface ListKeysInput {
|
|
94
|
+
algorithm?: string;
|
|
95
|
+
status?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface RetireInput {
|
|
98
|
+
algorithm: string;
|
|
99
|
+
keyVersion: number;
|
|
100
|
+
}
|
|
101
|
+
export interface RetireResult {
|
|
102
|
+
keyVersion: number;
|
|
103
|
+
algorithm: string;
|
|
104
|
+
status: string;
|
|
105
|
+
publicKey: Buffer;
|
|
106
|
+
createdAt: string;
|
|
107
|
+
requestId: string;
|
|
108
|
+
}
|
|
109
|
+
export interface ApiResponse<T> {
|
|
110
|
+
data: T;
|
|
111
|
+
requestId: string;
|
|
112
|
+
timestamp: string;
|
|
113
|
+
}
|
|
114
|
+
export interface ApiErrorResponse {
|
|
115
|
+
error: {
|
|
116
|
+
errorCode: string;
|
|
117
|
+
message: string;
|
|
118
|
+
};
|
|
119
|
+
requestId: string;
|
|
120
|
+
timestamp: string;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal HTTP client with authentication, retries, and error handling.
|
|
3
|
+
*/
|
|
4
|
+
export interface HttpClientOptions {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
timeout: number;
|
|
8
|
+
maxRetries: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class HttpClient {
|
|
11
|
+
private readonly apiKey;
|
|
12
|
+
private readonly baseUrl;
|
|
13
|
+
private readonly timeout;
|
|
14
|
+
private readonly maxRetries;
|
|
15
|
+
constructor(options: HttpClientOptions);
|
|
16
|
+
request<T>(method: string, path: string, body?: Record<string, unknown>, params?: Record<string, string>): Promise<T>;
|
|
17
|
+
get<T>(path: string, params?: Record<string, string>): Promise<T>;
|
|
18
|
+
post<T>(path: string, body?: Record<string, unknown>): Promise<T>;
|
|
19
|
+
private backoff;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,EAAE,iBAAiB;IAOhC,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,CAAC,CAAC;IAiGP,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,CAAC,CAAC;IAIP,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;YAIC,OAAO;CAItB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Internal HTTP client with authentication, retries, and error handling.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HttpClient = void 0;
|
|
7
|
+
const errors_1 = require("./errors");
|
|
8
|
+
const RETRYABLE_STATUS_CODES = new Set([429, 502, 503, 504]);
|
|
9
|
+
const SDK_VERSION = '0.1.0';
|
|
10
|
+
class HttpClient {
|
|
11
|
+
apiKey;
|
|
12
|
+
baseUrl;
|
|
13
|
+
timeout;
|
|
14
|
+
maxRetries;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.apiKey = options.apiKey;
|
|
17
|
+
this.baseUrl = options.baseUrl;
|
|
18
|
+
this.timeout = options.timeout;
|
|
19
|
+
this.maxRetries = options.maxRetries;
|
|
20
|
+
}
|
|
21
|
+
async request(method, path, body, params) {
|
|
22
|
+
let url = `${this.baseUrl}${path}`;
|
|
23
|
+
if (params && Object.keys(params).length > 0) {
|
|
24
|
+
const searchParams = new URLSearchParams(params);
|
|
25
|
+
url = `${url}?${searchParams.toString()}`;
|
|
26
|
+
}
|
|
27
|
+
let lastError;
|
|
28
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
29
|
+
try {
|
|
30
|
+
const controller = new AbortController();
|
|
31
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
32
|
+
const response = await fetch(url, {
|
|
33
|
+
method,
|
|
34
|
+
headers: {
|
|
35
|
+
'x-api-key': this.apiKey,
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
Accept: 'application/json',
|
|
38
|
+
'User-Agent': `qpher-node/${SDK_VERSION}`,
|
|
39
|
+
},
|
|
40
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
41
|
+
signal: controller.signal,
|
|
42
|
+
});
|
|
43
|
+
clearTimeout(timeoutId);
|
|
44
|
+
if (response.status >= 400) {
|
|
45
|
+
let errorBody;
|
|
46
|
+
try {
|
|
47
|
+
errorBody = await response.json();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
errorBody = { error: { message: await response.text() } };
|
|
51
|
+
}
|
|
52
|
+
const error = (0, errors_1.parseErrorResponse)(response.status, errorBody, `HTTP ${response.status}`);
|
|
53
|
+
if (RETRYABLE_STATUS_CODES.has(response.status) &&
|
|
54
|
+
attempt < this.maxRetries) {
|
|
55
|
+
lastError = error;
|
|
56
|
+
await this.backoff(attempt);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
return (await response.json());
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (error instanceof errors_1.QpherError) {
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
if (error instanceof Error) {
|
|
68
|
+
if (error.name === 'AbortError') {
|
|
69
|
+
if (attempt < this.maxRetries) {
|
|
70
|
+
lastError = error;
|
|
71
|
+
await this.backoff(attempt);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
throw new errors_1.TimeoutError('Request timed out');
|
|
75
|
+
}
|
|
76
|
+
// Connection errors
|
|
77
|
+
if (error.message.includes('fetch failed') ||
|
|
78
|
+
error.message.includes('ECONNREFUSED') ||
|
|
79
|
+
error.message.includes('ENOTFOUND')) {
|
|
80
|
+
if (attempt < this.maxRetries) {
|
|
81
|
+
lastError = error;
|
|
82
|
+
await this.backoff(attempt);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
throw new errors_1.ConnectionError('Connection failed');
|
|
86
|
+
}
|
|
87
|
+
lastError = error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (lastError instanceof errors_1.QpherError) {
|
|
92
|
+
throw lastError;
|
|
93
|
+
}
|
|
94
|
+
throw new errors_1.ConnectionError('Request failed after retries');
|
|
95
|
+
}
|
|
96
|
+
async get(path, params) {
|
|
97
|
+
return this.request('GET', path, undefined, params);
|
|
98
|
+
}
|
|
99
|
+
async post(path, body) {
|
|
100
|
+
return this.request('POST', path, body);
|
|
101
|
+
}
|
|
102
|
+
async backoff(attempt) {
|
|
103
|
+
const delay = Math.min(500 * Math.pow(2, attempt), 10000);
|
|
104
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.HttpClient = HttpClient;
|
|
108
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qpher Node.js SDK - Official client for the Qpher Post-Quantum Cryptography API.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export { Qpher } from './client';
|
|
7
|
+
export { QpherError, AuthenticationError, ValidationError, NotFoundError, ForbiddenError, RateLimitError, ServerError, TimeoutError, ConnectionError, } from './errors';
|
|
8
|
+
export { QpherOptions, EncryptInput, EncryptResult, DecryptInput, DecryptResult, SignInput, SignResult, VerifyInput, VerifyResult, KeyInfo, KeyListResult, GenerateInput, GenerateResult, RotateInput, RotateResult, GetActiveInput, GetKeyInput, ListKeysInput, RetireInput, RetireResult, } from './types';
|
|
9
|
+
export declare const version = "0.1.0";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,OAAO,EACP,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Qpher Node.js SDK - Official client for the Qpher Post-Quantum Cryptography API.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.version = exports.ConnectionError = exports.TimeoutError = exports.ServerError = exports.RateLimitError = exports.ForbiddenError = exports.NotFoundError = exports.ValidationError = exports.AuthenticationError = exports.QpherError = exports.Qpher = void 0;
|
|
9
|
+
// Main client
|
|
10
|
+
var client_1 = require("./client");
|
|
11
|
+
Object.defineProperty(exports, "Qpher", { enumerable: true, get: function () { return client_1.Qpher; } });
|
|
12
|
+
// Errors
|
|
13
|
+
var errors_1 = require("./errors");
|
|
14
|
+
Object.defineProperty(exports, "QpherError", { enumerable: true, get: function () { return errors_1.QpherError; } });
|
|
15
|
+
Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return errors_1.AuthenticationError; } });
|
|
16
|
+
Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_1.ValidationError; } });
|
|
17
|
+
Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return errors_1.NotFoundError; } });
|
|
18
|
+
Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return errors_1.ForbiddenError; } });
|
|
19
|
+
Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return errors_1.RateLimitError; } });
|
|
20
|
+
Object.defineProperty(exports, "ServerError", { enumerable: true, get: function () { return errors_1.ServerError; } });
|
|
21
|
+
Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return errors_1.TimeoutError; } });
|
|
22
|
+
Object.defineProperty(exports, "ConnectionError", { enumerable: true, get: function () { return errors_1.ConnectionError; } });
|
|
23
|
+
// SDK version
|
|
24
|
+
exports.version = '0.1.0';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,cAAc;AACd,mCAAiC;AAAxB,+FAAA,KAAK,OAAA;AAEd,SAAS;AACT,mCAUkB;AAThB,oGAAA,UAAU,OAAA;AACV,6GAAA,mBAAmB,OAAA;AACnB,yGAAA,eAAe,OAAA;AACf,uGAAA,aAAa,OAAA;AACb,wGAAA,cAAc,OAAA;AACd,wGAAA,cAAc,OAAA;AACd,qGAAA,WAAW,OAAA;AACX,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AA2BjB,cAAc;AACD,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
package/dist/kem.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kyber768 KEM encrypt/decrypt operations.
|
|
3
|
+
*/
|
|
4
|
+
import { HttpClient } from './http-client';
|
|
5
|
+
import { EncryptInput, EncryptResult, DecryptInput, DecryptResult } from './types';
|
|
6
|
+
export declare class KEMModule {
|
|
7
|
+
private readonly http;
|
|
8
|
+
constructor(http: HttpClient);
|
|
9
|
+
/**
|
|
10
|
+
* Encrypt data using Kyber768 KEM.
|
|
11
|
+
*
|
|
12
|
+
* @param input - Encryption parameters
|
|
13
|
+
* @returns Encrypted result with ciphertext and metadata
|
|
14
|
+
*/
|
|
15
|
+
encrypt(input: EncryptInput): Promise<EncryptResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Decrypt data using Kyber768 KEM.
|
|
18
|
+
*
|
|
19
|
+
* @param input - Decryption parameters
|
|
20
|
+
* @returns Decrypted result with plaintext and metadata
|
|
21
|
+
*/
|
|
22
|
+
decrypt(input: DecryptInput): Promise<DecryptResult>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=kem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kem.d.ts","sourceRoot":"","sources":["../src/kem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACd,MAAM,SAAS,CAAC;AAsBjB,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,IAAI,EAAE,UAAU;IAI5B;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAwB1D;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAkB3D"}
|
package/dist/kem.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Kyber768 KEM encrypt/decrypt operations.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.KEMModule = void 0;
|
|
7
|
+
class KEMModule {
|
|
8
|
+
http;
|
|
9
|
+
constructor(http) {
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Encrypt data using Kyber768 KEM.
|
|
14
|
+
*
|
|
15
|
+
* @param input - Encryption parameters
|
|
16
|
+
* @returns Encrypted result with ciphertext and metadata
|
|
17
|
+
*/
|
|
18
|
+
async encrypt(input) {
|
|
19
|
+
const body = {
|
|
20
|
+
plaintext: input.plaintext.toString('base64'),
|
|
21
|
+
key_version: input.keyVersion,
|
|
22
|
+
mode: input.mode ?? 'standard',
|
|
23
|
+
};
|
|
24
|
+
if (input.salt) {
|
|
25
|
+
body.salt = input.salt.toString('base64');
|
|
26
|
+
}
|
|
27
|
+
const response = await this.http.post('/api/v1/kem/encrypt', body);
|
|
28
|
+
return {
|
|
29
|
+
ciphertext: Buffer.from(response.data.ciphertext, 'base64'),
|
|
30
|
+
keyVersion: response.data.key_version,
|
|
31
|
+
algorithm: response.data.algorithm,
|
|
32
|
+
requestId: response.request_id,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Decrypt data using Kyber768 KEM.
|
|
37
|
+
*
|
|
38
|
+
* @param input - Decryption parameters
|
|
39
|
+
* @returns Decrypted result with plaintext and metadata
|
|
40
|
+
*/
|
|
41
|
+
async decrypt(input) {
|
|
42
|
+
const body = {
|
|
43
|
+
ciphertext: input.ciphertext.toString('base64'),
|
|
44
|
+
key_version: input.keyVersion,
|
|
45
|
+
};
|
|
46
|
+
const response = await this.http.post('/api/v1/kem/decrypt', body);
|
|
47
|
+
return {
|
|
48
|
+
plaintext: Buffer.from(response.data.plaintext, 'base64'),
|
|
49
|
+
keyVersion: response.data.key_version,
|
|
50
|
+
algorithm: response.data.algorithm,
|
|
51
|
+
requestId: response.request_id,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.KEMModule = KEMModule;
|
|
56
|
+
//# sourceMappingURL=kem.js.map
|
package/dist/kem.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kem.js","sourceRoot":"","sources":["../src/kem.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA8BH,MAAa,SAAS;IACH,IAAI,CAAa;IAElC,YAAY,IAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAmB;QAC/B,MAAM,IAAI,GAA4B;YACpC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7C,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,UAAU;SAC/B,CAAC;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACnC,qBAAqB,EACrB,IAAI,CACL,CAAC;QAEF,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;YAC3D,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW;YACrC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;YAClC,SAAS,EAAE,QAAQ,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAmB;QAC/B,MAAM,IAAI,GAAG;YACX,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/C,WAAW,EAAE,KAAK,CAAC,UAAU;SAC9B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACnC,qBAAqB,EACrB,IAAI,CACL,CAAC;QAEF,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;YACzD,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW;YACrC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;YAClC,SAAS,EAAE,QAAQ,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;CACF;AA7DD,8BA6DC"}
|
package/dist/keys.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PQC key lifecycle management.
|
|
3
|
+
*/
|
|
4
|
+
import { HttpClient } from './http-client';
|
|
5
|
+
import { KeyInfo, KeyListResult, GenerateInput, GenerateResult, RotateInput, RotateResult, GetActiveInput, GetKeyInput, ListKeysInput, RetireInput, RetireResult } from './types';
|
|
6
|
+
export declare class KeysModule {
|
|
7
|
+
private readonly http;
|
|
8
|
+
constructor(http: HttpClient);
|
|
9
|
+
/**
|
|
10
|
+
* Generate a new PQC key pair.
|
|
11
|
+
*
|
|
12
|
+
* @param input - Generation parameters
|
|
13
|
+
* @returns Generated key information
|
|
14
|
+
*/
|
|
15
|
+
generate(input: GenerateInput): Promise<GenerateResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Rotate to a new key version. The old active key becomes retired.
|
|
18
|
+
*
|
|
19
|
+
* @param input - Rotation parameters
|
|
20
|
+
* @returns New key information with old key version
|
|
21
|
+
*/
|
|
22
|
+
rotate(input: RotateInput): Promise<RotateResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the currently active key for an algorithm.
|
|
25
|
+
*
|
|
26
|
+
* @param input - Query parameters
|
|
27
|
+
* @returns Active key information
|
|
28
|
+
*/
|
|
29
|
+
getActive(input: GetActiveInput): Promise<KeyInfo>;
|
|
30
|
+
/**
|
|
31
|
+
* Get a specific key version.
|
|
32
|
+
*
|
|
33
|
+
* @param input - Query parameters
|
|
34
|
+
* @returns Key information for the specified version
|
|
35
|
+
*/
|
|
36
|
+
get(input: GetKeyInput): Promise<KeyInfo>;
|
|
37
|
+
/**
|
|
38
|
+
* List all PQC keys, optionally filtered.
|
|
39
|
+
*
|
|
40
|
+
* @param input - Filter parameters (optional)
|
|
41
|
+
* @returns List of keys with total count
|
|
42
|
+
*/
|
|
43
|
+
list(input?: ListKeysInput): Promise<KeyListResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Retire a key. Retired keys can decrypt/verify but not encrypt/sign.
|
|
46
|
+
*
|
|
47
|
+
* @param input - Retirement parameters
|
|
48
|
+
* @returns Updated key information
|
|
49
|
+
*/
|
|
50
|
+
retire(input: RetireInput): Promise<RetireResult>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,SAAS,CAAC;AAkDjB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,IAAI,EAAE,UAAU;IAI5B;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB7D;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAevD;;;;;OAKG;IACG,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IASxD;;;;;OAKG;IACG,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C;;;;;OAKG;IACG,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAqBzD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAexD"}
|
package/dist/keys.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PQC key lifecycle management.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.KeysModule = void 0;
|
|
7
|
+
function parseKeyInfo(data) {
|
|
8
|
+
return {
|
|
9
|
+
keyVersion: data.key_version,
|
|
10
|
+
algorithm: data.algorithm,
|
|
11
|
+
status: data.status,
|
|
12
|
+
publicKey: Buffer.from(data.public_key, 'base64'),
|
|
13
|
+
createdAt: data.created_at,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
class KeysModule {
|
|
17
|
+
http;
|
|
18
|
+
constructor(http) {
|
|
19
|
+
this.http = http;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generate a new PQC key pair.
|
|
23
|
+
*
|
|
24
|
+
* @param input - Generation parameters
|
|
25
|
+
* @returns Generated key information
|
|
26
|
+
*/
|
|
27
|
+
async generate(input) {
|
|
28
|
+
const response = await this.http.post('/api/v1/kms/keys/generate', { algorithm: input.algorithm });
|
|
29
|
+
return {
|
|
30
|
+
keyVersion: response.data.key_version,
|
|
31
|
+
algorithm: response.data.algorithm,
|
|
32
|
+
status: response.data.status,
|
|
33
|
+
publicKey: Buffer.from(response.data.public_key, 'base64'),
|
|
34
|
+
createdAt: response.data.created_at,
|
|
35
|
+
requestId: response.request_id,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Rotate to a new key version. The old active key becomes retired.
|
|
40
|
+
*
|
|
41
|
+
* @param input - Rotation parameters
|
|
42
|
+
* @returns New key information with old key version
|
|
43
|
+
*/
|
|
44
|
+
async rotate(input) {
|
|
45
|
+
const response = await this.http.post('/api/v1/kms/keys/rotate', { algorithm: input.algorithm });
|
|
46
|
+
return {
|
|
47
|
+
keyVersion: response.data.key_version,
|
|
48
|
+
algorithm: response.data.algorithm,
|
|
49
|
+
publicKey: Buffer.from(response.data.public_key, 'base64'),
|
|
50
|
+
oldKeyVersion: response.data.old_key_version,
|
|
51
|
+
requestId: response.request_id,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get the currently active key for an algorithm.
|
|
56
|
+
*
|
|
57
|
+
* @param input - Query parameters
|
|
58
|
+
* @returns Active key information
|
|
59
|
+
*/
|
|
60
|
+
async getActive(input) {
|
|
61
|
+
const response = await this.http.get('/api/v1/kms/keys/active', { algorithm: input.algorithm });
|
|
62
|
+
return parseKeyInfo(response.data);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get a specific key version.
|
|
66
|
+
*
|
|
67
|
+
* @param input - Query parameters
|
|
68
|
+
* @returns Key information for the specified version
|
|
69
|
+
*/
|
|
70
|
+
async get(input) {
|
|
71
|
+
const response = await this.http.get(`/api/v1/kms/keys/${input.keyVersion}`, { algorithm: input.algorithm });
|
|
72
|
+
return parseKeyInfo(response.data);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* List all PQC keys, optionally filtered.
|
|
76
|
+
*
|
|
77
|
+
* @param input - Filter parameters (optional)
|
|
78
|
+
* @returns List of keys with total count
|
|
79
|
+
*/
|
|
80
|
+
async list(input) {
|
|
81
|
+
const params = {};
|
|
82
|
+
if (input?.algorithm) {
|
|
83
|
+
params.algorithm = input.algorithm;
|
|
84
|
+
}
|
|
85
|
+
if (input?.status) {
|
|
86
|
+
params.status = input.status;
|
|
87
|
+
}
|
|
88
|
+
const response = await this.http.get('/api/v1/kms/keys', Object.keys(params).length > 0 ? params : undefined);
|
|
89
|
+
return {
|
|
90
|
+
keys: response.data.keys.map(parseKeyInfo),
|
|
91
|
+
total: response.data.total,
|
|
92
|
+
requestId: response.request_id,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Retire a key. Retired keys can decrypt/verify but not encrypt/sign.
|
|
97
|
+
*
|
|
98
|
+
* @param input - Retirement parameters
|
|
99
|
+
* @returns Updated key information
|
|
100
|
+
*/
|
|
101
|
+
async retire(input) {
|
|
102
|
+
const response = await this.http.post('/api/v1/kms/keys/retire', { algorithm: input.algorithm, key_version: input.keyVersion });
|
|
103
|
+
return {
|
|
104
|
+
keyVersion: response.data.key_version,
|
|
105
|
+
algorithm: response.data.algorithm,
|
|
106
|
+
status: response.data.status,
|
|
107
|
+
publicKey: Buffer.from(response.data.public_key, 'base64'),
|
|
108
|
+
createdAt: response.data.created_at,
|
|
109
|
+
requestId: response.request_id,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.KeysModule = KeysModule;
|
|
114
|
+
//# sourceMappingURL=keys.js.map
|
package/dist/keys.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dilithium3 digital signature operations.
|
|
3
|
+
*/
|
|
4
|
+
import { HttpClient } from './http-client';
|
|
5
|
+
import { SignInput, SignResult, VerifyInput, VerifyResult } from './types';
|
|
6
|
+
export declare class SignaturesModule {
|
|
7
|
+
private readonly http;
|
|
8
|
+
constructor(http: HttpClient);
|
|
9
|
+
/**
|
|
10
|
+
* Sign a message using Dilithium3.
|
|
11
|
+
*
|
|
12
|
+
* @param input - Signing parameters
|
|
13
|
+
* @returns Signed result with signature bytes (3,293 bytes raw)
|
|
14
|
+
*/
|
|
15
|
+
sign(input: SignInput): Promise<SignResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Verify a Dilithium3 signature.
|
|
18
|
+
*
|
|
19
|
+
* @param input - Verification parameters
|
|
20
|
+
* @returns Verification result with valid=true/false
|
|
21
|
+
*/
|
|
22
|
+
verify(input: VerifyInput): Promise<VerifyResult>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=signatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../src/signatures.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAsB3E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,IAAI,EAAE,UAAU;IAI5B;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAmBjD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAmBxD"}
|