Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
61c5edcb
Commit
61c5edcb
authored
Mar 29, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup.
parent
af153e78
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
19 deletions
+20
-19
address.go
core/vm/address.go
+13
-10
crypto.go
crypto/crypto.go
+7
-9
No files found.
core/vm/address.go
View file @
61c5edcb
...
@@ -61,27 +61,30 @@ func ripemd160Func(in []byte) []byte {
...
@@ -61,27 +61,30 @@ func ripemd160Func(in []byte) []byte {
return
common
.
LeftPadBytes
(
crypto
.
Ripemd160
(
in
),
32
)
return
common
.
LeftPadBytes
(
crypto
.
Ripemd160
(
in
),
32
)
}
}
const
E
cRecoverInputLength
=
128
const
e
cRecoverInputLength
=
128
func
ecrecoverFunc
(
in
[]
byte
)
[]
byte
{
func
ecrecoverFunc
(
in
[]
byte
)
[]
byte
{
// "in" is (hash, v, r, s), each 32 bytes
// "in" is (hash, v, r, s), each 32 bytes
// but for ecrecover we want (r, s, v)
// but for ecrecover we want (r, s, v)
if
len
(
in
)
<
E
cRecoverInputLength
{
if
len
(
in
)
<
e
cRecoverInputLength
{
return
nil
return
nil
}
}
hash
:=
in
[
:
32
]
//
v is only a bit, but comes as 32 bytes from vm. We only need least significant byte
//
Treat V as a 256bit integer
encodedV
:=
in
[
32
:
64
]
v
:=
new
(
big
.
Int
)
.
Sub
(
common
.
Bytes2Big
(
in
[
32
:
64
]),
big
.
NewInt
(
27
))
v
:=
encodedV
[
31
]
-
27
// Ethereum requires V to be either 0 or 1 => (27 || 28)
if
!
(
v
==
0
||
v
==
1
)
{
if
!
(
v
.
Cmp
(
Zero
)
==
0
||
v
.
Cmp
(
One
)
==
0
)
{
return
nil
return
nil
}
}
sig
:=
append
(
in
[
64
:
],
v
)
pubKey
:=
crypto
.
Ecrecover
(
append
(
hash
,
sig
...
))
// v needs to be moved to the end
// secp256.go returns either nil or 65 bytes
rsv
:=
append
(
in
[
64
:
128
],
byte
(
v
.
Uint64
()))
pubKey
:=
crypto
.
Ecrecover
(
in
[
:
32
],
rsv
)
// make sure the public key is a valid one
if
pubKey
==
nil
||
len
(
pubKey
)
!=
65
{
if
pubKey
==
nil
||
len
(
pubKey
)
!=
65
{
return
nil
return
nil
}
}
// the first byte of pubkey is bitcoin heritage
// the first byte of pubkey is bitcoin heritage
return
common
.
LeftPadBytes
(
crypto
.
Sha3
(
pubKey
[
1
:
])[
12
:
],
32
)
return
common
.
LeftPadBytes
(
crypto
.
Sha3
(
pubKey
[
1
:
])[
12
:
],
32
)
}
}
...
...
crypto/crypto.go
View file @
61c5edcb
...
@@ -68,13 +68,8 @@ func Ripemd160(data []byte) []byte {
...
@@ -68,13 +68,8 @@ func Ripemd160(data []byte) []byte {
return
ripemd
.
Sum
(
nil
)
return
ripemd
.
Sum
(
nil
)
}
}
func
Ecrecover
(
data
[]
byte
)
[]
byte
{
func
Ecrecover
(
hash
,
sig
[]
byte
)
[]
byte
{
var
in
=
struct
{
r
,
_
:=
secp256k1
.
RecoverPubkey
(
hash
,
sig
)
hash
[]
byte
sig
[]
byte
}{
data
[
:
32
],
data
[
32
:
]}
r
,
_
:=
secp256k1
.
RecoverPubkey
(
in
.
hash
,
in
.
sig
)
return
r
return
r
}
}
...
@@ -151,9 +146,12 @@ func GenerateKey() (*ecdsa.PrivateKey, error) {
...
@@ -151,9 +146,12 @@ func GenerateKey() (*ecdsa.PrivateKey, error) {
}
}
func
SigToPub
(
hash
,
sig
[]
byte
)
*
ecdsa
.
PublicKey
{
func
SigToPub
(
hash
,
sig
[]
byte
)
*
ecdsa
.
PublicKey
{
s
:=
Ecrecover
(
append
(
hash
,
sig
...
))
s
:=
Ecrecover
(
hash
,
sig
)
x
,
y
:=
elliptic
.
Unmarshal
(
S256
(),
s
)
if
s
==
nil
||
len
(
s
)
!=
65
{
return
nil
}
x
,
y
:=
elliptic
.
Unmarshal
(
S256
(),
s
)
return
&
ecdsa
.
PublicKey
{
S256
(),
x
,
y
}
return
&
ecdsa
.
PublicKey
{
S256
(),
x
,
y
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment