aboutsummaryrefslogtreecommitdiff
path: root/rsa.go
diff options
context:
space:
mode:
authorGibheer <gibheer@gmail.com>2015-07-12 15:50:29 +0200
committerGibheer <gibheer@gmail.com>2015-07-12 15:50:29 +0200
commitedfac4e7244d7c73963c40049c124fa6d955a7d1 (patch)
tree8e5c4a7052e3f7792a2ac6570365726271f6df0d /rsa.go
parent19136823e1bd2284562ce4e2073fd27bd1230a1b (diff)
add support for signing for rsa
This adds finally support to sign and verify messages using an RSA private and public key. The method used is PKCS1v15, as it was the easiest to implement first. There is also PSS available in go, so that could be implemented later.
Diffstat (limited to 'rsa.go')
-rw-r--r--rsa.go14
1 files changed, 12 insertions, 2 deletions
diff --git a/rsa.go b/rsa.go
index 6622887..76296ed 100644
--- a/rsa.go
+++ b/rsa.go
@@ -47,7 +47,12 @@ func (pr *RsaPrivateKey) Public() PublicKey {
}
func (pr RsaPrivateKey) Sign(message []byte, hash crypto.Hash) ([]byte, error) {
- return make([]byte, 0), errors.New("not implemented yet!")
+ if !hash.Available() {
+ return make([]byte, 0), errors.New("Hash method is not available!")
+ }
+ hashed_message := hash.New()
+ hashed_message.Write(message)
+ return rsa.SignPKCS1v15(rand.Reader, pr.private_key, hash, hashed_message.Sum(nil))
}
// get the private key
@@ -84,5 +89,10 @@ func (pu *RsaPublicKey) MarshalPem() (io.WriterTo, error) {
// verify a message with a signature using the public key
func (pu *RsaPublicKey) Verify(message []byte, signature []byte, hash crypto.Hash) (bool, error) {
- return false, errors.New("not implemented yet!")
+ hashed_message := hash.New()
+ hashed_message.Write(message)
+ if err := rsa.VerifyPKCS1v15(pu.public_key, hash, hashed_message.Sum(nil), signature); err != nil {
+ return false, err
+ }
+ return true, nil
}