2015-08-21 07:22:52 +00:00
|
|
|
// Copyright (C) 2015 The Syncthing Authors.
|
|
|
|
//
|
|
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
2017-02-09 06:52:18 +00:00
|
|
|
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
2015-08-21 07:22:52 +00:00
|
|
|
|
|
|
|
package signature_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/syncthing/syncthing/lib/signature"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
// A private key for signing
|
|
|
|
privKey = []byte(`-----BEGIN EC PRIVATE KEY-----
|
|
|
|
MIHbAgEBBEFGXB1IgefFF6kSyE17xIAU7fDIn07sPnGf1kLOCVrEZyUbnAmNFk8u
|
|
|
|
lUt/knnvo+Gw1i9ucFjmtYtzDevrhSlG5aAHBgUrgQQAI6GBiQOBhgAEASlcbcgJ
|
|
|
|
4PN+TSnAYiMlA0I/PRtFrDCgrt27K7hR+U7Afjc4KqW+QYwoRLvxueNh7gUK+zc0
|
|
|
|
Aqrk3z+O1epiQTq8ACikHUXsx/bSzEFlPdMygUAAj3hChlgCL6/vOocuRUbtAqc6
|
|
|
|
Zr0L9px+J4L0K+uqhyhKya7y6QLJrYPovFq3A7AK
|
|
|
|
-----END EC PRIVATE KEY-----`)
|
|
|
|
|
|
|
|
// The matching public key
|
|
|
|
pubKey = []byte(`-----BEGIN EC PUBLIC KEY-----
|
|
|
|
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKVxtyAng835NKcBiIyUDQj89G0Ws
|
|
|
|
MKCu3bsruFH5TsB+Nzgqpb5BjChEu/G542HuBQr7NzQCquTfP47V6mJBOrwAKKQd
|
|
|
|
RezH9tLMQWU90zKBQACPeEKGWAIvr+86hy5FRu0CpzpmvQv2nH4ngvQr66qHKErJ
|
|
|
|
rvLpAsmtg+i8WrcDsAo=
|
|
|
|
-----END EC PUBLIC KEY-----`)
|
|
|
|
|
|
|
|
// A signature of "this is a string to sign" created with the private key
|
|
|
|
// above
|
|
|
|
exampleSig = []byte(`-----BEGIN SIGNATURE-----
|
|
|
|
MIGGAkFdHjdarlFOrtcnCqcb0BX7Mjjq/Sbgp4mopCxBwXmfamtCeRGhZJ5MikyD
|
|
|
|
VXScaJ2Dq2Ov7L4/gTcYj9fZwcrWgQJBc7+tcw5fpO0/y8DNq0t3g9bqt2MkmoNm
|
|
|
|
eSAM8Fze4usVXHEi+QeMuYM2IKeVPyAR3iyl5gflVul9NRXS3OPAH3A=
|
|
|
|
-----END SIGNATURE-----`)
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestGenerateKeys(t *testing.T) {
|
|
|
|
priv, pub, err := signature.GenerateKeys()
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if !bytes.Contains(priv, []byte("PRIVATE KEY")) {
|
|
|
|
t.Fatal("should be a private key")
|
|
|
|
}
|
|
|
|
if !bytes.Contains(pub, []byte("PUBLIC KEY")) {
|
|
|
|
t.Fatal("should be a private key")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSign(t *testing.T) {
|
|
|
|
data := bytes.NewReader([]byte("this is a string to sign"))
|
|
|
|
|
|
|
|
s, err := signature.Sign(privKey, data)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Contains(s, []byte("SIGNATURE")) {
|
|
|
|
t.Error("should be a signature")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestVerify(t *testing.T) {
|
|
|
|
data := bytes.NewReader([]byte("this is a string to sign"))
|
|
|
|
err := signature.Verify(pubKey, exampleSig, data)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
data = bytes.NewReader([]byte("thus is a string to sign"))
|
|
|
|
err = signature.Verify(pubKey, exampleSig, data)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("signature should not match")
|
|
|
|
}
|
|
|
|
}
|