@@ -28,6 +28,12 @@ def extract_subject(id_token)
2828 jbody [ 'sub' ]
2929end
3030
31+ def create_paep_verification ( passphrase )
32+ public_key = AppConfig . instance . enroll_passphrase_public_encryption_key
33+ paep = Tanker ::Core . prehash_and_encrypt_password ( passphrase , public_key )
34+ Tanker ::PrehashedAndEncryptedPassphraseVerification . new paep
35+ end
36+
3137RSpec . describe "#{ Tanker } Verification" do
3238 before ( :all ) do
3339 Tanker ::App . use_test_log_handler
@@ -320,6 +326,22 @@ def extract_subject(id_token)
320326 tanker . free
321327 end
322328
329+ it 'fails to register with a prehashed and encrypted passphrase' do
330+ tanker = Tanker ::Core . new @options
331+ tanker . start @identity
332+
333+ paep_verification = create_paep_verification ( 'p@assword' )
334+
335+ expect { tanker . register_identity paep_verification }
336+ . to ( raise_error ) do |e |
337+ expect ( e ) . to be_a ( Tanker ::Error )
338+ expect ( e ) . to be_a ( Tanker ::Error ::InvalidArgument )
339+ expect ( e . code ) . to eq ( Tanker ::Error ::INVALID_ARGUMENT )
340+ end
341+
342+ tanker . free
343+ end
344+
323345 it 'fails to verify with preverified email' do
324346 email = 'mono@chromat.ic'
325347
@@ -387,6 +409,28 @@ def extract_subject(id_token)
387409 tanker2 . free
388410 end
389411
412+ it 'fails to verify with a prehashed and encrypted passphrase' do
413+ passphrase = 'p@ssword'
414+ tanker1 = Tanker ::Core . new @options
415+ tanker1 . start @identity
416+ tanker1 . register_identity Tanker ::PassphraseVerification . new ( passphrase )
417+ tanker1 . free
418+
419+ tanker2 = Tanker ::Core . new @options
420+ tanker2 . start @identity
421+
422+ paep_verification = create_paep_verification ( passphrase )
423+
424+ expect { tanker2 . verify_identity paep_verification }
425+ . to ( raise_error ) do |e |
426+ expect ( e ) . to be_a ( Tanker ::Error )
427+ expect ( e ) . to be_a ( Tanker ::Error ::InvalidArgument )
428+ expect ( e . code ) . to eq ( Tanker ::Error ::INVALID_ARGUMENT )
429+ end
430+
431+ tanker2 . free
432+ end
433+
390434 it 'sets verification method with preverified email' do
391435 email = 'mono@chromat.ic'
392436
@@ -454,6 +498,24 @@ def extract_subject(id_token)
454498 expect ( tanker2 . status ) . to eq ( Tanker ::Status ::READY )
455499 tanker2 . free
456500 end
501+
502+ it 'fails to set verification method to prehashed and encrypted passphrase' do
503+ passphrase = '42 is the Answer to the Ultimate Question of Life, the Universe, and Everything'
504+ tanker = Tanker ::Core . new @options
505+ tanker . start @identity
506+ tanker . register_identity Tanker ::PassphraseVerification . new passphrase
507+
508+ paep_verification = create_paep_verification ( passphrase )
509+
510+ expect { tanker . set_verification_method paep_verification }
511+ . to ( raise_error ) do |e |
512+ expect ( e ) . to be_a ( Tanker ::Error )
513+ expect ( e ) . to be_a ( Tanker ::Error ::InvalidArgument )
514+ expect ( e . code ) . to eq ( Tanker ::Error ::INVALID_ARGUMENT )
515+ end
516+
517+ tanker . free
518+ end
457519 end
458520
459521 describe 'session tokens' do
@@ -564,10 +626,12 @@ def extract_subject(id_token)
564626
565627 phone_number = '+33639982233'
566628 email = 'mono@chromat.ic'
629+ passphrase = 'Penny Lane is in my ears and in my eyes'
567630 @server . enroll_user ( @identity , [
568631 Tanker ::PreverifiedPhoneNumberVerification . new ( phone_number ) ,
569632 Tanker ::PreverifiedEmailVerification . new ( email ) ,
570- Tanker ::PreverifiedOIDCVerification . new ( @martine_subject , provider_id )
633+ Tanker ::PreverifiedOIDCVerification . new ( @martine_subject , provider_id ) ,
634+ create_paep_verification ( passphrase )
571635 ] )
572636
573637 tanker1 = Tanker ::Core . new @options
@@ -576,6 +640,8 @@ def extract_subject(id_token)
576640 tanker2 . start @identity
577641 tanker3 = Tanker ::Core . new @options
578642 tanker3 . start @identity
643+ tanker4 = Tanker ::Core . new @options
644+ tanker4 . start @identity
579645
580646 expect ( tanker1 . status ) . to eq ( Tanker ::Status ::IDENTITY_VERIFICATION_NEEDED )
581647 tanker1 . verify_identity Tanker ::EmailVerification . new (
@@ -595,9 +661,14 @@ def extract_subject(id_token)
595661 tanker3 . verify_identity Tanker ::OIDCIDTokenVerification . new ( @martine_id_token )
596662 expect ( tanker3 . status ) . to eq ( Tanker ::Status ::READY )
597663
664+ expect ( tanker4 . status ) . to eq ( Tanker ::Status ::IDENTITY_VERIFICATION_NEEDED )
665+ tanker4 . verify_identity Tanker ::PassphraseVerification . new ( passphrase )
666+ expect ( tanker4 . status ) . to eq ( Tanker ::Status ::READY )
667+
598668 tanker1 . free
599669 tanker2 . free
600670 tanker3 . free
671+ tanker4 . free
601672 end
602673 end
603674
0 commit comments