Changeset 2ef6da5 in trunk


Ignore:
Timestamp:
2024-05-07T19:15:01Z (11 months ago)
Author:
Christopher R. Wood <chris@…>
Branches:
master
Children:
9d10bda2
Parents:
31b8f19
Message:

Add test for mkdir-with-children with known private-key

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified integration/test_web.py

    r31b8f19 r2ef6da5  
    757757
    758758    assert (writekey, fingerprint) == (filecap.writekey, filecap.fingerprint)
     759
     760
     761@run_in_thread
     762def 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-----
     828MIIEowIBAAKCAQEA2PL5Ry2BGuuUtRJa20WS0fwBOqVIVSXDVuSvZFYTT1Xji19J
     829q+ohHcFnIIYHAq0zQG+NgNjK5rogY/5TfbwIhfwLufleeAdL9jXTfxan0o/wwFA1
     830DAIHcYsTEYI2dfQe4acOLFY6/Hh6iXCbHvSzzUnEmYkgwCAZvc0v/lD8pMnz/6gQ
     8312nJnAASfFovcAvfr1T+MZzLJGQem3f2IFp1frurQyFmzFRtZMO5B9PDSsFG4yJVf
     832cz0iSP8wlc9QydImmJGRvu4xEOkx/55B/XaUdb6CIGpCTkLsDOlImvZt9UHDSgXq
     833qcE/T7SYMIXqbep64tJw9enjomH+n1KVh9UA2wIDAQABAoIBABCSTrQ/J5N010EV
     834i9cf810S0M03/tRyM/+ZLESPxp3Sw7TLrIbzNWBee5AibLqpnDaZzsc+yBDjusGo
     835lZwPFt+VJxgnki288PJ3nhYhFuSglhU6izLFnOfxZZ16wsozwYAfEJgWZh8O3N1O
     836uqqcqndN4TSRIu1KBm1XFQlqCkJT/stzYjO4k1vhgZT4pqhYRdx7q7FAap4v+sNs
     837Svhm1blvOXlyeumAbFBdGFttpTxIOGRzI1bp00jcLK4rgssTTxNyEiVu4oJhQY/k
     8380CptSUzpGio8DZ0/8bNnKCkw8YATUWJZQgSmKraRwAYMMR/SZa7WqjEc2KRTj6xQ
     839pHmYwZECgYEA700a/7ur8+EwTSulLgDveAOtTV0xEbhuq6cJQgNrEp2rbFqie6FX
     840g/YJKzEpEnUvj/yOzhEcw3CdQDUaxndlqY87QIhUWMcsnfMPsM1FjhmfksR8s3TF
     841WZNqa0RAKmcRoLohGclSvRV2OVU8+10mLUwJfR86Nl5+auR3LxWLyB8CgYEA6BaR
     842r+Z7oTlgkdEDVhnQ58Msktv58y28N+VIbYS79bV01jqUUlogm5uTvdvq5nyENXHx
     843gnK88mVzWYBMk83D01HlOC5DhpspTVEQQG2V/If6KZa56mxiHP3Mab9jLew9w/kA
     844g6l/04ATSA8g4i2H/Bz0eEyPEBt6o/+SO0Xv38UCgYEAyTTLvrrNmgF922UXPdcL
     845gp2U2bfBymSIqUuJPTgij0SDHlgWxlyieRImI2ryXdKqayav7BP3W10U2yfLm5RI
     846pokICPqX8Q2HNkdoqf/uu8xPn9gWAc3tIaQRlp+MVBrVd48IxeXA67tf7FT/MVrg
     847/rUwRUQ8bfqF0NrIW46COYECgYAYDJamGoT/DNoD4hutZVlvWpsY0LCS0U9qn1ik
     848+Jcde+MSe9l4uxwb48AocUxi+84bV6ZF9Su9FmQghxnoSu8ay6ar7qdSoGtkNp0v
     849f+uF0nVKr/Kt5vM3u9jdsFZPoOY5k2jJO9wiB2h4FBE9PqiTqFBw0sYUTjSkH8yA
     850VdvoXQKBgFqCC8Y82eVf0/ORGTgG/KhZ72WFQKHyAeryvoLuadZ6JAI6qW9U1l9P
     85118SMnCO+opGN5GH2Qx7gdg17KzWzTW1gnbv0QUPNnnYEJU8VYMelNuKa8tmNgFH7
     852inAwsxbbWoR08ai4exzbJrNrLpDRg5ih2wMtknN6D8m+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.