@@ -437,20 +437,72 @@ def test_bip352_encode_silent_payment_address():
437437
438438 Test vectors from the BIP: https://github.com/bitcoin/bips/blob/master/bip-0352/send_and_receive_test_vectors.json#L76
439439 """
440- spend_priv_key = "9d6ad855ce3417ef84e836892e5a56392bfba05fa5d97ccea30e266f540e08b3"
441- scan_priv_key = "0f694e068028a717f8af6b9411f9a133dd3565258714cc226594b34db90c1f2c"
442-
443- spend_pk = PrivateKey (unhexlify (spend_priv_key ))
444- scan_pk = PrivateKey (unhexlify (scan_priv_key ))
445-
446- scan_pubkey = scan_pk .get_public_key ()
447- spend_pubkey = spend_pk .get_public_key ()
448-
449- payment_addr = embit_utils .encode_silent_payment_address (scan_pubkey , spend_pubkey )
450- assert payment_addr == "sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgqjuexzk6murw56suy3e0rd2cgqvycxttddwsvgxe2usfpxumr70xc9pkqwv"
440+ BASIC_TEST_VECTORS = [
441+ {
442+ "spend_priv_key" : "9d6ad855ce3417ef84e836892e5a56392bfba05fa5d97ccea30e266f540e08b3" ,
443+ "scan_priv_key" : "0f694e068028a717f8af6b9411f9a133dd3565258714cc226594b34db90c1f2c" ,
444+ "sp_address" : "sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgqjuexzk6murw56suy3e0rd2cgqvycxttddwsvgxe2usfpxumr70xc9pkqwv"
445+ },
446+ {
447+ "spend_priv_key" : "0000000000000000000000000000000000000000000000000000000000000001" ,
448+ "scan_priv_key" : "0000000000000000000000000000000000000000000000000000000000000002" ,
449+ "sp_address" : "sp1qqtrqglu5g8kh6mfsg4qxa9wq0nv9cauwfwxw70984wkqnw2uwz0w2qnehen8a7wuhwk9tgrzjh8gwzc8q2dlekedec5djk0js9d3d7qhnq6lqj3s"
450+ }
451+ ]
452+
453+ for vector in BASIC_TEST_VECTORS :
454+ spend_pk = PrivateKey (unhexlify (vector ["spend_priv_key" ]))
455+ scan_pk = PrivateKey (unhexlify (vector ["scan_priv_key" ]))
456+
457+ scan_pubkey = scan_pk .get_public_key ()
458+ spend_pubkey = spend_pk .get_public_key ()
459+
460+ payment_addr = embit_utils .encode_silent_payment_address (scan_pubkey , spend_pubkey )
461+ assert payment_addr == vector ["sp_address" ]
451462
452463 # Test network payment addrs should start with "tsp"
453464 test_networks = [k for k in NETWORKS .keys () if k != "main" ]
454465 for network in test_networks :
455466 payment_addr = embit_utils .encode_silent_payment_address (scan_pubkey , spend_pubkey , network = network )
456- assert payment_addr .startswith ("tsp" )
467+ assert payment_addr .startswith ("tsp" )
468+
469+
470+ def test_bip352_encode_silent_payment_labeled_address ():
471+ LABEL_TEST_VECTORS = {
472+ "spend_priv_key" : "9d6ad855ce3417ef84e836892e5a56392bfba05fa5d97ccea30e266f540e08b3" ,
473+ "scan_priv_key" : "0f694e068028a717f8af6b9411f9a133dd3565258714cc226594b34db90c1f2c" ,
474+ "labels" : [
475+ 2 ,
476+ 3 ,
477+ 1001337
478+ ],
479+ "addresses" : [
480+ "sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgqjex54dmqmmv6rw353tsuqhs99ydvadxzrsy9nuvk74epvee55drs734pqq" ,
481+ "sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgqsg59z2rppn4qlkx0yz9sdltmjv3j8zgcqadjn4ug98m3t6plujsq9qvu5n" ,
482+ "sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgq7c2zfthc6x3a5yecwc52nxa0kfd20xuz08zyrjpfw4l2j257yq6qgnkdh5"
483+ ]
484+ }
485+
486+ spend_priv_key = PrivateKey (unhexlify (LABEL_TEST_VECTORS ["spend_priv_key" ]))
487+ scan_priv_key = PrivateKey (unhexlify (LABEL_TEST_VECTORS ["scan_priv_key" ]))
488+
489+ for label , address in zip (LABEL_TEST_VECTORS ["labels" ], LABEL_TEST_VECTORS ["addresses" ]):
490+ sp_address = embit_utils .encode_labeled_silent_payment_address (scan_priv_key , spend_priv_key .get_public_key (), label )
491+ assert sp_address == address
492+
493+ # Label may also be a string, but the bip does not provide any test vectors
494+ embit_utils .encode_labeled_silent_payment_address (scan_priv_key , spend_priv_key .get_public_key (), label = "tenant 6102" )
495+
496+ # Label may also be passed in as bytes
497+ embit_utils .encode_labeled_silent_payment_address (scan_priv_key , spend_priv_key .get_public_key (), label = "i am bytes" .encode ())
498+
499+ # Label may also be a integer
500+ embit_utils .encode_labeled_silent_payment_address (scan_priv_key , spend_priv_key .get_public_key (), label = 42 )
501+
502+ with pytest .raises (Exception ):
503+ # Label is required
504+ embit_utils .encode_labeled_silent_payment_address (scan_priv_key , spend_priv_key .get_public_key ())
505+
506+ with pytest .raises (Exception ):
507+ # Label must be an int, str, or bytes
508+ embit_utils .encode_labeled_silent_payment_address (scan_priv_key , spend_priv_key .get_public_key (), label = 1.0 )
0 commit comments