gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: addr list and test


From: gnunet
Subject: [taler-wallet-core] branch master updated: addr list and test
Date: Wed, 20 Apr 2022 20:14:54 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new 0cb4e449 addr list and test
0cb4e449 is described below

commit 0cb4e4498db5d87e0bc89062204b746992b22279
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Wed Apr 20 15:14:18 2022 -0300

    addr list and test
---
 packages/taler-util/src/bitcoin.test.ts | 30 +++++++++++++++++++++++++++---
 packages/taler-util/src/bitcoin.ts      | 27 +++++++++++++++------------
 packages/taler-util/src/payto.ts        | 22 +++-------------------
 3 files changed, 45 insertions(+), 34 deletions(-)

diff --git a/packages/taler-util/src/bitcoin.test.ts 
b/packages/taler-util/src/bitcoin.test.ts
index 287cd7e6..3070a8ab 100644
--- a/packages/taler-util/src/bitcoin.test.ts
+++ b/packages/taler-util/src/bitcoin.test.ts
@@ -24,21 +24,21 @@ import {
 } from "./bitcoin.js";
 
 test("generate testnet", (t) => {
-  const { addr1, addr2 } = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XSG",
 "tb1qhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  const [addr1, addr2] = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XSG",
 "tb1qhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
 
   t.assert(addr1 === "tb1qtfwqwaj6tsrhdtvuyhflr6nklm8ldqxpf0lfjw");
   t.assert(addr2 === "tb1qmfwqwa5vr5vdac6wr20ts76aewakzpmns40yuf");
 });
 
 test("generate mainnet", (t) => {
-  const { addr1, addr2 } = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XSG",
 "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq")
+  const [addr1, addr2] = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XSG",
 "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq")
   //bc
   t.assert(addr1 === "bc1qtfwqwaj6tsrhdtvuyhflr6nklm8ldqxprfy6fa");
   t.assert(addr2 === "bc1qmfwqwa5vr5vdac6wr20ts76aewakzpmn6n5h86");
 });
 
 test("generate Regtest", (t) => {
-  const { addr1, addr2 } = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XSG",
 "bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  const [addr1, addr2] = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XSG",
 "bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
 
   t.assert(addr1 === "bcrt1qtfwqwaj6tsrhdtvuyhflr6nklm8ldqxptxxy98");
   t.assert(addr2 === "bcrt1qmfwqwa5vr5vdac6wr20ts76aewakzpmnjukftq");
@@ -51,3 +51,27 @@ test("unknown net", (t) => {
   })
 
 });
+
+test("invalid or no reserve", (t) => {
+  let result = undefined;
+  // empty 
+  result = generateFakeSegwitAddress("", 
"bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+  // small 
+  result = generateFakeSegwitAddress("s", 
"bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+  result = generateFakeSegwitAddress("asdsad", 
"bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+  result = generateFakeSegwitAddress("asdasdasdasdasdasd", 
"bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+  result = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XS",
 "bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+  result = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XSSSS",
 "bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+  // no reserve
+  result = generateFakeSegwitAddress(undefined, 
"bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+  result = 
generateFakeSegwitAddress("B9E0EXNDKGJX7WFAEVZCZXM0R661T66YWD71N7NRFDEWQEV10XS-",
 "bcrtqhxrhccqexg0dv4nltgkuw4fg2ce7muplmjsn0v")
+  t.deepEqual(result, [])
+});
+
diff --git a/packages/taler-util/src/bitcoin.ts 
b/packages/taler-util/src/bitcoin.ts
index 62d8d8dc..822652a8 100644
--- a/packages/taler-util/src/bitcoin.ts
+++ b/packages/taler-util/src/bitcoin.ts
@@ -26,10 +26,6 @@ import { AmountJson, Amounts } from "./amounts.js";
 import { decodeCrock } from "./talerCrypto.js";
 import * as segwit from "./segwit_addr.js";
 
-export interface SegwitAddrs {
-  addr1: string;
-  addr2: string;
-}
 
 function buf2hex(buffer: Uint8Array) {
   // buffer is an ArrayBuffer
@@ -43,10 +39,17 @@ const hext2buf = (hexString: string) =>
 
 
 export function generateFakeSegwitAddress(
-  reservePub: string,
+  reservePub: string | undefined,
   addr: string
-): SegwitAddrs {
-  const pub = decodeCrock(reservePub);
+): string[] {
+  if (!reservePub) return []
+  let pub;
+  try {
+    pub = decodeCrock(reservePub);
+  } catch {
+    // pub = new Uint8Array(0)
+  }
+  if (!pub || pub.length !== 32) return []
 
   const first_rnd = new Uint8Array(4);
   first_rnd.set(pub.subarray(0, 4))
@@ -62,7 +65,7 @@ export function generateFakeSegwitAddress(
 
   const second_part = new Uint8Array(first_rnd.length + pub.length / 2);
   second_part.set(second_rnd, 0);
-  second_part.set(pub.subarray(16), 4);
+  second_part.set(pub.subarray(16, 32), 4);
 
   const prefix =
     addr[0] === "t" && addr[1] == "b"
@@ -74,10 +77,10 @@ export function generateFakeSegwitAddress(
           : undefined;
   if (prefix === undefined) throw new Error("unknown bitcoin net");
 
-  return {
-    addr1: segwit.default.encode(prefix, 0, first_part),
-    addr2: segwit.default.encode(prefix, 0, second_part),
-  };
+  const addr1 = segwit.default.encode(prefix, 0, first_part);
+  const addr2 = segwit.default.encode(prefix, 0, second_part);
+
+  return [addr1, addr2]
 }
 
 // https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp
diff --git a/packages/taler-util/src/payto.ts b/packages/taler-util/src/payto.ts
index 7dcb2809..f1596579 100644
--- a/packages/taler-util/src/payto.ts
+++ b/packages/taler-util/src/payto.ts
@@ -49,27 +49,11 @@ export interface PaytoUriTalerBank extends PaytoUriGeneric {
 export interface PaytoUriBitcoin extends PaytoUriGeneric {
   isKnown: true;
   targetType: "bitcoin";
-  addr1: string;
-  addr2: string;
+  segwitAddrs: Array<string>;
 }
 
 const paytoPfx = "payto://";
 
-function buildSegwitGenerator(result: PaytoUriBitcoin, targetPath: string) {
-  //generate segwit address just once, save addr in payto object
-  //and use it as cache
-  return function generateSegwitAddress(reserve: string): {
-    addr1: string;
-    addr2: string;
-  } {
-    if (result.addr1 && result.addr2)
-      return { addr1: result.addr1, addr2: result.addr2 };
-    const { addr1, addr2 } = generateFakeSegwitAddress(reserve, targetPath);
-    result.addr1 = addr1;
-    result.addr2 = addr2;
-    return { addr1, addr2 };
-  };
-}
 /**
  * Add query parameters to a payto URI
  */
@@ -158,14 +142,14 @@ export function parsePaytoUri(s: string): PaytoUri | 
undefined {
   if (targetType === "bitcoin") {
     const msg = /\b([A-Z0-9]{52})\b/.exec(params["message"])
     const reserve = !msg ? params["subject"] : msg[0];
-    const { addr1, addr2 } = generateFakeSegwitAddress(reserve, targetPath);
+    const segwitAddrs = !reserve ? [] : generateFakeSegwitAddress(reserve, 
targetPath);
 
     const result: PaytoUriBitcoin = {
       isKnown: true,
       targetPath,
       targetType,
       params,
-      addr1, addr2
+      segwitAddrs
     };
 
     return result;

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]