浏览代码

Comment and add error handling to generate and sign

Matt 5 年之前
父节点
当前提交
2233b9a094
共有 2 个文件被更改,包括 17 次插入8 次删除
  1. 1 1
      src/core/operations/GenerateRSAKeyPair.mjs
  2. 16 7
      src/core/operations/RSASign.mjs

+ 1 - 1
src/core/operations/GenerateRSAKeyPair.mjs

@@ -56,7 +56,7 @@ class GenerateRSAKeyPair extends Operation {
         const [keyLength, outputFormat] = args;
 
         return new Promise((resolve, reject) => {
-            forge.pki.rsa.generateKeyPair({ bits: Number(keyLength), workers: -1, workerScript: "./assets/forge/prime.worker.min.js"}, (err, keypair) => {
+            forge.pki.rsa.generateKeyPair({ bits: Number(keyLength), workers: -1, workerScript: "assets/forge/prime.worker.min.js"}, (err, keypair) => {
                 if (err) return reject(err);
 
                 let result;

+ 16 - 7
src/core/operations/RSASign.mjs

@@ -6,6 +6,7 @@
  */
 
 import Operation from "../Operation";
+import OperationError from "../errors/OperationError";
 import forge from "node-forge/dist/forge.min.js";
 import { MD_ALGORITHMS } from "../lib/RSA.mjs";
 
@@ -52,13 +53,21 @@ class RSASign extends Operation {
      */
     run(input, args) {
         const [key, password, mdAlgo] = args;
-
-        const privateKey = forge.pki.decryptRsaPrivateKey(key, password);
-        const md = MD_ALGORITHMS[mdAlgo].create();
-        md.update(input, "utf8");
-        const signature = privateKey.sign(md);
-
-        return signature.split("").map(char => char.charCodeAt());
+        if (key.replace("-----BEGIN RSA PRIVATE KEY-----", "").length === 0) {
+            throw new OperationError("Please enter a private key.");
+        }
+        try {
+            const privateKey = forge.pki.decryptRsaPrivateKey(key, password);
+            // Generate message hash
+            const md = MD_ALGORITHMS[mdAlgo].create();
+            md.update(input, "utf8");
+            // Convert signature UTF-16 string to byteArray
+            const encoder = new TextEncoder();
+            const signature = encoder.encode(privateKey.sign(md));
+            return signature;
+        } catch (err) {
+            throw new OperationError(err);
+        }
     }
 
 }