Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
df878838
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
df878838
编写于
2月 04, 2018
作者:
D
Daniel Larimer
提交者:
GitHub
2月 04, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1299 from EOSIO/dan
add more crypto apis to wasm interface
上级
103c6901
fe10d802
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
0 deletion
+49
-0
libraries/chain/wasm_interface.cpp
libraries/chain/wasm_interface.cpp
+49
-0
未找到文件。
libraries/chain/wasm_interface.cpp
浏览文件 @
df878838
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include <boost/core/ignore_unused.hpp>
#include <boost/core/ignore_unused.hpp>
#include <eosio/chain/wasm_interface_private.hpp>
#include <eosio/chain/wasm_interface_private.hpp>
#include <fc/exception/exception.hpp>
#include <fc/exception/exception.hpp>
#include <fc/crypto/sha1.hpp>
#include <fc/io/raw.hpp>
#include <fc/io/raw.hpp>
#include <fc/utf8.hpp>
#include <fc/utf8.hpp>
...
@@ -534,14 +535,57 @@ class crypto_api : public context_aware_api {
...
@@ -534,14 +535,57 @@ class crypto_api : public context_aware_api {
public:
public:
using
context_aware_api
::
context_aware_api
;
using
context_aware_api
::
context_aware_api
;
/**
* This method can be optimized out during replay as it has
* no possible side effects other than "passing".
*/
void
assert_recover_key
(
fc
::
sha256
&
digest
,
array_ptr
<
char
>
sig
,
size_t
siglen
,
array_ptr
<
char
>
pub
,
size_t
publen
)
{
fc
::
crypto
::
signature
s
;
fc
::
crypto
::
public_key
p
;
datastream
<
const
char
*>
ds
(
sig
,
siglen
);
datastream
<
const
char
*>
pubds
(
pub
,
publen
);
fc
::
raw
::
unpack
(
ds
,
s
);
fc
::
raw
::
unpack
(
ds
,
p
);
auto
check
=
fc
::
crypto
::
public_key
(
s
,
digest
,
false
);
FC_ASSERT
(
check
==
p
,
"Error expected key different than recovered key"
);
}
int
recover_key
(
fc
::
sha256
&
digest
,
array_ptr
<
char
>
sig
,
size_t
siglen
,
array_ptr
<
char
>
pub
,
size_t
publen
)
{
fc
::
crypto
::
signature
s
;
datastream
<
const
char
*>
ds
(
sig
,
siglen
);
datastream
<
char
*>
pubds
(
pub
,
publen
);
fc
::
raw
::
unpack
(
ds
,
s
);
fc
::
raw
::
pack
(
pubds
,
fc
::
crypto
::
public_key
(
s
,
digest
,
false
)
);
return
pubds
.
tellp
();
}
void
assert_sha256
(
array_ptr
<
char
>
data
,
size_t
datalen
,
const
fc
::
sha256
&
hash_val
)
{
void
assert_sha256
(
array_ptr
<
char
>
data
,
size_t
datalen
,
const
fc
::
sha256
&
hash_val
)
{
auto
result
=
fc
::
sha256
::
hash
(
data
,
datalen
);
auto
result
=
fc
::
sha256
::
hash
(
data
,
datalen
);
FC_ASSERT
(
result
==
hash_val
,
"hash miss match"
);
FC_ASSERT
(
result
==
hash_val
,
"hash miss match"
);
}
}
void
sha1
(
array_ptr
<
char
>
data
,
size_t
datalen
,
fc
::
sha1
&
hash_val
)
{
hash_val
=
fc
::
sha1
::
hash
(
data
,
datalen
);
}
void
sha256
(
array_ptr
<
char
>
data
,
size_t
datalen
,
fc
::
sha256
&
hash_val
)
{
void
sha256
(
array_ptr
<
char
>
data
,
size_t
datalen
,
fc
::
sha256
&
hash_val
)
{
hash_val
=
fc
::
sha256
::
hash
(
data
,
datalen
);
hash_val
=
fc
::
sha256
::
hash
(
data
,
datalen
);
}
}
void
sha512
(
array_ptr
<
char
>
data
,
size_t
datalen
,
fc
::
sha512
&
hash_val
)
{
hash_val
=
fc
::
sha512
::
hash
(
data
,
datalen
);
}
void
ripemd160
(
array_ptr
<
char
>
data
,
size_t
datalen
,
fc
::
ripemd160
&
hash_val
)
{
hash_val
=
fc
::
ripemd160
::
hash
(
data
,
datalen
);
}
};
};
class
string_api
:
public
context_aware_api
{
class
string_api
:
public
context_aware_api
{
...
@@ -862,8 +906,13 @@ REGISTER_INTRINSICS(producer_api,
...
@@ -862,8 +906,13 @@ REGISTER_INTRINSICS(producer_api,
);
);
REGISTER_INTRINSICS
(
crypto_api
,
REGISTER_INTRINSICS
(
crypto_api
,
(
assert_recover_key
,
void
(
int
,
int
,
int
,
int
,
int
))
(
recover_key
,
int
(
int
,
int
,
int
,
int
,
int
))
(
assert_sha256
,
void
(
int
,
int
,
int
))
(
assert_sha256
,
void
(
int
,
int
,
int
))
(
sha1
,
void
(
int
,
int
,
int
))
(
sha256
,
void
(
int
,
int
,
int
))
(
sha256
,
void
(
int
,
int
,
int
))
(
sha512
,
void
(
int
,
int
,
int
))
(
ripemd160
,
void
(
int
,
int
,
int
))
);
);
REGISTER_INTRINSICS
(
string_api
,
REGISTER_INTRINSICS
(
string_api
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录