Skip to content

Commit 2c60168

Browse files
committed
feat(ddn-crypto): add ddn-crypto module to to handle all the functions of encryption and decryption
BREAKING CHANGE: Focus on Cryptography
1 parent d46d3f9 commit 2c60168

39 files changed

Lines changed: 385 additions & 414 deletions

.eslintrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"env": {
33
"commonjs": true,
44
"es6": true,
5-
"node": true
5+
"node": true,
6+
"jest": true
67
},
78
"extends": "eslint:recommended",
89
"globals": {

doc/ddn-crypto.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
DDN区块链地址的生产与校验
2+
--------------
3+
4+
## 关于 Base58 字符编码及加密
5+
6+
Base58加密原理:和通常base64编码一样,base58编码的作用也是将非可视字符可视化(ASCII化)。但不同的是base58编码去掉了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +。结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。
7+
8+
参考:[bs58.js](../packages/ddn-crypto/src/base58check/bs58.js)
9+
10+
## 生成地址
11+
12+
1. 获取一个随机的32字节ECDSA密钥
13+
14+
2. 使用椭圆曲线加密算法计算上述私钥所对应的非压缩公钥
15+
16+
3. 对(压缩)公钥进行SHA-256哈希计算
17+
18+
4. 对步骤2的哈希值进行RIPEMD-160哈希计算
19+
20+
5. 在步骤3的哈希值前添加前缀(主网为0x00,测试网为0xef)
21+
22+
6. 对步骤4的扩展RIPEMD-160哈希值进行SHA256哈希计算
23+
24+
7. 对步骤5的哈希值再次进行SHA256哈希计算
25+
26+
8. 取步骤6结果值的前4个字节作为校验码
27+
28+
9. 将校验码添加到步骤4的扩展RIPEMD-160哈希值末尾
29+
30+
10. 使用Base58Check编码将结果从字节字符串转换为base58字符串。
31+
32+
## 验证地址
33+
34+
1. 把地址base58解码成字节数组
35+
2. 把数组分成两个字节数组,字节数组(1)是后4字节数组,字节数组(2)是减去后4字节的数组
36+
3. 把字节数组(2)两次Sha256 Hash
37+
4. 取字节数组(2)hash后的前4位,跟字节数组(1)比较。如果相同校验通过。
38+
5. 校验通过的解码字节数组取第一个字节,地址前缀。
39+
6. 检验前缀的合法性(根据主网参数校验),注意大小写。

examples/fun-tests/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const path =require('path');
88
const fs =require('fs');
99
const { Utils } =require('@ddn/ddn-utils');
1010
const { getUserConfig } =require('@ddn/ddn-core');
11-
const Peer = require('@ddn/ddn-peer');
11+
const Peer = require('@ddn/ddn-peer').default;
1212

1313
/**
1414
* 整理系统配置文件生成输入参数

packages/ddn-cli/package.json

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@ddn/ddn",
2+
"name": "@ddn/ddn-cli",
33
"preferGlobal": true,
44
"version": "1.0.0",
55
"description": "A Command line tool to manage ddn",
@@ -17,30 +17,28 @@
1717
"author": "HuoDing <hd@qq.com>",
1818
"license": "MIT",
1919
"dependencies": {
20+
"@ddn/ddn-crypto": "^0.0.1",
2021
"@ddn/ddn-node-sdk": "^3.0.1",
2122
"@ddn/ddn-utils": "^1.0.11",
2223
"async": "1.5.2",
23-
"bitcore-mnemonic": "^8.5.1",
2424
"bytebuffer": "^4.0.0",
2525
"commander": "^2.8.1",
26-
"crypto-browserify": "^3.9.14",
2726
"download-git-repo": "^3.0.2",
2827
"fs-extra": "0.30.0",
2928
"gift": "0.6.1",
3029
"inquirer": "^7.0.3",
31-
"js-nacl": "0.6.0",
3230
"ora": "^4.0.3",
3331
"request": "^2.62.0",
3432
"rmdir": "^1.1.0",
3533
"symbols": "^0.0.6",
3634
"valid-url": "1.0.9"
3735
},
3836
"bugs": {
39-
"url": "http://git.ebookchain.net/ddn/ddn-cli/issues"
37+
"url": "https://github.com/ddnlink/ddn/issues"
4038
},
4139
"repository": {
4240
"type": "git",
43-
"url": "http://git.ebookchain.net/ddn/ddn-cli.git"
41+
"url": "https://github.com/ddnlink/ddn/tree/master/packages/ddn-cli"
4442
},
45-
"homepage": "http://git.ebookchain.net/ddn/ddn-cli"
43+
"homepage": "https://github.com/ddnlink/ddn/tree/master/packages/ddn-cli"
4644
}

packages/ddn-cli/src/base58check/base-x.js

Lines changed: 0 additions & 89 deletions
This file was deleted.

packages/ddn-cli/src/base58check/bs58.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/ddn-cli/src/base58check/index.js

Lines changed: 0 additions & 52 deletions
This file was deleted.

packages/ddn-cli/src/crypto.js

Lines changed: 0 additions & 90 deletions
This file was deleted.

packages/ddn-cli/src/dapptransactions.js

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,4 @@
1-
var util = require('util');
21
var ByteBuffer = require('bytebuffer');
3-
var crypto = require('./crypto.js');
4-
5-
var bytesTypes = {
6-
2: function (trs) {
7-
try {
8-
var buf = Buffer.from(trs.asset.delegates.list.join(","), 'utf8');
9-
} catch (e) {
10-
throw Error(e.toString());
11-
}
12-
13-
return buf;
14-
}
15-
}
162

173
function getTransactionBytes(trs, skipSignature) {
184

packages/ddn-cli/src/helpers/account.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var crypto = require('../crypto.js');
1+
var crypto = require('@ddn/ddn-crypto');
22

33
module.exports = {
44
account: function (secret, tokenPrefix) {

0 commit comments

Comments
 (0)