actual module
This commit is contained in:
122
crypto.js
Normal file
122
crypto.js
Normal file
@@ -0,0 +1,122 @@
|
||||
import init, * as ecies from "ecies-wasm";
|
||||
import { Key } from "./zkl-kds/key";
|
||||
|
||||
init();
|
||||
|
||||
/**
|
||||
* Encrypts given data for the recipient
|
||||
*
|
||||
* @param {Key} publicKey The public key of the recipient
|
||||
* @param {Uint8Array} data The plaintext data
|
||||
* @returns {Uint8Array} The ciphertext data
|
||||
* @throws {TypeError} If arguments are of incorrect types
|
||||
*/
|
||||
export function encryptFile(publicKey, data) {
|
||||
if (!(publicKey instanceof Key)) {
|
||||
throw new TypeError("publicKey must be an instance of Key");
|
||||
}
|
||||
if (!(data instanceof Uint8Array)) {
|
||||
throw new TypeError("data must be an instance of Uint8Array");
|
||||
}
|
||||
return encrypt(publicKey, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts given data with recipient's private key
|
||||
*
|
||||
* @param {Key} privateKey The private key of the recipient
|
||||
* @param {Uint8Array} data The ciphertext data
|
||||
* @returns {Uint8Array} The plaintext data
|
||||
* @throws {TypeError} If arguments are of incorrect types
|
||||
*/
|
||||
export function decryptFile(privateKey, data) {
|
||||
if (!(privateKey instanceof Key)) {
|
||||
throw new TypeError("privateKey must be an instance of Key");
|
||||
}
|
||||
if (!(data instanceof Uint8Array)) {
|
||||
throw new TypeError("data must be an instance of Uint8Array");
|
||||
}
|
||||
return decrypt(privateKey, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypts given string for the recipient
|
||||
*
|
||||
* @param {Key} publicKey The public key of the recipient
|
||||
* @param {string} string The plaintext
|
||||
* @returns {string} The ciphertext as hexadecimal string
|
||||
* @throws {TypeError} If arguments are of incorrect types
|
||||
*/
|
||||
export function encryptString(publicKey, string) {
|
||||
if (!(publicKey instanceof Key)) {
|
||||
throw new TypeError("publicKey must be an instance of Key");
|
||||
}
|
||||
if (typeof string !== "string") {
|
||||
throw new TypeError("string must be of type string");
|
||||
}
|
||||
|
||||
const encoder = new TextEncoder();
|
||||
const byteArray = encoder.encode(string);
|
||||
const encryptedData = encrypt(publicKey, byteArray);
|
||||
return encryptedData.asHexString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts given string of ciphertext in hexadecimal
|
||||
*
|
||||
* @param {Key} privateKey The private key of the recipient
|
||||
* @param {string} string The ciphertext string in hexadecimal
|
||||
* @returns {string} The plaintext
|
||||
* @throws {TypeError} If arguments are of incorrect types
|
||||
*/
|
||||
export function decryptString(privateKey, string) {
|
||||
if (!(privateKey instanceof Key)) {
|
||||
throw new TypeError("privateKey must be an instance of Key");
|
||||
}
|
||||
if (typeof string !== "string") {
|
||||
throw new TypeError("string must be of type string");
|
||||
}
|
||||
if (!/^[0-9a-fA-F]+$/.test(string)) {
|
||||
console.warn("string does not seem to be a valid hexadecimal string");
|
||||
}
|
||||
|
||||
const byteArray = Uint8Array.from(
|
||||
string.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))
|
||||
);
|
||||
const decryptedData = decrypt(privateKey, byteArray);
|
||||
const decoder = new TextDecoder();
|
||||
return decoder.decode(decryptedData);
|
||||
}
|
||||
|
||||
function encrypt(publicKey, plaintext) {
|
||||
if (!(publicKey instanceof Key)) {
|
||||
throw new TypeError("publicKey must be an instance of Key");
|
||||
}
|
||||
if (!(plaintext instanceof Uint8Array)) {
|
||||
throw new TypeError("plaintext must be an instance of Uint8Array");
|
||||
}
|
||||
return ecies.encrypt(publicKey.asByteArray, plaintext);
|
||||
}
|
||||
|
||||
function decrypt(privateKey, ciphertext) {
|
||||
if (!(privateKey instanceof Key)) {
|
||||
throw new TypeError("privateKey must be an instance of Key");
|
||||
}
|
||||
if (!(ciphertext instanceof Uint8Array)) {
|
||||
throw new TypeError("ciphertext must be an instance of Uint8Array");
|
||||
}
|
||||
return ecies.decrypt(privateKey.asByteArray, ciphertext);
|
||||
}
|
||||
|
||||
function asHexString() {
|
||||
return this.reduce(
|
||||
(str, byte) => str + byte.toString(16).padStart(2, "0"),
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
if (!Uint8Array.prototype.asHexString) {
|
||||
Uint8Array.prototype.asHexString = asHexString;
|
||||
} else {
|
||||
console.warn("asHexString method already exists on Uint8Array.prototype");
|
||||
}
|
||||
Reference in New Issue
Block a user