Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
6826c74f
提交
6826c74f
authored
9月 06, 2017
作者:
Jeromy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
WIP: add support for ed25519 key embedded identities
License: MIT Signed-off-by:
Jeromy
<
jeromyj@gmail.com
>
上级
a1843a53
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
51 行增加
和
5 行删除
+51
-5
init.go
cmd/ipfs/init.go
+14
-2
core.go
core/core.go
+23
-2
init.go
repo/config/init.go
+14
-1
没有找到文件。
cmd/ipfs/init.go
浏览文件 @
6826c74f
...
...
@@ -24,6 +24,7 @@ import (
const
(
nBitsForKeypairDefault
=
2048
keypairTypeDefault
=
ci
.
RSA
keypairTypeStrDefault
=
"rsa"
)
var
initCmd
=
&
cmds
.
Command
{
...
...
@@ -53,7 +54,7 @@ environment variable:
},
Options
:
[]
cmds
.
Option
{
cmds
.
IntOption
(
"bits"
,
"b"
,
"Number of bits to use in the generated RSA private key."
)
.
Default
(
nBitsForKeypairDefault
),
cmds
.
IntOption
(
"key-type"
,
"k"
,
"Key type (RSA or Ed25519-id)"
)
.
Default
(
keypairType
Default
),
cmds
.
StringOption
(
"key-type"
,
"k"
,
"Key type (RSA or Ed25519-id)"
)
.
Default
(
keypairTypeStr
Default
),
cmds
.
BoolOption
(
"empty-repo"
,
"e"
,
"Don't add and pin help files to the local storage."
)
.
Default
(
false
),
cmds
.
StringOption
(
"profile"
,
"p"
,
"Apply profile settings to config. Multiple profiles can be separated by ','"
),
...
...
@@ -95,12 +96,23 @@ environment variable:
return
}
keyType
,
_
,
err
:=
req
.
Option
(
"key-type"
)
.
Int
()
keyType
Str
,
_
,
err
:=
req
.
Option
(
"key-type"
)
.
String
()
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
var
keyType
int
switch
keyTypeStr
{
case
"rsa"
:
keyType
=
ci
.
RSA
case
"ed25519"
:
keyType
=
ci
.
Ed25519
default
:
res
.
SetError
(
fmt
.
Errorf
(
"unrecognized key-type: %s"
,
keyTypeStr
),
cmds
.
ErrNormal
)
return
}
var
conf
*
config
.
Config
f
:=
req
.
Files
()
...
...
core/core.go
浏览文件 @
6826c74f
...
...
@@ -56,6 +56,7 @@ import (
logging
"gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
b58
"gx/ipfs/QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf/go-base58"
floodsub
"gx/ipfs/QmTm7GoSkSSQPP32bZhvu17oY1AfvPKND6ELUdYAcKuR1j/floodsub"
mh
"gx/ipfs/QmU9a9NV9RdPNwZQDYd5uKsm6N6LJLSvLbywDDYFbaaC6P/go-multihash"
p2phost
"gx/ipfs/QmUwW8jMQDxXhLD2j4EfWqLEMX3MsvyWcWGvJPVDh1aTmu/go-libp2p-host"
addrutil
"gx/ipfs/QmVJGsPeK3vwtEyyTxpCs47yjBYMmYsAhEouPDF3Gb2eK3/go-addr-util"
ds
"gx/ipfs/QmVSase1JP7cq9QkPT46oNwdp9pT6kBkG3oqS14y3QcZjG/go-datastore"
...
...
@@ -759,9 +760,29 @@ func loadPrivateKey(cfg *config.Identity, id peer.ID) (ic.PrivKey, error) {
return
nil
,
err
}
id2
,
err
:=
peer
.
IDFromPrivateKey
(
sk
)
decmh
,
err
:=
mh
.
Decode
([]
byte
(
id
)
)
if
err
!=
nil
{
return
nil
,
err
return
nil
,
fmt
.
Errorf
(
"id was not a valid multihash"
)
}
// TODO: this isnt very elegant. Formalize how we want to do this
var
id2
peer
.
ID
switch
decmh
.
Code
{
case
mh
.
ID
:
if
_
,
ok
:=
sk
.
(
*
ic
.
Ed25519PrivateKey
);
!
ok
{
return
nil
,
fmt
.
Errorf
(
"key embedded peer IDs are only supported for ed25519"
)
}
id2
,
err
=
peer
.
IDFromEd25519PublicKey
(
sk
.
GetPublic
())
if
err
!=
nil
{
return
nil
,
err
}
case
mh
.
SHA2_256
:
id2
,
err
=
peer
.
IDFromPrivateKey
(
sk
)
if
err
!=
nil
{
return
nil
,
err
}
default
:
return
nil
,
fmt
.
Errorf
(
"unsupported peer ID hash: %q"
,
mh
.
Codes
[
decmh
.
Code
])
}
if
id2
!=
id
{
...
...
repo/config/init.go
浏览文件 @
6826c74f
...
...
@@ -126,6 +126,8 @@ func identityConfig(out io.Writer, nbits, keyType int) (Identity, error) {
fmt
.
Fprintf
(
out
,
"generating %v-bit RSA keypair..."
,
nbits
)
case
ci
.
Ed25519
:
fmt
.
Fprintf
(
out
,
"generating Ed25519 keypair..."
)
default
:
return
ident
,
fmt
.
Errorf
(
"unrecognized keyType: %d"
,
keyType
)
}
sk
,
pk
,
err
:=
ci
.
GenerateKeyPair
(
keyType
,
nbits
)
...
...
@@ -142,11 +144,22 @@ func identityConfig(out io.Writer, nbits, keyType int) (Identity, error) {
}
ident
.
PrivKey
=
base64
.
StdEncoding
.
EncodeToString
(
skbytes
)
id
,
err
:=
peer
.
IDFromPublicKey
(
pk
)
kf
:=
peer
.
IDFromPublicKey
switch
keyType
{
case
ci
.
RSA
:
kf
=
peer
.
IDFromPublicKey
case
ci
.
Ed25519
:
kf
=
peer
.
IDFromEd25519PublicKey
default
:
return
ident
,
fmt
.
Errorf
(
"unrecognized keyType: %d"
,
keyType
)
}
id
,
err
:=
kf
(
pk
)
if
err
!=
nil
{
return
ident
,
err
}
ident
.
PeerID
=
id
.
Pretty
()
fmt
.
Fprintf
(
out
,
"peer identity: %s
\n
"
,
ident
.
PeerID
)
return
ident
,
nil
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论