]> git.proxmox.com Git - rustc.git/blob - vendor/base64ct/tests/url.rs
New upstream version 1.70.0+dfsg2
[rustc.git] / vendor / base64ct / tests / url.rs
1 //! URL-safe Base64 tests
2
3 #[macro_use]
4 mod common;
5
6 /// URL-safe Base64 with `=` padding
7 mod padded {
8 use crate::common::*;
9 use base64ct::Base64Url;
10
11 const TEST_VECTORS: &[TestVector] = &[
12 TestVector { raw: b"", b64: "" },
13 TestVector {
14 raw: b"\0",
15 b64: "AA==",
16 },
17 TestVector {
18 raw: b"***",
19 b64: "Kioq",
20 },
21 TestVector {
22 raw: b"\x01\x02\x03\x04",
23 b64: "AQIDBA==",
24 },
25 TestVector {
26 raw: b"\xAD\xAD\xAD\xAD\xAD",
27 b64: "ra2tra0=",
28 },
29 TestVector {
30 raw: b"\xFF\xEF\xFE\xFF\xEF\xFE",
31 b64: "_-_-_-_-",
32 },
33 TestVector {
34 raw: b"\xFF\xFF\xFF\xFF\xFF",
35 b64: "______8=",
36 },
37 TestVector {
38 raw: b"\x40\xC1\x3F\xBD\x05\x4C\x72\x2A\xA3\xC2\xF2\x11\x73\xC0\x69\xEA\
39 \x49\x7D\x35\x29\x6B\xCC\x24\x65\xF6\xF9\xD0\x41\x08\x7B\xD7\xA9",
40 b64: "QME_vQVMciqjwvIRc8Bp6kl9NSlrzCRl9vnQQQh716k=",
41 },
42 TestVector {
43 raw: b"\x00\x10\x83\x10Q\x87 \x92\x8B0\xD3\x8FA\x14\x93QU\x97a\x96\x9Bq\
44 \xD7\x9F\x82\x18\xA3\x92Y\xA7\xA2\x9A\xAB\xB2\xDB\xAF\xC3\x1C\xB3\
45 \xFB\xF0\x00",
46 b64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_AA",
47 },
48 ];
49
50 impl_tests!(Base64Url);
51
52 #[test]
53 fn reject_trailing_whitespace() {
54 let input = "QME/vQVMciqjwvIRc8Bp6kl9NSlrzCRl9vnQQQh716k\n";
55 let mut buf = [0u8; 1024];
56 assert_eq!(
57 Base64Url::decode(input, &mut buf),
58 Err(Error::InvalidEncoding)
59 );
60 }
61 }
62
63 /// URL-safe Base64 *without* padding
64 mod unpadded {
65 use crate::common::*;
66 use base64ct::Base64UrlUnpadded;
67
68 const TEST_VECTORS: &[TestVector] = &[
69 TestVector { raw: b"", b64: "" },
70 TestVector {
71 raw: b"\0",
72 b64: "AA",
73 },
74 TestVector {
75 raw: b"***",
76 b64: "Kioq",
77 },
78 TestVector {
79 raw: b"\x01\x02\x03\x04",
80 b64: "AQIDBA",
81 },
82 TestVector {
83 raw: b"\xAD\xAD\xAD\xAD\xAD",
84 b64: "ra2tra0",
85 },
86 TestVector {
87 raw: b"\xFF\xEF\xFE\xFF\xEF\xFE",
88 b64: "_-_-_-_-",
89 },
90 TestVector {
91 raw: b"\xFF\xFF\xFF\xFF\xFF",
92 b64: "______8",
93 },
94 TestVector {
95 raw: b"\x40\xC1\x3F\xBD\x05\x4C\x72\x2A\xA3\xC2\xF2\x11\x73\xC0\x69\xEA\
96 \x49\x7D\x35\x29\x6B\xCC\x24\x65\xF6\xF9\xD0\x41\x08\x7B\xD7\xA9",
97 b64: "QME_vQVMciqjwvIRc8Bp6kl9NSlrzCRl9vnQQQh716k",
98 },
99 TestVector {
100 raw: b"\x00\x10\x83\x10Q\x87 \x92\x8B0\xD3\x8FA\x14\x93QU\x97a\x96\x9Bq\
101 \xD7\x9F\x82\x18\xA3\x92Y\xA7\xA2\x9A\xAB\xB2\xDB\xAF\xC3\x1C\xB3\
102 \xFB\xF0\x00",
103 b64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_AA",
104 },
105 ];
106
107 impl_tests!(Base64UrlUnpadded);
108
109 #[test]
110 fn reject_trailing_whitespace() {
111 let input = "QME/vQVMciqjwvIRc8Bp6kl9NSlrzCRl9vnQQQh716k\n";
112 let mut buf = [0u8; 1024];
113 assert_eq!(
114 Base64UrlUnpadded::decode(input, &mut buf),
115 Err(Error::InvalidEncoding)
116 );
117 }
118
119 #[test]
120 fn unpadded_reject_trailing_equals() {
121 let input = "QME_vQVMciqjwvIRc8Bp6kl9NSlrzCRl9vnQQQh716k=";
122 let mut buf = [0u8; 1024];
123 assert_eq!(
124 Base64UrlUnpadded::decode(input, &mut buf),
125 Err(Error::InvalidEncoding)
126 );
127 }
128 }