From 46c25f3bb819ca32a06f39dddd788cf86215cc3c Mon Sep 17 00:00:00 2001
From: librelois <elois@ifee.fr>
Date: Sun, 5 Apr 2020 19:24:10 +0200
Subject: [PATCH] [enh] scrypt: keypair generation use duniteroxyde instead of
 tweetnacl

---
 app/modules/keypair/lib/scrypt.ts | 27 ++++++++++-----------------
 1 file changed, 10 insertions(+), 17 deletions(-)

diff --git a/app/modules/keypair/lib/scrypt.ts b/app/modules/keypair/lib/scrypt.ts
index 057b1a30d..0a348ad01 100644
--- a/app/modules/keypair/lib/scrypt.ts
+++ b/app/modules/keypair/lib/scrypt.ts
@@ -11,11 +11,8 @@
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU Affero General Public License for more details.
 
-import {Base58encode} from "../../../lib/common-libs/crypto/base58"
-import {decodeBase64} from "../../../lib/common-libs/crypto/nacl-util"
 import * as crypto from 'crypto'
-
-const nacl     = require('tweetnacl');
+import { KeyPairBuilder, seedToSecretKey } from 'duniteroxyde'
 
 const SEED_LENGTH = 32; // Length of the key
 
@@ -29,20 +26,16 @@ const SEED_LENGTH = 32; // Length of the key
  * @return keyPair An object containing the public and private keys, base58 encoded.
  */
 export const Scrypt = async (salt:string, key:string, N = 4096, r = 16, p = 1) => {
-  const keyBytes = await getScryptKey(key, salt, N, r, p)
-  const pair = nacl.sign.keyPair.fromSeed(keyBytes);
-  return {
-    pub: Base58encode(new Buffer(pair.publicKey, 'hex')),
-    sec: Base58encode(new Buffer(pair.secretKey, 'hex'))
-  };
-}
-
-const getScryptKey = async (key:string, salt:string, N:number, r:number, p:number) => {
-  const res:any = await new Promise((resolve, reject) => {
-    crypto.scrypt(key, salt, SEED_LENGTH, { N, r, p }, (err:any, res:Buffer) => {
+  const res: { pub: string, sec: string } = await new Promise((resolve, reject) => {
+    crypto.scrypt(key, salt, SEED_LENGTH, { N, r, p }, (err:any, seed:Buffer) => {
       if (err) return reject(err)
-      resolve(res)
+      const pair = KeyPairBuilder.fromSeed(seed);
+      resolve({
+        pub: pair.getPublicKey(),
+        sec: seedToSecretKey(seed)
+      })
     })
   })
-  return decodeBase64(res.toString("base64"))
+
+  return res;
 }
-- 
GitLab