Skip to content

Commit 89148e9

Browse files
committed
[FAB-5778] Add Expiration to msp/Identity interface
This commit adds a new method: ExpiresAt() time.Time to the Identity interface. Change-Id: I130abf58cb19192ebcbabeb0cef52414b397dfe6 Signed-off-by: yacovm <yacovm@il.ibm.com>
1 parent 6925648 commit 89148e9

File tree

11 files changed

+93
-8
lines changed

11 files changed

+93
-8
lines changed

common/cauthdsl/cauthdsl_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ import (
2020
"bytes"
2121
"errors"
2222
"testing"
23+
"time"
2324

25+
"github.com/golang/protobuf/proto"
2426
"github.com/hyperledger/fabric/msp"
2527
cb "github.com/hyperledger/fabric/protos/common"
2628
mb "github.com/hyperledger/fabric/protos/msp"
27-
28-
"github.com/golang/protobuf/proto"
2929
logging "github.com/op/go-logging"
3030
"github.com/stretchr/testify/assert"
3131
)
@@ -40,6 +40,10 @@ type mockIdentity struct {
4040
idBytes []byte
4141
}
4242

43+
func (id *mockIdentity) ExpiresAt() time.Time {
44+
return time.Time{}
45+
}
46+
4347
func (id *mockIdentity) SatisfiesPrincipal(p *mb.MSPPrincipal) error {
4448
if bytes.Compare(id.idBytes, p.Principal) == 0 {
4549
return nil

common/mocks/msp/noopmsp.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package msp
1818

1919
import (
20+
"time"
21+
2022
m "github.com/hyperledger/fabric/msp"
2123
"github.com/hyperledger/fabric/protos/msp"
2224
)
@@ -95,6 +97,10 @@ func (id *noopidentity) SatisfiesPrincipal(*msp.MSPPrincipal) error {
9597
return nil
9698
}
9799

100+
func (id *noopidentity) ExpiresAt() time.Time {
101+
return time.Time{}
102+
}
103+
98104
func (id *noopidentity) GetIdentifier() *m.IdentityIdentifier {
99105
return &m.IdentityIdentifier{Mspid: "NOOP", Id: "Bob"}
100106
}

core/policy/mocks/mocks.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ package mocks
1818

1919
import (
2020
"bytes"
21-
22-
"fmt"
23-
2421
"errors"
22+
"fmt"
23+
"time"
2524

2625
"github.com/hyperledger/fabric/common/policies"
2726
"github.com/hyperledger/fabric/msp"
@@ -92,6 +91,10 @@ func (id *MockIdentity) SatisfiesPrincipal(p *mspproto.MSPPrincipal) error {
9291
return nil
9392
}
9493

94+
func (id *MockIdentity) ExpiresAt() time.Time {
95+
return time.Time{}
96+
}
97+
9598
func (id *MockIdentity) GetIdentifier() *msp.IdentityIdentifier {
9699
return &msp.IdentityIdentifier{Mspid: "mock", Id: "mock"}
97100
}

msp/identities.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"encoding/pem"
2525
"errors"
2626
"fmt"
27+
"time"
2728

2829
"github.com/golang/protobuf/proto"
2930
"github.com/hyperledger/fabric/bccsp"
@@ -79,6 +80,11 @@ func newIdentity(cert *x509.Certificate, pk bccsp.Key, msp *bccspmsp) (Identity,
7980
return &identity{id: id, cert: cert, pk: pk, msp: msp}, nil
8081
}
8182

83+
// ExpiresAt returns the time at which the Identity expires.
84+
func (id *identity) ExpiresAt() time.Time {
85+
return id.cert.NotAfter
86+
}
87+
8288
// SatisfiesPrincipal returns null if this instance matches the supplied principal or an error otherwise
8389
func (id *identity) SatisfiesPrincipal(principal *msp.MSPPrincipal) error {
8490
return id.msp.SatisfiesPrincipal(id, principal)

msp/msp.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ SPDX-License-Identifier: Apache-2.0
77
package msp
88

99
import (
10+
"time"
11+
1012
"github.com/hyperledger/fabric/protos/msp"
1113
)
1214

@@ -113,6 +115,12 @@ type OUIdentifier struct {
113115
// with, and verifying signatures that correspond to these certificates.///
114116
type Identity interface {
115117

118+
// ExpiresAt returns the time at which the Identity expires.
119+
// If the returned time is the zero value, it implies
120+
// the Identity does not expire, or that its expiration
121+
// time is unknown
122+
ExpiresAt() time.Time
123+
116124
// GetIdentifier returns the identifier of that identity
117125
GetIdentifier() *IdentityIdentifier
118126

msp/msp_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"path/filepath"
2828
"reflect"
2929
"testing"
30+
"time"
3031

3132
"github.com/golang/protobuf/proto"
3233
"github.com/hyperledger/fabric/bccsp"
@@ -747,6 +748,15 @@ func TestAdminPolicyPrincipalFails(t *testing.T) {
747748
assert.Error(t, err)
748749
}
749750

751+
func TestIdentityExpiresAt(t *testing.T) {
752+
thisMSP := getLocalMSP(t, "testdata/expiration")
753+
assert.NotNil(t, thisMSP)
754+
si, err := thisMSP.GetDefaultSigningIdentity()
755+
assert.NoError(t, err)
756+
expirationDate := si.GetPublicVersion().ExpiresAt()
757+
assert.Equal(t, time.Date(2027, 8, 17, 12, 19, 48, 0, time.UTC), expirationDate)
758+
}
759+
750760
func TestIdentityPolicyPrincipal(t *testing.T) {
751761
id, err := localMsp.GetDefaultSigningIdentity()
752762
assert.NoError(t, err)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICCDCCAa6gAwIBAgIRANLH5Ue5a6tHuzCQtap1BP8wCgYIKoZIzj0EAwIwZzEL
3+
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4+
cmFuY2lzY28xEzARBgNVBAoTCmhybC5pYm0uaWwxFjAUBgNVBAMTDWNhLmhybC5p
5+
Ym0uaWwwHhcNMTcwODE5MTIxOTQ4WhcNMjcwODE3MTIxOTQ4WjBVMQswCQYDVQQG
6+
EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj
7+
bzEZMBcGA1UEAwwQVXNlcjFAaHJsLmlibS5pbDBZMBMGByqGSM49AgEGCCqGSM49
8+
AwEHA0IABE7fF65KsF0nxNgIBFVA2x/QU0LuAyuTsRaSWc/ycQAuLQfCti5bYp4W
9+
WaQUc5sBaKAmVbFQTm9RhmOhtIz7PL6jTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNV
10+
HRMBAf8EAjAAMCsGA1UdIwQkMCKAIMjiBsyFZlbO6pRxo7VgoqKhl78Ujd9sdWUk
11+
epB05fodMAoGCCqGSM49BAMCA0gAMEUCIQCiOzbaApF46NVobwh3wqHf8ID1zxja
12+
j23HPXR3FjjFZgIgXLujyDGETptNrELaytjG+dxO3Kzq/SM07K2zPUg4368=
13+
-----END CERTIFICATE-----
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICKTCCAdCgAwIBAgIPALI3Zpyi/75v3hhXSJJcMAoGCCqGSM49BAMCMGcxCzAJ
3+
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
4+
bmNpc2NvMRMwEQYDVQQKEwpocmwuaWJtLmlsMRYwFAYDVQQDEw1jYS5ocmwuaWJt
5+
LmlsMB4XDTE3MDgxOTEyMTk0OFoXDTI3MDgxNzEyMTk0OFowZzELMAkGA1UEBhMC
6+
VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28x
7+
EzARBgNVBAoTCmhybC5pYm0uaWwxFjAUBgNVBAMTDWNhLmhybC5pYm0uaWwwWTAT
8+
BgcqhkjOPQIBBggqhkjOPQMBBwNCAAQGJd5u4DmkEoScKT2vOGfnyG/hQ9vLwBbt
9+
6zCimNoE2p2plJgRxT5y2Or0qc0xkmpMomJXO8IJ4vtpbRDqu5b/o18wXTAOBgNV
10+
HQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkG
11+
A1UdDgQiBCDI4gbMhWZWzuqUcaO1YKKioZe/FI3fbHVlJHqQdOX6HTAKBggqhkjO
12+
PQQDAgNHADBEAiBqUahujAMCSV77pjiho/n3iEGsjX8PA6meVq7mhQgakAIgFHAI
13+
tmkcJ2ilCK5QxG+gtlnLm0rbmqKnB4JHqdF3tcU=
14+
-----END CERTIFICATE-----
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXxOy/nD/twU+d4DL
3+
veUvrzae6jsrmT4vBnZR0cHkjKehRANCAARO3xeuSrBdJ8TYCARVQNsf0FNC7gMr
4+
k7EWklnP8nEALi0HwrYuW2KeFlmkFHObAWigJlWxUE5vUYZjobSM+zy+
5+
-----END PRIVATE KEY-----
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICCDCCAa6gAwIBAgIRANLH5Ue5a6tHuzCQtap1BP8wCgYIKoZIzj0EAwIwZzEL
3+
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4+
cmFuY2lzY28xEzARBgNVBAoTCmhybC5pYm0uaWwxFjAUBgNVBAMTDWNhLmhybC5p
5+
Ym0uaWwwHhcNMTcwODE5MTIxOTQ4WhcNMjcwODE3MTIxOTQ4WjBVMQswCQYDVQQG
6+
EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj
7+
bzEZMBcGA1UEAwwQVXNlcjFAaHJsLmlibS5pbDBZMBMGByqGSM49AgEGCCqGSM49
8+
AwEHA0IABE7fF65KsF0nxNgIBFVA2x/QU0LuAyuTsRaSWc/ycQAuLQfCti5bYp4W
9+
WaQUc5sBaKAmVbFQTm9RhmOhtIz7PL6jTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNV
10+
HRMBAf8EAjAAMCsGA1UdIwQkMCKAIMjiBsyFZlbO6pRxo7VgoqKhl78Ujd9sdWUk
11+
epB05fodMAoGCCqGSM49BAMCA0gAMEUCIQCiOzbaApF46NVobwh3wqHf8ID1zxja
12+
j23HPXR3FjjFZgIgXLujyDGETptNrELaytjG+dxO3Kzq/SM07K2zPUg4368=
13+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)