package crypto
import (
"crypto"
"crypto/ecdsa"
"crypto/ed25519"
"crypto/rsa"
"github.com/decred/dcrd/dcrec/secp256k1/v4"
)
func KeyPairFromStdKey (priv crypto .PrivateKey ) (PrivKey , PubKey , error ) {
if priv == nil {
return nil , nil , ErrNilPrivateKey
}
switch p := priv .(type ) {
case *rsa .PrivateKey :
return &RsaPrivateKey {*p }, &RsaPublicKey {k : p .PublicKey }, nil
case *ecdsa .PrivateKey :
return &ECDSAPrivateKey {p }, &ECDSAPublicKey {&p .PublicKey }, nil
case *ed25519 .PrivateKey :
pubIfc := p .Public ()
pub , _ := pubIfc .(ed25519 .PublicKey )
return &Ed25519PrivateKey {*p }, &Ed25519PublicKey {pub }, nil
case *secp256k1 .PrivateKey :
sPriv := Secp256k1PrivateKey (*p )
sPub := Secp256k1PublicKey (*p .PubKey ())
return &sPriv , &sPub , nil
default :
return nil , nil , ErrBadKeyType
}
}
func PrivKeyToStdKey (priv PrivKey ) (crypto .PrivateKey , error ) {
if priv == nil {
return nil , ErrNilPrivateKey
}
switch p := priv .(type ) {
case *RsaPrivateKey :
return &p .sk , nil
case *ECDSAPrivateKey :
return p .priv , nil
case *Ed25519PrivateKey :
return &p .k , nil
case *Secp256k1PrivateKey :
return p , nil
default :
return nil , ErrBadKeyType
}
}
func PubKeyToStdKey (pub PubKey ) (crypto .PublicKey , error ) {
if pub == nil {
return nil , ErrNilPublicKey
}
switch p := pub .(type ) {
case *RsaPublicKey :
return &p .k , nil
case *ECDSAPublicKey :
return p .pub , nil
case *Ed25519PublicKey :
return p .k , nil
case *Secp256k1PublicKey :
return p , nil
default :
return nil , ErrBadKeyType
}
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .