-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcertifier_test.go
More file actions
103 lines (83 loc) · 2.61 KB
/
certifier_test.go
File metadata and controls
103 lines (83 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package delphi
import (
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/sha256"
"io"
"testing"
"github.com/stretchr/testify/assert"
)
var _ Certifier = (*MockCertifier)(nil)
// MockCertifier implements Certifier
type MockCertifier struct {
privateKey *rsa.PrivateKey
}
func NewMockCertifier() *MockCertifier {
privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)
return &MockCertifier{privateKey: privateKey}
}
func (m *MockCertifier) Public() crypto.PublicKey {
return m.privateKey.Public()
}
func (m *MockCertifier) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) {
return rsa.SignPKCS1v15(rand, m.privateKey, crypto.SHA256, digest)
}
func (m *MockCertifier) Verify(pub crypto.PublicKey, digest []byte, sig []byte) bool {
rsaPub, ok := pub.(*rsa.PublicKey)
if !ok {
return false
}
err := rsa.VerifyPKCS1v15(rsaPub, crypto.SHA256, digest, sig)
return err == nil
}
func TestMockCertifier_SignAndVerify(t *testing.T) {
certifier := NewMockCertifier()
message := []byte("test message")
hash := sha256.New()
hash.Write(message)
digest := hash.Sum(nil)
signature, err := certifier.Sign(rand.Reader, digest, crypto.SHA256)
assert.NoError(t, err)
valid := certifier.Verify(certifier.Public(), digest, signature)
assert.True(t, valid)
}
func TestMockCertifier_VerifyInvalidSignature(t *testing.T) {
certifier := NewMockCertifier()
message := []byte("test message")
hash := sha256.New()
hash.Write(message)
digest := hash.Sum(nil)
invalidSignature := []byte("invalid signature")
valid := certifier.Verify(certifier.Public(), digest, invalidSignature)
assert.False(t, valid)
}
func TestVerifierInterface(t *testing.T) {
var verifier Verifier = NewMockCertifier()
message := []byte("test message")
hash := sha256.New()
hash.Write(message)
digest := hash.Sum(nil)
// Valid signature
signature, err := verifier.(*MockCertifier).Sign(rand.Reader, digest, crypto.SHA256)
assert.NoError(t, err)
valid := verifier.Verify(verifier.(*MockCertifier).Public(), digest, signature)
assert.True(t, valid)
// Invalid signature
invalidSignature := []byte("invalid signature")
valid = verifier.Verify(verifier.(*MockCertifier).Public(), digest, invalidSignature)
assert.False(t, valid)
}
func TestCertifierInterface(t *testing.T) {
var certifier Certifier = NewMockCertifier()
message := []byte("test message")
hash := sha256.New()
hash.Write(message)
digest := hash.Sum(nil)
// Test Sign method
signature, err := certifier.Sign(rand.Reader, digest, crypto.SHA256)
assert.NoError(t, err)
// Test Verify method
valid := certifier.Verify(certifier.Public(), digest, signature)
assert.True(t, valid)
}