import (
"bytes"
"crypto/openpgp"
+ "fmt"
"testing"
)
}
}
-func parsekey(key []byte, t *testing.T) *openpgp.Entity {
+func parsekey(key []byte) (*openpgp.Entity, error) {
elist, err := openpgp.ReadArmoredKeyRing(bytes.NewBuffer(key))
if err != nil {
- t.Error(err)
- return nil
+ return nil, err
}
if len(elist) != 1 {
- t.Errorf("expected one key, got %d", len(elist))
- return nil
+ return nil, fmt.Errorf("expected one key, got %d", len(elist))
}
- return elist[0]
+ return elist[0], nil
}
func TestSign(t *testing.T) {
- k1 := parsekey(skey1, t)
- k2 := parsekey(pkey2, t)
- if k1 == nil || k2 == nil {
- t.Errorf("parsing keys failed")
+ k1, err := parsekey(skey1)
+ if err != nil {
+ t.Errorf("parsing key1 failed: %s", err)
+ return
+ }
+ k2, err := parsekey(pkey2)
+ if err != nil {
+ t.Errorf("parsing key2 failed: %s", err)
return
}
signed, err := Sign([]byte(debitBody), k1)
}
}
+func debitcert() (d *DebitCert, err error) {
+ doc, err := ParseDocument([]byte(debitBody))
+ if err != nil {
+ return
+ }
+ iv, err := ParseStruct(doc)
+ if err != nil {
+ return
+ }
+ d, ok := iv.(*DebitCert)
+ if !ok {
+ err = fmt.Errorf("expecetd *DebitCert, got %T", d)
+ }
+ return
+}
+
+func BenchmarkSign(b *testing.B) {
+ d, err := debitcert()
+ if err != nil {
+ panic(err)
+ }
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ k, err := parsekey(skey1)
+ if err != nil {
+ panic(err)
+ }
+ _, _, err = Format(d, k)
+ if err != nil {
+ panic(err)
+ }
+ }
+}
+
+func BenchmarkVerify(b *testing.B) {
+ d, err := debitcert()
+ if err != nil {
+ panic(err)
+ }
+ k, err := parsekey(skey1)
+ if err != nil {
+ panic(err)
+ }
+ s, _, err := Format(d, k)
+ if err != nil {
+ panic(err)
+ }
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ k, err := parsekey(skey1)
+ if err != nil {
+ panic(err)
+ }
+ _, signed, err := Parse(s)
+ if err != nil {
+ panic(err)
+ }
+ err = Verify(signed, openpgp.EntityList{k})
+ if err != nil {
+ panic(err)
+ }
+ }
+}
+
var skey1 = []byte(`-----BEGIN PGP PRIVATE KEY BLOCK-----
xcD7BAAAAAARBACk0rlXXCXw5iK4aUOHEop5PhrSfRL/9LW6EaN879Mck1vLsKlE