forked from TrueCloudLab/frostfs-crypto
WIP: FrostFS crypto library
e9d1b1884c
- use elliptic.MarshalCompressed - use elliptic.UnmarshalCompressed - for older go versions use old methods - update dependencies - github.com/mr-tron/base58 v1.2.0 - github.com/pkg/errors v0.9.1 - github.com/stretchr/testify v1.7.0 Signed-off-by: Evgeniy Kulikov <kim@nspcc.ru> |
||
---|---|---|
internal | ||
test | ||
ecdsa.go | ||
ecdsa_go1.15.go | ||
ecdsa_older_go.go | ||
ecdsa_older_go_test.go | ||
ecdsa_test.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
load.go | ||
load_test.go | ||
README.md | ||
rfc6979.go | ||
rfc6979_test.go | ||
wif.go | ||
wif_test.go |
NeoFS Crypto library
This package contains useful methods to work with crypto-primitives, that used in NeoFS / NeoBlockchain.
Examples
Simple Marshal / Unmarshal ECDSA public key (PK):
// returns slice of 33 bytes marshaled public key
data := crypto.MarshalPublicKey(&sk.PublicKey)
// returns public key decoded from 33 bytes
pk := crypto.UnmarshalPublicKey(data)
Simple Marshal / Unmarshal ECDSA private key (SK):
// returns slice of 32 bytes marshaled private key
data := crypto.MarshalPrivateKey(&sk)
// returns private key decoded from 32 bytes or error,
// if something whet wrong
newSk, err := crypto.UnmarshalPrivateKey(data)
ECDSA Sign / Verify bytes using PK / SK
// Sign returns signature (slice of 65 bytes) of SK for passed message (slice of bytes),
// or error, if something went wrong:
signature, err := crypto.Sign(sk, message)
// Verify returns error message if PK is empty or
// passed wrong signature (slice of 65 bytes) for message (slice of bytes),
err := crypto.Verify(&sk.PublicKey, signature, message)
RFC6979 Sign / Verify bytes using PK / SK
// Sign returns signature (slice of 64 bytes) of SK for passed message (slice of bytes),
// or error, if something went wrong:
signature, err := crypto.SignRFC6979(sk, message)
// Verify returns error message if PK is empty or
// passed wrong signature (slice of 64 bytes) for message (slice of bytes),
err := crypto.VerifyRFC6979(&sk.PublicKey, signature, message)
WIF Encode / Decode private key (SK)
// WIFEncode encodes the given private key into a WIF string.
// if sk or sk.D is empty, returns error
wif, err := crypto.WIFEncode(sk)
// WIFDecode decoded the given WIF string into a private key.
// if something went wrong, returns error:
skFromWIF, err := crypto.WIFDecode(wif)
LoadPrivateKey
// Load private key from wif format
sk, err := crypto.LoadPrivateKey(wif_string)
// Load private key from hex string
sk, err := crypto.LoadPrivateKey(hex_string)
// Load private key from file
sk, err := crypto.LoadPrivateKey(file_path)