diff options
| -rw-r--r-- | ecdsa.go | 16 | ||||
| -rw-r--r-- | ed25519.go | 10 | ||||
| -rw-r--r-- | rsa.go | 12 | ||||
| -rw-r--r-- | types.go | 1 | 
4 files changed, 32 insertions, 7 deletions
@@ -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 @@ -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  } @@ -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  } @@ -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)  | 
