@@ -255,129 +255,149 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
255255func TestUnmarshalPublicKeyFromPEM (t * testing.T ) {
256256 t .Parallel ()
257257 pubKey := []byte (`# A good key
258- -----BEGIN NEBULA ED25519 PUBLIC KEY-----
258+ -----BEGIN NEBULA X25519 PUBLIC KEY-----
259259AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
260- -----END NEBULA ED25519 PUBLIC KEY-----
260+ -----END NEBULA X25519 PUBLIC KEY-----
261+ ` )
262+ pubP256Key := []byte (`# A good key
263+ -----BEGIN NEBULA P256 PUBLIC KEY-----
264+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
265+ AAAAAAAAAAAAAAAAAAAAAAA=
266+ -----END NEBULA P256 PUBLIC KEY-----
267+ ` )
268+ signingKey := []byte (`# A signing key has the wrong scope for this function
269+ -----BEGIN NEBULA ECDSA P256 PUBLIC KEY-----
270+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
271+ AAAAAAAAAAAAAAAAAAAAAAA=
272+ -----END NEBULA ECDSA P256 PUBLIC KEY-----
261273` )
262274 shortKey := []byte (`# A short key
263- -----BEGIN NEBULA ED25519 PUBLIC KEY-----
275+ -----BEGIN NEBULA X25519 PUBLIC KEY-----
264276AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
265- -----END NEBULA ED25519 PUBLIC KEY-----
277+ -----END NEBULA X25519 PUBLIC KEY-----
266278` )
267279 invalidBanner := []byte (`# Invalid banner
268280-----BEGIN NOT A NEBULA PUBLIC KEY-----
269281AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
270282-----END NOT A NEBULA PUBLIC KEY-----
271283` )
272284 invalidPem := []byte (`# Not a valid PEM format
273- -BEGIN NEBULA ED25519 PUBLIC KEY-----
285+ -BEGIN NEBULA X25519 PUBLIC KEY-----
274286AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
275- -END NEBULA ED25519 PUBLIC KEY-----` )
287+ -END NEBULA X25519 PUBLIC KEY-----` )
276288
277- keyBundle := appendByteSlices (pubKey , shortKey , invalidBanner , invalidPem )
289+ keyBundle := appendByteSlices (pubKey , pubP256Key , signingKey , shortKey , invalidBanner , invalidPem )
278290
279- // Success test case
291+ // X25519 key
280292 k , rest , curve , err := UnmarshalPublicKeyFromPEM (keyBundle )
281293 assert .Len (t , k , 32 )
294+ require .NoError (t , err )
295+ assert .Equal (t , rest , appendByteSlices (pubP256Key , signingKey , shortKey , invalidBanner , invalidPem ))
282296 assert .Equal (t , Curve_CURVE25519 , curve )
297+
298+ // P256 key
299+ k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
300+ assert .Len (t , k , 65 )
283301 require .NoError (t , err )
302+ assert .Equal (t , rest , appendByteSlices (signingKey , shortKey , invalidBanner , invalidPem ))
303+ assert .Equal (t , Curve_P256 , curve )
304+
305+ // Reject a signing public key (Ed25519/ECDSA banner)
306+ k , rest , _ , err = UnmarshalPublicKeyFromPEM (rest )
307+ assert .Nil (t , k )
284308 assert .Equal (t , rest , appendByteSlices (shortKey , invalidBanner , invalidPem ))
309+ require .EqualError (t , err , "bytes did not contain a proper public key banner" )
285310
286311 // Fail due to short key
287- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
312+ k , rest , _ , err = UnmarshalPublicKeyFromPEM (rest )
288313 assert .Nil (t , k )
289- assert .Equal (t , Curve_CURVE25519 , curve )
290314 assert .Equal (t , rest , appendByteSlices (invalidBanner , invalidPem ))
291315 require .EqualError (t , err , "key was not 32 bytes, is invalid CURVE25519 public key" )
292316
293317 // Fail due to invalid banner
294- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
318+ k , rest , _ , err = UnmarshalPublicKeyFromPEM (rest )
295319 assert .Nil (t , k )
296- assert .Equal (t , Curve_CURVE25519 , curve )
297320 require .EqualError (t , err , "bytes did not contain a proper public key banner" )
298321 assert .Equal (t , rest , invalidPem )
299322
300323 // Fail due to invalid PEM format, because
301324 // it's missing the requisite pre-encapsulation boundary.
302- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
325+ k , rest , _ , err = UnmarshalPublicKeyFromPEM (rest )
303326 assert .Nil (t , k )
304- assert .Equal (t , Curve_CURVE25519 , curve )
305327 assert .Equal (t , rest , invalidPem )
306328 require .EqualError (t , err , "input did not contain a valid PEM encoded block" )
307329}
308330
309- func TestUnmarshalX25519PublicKey (t * testing.T ) {
331+ func TestUnmarshalSigningPublicKeyFromPEM (t * testing.T ) {
310332 t .Parallel ()
311333 pubKey := []byte (`# A good key
312- -----BEGIN NEBULA X25519 PUBLIC KEY-----
334+ -----BEGIN NEBULA ED25519 PUBLIC KEY-----
313335AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
314- -----END NEBULA X25519 PUBLIC KEY-----
336+ -----END NEBULA ED25519 PUBLIC KEY-----
315337` )
316338 pubP256Key := []byte (`# A good key
317- -----BEGIN NEBULA P256 PUBLIC KEY-----
318- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
319- AAAAAAAAAAAAAAAAAAAAAAA=
320- -----END NEBULA P256 PUBLIC KEY-----
321- ` )
322- oldPubP256Key := []byte (`# A good key
323339-----BEGIN NEBULA ECDSA P256 PUBLIC KEY-----
324340AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
325341AAAAAAAAAAAAAAAAAAAAAAA=
326342-----END NEBULA ECDSA P256 PUBLIC KEY-----
327343` )
328- shortKey := []byte (`# A short key
344+ ecdhKey := []byte (`# A key-agreement key has the wrong scope for this function
329345-----BEGIN NEBULA X25519 PUBLIC KEY-----
330- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= =
346+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA =
331347-----END NEBULA X25519 PUBLIC KEY-----
348+ ` )
349+ shortKey := []byte (`# A short key
350+ -----BEGIN NEBULA ED25519 PUBLIC KEY-----
351+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
352+ -----END NEBULA ED25519 PUBLIC KEY-----
332353` )
333354 invalidBanner := []byte (`# Invalid banner
334355-----BEGIN NOT A NEBULA PUBLIC KEY-----
335356AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
336357-----END NOT A NEBULA PUBLIC KEY-----
337358` )
338359 invalidPem := []byte (`# Not a valid PEM format
339- -BEGIN NEBULA X25519 PUBLIC KEY-----
360+ -BEGIN NEBULA ED25519 PUBLIC KEY-----
340361AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
341- -END NEBULA X25519 PUBLIC KEY-----` )
362+ -END NEBULA ED25519 PUBLIC KEY-----` )
342363
343- keyBundle := appendByteSlices (pubKey , pubP256Key , oldPubP256Key , shortKey , invalidBanner , invalidPem )
364+ keyBundle := appendByteSlices (pubKey , pubP256Key , ecdhKey , shortKey , invalidBanner , invalidPem )
344365
345- // Success test case
346- k , rest , curve , err := UnmarshalPublicKeyFromPEM (keyBundle )
366+ // Ed25519 key
367+ k , rest , curve , err := UnmarshalSigningPublicKeyFromPEM (keyBundle )
347368 assert .Len (t , k , 32 )
348369 require .NoError (t , err )
349- assert .Equal (t , rest , appendByteSlices (pubP256Key , oldPubP256Key , shortKey , invalidBanner , invalidPem ))
370+ assert .Equal (t , rest , appendByteSlices (pubP256Key , ecdhKey , shortKey , invalidBanner , invalidPem ))
350371 assert .Equal (t , Curve_CURVE25519 , curve )
351372
352- // Success test case
353- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
373+ // ECDSA P256 key
374+ k , rest , curve , err = UnmarshalSigningPublicKeyFromPEM (rest )
354375 assert .Len (t , k , 65 )
355376 require .NoError (t , err )
356- assert .Equal (t , rest , appendByteSlices (oldPubP256Key , shortKey , invalidBanner , invalidPem ))
377+ assert .Equal (t , rest , appendByteSlices (ecdhKey , shortKey , invalidBanner , invalidPem ))
357378 assert .Equal (t , Curve_P256 , curve )
358379
359- // Success test case
360- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
361- assert .Len (t , k , 65 )
362- require .NoError (t , err )
380+ // Reject a key-agreement public key (X25519/P256 banner)
381+ k , rest , _ , err = UnmarshalSigningPublicKeyFromPEM (rest )
382+ assert .Nil (t , k )
363383 assert .Equal (t , rest , appendByteSlices (shortKey , invalidBanner , invalidPem ))
364- assert . Equal (t , Curve_P256 , curve )
384+ require . EqualError (t , err , "bytes did not contain a proper Ed25519/ECDSA public key banner" )
365385
366386 // Fail due to short key
367- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
387+ k , rest , _ , err = UnmarshalSigningPublicKeyFromPEM (rest )
368388 assert .Nil (t , k )
369389 assert .Equal (t , rest , appendByteSlices (invalidBanner , invalidPem ))
370390 require .EqualError (t , err , "key was not 32 bytes, is invalid CURVE25519 public key" )
371391
372392 // Fail due to invalid banner
373- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
393+ k , rest , _ , err = UnmarshalSigningPublicKeyFromPEM (rest )
374394 assert .Nil (t , k )
375- require .EqualError (t , err , "bytes did not contain a proper public key banner" )
395+ require .EqualError (t , err , "bytes did not contain a proper Ed25519/ECDSA public key banner" )
376396 assert .Equal (t , rest , invalidPem )
377397
378398 // Fail due to invalid PEM format, because
379399 // it's missing the requisite pre-encapsulation boundary.
380- k , rest , curve , err = UnmarshalPublicKeyFromPEM (rest )
400+ k , rest , _ , err = UnmarshalSigningPublicKeyFromPEM (rest )
381401 assert .Nil (t , k )
382402 assert .Equal (t , rest , invalidPem )
383403 require .EqualError (t , err , "input did not contain a valid PEM encoded block" )
0 commit comments