from app.api.resources import Get_Path_From_Index
from app.api.resources import Broadcast_Transaction
from app.api.resources import Create_QRcode_Base64
+from app.api.resources import Create_New_Key
blueprint = Blueprint('api', __name__, url_prefix='/api/v1')
api = Api(blueprint)
api.add_resource(Create_Address, '/create_address')
api.add_resource(Get_Path_From_Index, '/get_path_from_index')
api.add_resource(Broadcast_Transaction, '/broadcast_transaction')
-api.add_resource(Create_QRcode_Base64, '/create_qrcode_base64')
\ No newline at end of file
+api.add_resource(Create_QRcode_Base64, '/create_qrcode_base64')
+api.add_resource(Create_New_Key, '/create_new_key')
\ No newline at end of file
from app.model.receiver import get_path_from_index
from app.model.receiver import create_qrcode_base64
from app.model.transaction import broadcast_transaction
+from app.model.key import create_new_key
parser = reqparse.RequestParser()
args = parser.parse_args()
s = args.get('s')
img = create_qrcode_base64(s)
- return img
\ No newline at end of file
+ return img
+
+class Create_New_Key(Resource):
+
+ def post(self):
+ return create_new_key()
\ No newline at end of file
from app.model.signature import *
from app.model.edwards25519 import *
from app.model.utils import *
+from app.model import receiver
# create_key create 128 bits entropy
def create_entropy():
result = verify(xpub_to_public_key(xpub_str)['public_key'], signature_str, message_str)
return {
"result": result
- }
\ No newline at end of file
+ }
+
+
+def create_new_key():
+ entropy_str = create_entropy()['entropy']
+ mnemonic_str = entropy_to_mnemonic(entropy_str)['mnemonic']
+ seed_str = mnemonic_to_seed(mnemonic_str)['seed']
+ root_xprv_str = seed_to_root_xprv(seed_str)['root_xprv']
+ xpub_str = xprv_to_xpub(root_xprv_str)['xpub']
+ xprv_base64 = receiver.create_qrcode_base64(root_xprv_str)['base64']
+ return {
+ "entropy": entropy_str,
+ "mnemonic": mnemonic_str,
+ "seed": seed_str,
+ "xprv": root_xprv_str,
+ "xpub": xpub_str,
+ "xprv_base64": xprv_base64
+ }
+
$(function(){
+ // 生成新熵
$('#btnCreateNewKey').click(function(){
console.log('创建新密钥');
$.ajax({
method: 'post', //get or post
- url: 'http://127.0.0.1:5000/api/v1/create_entropy',
+ url: 'http://127.0.0.1:5000/api/v1/create_new_key',
data: {},
dataType: 'json',
}).done(function(data){
console.log(data);
layer.msg('创建成功')
+ $('#txtEntropy').val(data.entropy)
+ $('#txtMnemonics').val(data.mnemonic)
+ $('#txtSeed').val(data.seed)
+ $('#txtRootXprv').val(data.xprv)
+ $('#txtRootXpub').val(data.xpub)
}).fail(function(err){
layer.alert('创建失败' + err);
});
- appendKey({}, '#keyContainer'); // 创建成功后传入返回数据调用,此处示例
})
- // 创建脚本
- $('#btnCreateScript').click(function(){
- console.log('创建脚本');
- $.ajax({
- method: 'get', //get or post
- url: '/test',
- data: {},
- dataType: 'json',
- }).done(function(data){
- console.log(data);
- layer.msg('创建成功')
- }).fail(function(err){
- layer.alert('创建失败' + err);
- });
- appendKey({}, '#scriptContainer');
- })
- // 追加内容到页面
- function appendKey(data, domId) {
- var html = '<tr><td>xxxxxxxxxxxxxxxxx</td><td>xxxxxxxxxxxxxxx</td></tr>';
- $(domId).append(html);
- }
-
- // 发送
- $('#btnSendToSide').click(function(e){
- e.stopPropagation();
- e.preventDefault();
- var data = $('#formToSide').serializeArray();
- var obj = {};
- $.each(data, function () {
- obj[this.name] = this.value;
- });
- $.ajax({
- method: 'post',
- dataType: 'json',
- url: '',
- data: {data: JSON.stringify(obj)},
- }).done(function(res){
- console.log(res);
- }).fail(function(err) {
- layer.alert('err');
- });
+ // 清除熵
+ $('#btnReset').click(function(){
+ console.log('清除');
+ $('#txtEntropy').val('')
+ $('#txtMnemonics').val('')
+ $('#txtSeed').val('')
+ $('#txtRootXprv').val('')
+ $('#txtRootXpub').val('')
})
-});
\ No newline at end of file
+});
+++ /dev/null
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>Bytom Kit</title>
- <link rel="stylesheet" href="./node_modules/bootstrap/dist/css/bootstrap.min.css">
- <link rel="stylesheet" href="./assets/main.css">
- <script src="./node_modules/jquery/dist/jquery.min.js"></script>
- <script src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
- <script src="./node_modules/layer/layer.js"></script>
- <script src="./assets/main.js"></script>
-</head>
-
-<body>
- <nav class="navbar navbar-default">
- <div class="navbar-header">
- <a href="#" class="navbar-brand">Bytom Kit</a>
- </div>
- </nav>
- <div class="panel panel-default sc-bd">
- <div class="panel-heading">
- <h3 class="panel-title">Key </h3>
- </div>
- <div class="panel-body">
- <form class="form-horizontal">
- <!-- <div class="well well-sm">主网参数</div> -->
- <div class="form-group">
- <label class="col-sm-2 control-label">Entropy</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="entropy" placeholder="16 Bytes entropy, e.g. 1db8b283eb4623e749732a341396e0c9">
- </div>
- </div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <button id="btnCteateNewKey" type="submit" class="btn btn-primary">Create New Key</button>
- <button id="btnReset" type="submit" class="btn btn-primary">Reset</button>
- </div>
- </div>
- </form>
- </div>
- </div>
-</body>
-
-</html>
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>Bytom Kit</title>
+ <link rel="stylesheet" href="./node_modules/bootstrap/dist/css/bootstrap.min.css">
+ <link rel="stylesheet" href="./assets/main.css">
+ <script src="./node_modules/jquery/dist/jquery.min.js"></script>
+ <script src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
+ <script src="./node_modules/layer/layer.js"></script>
+ <script src="./assets/main.js"></script>
+</head>
+
+<body>
+ <nav class="navbar navbar-default">
+ <div class="navbar-header">
+ <a href="#" class="navbar-brand">Bytom Kit</a>
+ </div>
+ </nav>
+ <div class="panel panel-default sc-bd">
+ <div class="panel-heading">
+ <h3 class="panel-title">Key </h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal">
+ <!-- 熵 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Entropy</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtEntropy" placeholder="16 Bytes entropy, e.g. 58b39966f63d490314134c0f583018db">
+ </div>
+ </div>
+ <!-- 助记词 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Mnemonics</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtMnemonics" placeholder="12 mnemonics, e.g. flavor orphan fluid unaware stand light expect hat aunt screen alert response">
+ </div>
+ </div>
+ <!-- 种子 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Seed</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtSeed" placeholder="64 Bytes seed, e.g. ba87798bdf2def688ecfdae52b039ce1c9b05881d762e64a6a3a9e9472bdf1381e7517fcbb9c92ca666edb4f22a58be4883f133736634da09e7b389a3de6f1d1">
+ </div>
+ </div>
+ <!-- 根扩展私钥 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Root Expanded Private Key</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtRootXprv" placeholder="64 Bytes root expanded private key, e.g. 20c96e3a582684c4bffc71be0c8aa06b8948a65bdf7cfac4533f9e07c98afc47c976554fbd99c9f63c7fcefb089f65c5db6a1af4429600384b1d9f2751cef942">
+ </div>
+ </div>
+ <!-- 根扩展公钥 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Root Expanded Public Key</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtRootXpub" placeholder="64 Bytes root expanded public key, e.g. 8680afdf7c21f5315d6a40183653c8def35679f8bae870687bc786df54317863c976554fbd99c9f63c7fcefb089f65c5db6a1af4429600384b1d9f2751cef942">
+ </div>
+ </div>
+ <!-- 根扩展私钥二维码
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Root Expanded Public Key</label>
+ <div class="col-sm-10">
+ <input type="img" class="form-control" id="" placeholder="64 Bytes root expanded public key, e.g. afa3a86bbec2f40bb32833fc6324593824c4fc7821ed32eac1f762b5893e56745f66a6c6f2588b3d627680aa4e0e50efd25065097b3daa8c6a19d606838fe7d4">
+ </div>
+ </div> -->
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <a id="btnCreateNewKey" class="btn btn-primary">Create New Key</a>
+ <a id="btnReset" class="btn btn-primary">Reset</a>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+</body>
+
+</html>
\ No newline at end of file