Add ToPem() to public keys
This was missing before from all public keys.
This commit is contained in:
parent
b6c44317f5
commit
e95929ed26
16
ecdsa.go
16
ecdsa.go
@ -108,15 +108,23 @@ func LoadPublicKeyEcdsa(raw []byte) (*EcdsaPublicKey, error) {
|
||||
return &EcdsaPublicKey{pub}, nil
|
||||
}
|
||||
|
||||
// ToPem returns the pem block of the public key.
|
||||
func (pu *EcdsaPublicKey) ToPem() (pem.Block, error) {
|
||||
asn1, err := x509.MarshalPKIXPublicKey(pu.public_key)
|
||||
if err != nil {
|
||||
return pem.Block{}, err
|
||||
}
|
||||
return pem.Block{Type: PemLabelPublic, Bytes: asn1}, nil
|
||||
}
|
||||
|
||||
// This function implements the Pemmer interface to marshal the public key into
|
||||
// a pem block.
|
||||
func (pu *EcdsaPublicKey) MarshalPem() (io.WriterTo, error) {
|
||||
asn1, err := x509.MarshalPKIXPublicKey(pu.public_key)
|
||||
if err != nil {
|
||||
if block, err := pu.ToPem(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return marshalledPemBlock(pem.EncodeToMemory(&block)), nil
|
||||
}
|
||||
pem_block := pem.Block{Type: PemLabelPublic, Bytes: asn1}
|
||||
return marshalledPemBlock(pem.EncodeToMemory(&pem_block)), nil
|
||||
}
|
||||
|
||||
// This function verifies a message using the public key, signature and hash
|
||||
|
10
ed25519.go
10
ed25519.go
@ -92,9 +92,17 @@ func LoadPublicKeyEd25519(raw []byte) (*Ed25519PublicKey, error) {
|
||||
return &Ed25519PublicKey{pu_loaded}, nil
|
||||
}
|
||||
|
||||
// ToPem returns the pem encoded public key.
|
||||
func (pu Ed25519PublicKey) ToPem() (pem.Block, error) {
|
||||
return pem.Block{Type: PemLabelPublic, Bytes: pu.public_key[:]}, nil
|
||||
}
|
||||
|
||||
// Export the public key into the pem format.
|
||||
func (pu Ed25519PublicKey) MarshalPem() (io.WriterTo, error) {
|
||||
pem_block := pem.Block{Type: PemLabelPublic, Bytes: pu.public_key[:]}
|
||||
pem_block, err := pu.ToPem()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return marshalledPemBlock(pem.EncodeToMemory(&pem_block)), nil
|
||||
}
|
||||
|
||||
|
12
rsa.go
12
rsa.go
@ -86,13 +86,21 @@ func LoadPublicKeyRsa(raw []byte) (*RsaPublicKey, error) {
|
||||
return pub, nil
|
||||
}
|
||||
|
||||
// ToPem returns the pem encoded public key.
|
||||
func (pu *RsaPublicKey) ToPem() (pem.Block, error) {
|
||||
asn1, err := x509.MarshalPKIXPublicKey(pu.public_key)
|
||||
if err != nil {
|
||||
return pem.Block{}, err
|
||||
}
|
||||
return pem.Block{Type: PemLabelPublic, Bytes: asn1}, nil
|
||||
}
|
||||
|
||||
// marshal a rsa public key into pem format
|
||||
func (pu *RsaPublicKey) MarshalPem() (io.WriterTo, error) {
|
||||
asn1, err := x509.MarshalPKIXPublicKey(pu.public_key)
|
||||
pem_block, err := pu.ToPem()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pem_block := pem.Block{Type: PemLabelPublic, Bytes: asn1}
|
||||
return marshalledPemBlock(pem.EncodeToMemory(&pem_block)), nil
|
||||
}
|
||||
|
||||
|
1
types.go
1
types.go
@ -45,6 +45,7 @@ type (
|
||||
// same functionality like verifying a message against a signature.
|
||||
PublicKey interface {
|
||||
Pemmer
|
||||
PemOutput
|
||||
// This function can be used to verify a message against a provided signature
|
||||
// using the given hash function.
|
||||
Verify(message []byte, signature []byte, hash crypto.Hash) (bool, error)
|
||||
|
Loading…
Reference in New Issue
Block a user