34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
import { webcrypto } from "crypto";
|
|
|
|
const subtle = webcrypto.subtle;
|
|
type BufferSource = ArrayBufferView | ArrayBuffer;
|
|
|
|
export async function AES_GCM_Encrypt(key: BufferSource, iv: BufferSource, msg: BufferSource, aad?: BufferSource): Promise<ArrayBuffer> {
|
|
const keyObj = await subtle.importKey("raw", key, {
|
|
name: "AES-GCM",
|
|
}, false, ["encrypt"]);
|
|
|
|
const ciphertext = await subtle.encrypt({
|
|
name: "AES-GCM",
|
|
iv,
|
|
additionalData: aad
|
|
}, keyObj, msg);
|
|
|
|
return ciphertext;
|
|
}
|
|
|
|
|
|
export async function AES_GCM_Decrypt(key: BufferSource, iv: BufferSource, ciphertext: BufferSource, aad?: BufferSource): Promise<ArrayBuffer> {
|
|
const keyObj = await subtle.importKey("raw", key, {
|
|
name: "AES-GCM",
|
|
}, false, ["decrypt"]);
|
|
|
|
const plaintext = await subtle.decrypt({
|
|
name: "AES-GCM",
|
|
iv: iv,
|
|
additionalData: aad
|
|
}, keyObj, ciphertext);
|
|
//아마도 tag 검증 실패시 예외가 발생할 것으로 예상
|
|
|
|
return plaintext;
|
|
} |