mirror of
https://github.com/btcsuite/btcd.git
synced 2025-02-23 14:40:44 +01:00
In this commit, we add an initial implementation of BIP-340. Mirroring the recently added `ecsda` package, we create a new `schnorr` package with a unique `Signature` type and `ParsePubkey` function. The new `Signature` type implements the fixed-sized 64-byte signatures, and the `ParsePubkey` method only accepts pubkeys that are 32-bytes in length, with an implicit sign byte. The signing implementation by default, deviates from BIP-340 as it opts to use rfc6979 deterministic signatures by default, which means callers don't need to always pass in their own `auxNonce` randomness. A set of functional arguments allows callers to pass in their own value, which is the way all the included test vectors function. The other optional functional argument added is the `FastSign` option that allows callers to skip the final step of verifying each signature they generate.
25 lines
942 B
Go
25 lines
942 B
Go
// Copyright (c) 2013-2017 The btcsuite developers
|
|
// Copyright (c) 2015-2021 The Decred developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package schnorr
|
|
|
|
import (
|
|
ecdsa_schnorr "github.com/decred/dcrd/dcrec/secp256k1/v4/schnorr"
|
|
)
|
|
|
|
// ErrorKind identifies a kind of error. It has full support for errors.Is
|
|
// and errors.As, so the caller can directly check against an error kind
|
|
// when determining the reason for an error.
|
|
type ErrorKind = ecdsa_schnorr.ErrorKind
|
|
|
|
// Error identifies an error related to a schnorr signature. It has full
|
|
// support for errors.Is and errors.As, so the caller can ascertain the
|
|
// specific reason for the error by checking the underlying error.
|
|
type Error = ecdsa_schnorr.Error
|
|
|
|
// signatureError creates an Error given a set of arguments.
|
|
func signatureError(kind ErrorKind, desc string) Error {
|
|
return Error{Err: kind, Description: desc}
|
|
}
|