8 "github.com/vapor/crypto/ed25519"
11 // Testing basic InnerSign+Verify and the invariants:
12 // 1) Expand(PrivateKey).Sign() == PrivateKey.Sign()
13 // 2) InnerSign(Expand(PrivateKey)) == Sign(PrivateKey)
15 type zeroReader struct{}
17 func (zeroReader) Read(buf []byte) (int, error) {
24 func TestInnerSignVerify(t *testing.T) {
26 public, private, _ := ed25519.GenerateKey(zero)
27 expprivate := expandEd25519PrivateKey(private)
29 message := []byte("test message")
30 sig := Ed25519InnerSign(expprivate, message)
31 if !ed25519.Verify(public, message, sig) {
32 t.Errorf("valid signature rejected")
35 wrongMessage := []byte("wrong message")
36 if ed25519.Verify(public, wrongMessage, sig) {
37 t.Errorf("signature of different message accepted")
41 func TestExpandedKeySignerInterfaceInvariant(t *testing.T) {
43 public, private, _ := ed25519.GenerateKey(zero)
44 expprivate := expandEd25519PrivateKey(private)
46 signer1 := crypto.Signer(private)
47 signer2 := crypto.Signer(expprivate)
49 publicInterface1 := signer1.Public()
50 publicInterface2 := signer2.Public()
51 public1, ok := publicInterface1.(ed25519.PublicKey)
53 t.Fatalf("expected PublicKey from Public() but got %T", publicInterface1)
55 public2, ok := publicInterface2.(ed25519.PublicKey)
57 t.Fatalf("expected PublicKey from Public() but got %T", publicInterface2)
60 if !bytes.Equal(public, public1) {
61 t.Errorf("public keys do not match: original:%x vs Public():%x", public, public1)
63 if !bytes.Equal(public, public2) {
64 t.Errorf("public keys do not match: original:%x vs Public():%x", public, public2)
67 message := []byte("message")
68 var noHash crypto.Hash
69 signature1, err := signer1.Sign(zero, message, noHash)
71 t.Fatalf("error from Sign(): %s", err)
73 signature2, err := signer2.Sign(zero, message, noHash)
75 t.Fatalf("error from Sign(): %s", err)
77 if !bytes.Equal(signature1[:], signature2[:]) {
78 t.Errorf(".Sign() should return identical signatures for Signer(privkey) and Signer(Expand(privkey))")
80 if !ed25519.Verify(public, message, signature1) {
81 t.Errorf("Verify failed on signature from Sign()")
85 func TestInnerSignInvariant(t *testing.T) {
87 _, private, _ := ed25519.GenerateKey(zero)
88 expprivate := expandEd25519PrivateKey(private)
90 message := []byte("test message")
91 sig1 := ed25519.Sign(private, message)
92 sig2 := Ed25519InnerSign(expprivate, message)
94 if !bytes.Equal(sig1[:], sig2[:]) {
95 t.Errorf("InnerSign(Expand(privkey)) must return the same as Sign(privkey)")