0
0

Add ToPem() to public keys

This was missing before from all public keys.
This commit is contained in:
Gibheer 2017-05-12 22:19:25 +02:00
parent b6c44317f5
commit e95929ed26
4 changed files with 32 additions and 7 deletions

View File

@ -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

View File

@ -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
View File

@ -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
}

View File

@ -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)