Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
fdb936ee
G
go-ethereum
项目概览
whqwjb
/
go-ethereum
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
go-ethereum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fdb936ee
编写于
2月 09, 2016
作者:
F
Felix Lange
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
crypto/ecies: make authenticated shared data work
The s2 parameter was not actually written to the MAC.
上级
b05e472c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
36 addition
and
6 deletion
+36
-6
crypto/ecies/ecies.go
crypto/ecies/ecies.go
+6
-6
crypto/ecies/ecies_test.go
crypto/ecies/ecies_test.go
+30
-0
未找到文件。
crypto/ecies/ecies.go
浏览文件 @
fdb936ee
...
...
@@ -192,11 +192,9 @@ func concatKDF(hash hash.Hash, z, s1 []byte, kdLen int) (k []byte, err error) {
// messageTag computes the MAC of a message (called the tag) as per
// SEC 1, 3.5.
func
messageTag
(
hash
func
()
hash
.
Hash
,
km
,
msg
,
shared
[]
byte
)
[]
byte
{
if
shared
==
nil
{
shared
=
make
([]
byte
,
0
)
}
mac
:=
hmac
.
New
(
hash
,
km
)
mac
.
Write
(
msg
)
mac
.
Write
(
shared
)
tag
:=
mac
.
Sum
(
nil
)
return
tag
}
...
...
@@ -243,9 +241,11 @@ func symDecrypt(rand io.Reader, params *ECIESParams, key, ct []byte) (m []byte,
return
}
// Encrypt encrypts a message using ECIES as specified in SEC 1, 5.1. If
// the shared information parameters aren't being used, they should be
// nil.
// Encrypt encrypts a message using ECIES as specified in SEC 1, 5.1.
//
// s1 and s2 contain shared information that is not part of the resulting
// ciphertext. s1 is fed into key derivation, s2 is fed into the MAC. If the
// shared information parameters aren't being used, they should be nil.
func
Encrypt
(
rand
io
.
Reader
,
pub
*
PublicKey
,
m
,
s1
,
s2
[]
byte
)
(
ct
[]
byte
,
err
error
)
{
params
:=
pub
.
Params
if
params
==
nil
{
...
...
crypto/ecies/ecies_test.go
浏览文件 @
fdb936ee
...
...
@@ -408,6 +408,36 @@ func TestEncryptDecrypt(t *testing.T) {
}
}
func
TestDecryptShared2
(
t
*
testing
.
T
)
{
prv
,
err
:=
GenerateKey
(
rand
.
Reader
,
DefaultCurve
,
nil
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
message
:=
[]
byte
(
"Hello, world."
)
shared2
:=
[]
byte
(
"shared data 2"
)
ct
,
err
:=
Encrypt
(
rand
.
Reader
,
&
prv
.
PublicKey
,
message
,
nil
,
shared2
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
// Check that decrypting with correct shared data works.
pt
,
err
:=
prv
.
Decrypt
(
rand
.
Reader
,
ct
,
nil
,
shared2
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
bytes
.
Equal
(
pt
,
message
)
{
t
.
Fatal
(
"ecies: plaintext doesn't match message"
)
}
// Decrypting without shared data or incorrect shared data fails.
if
_
,
err
=
prv
.
Decrypt
(
rand
.
Reader
,
ct
,
nil
,
nil
);
err
==
nil
{
t
.
Fatal
(
"ecies: decrypting without shared data didn't fail"
)
}
if
_
,
err
=
prv
.
Decrypt
(
rand
.
Reader
,
ct
,
nil
,
[]
byte
(
"garbage"
));
err
==
nil
{
t
.
Fatal
(
"ecies: decrypting with incorrect shared data didn't fail"
)
}
}
// TestMarshalEncryption validates the encode/decode produces a valid
// ECIES encryption key.
func
TestMarshalEncryption
(
t
*
testing
.
T
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录