lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

hash_path_and_descriptor.v1.json (45382B)


      1 {
      2   "suite": "blossom_hash_path_and_descriptor",
      3   "contract_version": "1.0.0",
      4   "vectors": [
      5     {
      6       "id": "blossom_sha256_digest_empty_001",
      7       "kind": "blossom.sha256.digest",
      8       "input": {
      9         "bytes_hex": ""
     10       },
     11       "expected": {
     12         "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
     13       }
     14     },
     15     {
     16       "id": "blossom_sha256_digest_abc_002",
     17       "kind": "blossom.sha256.digest",
     18       "input": {
     19         "bytes_hex": "616263"
     20       },
     21       "expected": {
     22         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
     23       }
     24     },
     25     {
     26       "id": "blossom_sha256_digest_binary_003",
     27       "kind": "blossom.sha256.digest",
     28       "input": {
     29         "bytes_hex": "89504e470d0a1a0a726164726f6f7473"
     30       },
     31       "expected": {
     32         "sha256": "a829dda89323e71a4575c1c45c52d65c3a0c87dd8ffcdab9ad12bbee57c00861"
     33       }
     34     },
     35     {
     36       "id": "blossom_sha256_parse_valid_004",
     37       "kind": "blossom.sha256.parse.valid",
     38       "input": {
     39         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
     40       },
     41       "expected": {
     42         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
     43       }
     44     },
     45     {
     46       "id": "blossom_sha256_parse_zero_valid_005",
     47       "kind": "blossom.sha256.parse.valid",
     48       "input": {
     49         "sha256": "0000000000000000000000000000000000000000000000000000000000000000"
     50       },
     51       "expected": {
     52         "sha256": "0000000000000000000000000000000000000000000000000000000000000000"
     53       }
     54     },
     55     {
     56       "id": "blossom_sha256_parse_short_invalid_006",
     57       "kind": "blossom.sha256.parse.invalid",
     58       "input": {
     59         "sha256": "ba7816bf8f01cfea"
     60       },
     61       "expected": {
     62         "error": "invalid_sha256"
     63       }
     64     },
     65     {
     66       "id": "blossom_sha256_parse_uppercase_invalid_007",
     67       "kind": "blossom.sha256.parse.invalid",
     68       "input": {
     69         "sha256": "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD"
     70       },
     71       "expected": {
     72         "error": "invalid_sha256"
     73       }
     74     },
     75     {
     76       "id": "blossom_sha256_parse_non_hex_invalid_008",
     77       "kind": "blossom.sha256.parse.invalid",
     78       "input": {
     79         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ag"
     80       },
     81       "expected": {
     82         "error": "invalid_sha256"
     83       }
     84     },
     85     {
     86       "id": "blossom_sha256_parse_too_long_invalid_008b",
     87       "kind": "blossom.sha256.parse.invalid",
     88       "input": {
     89         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad0"
     90       },
     91       "expected": {
     92         "error": "invalid_sha256"
     93       }
     94     },
     95     {
     96       "id": "blossom_hash_path_without_extension_009",
     97       "kind": "blossom.hash_path.parse.valid",
     98       "input": {
     99         "path": "/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    100       },
    101       "expected": {
    102         "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    103         "extension": null
    104       }
    105     },
    106     {
    107       "id": "blossom_hash_path_png_extension_010",
    108       "kind": "blossom.hash_path.parse.valid",
    109       "input": {
    110         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    111       },
    112       "expected": {
    113         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    114         "extension": "png"
    115       }
    116     },
    117     {
    118       "id": "blossom_hash_path_multi_extension_011",
    119       "kind": "blossom.hash_path.parse.valid",
    120       "input": {
    121         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.tar.gz"
    122       },
    123       "expected": {
    124         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    125         "extension": "tar.gz"
    126       }
    127     },
    128     {
    129       "id": "blossom_hash_path_extension_case_preserved_012",
    130       "kind": "blossom.hash_path.parse.valid",
    131       "input": {
    132         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.Photo_JPG-2"
    133       },
    134       "expected": {
    135         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    136         "extension": "Photo_JPG-2"
    137       }
    138     },
    139     {
    140       "id": "blossom_hash_path_missing_root_slash_013",
    141       "kind": "blossom.hash_path.parse.invalid",
    142       "input": {
    143         "path": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    144       },
    145       "expected": {
    146         "error": "invalid_hash_path"
    147       }
    148     },
    149     {
    150       "id": "blossom_hash_path_empty_014",
    151       "kind": "blossom.hash_path.parse.invalid",
    152       "input": {
    153         "path": "/"
    154       },
    155       "expected": {
    156         "error": "invalid_hash_path"
    157       }
    158     },
    159     {
    160       "id": "blossom_hash_path_extra_segment_015",
    161       "kind": "blossom.hash_path.parse.invalid",
    162       "input": {
    163         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad/png"
    164       },
    165       "expected": {
    166         "error": "invalid_hash_path"
    167       }
    168     },
    169     {
    170       "id": "blossom_hash_path_uppercase_hash_016",
    171       "kind": "blossom.hash_path.parse.invalid",
    172       "input": {
    173         "path": "/BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD.png"
    174       },
    175       "expected": {
    176         "error": "invalid_sha256"
    177       }
    178     },
    179     {
    180       "id": "blossom_hash_path_empty_extension_017",
    181       "kind": "blossom.hash_path.parse.invalid",
    182       "input": {
    183         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad."
    184       },
    185       "expected": {
    186         "error": "invalid_file_extension"
    187       }
    188     },
    189     {
    190       "id": "blossom_hash_path_empty_extension_component_018",
    191       "kind": "blossom.hash_path.parse.invalid",
    192       "input": {
    193         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.tar..gz"
    194       },
    195       "expected": {
    196         "error": "invalid_file_extension"
    197       }
    198     },
    199     {
    200       "id": "blossom_hash_path_whitespace_extension_019",
    201       "kind": "blossom.hash_path.parse.invalid",
    202       "input": {
    203         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.p ng"
    204       },
    205       "expected": {
    206         "error": "invalid_file_extension"
    207       }
    208     },
    209     {
    210       "id": "blossom_hash_path_percent_encoded_extension_020",
    211       "kind": "blossom.hash_path.parse.invalid",
    212       "input": {
    213         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.%70ng"
    214       },
    215       "expected": {
    216         "error": "invalid_hash_path"
    217       }
    218     },
    219     {
    220       "id": "blossom_hash_path_query_forbidden_021",
    221       "kind": "blossom.hash_path.parse.invalid",
    222       "input": {
    223         "path": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png?download=1"
    224       },
    225       "expected": {
    226         "error": "invalid_hash_path"
    227       }
    228     },
    229     {
    230       "id": "blossom_blob_url_https_canonical_authority_022",
    231       "kind": "blossom.blob_url.parse.valid",
    232       "input": {
    233         "url": "HTTPS://MEDIA.EXAMPLE/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.PNG"
    234       },
    235       "expected": {
    236         "scheme": "https",
    237         "host": "media.example",
    238         "port": null,
    239         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    240         "extension": "PNG"
    241       }
    242     },
    243     {
    244       "id": "blossom_blob_url_public_http_structural_023",
    245       "kind": "blossom.blob_url.parse.valid",
    246       "input": {
    247         "url": "http://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    248       },
    249       "expected": {
    250         "scheme": "http",
    251         "host": "media.example",
    252         "port": null,
    253         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    254         "extension": "png"
    255       }
    256     },
    257     {
    258       "id": "blossom_blob_url_https_port_without_extension_024",
    259       "kind": "blossom.blob_url.parse.valid",
    260       "input": {
    261         "url": "https://media.example:8443/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    262       },
    263       "expected": {
    264         "scheme": "https",
    265         "host": "media.example",
    266         "port": 8443,
    267         "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    268         "extension": null
    269       }
    270     },
    271     {
    272       "id": "blossom_blob_url_bracketed_ipv6_025",
    273       "kind": "blossom.blob_url.parse.valid",
    274       "input": {
    275         "url": "http://[::1]:21100/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.bin"
    276       },
    277       "expected": {
    278         "scheme": "http",
    279         "host": "[::1]",
    280         "port": 21100,
    281         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    282         "extension": "bin"
    283       }
    284     },
    285     {
    286       "id": "blossom_blob_url_relative_invalid_026",
    287       "kind": "blossom.blob_url.parse.invalid",
    288       "input": {
    289         "url": "/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    290       },
    291       "expected": {
    292         "error": "invalid_blob_url"
    293       }
    294     },
    295     {
    296       "id": "blossom_blob_url_unsupported_scheme_027",
    297       "kind": "blossom.blob_url.parse.invalid",
    298       "input": {
    299         "url": "ftp://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    300       },
    301       "expected": {
    302         "error": "unsupported_blob_url_scheme"
    303       }
    304     },
    305     {
    306       "id": "blossom_blob_url_missing_authority_028",
    307       "kind": "blossom.blob_url.parse.invalid",
    308       "input": {
    309         "url": "https://"
    310       },
    311       "expected": {
    312         "error": "invalid_blob_url"
    313       }
    314     },
    315     {
    316       "id": "blossom_blob_url_credentials_forbidden_029",
    317       "kind": "blossom.blob_url.parse.invalid",
    318       "input": {
    319         "url": "https://user:password@media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    320       },
    321       "expected": {
    322         "error": "blob_url_credentials_forbidden"
    323       }
    324     },
    325     {
    326       "id": "blossom_blob_url_empty_userinfo_forbidden_029b",
    327       "kind": "blossom.blob_url.parse.invalid",
    328       "input": {
    329         "url": "https://@media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    330       },
    331       "expected": {
    332         "error": "blob_url_credentials_forbidden"
    333       }
    334     },
    335     {
    336       "id": "blossom_blob_url_empty_userinfo_separator_forbidden_029c",
    337       "kind": "blossom.blob_url.parse.invalid",
    338       "input": {
    339         "url": "https://:@media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    340       },
    341       "expected": {
    342         "error": "blob_url_credentials_forbidden"
    343       }
    344     },
    345     {
    346       "id": "blossom_blob_url_query_forbidden_030",
    347       "kind": "blossom.blob_url.parse.invalid",
    348       "input": {
    349         "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png?download=1"
    350       },
    351       "expected": {
    352         "error": "blob_url_query_forbidden"
    353       }
    354     },
    355     {
    356       "id": "blossom_blob_url_fragment_forbidden_031",
    357       "kind": "blossom.blob_url.parse.invalid",
    358       "input": {
    359         "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png#preview"
    360       },
    361       "expected": {
    362         "error": "blob_url_fragment_forbidden"
    363       }
    364     },
    365     {
    366       "id": "blossom_blob_url_extra_path_segment_032",
    367       "kind": "blossom.blob_url.parse.invalid",
    368       "input": {
    369         "url": "https://media.example/blobs/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    370       },
    371       "expected": {
    372         "error": "invalid_hash_path"
    373       }
    374     },
    375     {
    376       "id": "blossom_blob_url_port_out_of_range_033",
    377       "kind": "blossom.blob_url.parse.invalid",
    378       "input": {
    379         "url": "https://media.example:65536/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    380       },
    381       "expected": {
    382         "error": "invalid_blob_url"
    383       }
    384     },
    385     {
    386       "id": "blossom_blob_url_uppercase_hash_034",
    387       "kind": "blossom.blob_url.parse.invalid",
    388       "input": {
    389         "url": "https://media.example/BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD.png"
    390       },
    391       "expected": {
    392         "error": "invalid_sha256"
    393       }
    394     },
    395     {
    396       "id": "blossom_blob_url_percent_encoded_extension_035",
    397       "kind": "blossom.blob_url.parse.invalid",
    398       "input": {
    399         "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.%70ng"
    400       },
    401       "expected": {
    402         "error": "invalid_blob_url"
    403       }
    404     },
    405     {
    406       "id": "blossom_blob_url_unbracketed_ipv6_036",
    407       "kind": "blossom.blob_url.parse.invalid",
    408       "input": {
    409         "url": "http://::1/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.bin"
    410       },
    411       "expected": {
    412         "error": "invalid_blob_url"
    413       }
    414     },
    415     {
    416       "id": "blossom_blob_url_leading_whitespace_rejected_036b",
    417       "kind": "blossom.blob_url.parse.invalid",
    418       "input": {
    419         "url": " https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    420       },
    421       "expected": {
    422         "error": "invalid_blob_url"
    423       }
    424     },
    425     {
    426       "id": "blossom_blob_url_embedded_newline_rejected_036c",
    427       "kind": "blossom.blob_url.parse.invalid",
    428       "input": {
    429         "url": "https://media.example/\nba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    430       },
    431       "expected": {
    432         "error": "invalid_blob_url"
    433       }
    434     },
    435     {
    436       "id": "blossom_blob_url_trailing_tab_rejected_036d",
    437       "kind": "blossom.blob_url.parse.invalid",
    438       "input": {
    439         "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png\t"
    440       },
    441       "expected": {
    442         "error": "invalid_blob_url"
    443       }
    444     },
    445     {
    446       "id": "blossom_blob_url_explicit_punycode_accepted_036e",
    447       "kind": "blossom.blob_url.parse.valid",
    448       "input": {
    449         "url": "https://xn--mdia-9oa.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    450       },
    451       "expected": {
    452         "scheme": "https",
    453         "host": "xn--mdia-9oa.example",
    454         "port": null,
    455         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    456         "extension": "png"
    457       }
    458     },
    459     {
    460       "id": "blossom_blob_url_format_character_rejected_036f",
    461       "kind": "blossom.blob_url.parse.invalid",
    462       "input": {
    463         "url": "https://media\u200b.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    464       },
    465       "expected": {
    466         "error": "invalid_blob_url"
    467       }
    468     },
    469     {
    470       "id": "blossom_blob_url_implicit_idna_rejected_036g",
    471       "kind": "blossom.blob_url.parse.invalid",
    472       "input": {
    473         "url": "https://m\u00e9dia.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    474       },
    475       "expected": {
    476         "error": "invalid_blob_url"
    477       }
    478     },
    479     {
    480       "id": "blossom_blob_url_underscore_label_rejected_036h",
    481       "kind": "blossom.blob_url.parse.invalid",
    482       "input": {
    483         "url": "https://media_store.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    484       },
    485       "expected": {
    486         "error": "invalid_blob_url"
    487       }
    488     },
    489     {
    490       "id": "blossom_blob_url_edge_hyphen_rejected_036i",
    491       "kind": "blossom.blob_url.parse.invalid",
    492       "input": {
    493         "url": "https://-media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    494       },
    495       "expected": {
    496         "error": "invalid_blob_url"
    497       }
    498     },
    499     {
    500       "id": "blossom_blob_url_empty_label_rejected_036j",
    501       "kind": "blossom.blob_url.parse.invalid",
    502       "input": {
    503         "url": "https://media..example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    504       },
    505       "expected": {
    506         "error": "invalid_blob_url"
    507       }
    508     },
    509     {
    510       "id": "blossom_blob_url_oversized_label_rejected_036k",
    511       "kind": "blossom.blob_url.parse.invalid",
    512       "input": {
    513         "url": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    514       },
    515       "expected": {
    516         "error": "invalid_blob_url"
    517       }
    518     },
    519     {
    520       "id": "blossom_blob_url_maximum_dns_host_accepted_036l",
    521       "kind": "blossom.blob_url.parse.valid",
    522       "input": {
    523         "url": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    524       },
    525       "expected": {
    526         "scheme": "https",
    527         "host": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
    528         "port": null,
    529         "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    530         "extension": "png"
    531       }
    532     },
    533     {
    534       "id": "blossom_blob_url_oversized_dns_host_rejected_036m",
    535       "kind": "blossom.blob_url.parse.invalid",
    536       "input": {
    537         "url": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    538       },
    539       "expected": {
    540         "error": "invalid_blob_url"
    541       }
    542     },
    543     {
    544       "id": "blossom_reference_https_public_approved_037",
    545       "kind": "blossom.reference_policy.valid",
    546       "input": {
    547         "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    548       },
    549       "expected": {
    550         "approved": true,
    551         "transport": "https"
    552       }
    553     },
    554     {
    555       "id": "blossom_reference_https_private_address_approved_038",
    556       "kind": "blossom.reference_policy.valid",
    557       "input": {
    558         "url": "https://10.0.0.4/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    559       },
    560       "expected": {
    561         "approved": true,
    562         "transport": "https"
    563       }
    564     },
    565     {
    566       "id": "blossom_reference_http_localhost_approved_039",
    567       "kind": "blossom.reference_policy.valid",
    568       "input": {
    569         "url": "http://LOCALHOST:21100/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    570       },
    571       "expected": {
    572         "approved": true,
    573         "transport": "loopback_http"
    574       }
    575     },
    576     {
    577       "id": "blossom_reference_http_localhost_subdomain_approved_040",
    578       "kind": "blossom.reference_policy.valid",
    579       "input": {
    580         "url": "http://media.localhost/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    581       },
    582       "expected": {
    583         "approved": true,
    584         "transport": "loopback_http"
    585       }
    586     },
    587     {
    588       "id": "blossom_reference_http_nested_localhost_subdomain_approved_041",
    589       "kind": "blossom.reference_policy.valid",
    590       "input": {
    591         "url": "http://blossom.dev.localhost/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    592       },
    593       "expected": {
    594         "approved": true,
    595         "transport": "loopback_http"
    596       }
    597     },
    598     {
    599       "id": "blossom_reference_http_ipv4_loopback_approved_042",
    600       "kind": "blossom.reference_policy.valid",
    601       "input": {
    602         "url": "http://127.0.0.1:21100/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    603       },
    604       "expected": {
    605         "approved": true,
    606         "transport": "loopback_http"
    607       }
    608     },
    609     {
    610       "id": "blossom_reference_http_ipv4_loopback_range_approved_043",
    611       "kind": "blossom.reference_policy.valid",
    612       "input": {
    613         "url": "http://127.255.255.254/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    614       },
    615       "expected": {
    616         "approved": true,
    617         "transport": "loopback_http"
    618       }
    619     },
    620     {
    621       "id": "blossom_reference_http_ipv6_loopback_approved_044",
    622       "kind": "blossom.reference_policy.valid",
    623       "input": {
    624         "url": "http://[::1]:21100/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    625       },
    626       "expected": {
    627         "approved": true,
    628         "transport": "loopback_http"
    629       }
    630     },
    631     {
    632       "id": "blossom_reference_http_expanded_ipv6_loopback_approved_045",
    633       "kind": "blossom.reference_policy.valid",
    634       "input": {
    635         "url": "http://[0:0:0:0:0:0:0:1]/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    636       },
    637       "expected": {
    638         "approved": true,
    639         "transport": "loopback_http"
    640       }
    641     },
    642     {
    643       "id": "blossom_reference_http_public_rejected_046",
    644       "kind": "blossom.reference_policy.invalid",
    645       "input": {
    646         "url": "http://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    647       },
    648       "expected": {
    649         "error": "insecure_blob_url"
    650       }
    651     },
    652     {
    653       "id": "blossom_reference_http_false_localhost_suffix_rejected_047",
    654       "kind": "blossom.reference_policy.invalid",
    655       "input": {
    656         "url": "http://localhost.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    657       },
    658       "expected": {
    659         "error": "insecure_blob_url"
    660       }
    661     },
    662     {
    663       "id": "blossom_blob_url_absolute_localhost_name_rejected_048",
    664       "kind": "blossom.blob_url.parse.invalid",
    665       "input": {
    666         "url": "http://localhost./ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    667       },
    668       "expected": {
    669         "error": "invalid_blob_url"
    670       }
    671     },
    672     {
    673       "id": "blossom_reference_http_before_ipv4_loopback_range_rejected_049",
    674       "kind": "blossom.reference_policy.invalid",
    675       "input": {
    676         "url": "http://126.255.255.255/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    677       },
    678       "expected": {
    679         "error": "insecure_blob_url"
    680       }
    681     },
    682     {
    683       "id": "blossom_reference_http_after_ipv4_loopback_range_rejected_050",
    684       "kind": "blossom.reference_policy.invalid",
    685       "input": {
    686         "url": "http://128.0.0.0/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    687       },
    688       "expected": {
    689         "error": "insecure_blob_url"
    690       }
    691     },
    692     {
    693       "id": "blossom_reference_http_private_ipv4_rejected_051",
    694       "kind": "blossom.reference_policy.invalid",
    695       "input": {
    696         "url": "http://10.0.0.4/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    697       },
    698       "expected": {
    699         "error": "insecure_blob_url"
    700       }
    701     },
    702     {
    703       "id": "blossom_reference_http_unspecified_ipv4_rejected_052",
    704       "kind": "blossom.reference_policy.invalid",
    705       "input": {
    706         "url": "http://0.0.0.0/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    707       },
    708       "expected": {
    709         "error": "insecure_blob_url"
    710       }
    711     },
    712     {
    713       "id": "blossom_reference_http_ipv6_link_local_rejected_053",
    714       "kind": "blossom.reference_policy.invalid",
    715       "input": {
    716         "url": "http://[fe80::1]/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    717       },
    718       "expected": {
    719         "error": "insecure_blob_url"
    720       }
    721     },
    722     {
    723       "id": "blossom_reference_http_ipv4_mapped_ipv6_rejected_054",
    724       "kind": "blossom.reference_policy.invalid",
    725       "input": {
    726         "url": "http://[::ffff:127.0.0.1]/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    727       },
    728       "expected": {
    729         "error": "insecure_blob_url"
    730       }
    731     },
    732     {
    733       "id": "blossom_blob_url_short_ipv4_spelling_rejected_055",
    734       "kind": "blossom.blob_url.parse.invalid",
    735       "input": {
    736         "url": "http://127.1/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    737       },
    738       "expected": {
    739         "error": "invalid_blob_url"
    740       }
    741     },
    742     {
    743       "id": "blossom_reference_http_private_ipv4_second_range_rejected_056",
    744       "kind": "blossom.reference_policy.invalid",
    745       "input": {
    746         "url": "http://192.168.1.4/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png"
    747       },
    748       "expected": {
    749         "error": "insecure_blob_url"
    750       }
    751     },
    752     {
    753       "id": "blossom_media_type_image_png_057",
    754       "kind": "blossom.media_type.parse.valid",
    755       "input": {
    756         "media_type": "image/png"
    757       },
    758       "expected": {
    759         "media_type": "image/png"
    760       }
    761     },
    762     {
    763       "id": "blossom_media_type_case_canonicalized_058",
    764       "kind": "blossom.media_type.parse.valid",
    765       "input": {
    766         "media_type": "IMAGE/PNG"
    767       },
    768       "expected": {
    769         "media_type": "image/png"
    770       }
    771     },
    772     {
    773       "id": "blossom_media_type_vendor_token_059",
    774       "kind": "blossom.media_type.parse.valid",
    775       "input": {
    776         "media_type": "application/vnd.radroots.fixture+json"
    777       },
    778       "expected": {
    779         "media_type": "application/vnd.radroots.fixture+json"
    780       }
    781     },
    782     {
    783       "id": "blossom_media_type_empty_060",
    784       "kind": "blossom.media_type.parse.invalid",
    785       "input": {
    786         "media_type": ""
    787       },
    788       "expected": {
    789         "error": "invalid_media_type"
    790       }
    791     },
    792     {
    793       "id": "blossom_media_type_parameters_sorted_and_canonicalized_061",
    794       "kind": "blossom.media_type.parse.valid",
    795       "input": {
    796         "media_type": "TEXT/PLAIN; PROFILE=web; CHARSET=UTF-8"
    797       },
    798       "expected": {
    799         "media_type": "text/plain; charset=UTF-8; profile=web"
    800       }
    801     },
    802     {
    803       "id": "blossom_media_type_duplicate_parameter_rejected_061b",
    804       "kind": "blossom.media_type.parse.invalid",
    805       "input": {
    806         "media_type": "image/png; profile=a; PROFILE=b"
    807       },
    808       "expected": {
    809         "error": "invalid_media_type"
    810       }
    811     },
    812     {
    813       "id": "blossom_media_type_missing_separator_062",
    814       "kind": "blossom.media_type.parse.invalid",
    815       "input": {
    816         "media_type": "imagepng"
    817       },
    818       "expected": {
    819         "error": "invalid_media_type"
    820       }
    821     },
    822     {
    823       "id": "blossom_media_type_empty_subtype_063",
    824       "kind": "blossom.media_type.parse.invalid",
    825       "input": {
    826         "media_type": "image/"
    827       },
    828       "expected": {
    829         "error": "invalid_media_type"
    830       }
    831     },
    832     {
    833       "id": "blossom_media_type_wildcard_forbidden_064",
    834       "kind": "blossom.media_type.parse.invalid",
    835       "input": {
    836         "media_type": "image/*"
    837       },
    838       "expected": {
    839         "error": "invalid_media_type"
    840       }
    841     },
    842     {
    843       "id": "blossom_media_type_parser_truncated_whitespace_forbidden_065",
    844       "kind": "blossom.media_type.parse.invalid",
    845       "input": {
    846         "media_type": "image/png "
    847       },
    848       "expected": {
    849         "error": "invalid_media_type"
    850       }
    851     },
    852     {
    853       "id": "blossom_media_type_non_ascii_forbidden_066",
    854       "kind": "blossom.media_type.parse.invalid",
    855       "input": {
    856         "media_type": "image/p\u00f1g"
    857       },
    858       "expected": {
    859         "error": "invalid_media_type"
    860       }
    861     },
    862     {
    863       "id": "blossom_descriptor_https_valid_067",
    864       "kind": "blossom.descriptor.parse.valid",
    865       "input": {
    866         "descriptor": {
    867           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
    868           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    869           "size": 3,
    870           "type": "text/plain",
    871           "uploaded": 1700000000
    872         }
    873       },
    874       "expected": {
    875         "descriptor": {
    876           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
    877           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    878           "size": 3,
    879           "type": "text/plain",
    880           "uploaded": 1700000000
    881         }
    882       }
    883     },
    884     {
    885       "id": "blossom_descriptor_empty_blob_extra_fields_valid_068",
    886       "kind": "blossom.descriptor.parse.valid",
    887       "input": {
    888         "descriptor": {
    889           "url": "https://media.example/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.bin",
    890           "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    891           "size": 0,
    892           "type": "application/octet-stream",
    893           "uploaded": 0,
    894           "blurhash": "fixture-only-extra-field",
    895           "custom": {
    896             "version": 1
    897           }
    898         }
    899       },
    900       "expected": {
    901         "descriptor": {
    902           "url": "https://media.example/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.bin",
    903           "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    904           "size": 0,
    905           "type": "application/octet-stream",
    906           "uploaded": 0
    907         }
    908       }
    909     },
    910     {
    911       "id": "blossom_descriptor_extension_does_not_define_mime_069",
    912       "kind": "blossom.descriptor.parse.valid",
    913       "input": {
    914         "descriptor": {
    915           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.jpg",
    916           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    917           "size": 3,
    918           "type": "image/png",
    919           "uploaded": 1700000001
    920         }
    921       },
    922       "expected": {
    923         "descriptor": {
    924           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.jpg",
    925           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    926           "size": 3,
    927           "type": "image/png",
    928           "uploaded": 1700000001
    929         }
    930       }
    931     },
    932     {
    933       "id": "blossom_descriptor_public_http_structurally_valid_070",
    934       "kind": "blossom.descriptor.parse.valid",
    935       "input": {
    936         "descriptor": {
    937           "url": "http://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
    938           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    939           "size": 3,
    940           "type": "text/plain",
    941           "uploaded": 1700000002
    942         }
    943       },
    944       "expected": {
    945         "descriptor": {
    946           "url": "http://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
    947           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    948           "size": 3,
    949           "type": "text/plain",
    950           "uploaded": 1700000002
    951         }
    952       }
    953     },
    954     {
    955       "id": "blossom_descriptor_media_type_canonicalized_071",
    956       "kind": "blossom.descriptor.parse.valid",
    957       "input": {
    958         "descriptor": {
    959           "url": "http://127.0.0.1:21100/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.PNG",
    960           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    961           "size": 3,
    962           "type": "IMAGE/PNG",
    963           "uploaded": 0
    964         }
    965       },
    966       "expected": {
    967         "descriptor": {
    968           "url": "http://127.0.0.1:21100/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.PNG",
    969           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    970           "size": 3,
    971           "type": "image/png",
    972           "uploaded": 0
    973         }
    974       }
    975     },
    976     {
    977       "id": "blossom_descriptor_missing_url_072",
    978       "kind": "blossom.descriptor.parse.invalid",
    979       "input": {
    980         "descriptor": {
    981           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
    982           "size": 3,
    983           "type": "text/plain",
    984           "uploaded": 1700000000
    985         }
    986       },
    987       "expected": {
    988         "error": "missing_descriptor_field",
    989         "field": "url"
    990       }
    991     },
    992     {
    993       "id": "blossom_descriptor_missing_sha256_073",
    994       "kind": "blossom.descriptor.parse.invalid",
    995       "input": {
    996         "descriptor": {
    997           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
    998           "size": 3,
    999           "type": "text/plain",
   1000           "uploaded": 1700000000
   1001         }
   1002       },
   1003       "expected": {
   1004         "error": "missing_descriptor_field",
   1005         "field": "sha256"
   1006       }
   1007     },
   1008     {
   1009       "id": "blossom_descriptor_missing_size_074",
   1010       "kind": "blossom.descriptor.parse.invalid",
   1011       "input": {
   1012         "descriptor": {
   1013           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1014           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1015           "type": "text/plain",
   1016           "uploaded": 1700000000
   1017         }
   1018       },
   1019       "expected": {
   1020         "error": "missing_descriptor_field",
   1021         "field": "size"
   1022       }
   1023     },
   1024     {
   1025       "id": "blossom_descriptor_missing_type_075",
   1026       "kind": "blossom.descriptor.parse.invalid",
   1027       "input": {
   1028         "descriptor": {
   1029           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1030           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1031           "size": 3,
   1032           "uploaded": 1700000000
   1033         }
   1034       },
   1035       "expected": {
   1036         "error": "missing_descriptor_field",
   1037         "field": "type"
   1038       }
   1039     },
   1040     {
   1041       "id": "blossom_descriptor_missing_uploaded_076",
   1042       "kind": "blossom.descriptor.parse.invalid",
   1043       "input": {
   1044         "descriptor": {
   1045           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1046           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1047           "size": 3,
   1048           "type": "text/plain"
   1049         }
   1050       },
   1051       "expected": {
   1052         "error": "missing_descriptor_field",
   1053         "field": "uploaded"
   1054       }
   1055     },
   1056     {
   1057       "id": "blossom_descriptor_url_extension_required_077",
   1058       "kind": "blossom.descriptor.parse.invalid",
   1059       "input": {
   1060         "descriptor": {
   1061           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1062           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1063           "size": 3,
   1064           "type": "text/plain",
   1065           "uploaded": 1700000000
   1066         }
   1067       },
   1068       "expected": {
   1069         "error": "descriptor_extension_required"
   1070       }
   1071     },
   1072     {
   1073       "id": "blossom_descriptor_url_hash_mismatch_078",
   1074       "kind": "blossom.descriptor.parse.invalid",
   1075       "input": {
   1076         "descriptor": {
   1077           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1078           "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
   1079           "size": 3,
   1080           "type": "text/plain",
   1081           "uploaded": 1700000000
   1082         }
   1083       },
   1084       "expected": {
   1085         "error": "descriptor_hash_mismatch"
   1086       }
   1087     },
   1088     {
   1089       "id": "blossom_descriptor_negative_size_079",
   1090       "kind": "blossom.descriptor.parse.invalid",
   1091       "input": {
   1092         "descriptor": {
   1093           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1094           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1095           "size": -1,
   1096           "type": "text/plain",
   1097           "uploaded": 1700000000
   1098         }
   1099       },
   1100       "expected": {
   1101         "error": "invalid_descriptor_size"
   1102       }
   1103     },
   1104     {
   1105       "id": "blossom_descriptor_fractional_size_080",
   1106       "kind": "blossom.descriptor.parse.invalid",
   1107       "input": {
   1108         "descriptor": {
   1109           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1110           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1111           "size": 3.5,
   1112           "type": "text/plain",
   1113           "uploaded": 1700000000
   1114         }
   1115       },
   1116       "expected": {
   1117         "error": "invalid_descriptor_size"
   1118       }
   1119     },
   1120     {
   1121       "id": "blossom_descriptor_negative_uploaded_081",
   1122       "kind": "blossom.descriptor.parse.invalid",
   1123       "input": {
   1124         "descriptor": {
   1125           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1126           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1127           "size": 3,
   1128           "type": "text/plain",
   1129           "uploaded": -1
   1130         }
   1131       },
   1132       "expected": {
   1133         "error": "invalid_descriptor_uploaded"
   1134       }
   1135     },
   1136     {
   1137       "id": "blossom_descriptor_parameterized_media_type_valid_082",
   1138       "kind": "blossom.descriptor.parse.valid",
   1139       "input": {
   1140         "descriptor": {
   1141           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1142           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1143           "size": 3,
   1144           "type": "TEXT/PLAIN; PROFILE=mobile; CHARSET=UTF-8",
   1145           "uploaded": 1700000000
   1146         }
   1147       },
   1148       "expected": {
   1149         "descriptor": {
   1150           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1151           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1152           "size": 3,
   1153           "type": "text/plain; charset=UTF-8; profile=mobile",
   1154           "uploaded": 1700000000
   1155         }
   1156       }
   1157     },
   1158     {
   1159       "id": "blossom_descriptor_invalid_media_type_082b",
   1160       "kind": "blossom.descriptor.parse.invalid",
   1161       "input": {
   1162         "descriptor": {
   1163           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1164           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1165           "size": 3,
   1166           "type": "image/",
   1167           "uploaded": 1700000000
   1168         }
   1169       },
   1170       "expected": {
   1171         "error": "invalid_media_type"
   1172       }
   1173     },
   1174     {
   1175       "id": "blossom_descriptor_uppercase_sha256_083",
   1176       "kind": "blossom.descriptor.parse.invalid",
   1177       "input": {
   1178         "descriptor": {
   1179           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1180           "sha256": "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD",
   1181           "size": 3,
   1182           "type": "text/plain",
   1183           "uploaded": 1700000000
   1184         }
   1185       },
   1186       "expected": {
   1187         "error": "invalid_sha256"
   1188       }
   1189     },
   1190     {
   1191       "id": "blossom_descriptor_url_query_forbidden_084",
   1192       "kind": "blossom.descriptor.parse.invalid",
   1193       "input": {
   1194         "descriptor": {
   1195           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt?download=1",
   1196           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1197           "size": 3,
   1198           "type": "text/plain",
   1199           "uploaded": 1700000000
   1200         }
   1201       },
   1202       "expected": {
   1203         "error": "blob_url_query_forbidden"
   1204       }
   1205     },
   1206     {
   1207       "id": "blossom_descriptor_approved_https_reference_084b",
   1208       "kind": "blossom.descriptor.approve_reference.valid",
   1209       "input": {
   1210         "descriptor": {
   1211           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1212           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1213           "size": 3,
   1214           "type": "text/plain",
   1215           "uploaded": 1700000000
   1216         }
   1217       },
   1218       "expected": {
   1219         "approved_url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt"
   1220       }
   1221     },
   1222     {
   1223       "id": "blossom_descriptor_public_http_reference_rejected_084c",
   1224       "kind": "blossom.descriptor.approve_reference.invalid",
   1225       "input": {
   1226         "descriptor": {
   1227           "url": "http://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1228           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1229           "size": 3,
   1230           "type": "text/plain",
   1231           "uploaded": 1700000000
   1232         }
   1233       },
   1234       "expected": {
   1235         "error": "insecure_blob_url"
   1236       }
   1237     },
   1238     {
   1239       "id": "blossom_descriptor_verify_abc_valid_085",
   1240       "kind": "blossom.descriptor.verify_bytes.valid",
   1241       "input": {
   1242         "descriptor": {
   1243           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1244           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1245           "size": 3,
   1246           "type": "text/plain",
   1247           "uploaded": 1700000000
   1248         },
   1249         "approved_media_type": "text/plain",
   1250         "bytes_hex": "616263"
   1251       },
   1252       "expected": {
   1253         "verified": {
   1254           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1255           "size": 3,
   1256           "media_type": "text/plain"
   1257         }
   1258       }
   1259     },
   1260     {
   1261       "id": "blossom_descriptor_verify_empty_valid_086",
   1262       "kind": "blossom.descriptor.verify_bytes.valid",
   1263       "input": {
   1264         "descriptor": {
   1265           "url": "https://media.example/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.bin",
   1266           "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
   1267           "size": 0,
   1268           "type": "application/octet-stream",
   1269           "uploaded": 1700000000
   1270         },
   1271         "approved_media_type": "application/octet-stream",
   1272         "bytes_hex": ""
   1273       },
   1274       "expected": {
   1275         "verified": {
   1276           "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
   1277           "size": 0,
   1278           "media_type": "application/octet-stream"
   1279         }
   1280       }
   1281     },
   1282     {
   1283       "id": "blossom_descriptor_verify_no_sniff_or_extension_inference_087",
   1284       "kind": "blossom.descriptor.verify_bytes.valid",
   1285       "input": {
   1286         "descriptor": {
   1287           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.jpg",
   1288           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1289           "size": 3,
   1290           "type": "image/png",
   1291           "uploaded": 1700000000
   1292         },
   1293         "approved_media_type": "image/png",
   1294         "bytes_hex": "616263"
   1295       },
   1296       "expected": {
   1297         "verified": {
   1298           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1299           "size": 3,
   1300           "media_type": "image/png"
   1301         }
   1302       }
   1303     },
   1304     {
   1305       "id": "blossom_descriptor_verify_approved_media_type_canonicalized_088",
   1306       "kind": "blossom.descriptor.verify_bytes.valid",
   1307       "input": {
   1308         "descriptor": {
   1309           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.png",
   1310           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1311           "size": 3,
   1312           "type": "image/png",
   1313           "uploaded": 1700000000
   1314         },
   1315         "approved_media_type": "IMAGE/PNG",
   1316         "bytes_hex": "616263"
   1317       },
   1318       "expected": {
   1319         "verified": {
   1320           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1321           "size": 3,
   1322           "media_type": "image/png"
   1323         }
   1324       }
   1325     },
   1326     {
   1327       "id": "blossom_descriptor_verify_hash_mismatch_089",
   1328       "kind": "blossom.descriptor.verify_bytes.invalid",
   1329       "input": {
   1330         "descriptor": {
   1331           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1332           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1333           "size": 7,
   1334           "type": "text/plain",
   1335           "uploaded": 1700000000
   1336         },
   1337         "approved_media_type": "text/plain",
   1338         "bytes_hex": "6368616e676564"
   1339       },
   1340       "expected": {
   1341         "error": "blob_hash_mismatch"
   1342       }
   1343     },
   1344     {
   1345       "id": "blossom_descriptor_verify_size_mismatch_090",
   1346       "kind": "blossom.descriptor.verify_bytes.invalid",
   1347       "input": {
   1348         "descriptor": {
   1349           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1350           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1351           "size": 4,
   1352           "type": "text/plain",
   1353           "uploaded": 1700000000
   1354         },
   1355         "approved_media_type": "text/plain",
   1356         "bytes_hex": "616263"
   1357       },
   1358       "expected": {
   1359         "error": "blob_size_mismatch"
   1360       }
   1361     },
   1362     {
   1363       "id": "blossom_descriptor_verify_media_type_mismatch_091",
   1364       "kind": "blossom.descriptor.verify_bytes.invalid",
   1365       "input": {
   1366         "descriptor": {
   1367           "url": "https://media.example/ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.txt",
   1368           "sha256": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
   1369           "size": 3,
   1370           "type": "text/plain",
   1371           "uploaded": 1700000000
   1372         },
   1373         "approved_media_type": "application/octet-stream",
   1374         "bytes_hex": "616263"
   1375       },
   1376       "expected": {
   1377         "error": "blob_media_type_mismatch"
   1378       }
   1379     }
   1380   ]
   1381 }