Changeset 2ef6da5 in trunk
- Timestamp:
- 2024-05-07T19:15:01Z (11 months ago)
- Branches:
- master
- Children:
- 9d10bda2
- Parents:
- 31b8f19
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified integration/test_web.py ¶
r31b8f19 r2ef6da5 757 757 758 758 assert (writekey, fingerprint) == (filecap.writekey, filecap.fingerprint) 759 760 761 @run_in_thread 762 def test_mkdir_with_children_and_known_private_key(alice): 763 """ 764 Create a new directory with ?t=mkdir-with-children&private-key=... 765 using a known-in-advance RSA private key. 766 767 768 The writekey and fingerprint derived from the provided RSA key 769 should match those of the newly-created directory capability. 770 In addition, because the writekey and fingerprint are derived 771 deterministically, given the same RSA private key, the resultant 772 directory capability should always be the same. 773 """ 774 775 # create a file to put in our directory 776 FILE_CONTENTS = u"some file contents\n" * 500 777 resp = requests.put( 778 util.node_url(alice.process.node_dir, u"uri"), 779 data=FILE_CONTENTS, 780 ) 781 filecap = resp.content.strip() 782 783 # create a (sub) directory to put in our directory 784 resp = requests.post( 785 util.node_url(alice.process.node_dir, u"uri"), 786 params={ 787 u"t": u"mkdir", 788 } 789 ) 790 # (we need both the read-write and read-only URIs I guess) 791 dircap = resp.content 792 dircap_obj = allmydata.uri.from_string(dircap) 793 dircap_ro = dircap_obj.get_readonly().to_string() 794 795 # create json information about our directory 796 meta = { 797 "a_file": [ 798 "filenode", { 799 "ro_uri": filecap, 800 "metadata": { 801 "ctime": 1202777696.7564139, 802 "mtime": 1202777696.7564139, 803 "tahoe": { 804 "linkcrtime": 1202777696.7564139, 805 "linkmotime": 1202777696.7564139 806 } 807 } 808 } 809 ], 810 "some_subdir": [ 811 "dirnode", { 812 "rw_uri": dircap, 813 "ro_uri": dircap_ro, 814 "metadata": { 815 "ctime": 1202778102.7589991, 816 "mtime": 1202778111.2160511, 817 "tahoe": { 818 "linkcrtime": 1202777696.7564139, 819 "linkmotime": 1202777696.7564139 820 } 821 } 822 } 823 ] 824 } 825 826 # Randomly generated with `openssl genrsa -out privkey.pem 2048` 827 privkey_pem = """-----BEGIN RSA PRIVATE KEY----- 828 MIIEowIBAAKCAQEA2PL5Ry2BGuuUtRJa20WS0fwBOqVIVSXDVuSvZFYTT1Xji19J 829 q+ohHcFnIIYHAq0zQG+NgNjK5rogY/5TfbwIhfwLufleeAdL9jXTfxan0o/wwFA1 830 DAIHcYsTEYI2dfQe4acOLFY6/Hh6iXCbHvSzzUnEmYkgwCAZvc0v/lD8pMnz/6gQ 831 2nJnAASfFovcAvfr1T+MZzLJGQem3f2IFp1frurQyFmzFRtZMO5B9PDSsFG4yJVf 832 cz0iSP8wlc9QydImmJGRvu4xEOkx/55B/XaUdb6CIGpCTkLsDOlImvZt9UHDSgXq 833 qcE/T7SYMIXqbep64tJw9enjomH+n1KVh9UA2wIDAQABAoIBABCSTrQ/J5N010EV 834 i9cf810S0M03/tRyM/+ZLESPxp3Sw7TLrIbzNWBee5AibLqpnDaZzsc+yBDjusGo 835 lZwPFt+VJxgnki288PJ3nhYhFuSglhU6izLFnOfxZZ16wsozwYAfEJgWZh8O3N1O 836 uqqcqndN4TSRIu1KBm1XFQlqCkJT/stzYjO4k1vhgZT4pqhYRdx7q7FAap4v+sNs 837 Svhm1blvOXlyeumAbFBdGFttpTxIOGRzI1bp00jcLK4rgssTTxNyEiVu4oJhQY/k 838 0CptSUzpGio8DZ0/8bNnKCkw8YATUWJZQgSmKraRwAYMMR/SZa7WqjEc2KRTj6xQ 839 pHmYwZECgYEA700a/7ur8+EwTSulLgDveAOtTV0xEbhuq6cJQgNrEp2rbFqie6FX 840 g/YJKzEpEnUvj/yOzhEcw3CdQDUaxndlqY87QIhUWMcsnfMPsM1FjhmfksR8s3TF 841 WZNqa0RAKmcRoLohGclSvRV2OVU8+10mLUwJfR86Nl5+auR3LxWLyB8CgYEA6BaR 842 r+Z7oTlgkdEDVhnQ58Msktv58y28N+VIbYS79bV01jqUUlogm5uTvdvq5nyENXHx 843 gnK88mVzWYBMk83D01HlOC5DhpspTVEQQG2V/If6KZa56mxiHP3Mab9jLew9w/kA 844 g6l/04ATSA8g4i2H/Bz0eEyPEBt6o/+SO0Xv38UCgYEAyTTLvrrNmgF922UXPdcL 845 gp2U2bfBymSIqUuJPTgij0SDHlgWxlyieRImI2ryXdKqayav7BP3W10U2yfLm5RI 846 pokICPqX8Q2HNkdoqf/uu8xPn9gWAc3tIaQRlp+MVBrVd48IxeXA67tf7FT/MVrg 847 /rUwRUQ8bfqF0NrIW46COYECgYAYDJamGoT/DNoD4hutZVlvWpsY0LCS0U9qn1ik 848 +Jcde+MSe9l4uxwb48AocUxi+84bV6ZF9Su9FmQghxnoSu8ay6ar7qdSoGtkNp0v 849 f+uF0nVKr/Kt5vM3u9jdsFZPoOY5k2jJO9wiB2h4FBE9PqiTqFBw0sYUTjSkH8yA 850 VdvoXQKBgFqCC8Y82eVf0/ORGTgG/KhZ72WFQKHyAeryvoLuadZ6JAI6qW9U1l9P 851 18SMnCO+opGN5GH2Qx7gdg17KzWzTW1gnbv0QUPNnnYEJU8VYMelNuKa8tmNgFH7 852 inAwsxbbWoR08ai4exzbJrNrLpDRg5ih2wMtknN6D8m+EAvBC/Gj 853 -----END RSA PRIVATE KEY----- 854 """ 855 856 privkey = load_pem_private_key( 857 privkey_pem.encode("ascii"), password=None 858 ) 859 pubkey = privkey.public_key() 860 861 writekey, _, fingerprint = derive_mutable_keys((pubkey, privkey)) 862 863 # The "private-key" parameter takes a DER-encoded RSA private key 864 # encoded in URL-safe base64; PEM blocks are not supported. 865 privkey_der = der_string_from_signing_key(privkey) 866 privkey_encoded = urlsafe_b64encode(privkey_der).decode("ascii") 867 868 # create a new directory with one file and one sub-dir (all-at-once) 869 # with the supplied RSA private key 870 resp = util.web_post( 871 alice.process, u"uri", 872 params={ 873 u"t": "mkdir-with-children", 874 u"private-key": privkey_encoded, 875 }, 876 data=json.dumps(meta), 877 ) 878 assert resp.startswith(b"URI:DIR2") 879 880 dircap = allmydata.uri.from_string(resp) 881 assert isinstance(dircap, allmydata.uri.DirectoryURI) 882 883 # DirectoryURI objects lack 'writekey' and 'fingerprint' attributes 884 # so extract them from the enclosed WriteableSSKFileURI object. 885 filecap = dircap.get_filenode_cap() 886 assert isinstance(filecap, allmydata.uri.WriteableSSKFileURI) 887 888 assert (writekey, fingerprint) == (filecap.writekey, filecap.fingerprint) 889 890 assert resp == b"URI:DIR2:ppwzpwrd37xi7tpribxyaa25uy:imdws47wwpzfkc5vfllo4ugspb36iit4cqps6ttuhaouc66jb2da"
Note: See TracChangeset
for help on using the changeset viewer.