func XPubKeys(xpubs []vcrypto.XPubKeyer) []crypto.PublicKey {
res := make([]crypto.PublicKey, 0, len(xpubs))
for _, xpub := range xpubs {
- res = append(res, xpub.PublicKey())
+ switch xpb := xpub.(type) {
+ case edchainkd.XPub:
+ res = append(res, xpb.PublicKey())
+ }
}
return res
}
func DeriveXPubs(xpubs []vcrypto.XPubKeyer, path [][]byte) []vcrypto.XPubKeyer {
res := make([]vcrypto.XPubKeyer, 0, len(xpubs))
for _, xpub := range xpubs {
- d := xpub.Derive(path)
- res = append(res, d)
+ switch xpb := xpub.(type) {
+ case edchainkd.XPub:
+ d := xpb.Derive(path)
+ res = append(res, d)
+ }
}
return res
}
package chainkd
import (
- "crypto"
"crypto/hmac"
"crypto/rand"
"crypto/sha512"
// Verify checks an EdDSA signature using public key
// extracted from the first 32 bytes of the xpub.
func (xpub XPub) Verify(msg []byte, sig []byte) bool {
- publicKey := xpub.PublicKey()
- if pk, ok := publicKey.(ed25519.PublicKey); ok {
- return ed25519.Verify(pk, msg, sig)
- }
- return false
+ return ed25519.Verify(xpub.PublicKey(), msg, sig)
}
// ExpandedPrivateKey generates a 64-byte key where
}
// PublicKey extracts the ed25519 public key from an xpub.
-func (xpub XPub) PublicKey() crypto.PublicKey {
+func (xpub XPub) PublicKey() ed25519.PublicKey {
return ed25519.PublicKey(xpub[:32])
}
func XPubKeys(xpubs []XPub) []ed25519.PublicKey {
res := make([]ed25519.PublicKey, 0, len(xpubs))
for _, xpub := range xpubs {
- publicKey := xpub.PublicKey()
- if pk, ok := publicKey.(ed25519.PublicKey); ok {
- res = append(res, pk)
- }
+ res = append(res, xpub.PublicKey())
}
return res
}
package crypto
-import (
- "crypto"
-)
-
// var currentCrypt XXXXX
// var (
// currentCrypt = currentCrypto[config。?????]
// }
-type XPrvKeyer interface {
- // XPub derives an extended public key from a given xprv.
- XPub() XPubKeyer
- // Derive generates a child xprv by recursively deriving
- // non-hardened child xprvs over the list of selectors:
- // `Derive([a,b,c,...]) == Child(a).Child(b).Child(c)...`
- Derive(path [][]byte) XPrvKeyer
- // Sign creates an EdDSA signature using expanded private key
- // derived from the xprv.
- Sign(msg []byte) []byte
-}
+type XPrvKeyer interface{}
+
+type XPubKeyer interface{}
-type XPubKeyer interface {
- // PublicKey extracts the public key from an xpub.
- PublicKey() crypto.PublicKey
- // Derive generates a child xpub by recursively deriving
- // non-hardened child xpubs over the list of selectors:
- // `Derive([a,b,c,...]) == Child(a).Child(b).Child(c)...`
- Derive(path [][]byte) XPubKeyer
- // Verify checks an EdDSA signature using public key
- Verify(msg []byte, sig []byte) bool
-}
+// type XPrvKeyer interface {
+// // XPub derives an extended public key from a given xprv.
+// XPub() XPubKeyer
+// // Derive generates a child xprv by recursively deriving
+// // non-hardened child xprvs over the list of selectors:
+// // `Derive([a,b,c,...]) == Child(a).Child(b).Child(c)...`
+// Derive(path [][]byte) XPrvKeyer
+// // Sign creates an EdDSA signature using expanded private key
+// // derived from the xprv.
+// Sign(msg []byte) []byte
+// }
+
+// type XPubKeyer interface {
+// // PublicKey extracts the public key from an xpub.
+// PublicKey() crypto.PublicKey
+// // Derive generates a child xpub by recursively deriving
+// // non-hardened child xpubs over the list of selectors:
+// // `Derive([a,b,c,...]) == Child(a).Child(b).Child(c)...`
+// Derive(path [][]byte) XPubKeyer
+// // Verify checks an EdDSA signature using public key
+// Verify(msg []byte, sig []byte) bool
+// }
package testutil
import (
- "github.com/vapor/crypto"
- "github.com/vapor/crypto/csp"
"github.com/vapor/crypto/ed25519"
+ edchainkd "github.com/vapor/crypto/ed25519/chainkd"
)
var (
- TestXPub crypto.XPubKeyer
- TestXPrv crypto.XPrvKeyer
- TestEdPub ed25519.PublicKey
- TestEdPubs []ed25519.PublicKey
+ TestXPub edchainkd.XPub
+ TestXPrv edchainkd.XPrv
+ TestPub ed25519.PublicKey
+ TestPubs []ed25519.PublicKey
)
type zeroReader struct{}
func init() {
var err error
- _, TestXPub, err := csp.NewXKeys(zeroReader{})
+ TestXPrv, TestXPub, err = edchainkd.NewXKeys(zeroReader{})
if err != nil {
panic(err)
}
- TestPub := TestXPub.PublicKey()
- switch tpk := TestPub.(type) {
- case ed25519.PublicKey:
- TestEdPubs = []ed25519.PublicKey{tpk}
- }
+ TestPub = TestXPub.PublicKey()
+ TestPubs = []ed25519.PublicKey{TestPub}
}