@@ -82,15 +82,15 @@ func TestSignCertOther(t *testing.T) {
8282 aliceSigner := tu .NoErr (signer .UnmarshalSecret (aliceKeyData ))
8383
8484 // self signed alice's key
85- aliceCert , err := sec .SignCert (sec.SignCertArgs {
85+ aliceCertWire , err := sec .SignCert (sec.SignCertArgs {
8686 Signer : aliceSigner ,
8787 Data : aliceKeyData ,
8888 IssuerId : ISSUER ,
8989 NotBefore : T1 ,
9090 NotAfter : T2 ,
9191 })
9292 require .NoError (t , err )
93- aliceCertData , _ , err := spec_2022.Spec {}.ReadData (enc .NewWireView (aliceCert ))
93+ aliceCertData , _ , err := spec_2022.Spec {}.ReadData (enc .NewWireView (aliceCertWire ))
9494 require .NoError (t , err )
9595
9696 // parse existing certificate
@@ -136,3 +136,71 @@ func TestSignCertOther(t *testing.T) {
136136 require .Equal (t , 64 , len (signature .SigValue ())) // ed25519
137137 require .True (t , tu .NoErr (signer .ValidateData (newCert , newSigCov , aliceCertData )))
138138}
139+
140+ func TestSignCertWithSignerCertName (t * testing.T ) {
141+ tu .SetT (t )
142+
143+ aliceKey , _ := base64 .StdEncoding .DecodeString (KEY_ALICE )
144+ aliceKeyData , _ , _ := spec_2022.Spec {}.ReadData (enc .NewBufferView (aliceKey ))
145+ aliceSigner := tu .NoErr (signer .UnmarshalSecret (aliceKeyData ))
146+
147+ // self signed alice's key to obtain a certificate name for the KeyLocator
148+ aliceCertWire := tu .NoErr (sec .SignCert (sec.SignCertArgs {
149+ Signer : aliceSigner ,
150+ Data : aliceKeyData ,
151+ IssuerId : ISSUER ,
152+ NotBefore : T1 ,
153+ NotAfter : T2 ,
154+ }))
155+ aliceCertData , _ , _ := spec_2022.Spec {}.ReadData (enc .NewWireView (aliceCertWire ))
156+
157+ // parse existing certificate
158+ rootCert , _ := base64 .StdEncoding .DecodeString (CERT_ROOT )
159+ rootCertData , _ , _ := spec_2022.Spec {}.ReadData (enc .NewBufferView (rootCert ))
160+
161+ // sign root cert with alice's key but force the KeyLocator to use alice's cert name
162+ newCertB := tu .NoErr (sec .SignCert (sec.SignCertArgs {
163+ Signer : aliceSigner ,
164+ SignerName : aliceCertData .Name (),
165+ Data : rootCertData ,
166+ IssuerId : ISSUER ,
167+ NotBefore : T1 ,
168+ NotAfter : T2 ,
169+ }))
170+ newCert , newSigCov , err := spec_2022.Spec {}.ReadData (enc .NewWireView (newCertB ))
171+ require .NoError (t , err )
172+
173+ signature := newCert .Signature ()
174+ require .Equal (t , aliceCertData .Name (), signature .KeyName ())
175+ require .True (t , tu .NoErr (signer .ValidateData (newCert , newSigCov , aliceCertData )))
176+
177+ t .Run ("mismatched signer cert name" , func (t * testing.T ) {
178+ _ , err := sec .SignCert (sec.SignCertArgs {
179+ Signer : aliceSigner ,
180+ SignerName : rootCertData .Name (), // wrong key name
181+ Data : rootCertData ,
182+ IssuerId : ISSUER ,
183+ NotBefore : T1 ,
184+ NotAfter : T2 ,
185+ })
186+ require .Error (t , err )
187+ })
188+ }
189+
190+ func TestEncodeDecodeCertList (t * testing.T ) {
191+ tu .SetT (t )
192+ n1 := tu .NoErr (enc .NameFromStr ("/ndn/alice/KEY/aa/self/v=1" ))
193+ n2 := tu .NoErr (enc .NameFromStr ("/ndn/alice/KEY/bb/ndn/v=2" ))
194+
195+ wire , err := sec .EncodeCertList ([]enc.Name {n1 , n2 })
196+ require .NoError (t , err )
197+ decoded , err := sec .DecodeCertList (wire )
198+ require .NoError (t , err )
199+ require .Equal (t , []enc.Name {n1 , n2 }, decoded )
200+
201+ _ , err = sec .EncodeCertList (nil )
202+ require .Error (t , err )
203+
204+ _ , err = sec .DecodeCertList (enc.Wire {[]byte {0x01 , 0x02 }})
205+ require .Error (t , err )
206+ }
0 commit comments