@@ -74,7 +74,7 @@ func mustCreateKey(t *testing.T, name string, signatureAlgorithm apiv1.Signature
7474func createPrivateKeyOnly (t * testing.T , name string , signatureAlgorithm apiv1.SignatureAlgorithm ) * apiv1.CreateKeyResponse {
7575 t .Helper ()
7676
77- u , err := parseURI (name )
77+ u , err := parseURI (name , true )
7878 require .NoError (t , err )
7979 u .sigAlgorithm = signatureAlgorithm
8080 u .keySize = signatureAlgorithmMapping [signatureAlgorithm ].Size
@@ -356,6 +356,11 @@ func TestMacKMS_GetPublicKey(t *testing.T) {
356356 }))
357357 })
358358
359+ u , err := uri .ParseWithScheme (Scheme , r1 .Name )
360+ require .NoError (t , err )
361+ hash := u .Get ("hash" )
362+ require .NotEmpty (t , hash )
363+
359364 type args struct {
360365 req * apiv1.GetPublicKeyRequest
361366 }
@@ -375,8 +380,10 @@ func TestMacKMS_GetPublicKey(t *testing.T) {
375380 {"ok uri simple" , & MacKMS {}, args {& apiv1.GetPublicKeyRequest {Name : "mackms:test-p256" }}, r1 .PublicKey , assert .NoError },
376381 {"ok uri label" , & MacKMS {}, args {& apiv1.GetPublicKeyRequest {Name : "mackms:label=test-p256" }}, r1 .PublicKey , assert .NoError },
377382 {"ok uri label + tag" , & MacKMS {}, args {& apiv1.GetPublicKeyRequest {Name : "mackms:label=test-p256;tag=com.smallstep.crypto" }}, r1 .PublicKey , assert .NoError },
383+ {"ok uri hash" , & MacKMS {}, args {& apiv1.GetPublicKeyRequest {Name : fmt .Sprintf ("mackms:hash=%s" , hash )}}, r1 .PublicKey , assert .NoError },
378384 {"fail bad label" , & MacKMS {}, args {& apiv1.GetPublicKeyRequest {Name : "mackms:label=test-fail-p256" }}, nil , assert .Error },
379385 {"fail bad tag" , & MacKMS {}, args {& apiv1.GetPublicKeyRequest {Name : "mackms:label=test-p256;tag=com.step.crypto" }}, nil , assert .Error },
386+ {"fail no label nor hash" , & MacKMS {}, args {& apiv1.GetPublicKeyRequest {Name : "mackms:tag=com.step.crypto" }}, nil , assert .Error },
380387 }
381388 for _ , tt := range tests {
382389 t .Run (tt .name , func (t * testing.T ) {
@@ -418,7 +425,7 @@ func TestMacKMS_CreateKey(t *testing.T) {
418425 require .Nil (tt , resp .PrivateKey )
419426 require .NotEmpty (tt , resp .CreateSignerRequest )
420427
421- u , err := parseURI (resp .Name )
428+ u , err := parseURI (resp .Name , true )
422429 require .NoError (tt , err )
423430 require .NotEmpty (tt , u .label )
424431 require .NotEmpty (tt , u .tag )
@@ -433,7 +440,7 @@ func TestMacKMS_CreateKey(t *testing.T) {
433440 require .Nil (tt , resp .PrivateKey )
434441 require .NotEmpty (tt , resp .CreateSignerRequest )
435442
436- u , err := parseURI (resp .Name )
443+ u , err := parseURI (resp .Name , true )
437444 require .NoError (tt , err )
438445 require .NotEmpty (tt , u .label )
439446 require .Empty (tt , u .tag )
@@ -462,7 +469,7 @@ func TestMacKMS_CreateSigner(t *testing.T) {
462469 kms := & MacKMS {}
463470 resp , err := kms .CreateKey (& apiv1.CreateKeyRequest {
464471 Name : "mackms:label=test-p256" ,
465- SignatureAlgorithm : apiv1 .SHA256WithRSA ,
472+ SignatureAlgorithm : apiv1 .ECDSAWithSHA256 ,
466473 })
467474 require .NoError (t , err )
468475
@@ -472,6 +479,11 @@ func TestMacKMS_CreateSigner(t *testing.T) {
472479 }))
473480 })
474481
482+ u , err := uri .ParseWithScheme (Scheme , resp .Name )
483+ require .NoError (t , err )
484+ hash := u .Get ("hash" )
485+ require .NotEmpty (t , hash )
486+
475487 assertSigner := func (tt require.TestingT , i1 any , i2 ... any ) {
476488 require .IsType (tt , & Signer {}, i1 )
477489 signer := i1 .(crypto.Signer )
@@ -507,6 +519,9 @@ func TestMacKMS_CreateSigner(t *testing.T) {
507519 {"ok simple name" , & MacKMS {}, args {& apiv1.CreateSignerRequest {
508520 SigningKey : "mackms:label=test-p256" ,
509521 }}, assertSigner , assert .NoError },
522+ {"ok hash" , & MacKMS {}, args {& apiv1.CreateSignerRequest {
523+ SigningKey : fmt .Sprintf ("mackms:hash=%s" , hash ),
524+ }}, assertSigner , assert .NoError },
510525 {"fail signingKey" , & MacKMS {}, args {& apiv1.CreateSignerRequest {}}, require .Nil , assert .Error },
511526 {"fail uri" , & MacKMS {}, args {& apiv1.CreateSignerRequest {SigningKey : "mackms:tag=foo" }}, require .Nil , assert .Error },
512527 {"fail missing" , & MacKMS {}, args {& apiv1.CreateSignerRequest {SigningKey : "mackms:label=test-p384" }}, require .Nil , assert .Error },
@@ -552,26 +567,30 @@ func TestMacKMS_DeleteKey(t *testing.T) {
552567
553568func Test_parseURI (t * testing.T ) {
554569 type args struct {
555- rawuri string
570+ rawuri string
571+ requireLabel bool
556572 }
557573 tests := []struct {
558574 name string
559575 args args
560576 want * keyAttributes
561577 assertion assert.ErrorAssertionFunc
562578 }{
563- {"ok" , args {"mackms:label=the-label;tag=the-tag;hash=0102abcd" }, & keyAttributes {label : "the-label" , tag : "the-tag" , hash : []byte {1 , 2 , 171 , 205 }}, assert .NoError },
564- {"ok label" , args {"the-label" }, & keyAttributes {label : "the-label" , tag : DefaultTag , retry : true }, assert .NoError },
565- {"ok label uri" , args {"mackms:label=the-label" }, & keyAttributes {label : "the-label" , tag : DefaultTag , retry : true }, assert .NoError },
566- {"ok label uri simple" , args {"mackms:the-label" }, & keyAttributes {label : "the-label" , tag : DefaultTag , retry : true }, assert .NoError },
567- {"ok label empty tag" , args {"mackms:label=the-label;tag=" }, & keyAttributes {label : "the-label" , tag : "" }, assert .NoError },
568- {"ok label empty tag no equal" , args {"mackms:label=the-label;tag" }, & keyAttributes {label : "the-label" , tag : "" }, assert .NoError },
569- {"fail parse" , args {"mackms:%label=the-label" }, nil , assert .Error },
570- {"fail missing label" , args {"mackms:hash=0102abcd" }, nil , assert .Error },
579+ {"ok" , args {"mackms:label=the-label;tag=the-tag;hash=0102abcd" , true }, & keyAttributes {label : "the-label" , tag : "the-tag" , hash : []byte {1 , 2 , 171 , 205 }}, assert .NoError },
580+ {"ok label" , args {"the-label" , true }, & keyAttributes {label : "the-label" , tag : DefaultTag , retry : true }, assert .NoError },
581+ {"ok label uri" , args {"mackms:label=the-label" , true }, & keyAttributes {label : "the-label" , tag : DefaultTag , retry : true }, assert .NoError },
582+ {"ok label uri simple" , args {"mackms:the-label" , true }, & keyAttributes {label : "the-label" , tag : DefaultTag , retry : true }, assert .NoError },
583+ {"ok label empty tag" , args {"mackms:label=the-label;tag=" , true }, & keyAttributes {label : "the-label" , tag : "" }, assert .NoError },
584+ {"ok label empty tag no equal" , args {"mackms:label=the-label;tag" , true }, & keyAttributes {label : "the-label" , tag : "" }, assert .NoError },
585+ {"ok empty label and tag with hash" , args {"mackms:hash=0102abcd" , false }, & keyAttributes {label : "" , tag : DefaultTag , hash : []byte {1 , 2 , 171 , 205 }, retry : true }, assert .NoError },
586+ {"ok empty label with tag and hash" , args {"mackms:hash=0102abcd;tag=the-tag" , false }, & keyAttributes {label : "" , tag : "the-tag" , hash : []byte {1 , 2 , 171 , 205 }}, assert .NoError },
587+ {"fail parse" , args {"mackms:%label=the-label" , true }, nil , assert .Error },
588+ {"fail missing label" , args {"mackms:hash=0102abcd" , true }, nil , assert .Error },
589+ {"fail missing label and hash" , args {"mackms:tag=the-tag" , false }, nil , assert .Error },
571590 }
572591 for _ , tt := range tests {
573592 t .Run (tt .name , func (t * testing.T ) {
574- got , err := parseURI (tt .args .rawuri )
593+ got , err := parseURI (tt .args .rawuri , tt . args . requireLabel )
575594 tt .assertion (t , err )
576595 assert .Equal (t , tt .want , got )
577596 })
@@ -2158,7 +2177,7 @@ func Test_keyAttributes_retryAttributes(t *testing.T) {
21582177
21592178 mustFields := func (s string ) fields {
21602179 t .Helper ()
2161- u , err := parseURI (s )
2180+ u , err := parseURI (s , true )
21622181 require .NoError (t , err )
21632182 return fields {
21642183 label : u .label ,
@@ -2239,7 +2258,7 @@ func Test_createHash(t *testing.T) {
22392258
22402259 getHash := func (r * apiv1.CreateKeyResponse ) []byte {
22412260 t .Helper ()
2242- u , err := parseURI (r .Name )
2261+ u , err := parseURI (r .Name , true )
22432262 require .NoError (t , err )
22442263 return u .hash
22452264 }
0 commit comments