Skip to content

Commit 882bb12

Browse files
authored
Implement node:crypto cipher/decipher (#3635)
1 parent e3e3f10 commit 882bb12

9 files changed

+1657
-0
lines changed

src/node/crypto.ts

+29
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,17 @@ import {
5656
Verify,
5757
} from 'node-internal:crypto_sign';
5858

59+
import {
60+
Cipheriv,
61+
Decipheriv,
62+
createCipheriv,
63+
createDecipheriv,
64+
publicDecrypt,
65+
publicEncrypt,
66+
privateDecrypt,
67+
privateEncrypt,
68+
} from 'node-internal:crypto_cipher';
69+
5970
import { hkdf, hkdfSync } from 'node-internal:crypto_hkdf';
6071

6172
import { pbkdf2, pbkdf2Sync, ArrayLike } from 'node-internal:crypto_pbkdf2';
@@ -141,6 +152,15 @@ export {
141152
verify,
142153
Sign,
143154
Verify,
155+
// Cipher/Decipher
156+
Cipheriv,
157+
Decipheriv,
158+
createCipheriv,
159+
createDecipheriv,
160+
publicDecrypt,
161+
publicEncrypt,
162+
privateDecrypt,
163+
privateEncrypt,
144164
};
145165

146166
export function getCiphers(): string[] {
@@ -268,6 +288,15 @@ export default {
268288
verify,
269289
Sign,
270290
Verify,
291+
// Cipher/Decipher
292+
Cipheriv,
293+
Decipheriv,
294+
createCipheriv,
295+
createDecipheriv,
296+
publicDecrypt,
297+
publicEncrypt,
298+
privateDecrypt,
299+
privateEncrypt,
271300
};
272301

273302
// Classes

src/node/internal/crypto.d.ts

+46
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,52 @@ export function verifyOneShot(
106106
dsaSigEnc?: number
107107
): boolean;
108108

109+
export class CipherHandle {
110+
public constructor(
111+
mode: 'cipher' | 'decipher',
112+
algorithm: string,
113+
key: CryptoKey,
114+
iv: ArrayBuffer | ArrayBufferView,
115+
authTagLength?: number
116+
);
117+
public update(data: ArrayBuffer | ArrayBufferView): ArrayBuffer;
118+
public final(): ArrayBuffer;
119+
public setAAD(
120+
data: ArrayBuffer | ArrayBufferView,
121+
plaintextLength?: number
122+
): void;
123+
public setAutoPadding(autoPadding: boolean): void;
124+
public getAuthTag(): ArrayBuffer | undefined;
125+
public setAuthTag(tag: ArrayBuffer | ArrayBufferView): void;
126+
}
127+
128+
export interface PublicPrivateCipherOptions {
129+
padding: number;
130+
oaepHash: string;
131+
oaepLabel: ArrayBuffer | ArrayBufferView | undefined;
132+
}
133+
134+
export function publicEncrypt(
135+
key: CryptoKey,
136+
buffer: ArrayBuffer | ArrayBufferView,
137+
options: PublicPrivateCipherOptions
138+
): Buffer;
139+
export function publicDecrypt(
140+
key: CryptoKey,
141+
buffer: ArrayBuffer | ArrayBufferView,
142+
options: PublicPrivateCipherOptions
143+
): Buffer;
144+
export function privateEncrypt(
145+
key: CryptoKey,
146+
buffer: ArrayBuffer | ArrayBufferView,
147+
options: PublicPrivateCipherOptions
148+
): Buffer;
149+
export function privateDecrypt(
150+
key: CryptoKey,
151+
buffer: ArrayBuffer | ArrayBufferView,
152+
options: PublicPrivateCipherOptions
153+
): Buffer;
154+
109155
export type ArrayLike = ArrayBuffer | string | Buffer | ArrayBufferView;
110156

111157
export class HmacHandle {

0 commit comments

Comments
 (0)