WIP: FrostFS crypto library
Find a file
fyrchik d29d7f9c3e
Fix tests on go1.19 (#16)
* [#15] ecdsa: Fix signature marshaling with go1.19

Signed-off-by: Evgenii Stratonikov <stratonikov@runbox.com>

* [#15] go.mod: Update go version to 1.16

Signed-off-by: Evgenii Stratonikov <stratonikov@runbox.com>

* [#15] go.mod: Drop `pkg/errors` dependency

Signed-off-by: Evgenii Stratonikov <stratonikov@runbox.com>

* [#15] *: Perform `goimports -w`

Signed-off-by: Evgenii Stratonikov <stratonikov@runbox.com>

Signed-off-by: Evgenii Stratonikov <stratonikov@runbox.com>
Co-authored-by: Evgenii Stratonikov <stratonikov@runbox.com>
2022-08-15 14:49:39 +03:00
internal initial 2019-10-22 17:40:05 +03:00
test initial 2019-10-22 17:40:05 +03:00
ecdsa.go Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00
ecdsa_test.go Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00
go.mod Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00
go.sum Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00
LICENSE initial 2019-10-22 17:40:05 +03:00
load.go Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00
load_test.go Add method to load PrivateKey 2019-11-21 17:24:36 +03:00
README.md doc: Fix RFC6979 signature size in readme file 2020-03-02 13:38:38 +03:00
rfc6979.go Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00
rfc6979_test.go Allow to use hash in Sign*/Verify* 2021-03-23 13:11:42 +03:00
wif.go Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00
wif_test.go Fix tests on go1.19 (#16) 2022-08-15 14:49:39 +03:00

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)