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
17cf0e58
Unverified
Commit
17cf0e58
authored
5 years ago
by
Péter Szilágyi
Committed by
GitHub
5 years ago
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #19524 from gballet/scwallet-puk-count
accounts/scwallet: Display PUK retry count
parents
fc85777a
7bc1cb36
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
18 additions
and
9 deletions
+18
-9
wallet.go
accounts/scwallet/wallet.go
+18
-9
No files found.
accounts/scwallet/wallet.go
View file @
17cf0e58
...
...
@@ -27,6 +27,7 @@ import (
"errors"
"fmt"
"math/big"
"regexp"
"sort"
"strings"
"sync"
...
...
@@ -310,8 +311,10 @@ func (w *Wallet) Status() (string, error) {
return
fmt
.
Sprintf
(
"Failed: %v"
,
err
),
err
}
switch
{
case
!
w
.
session
.
verified
&&
status
.
PinRetryCount
==
0
&&
status
.
PukRetryCount
==
0
:
return
fmt
.
Sprintf
(
"Bricked, waiting for full wipe"
),
nil
case
!
w
.
session
.
verified
&&
status
.
PinRetryCount
==
0
:
return
fmt
.
Sprintf
(
"Blocked, waiting for PUK
and new PIN"
),
nil
return
fmt
.
Sprintf
(
"Blocked, waiting for PUK
(%d attempts left) and new PIN"
,
status
.
PukRetryCount
),
nil
case
!
w
.
session
.
verified
:
return
fmt
.
Sprintf
(
"Locked, waiting for PIN (%d attempts left)"
,
status
.
PinRetryCount
),
nil
case
!
status
.
Initialized
:
...
...
@@ -377,10 +380,18 @@ func (w *Wallet) Open(passphrase string) error {
case
passphrase
==
""
:
return
ErrPINUnblockNeeded
case
status
.
PinRetryCount
>
0
:
if
!
regexp
.
MustCompile
(
`^[0-9]{6,}$`
)
.
MatchString
(
passphrase
)
{
w
.
log
.
Error
(
"PIN needs to be at least 6 digits"
)
return
ErrPINNeeded
}
if
err
:=
w
.
session
.
verifyPin
([]
byte
(
passphrase
));
err
!=
nil
{
return
err
}
default
:
if
!
regexp
.
MustCompile
(
`^[0-9]{12,}$`
)
.
MatchString
(
passphrase
)
{
w
.
log
.
Error
(
"PUK needs to be at least 12 digits"
)
return
ErrPINUnblockNeeded
}
if
err
:=
w
.
session
.
unblockPin
([]
byte
(
passphrase
));
err
!=
nil
{
return
err
}
...
...
@@ -971,12 +982,10 @@ func (s *Session) derive(path accounts.DerivationPath) (accounts.Account, error)
copy
(
sig
[
32
-
len
(
rbytes
)
:
32
],
rbytes
)
copy
(
sig
[
64
-
len
(
sbytes
)
:
64
],
sbytes
)
pubkey
,
err
:=
determinePublicKey
(
sig
,
sigdata
.
PublicKey
)
if
err
!=
nil
{
if
err
:=
confirmPublicKey
(
sig
,
sigdata
.
PublicKey
);
err
!=
nil
{
return
accounts
.
Account
{},
err
}
pub
,
err
:=
crypto
.
UnmarshalPubkey
(
pubkey
)
pub
,
err
:=
crypto
.
UnmarshalPubkey
(
sigdata
.
PublicKey
)
if
err
!=
nil
{
return
accounts
.
Account
{},
err
}
...
...
@@ -1046,10 +1055,10 @@ func (s *Session) sign(path accounts.DerivationPath, hash []byte) ([]byte, error
return
sig
,
nil
}
//
determinePublicKey uses a signature and the X component of a public key to
// recover the entire public key.
func
determinePublicKey
(
sig
,
pubkeyX
[]
byte
)
([]
byte
,
error
)
{
return
makeRecoverableSignature
(
DerivationSignatureHash
[
:
],
sig
,
pubkeyX
)
//
confirmPublicKey confirms that the given signature belongs to the specified key.
func
confirmPublicKey
(
sig
,
pubkey
[]
byte
)
error
{
_
,
err
:=
makeRecoverableSignature
(
DerivationSignatureHash
[
:
],
sig
,
pubkey
)
return
err
}
// makeRecoverableSignature uses a signature and an expected public key to
...
...
This diff is collapsed.
Click to expand it.
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