session: replace PToken structure with PrivateToken interface
In previous implementation PToken contained the full Token structure. Since private token is used for data signature only, storing unused fields of a user token is impractical. To emphasize the purpose of the private part of the session, it makes sense to provide the user of the session package with its interface. The interface will only provide the functionality of data signing with private session key. This commit: * removes PToken structure from session package; * defines PrivateToken interface of private session part; * adds the implementation of PrivateToken on unexported struct; * provides the constructor that generates session key internally.
This commit is contained in:
parent
1e86e1112a
commit
dfc2dd8a78
5 changed files with 90 additions and 28 deletions
37
session/private.go
Normal file
37
session/private.go
Normal file
|
@ -0,0 +1,37 @@
|
|||
package session
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"crypto/rand"
|
||||
|
||||
crypto "github.com/nspcc-dev/neofs-crypto"
|
||||
)
|
||||
|
||||
type pToken struct {
|
||||
// private session token
|
||||
sessionKey *ecdsa.PrivateKey
|
||||
}
|
||||
|
||||
// NewSessionPrivateToken creates PrivateToken instance.
|
||||
//
|
||||
// Returns non-nil error on key generation error.
|
||||
func NewPrivateToken() (PrivateToken, error) {
|
||||
sk, err := ecdsa.GenerateKey(defaultCurve(), rand.Reader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pToken{
|
||||
sessionKey: sk,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Sign signs data with session private key.
|
||||
func (t *pToken) Sign(data []byte) ([]byte, error) {
|
||||
return crypto.Sign(t.sessionKey, data)
|
||||
}
|
||||
|
||||
// PublicKey returns a binary representation of the session public key.
|
||||
func (t *pToken) PublicKey() []byte {
|
||||
return crypto.MarshalPublicKey(&t.sessionKey.PublicKey)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue