1*e0c4386eSCy Schubert# 2*e0c4386eSCy Schubert# Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. 3*e0c4386eSCy Schubert# 4*e0c4386eSCy Schubert# Licensed under the Apache License 2.0 (the "License"). You may not use 5*e0c4386eSCy Schubert# this file except in compliance with the License. You can obtain a copy 6*e0c4386eSCy Schubert# in the file LICENSE in the source distribution or at 7*e0c4386eSCy Schubert# https://www.openssl.org/source/license.html 8*e0c4386eSCy Schubert 9*e0c4386eSCy Schubert# Tests start with one of these keywords 10*e0c4386eSCy Schubert# Cipher Decrypt Derive Digest Encoding KDF MAC PBE 11*e0c4386eSCy Schubert# PrivPubKeyPair Sign Verify VerifyRecover 12*e0c4386eSCy Schubert# and continue until a blank line. Lines starting with a pound sign are ignored. 13*e0c4386eSCy Schubert 14*e0c4386eSCy SchubertTitle = Base64 tests 15*e0c4386eSCy Schubert 16*e0c4386eSCy SchubertEncoding = canonical 17*e0c4386eSCy SchubertInput = "" 18*e0c4386eSCy SchubertOutput = "" 19*e0c4386eSCy Schubert 20*e0c4386eSCy SchubertEncoding = canonical 21*e0c4386eSCy SchubertInput = "h" 22*e0c4386eSCy SchubertOutput = "aA==\n" 23*e0c4386eSCy Schubert 24*e0c4386eSCy SchubertEncoding = canonical 25*e0c4386eSCy SchubertInput = "hello" 26*e0c4386eSCy SchubertOutput = "aGVsbG8=\n" 27*e0c4386eSCy Schubert 28*e0c4386eSCy SchubertEncoding = canonical 29*e0c4386eSCy SchubertInput = "hello world!" 30*e0c4386eSCy SchubertOutput = "aGVsbG8gd29ybGQh\n" 31*e0c4386eSCy Schubert 32*e0c4386eSCy SchubertEncoding = canonical 33*e0c4386eSCy SchubertInput = 00010203040506070809a0b0c0d0e0f000 34*e0c4386eSCy SchubertOutput = "AAECAwQFBgcICaCwwNDg8AA=\n" 35*e0c4386eSCy Schubert 36*e0c4386eSCy Schubert# Missing padding 37*e0c4386eSCy SchubertEncoding = invalid 38*e0c4386eSCy SchubertOutput = "aGVsbG8" 39*e0c4386eSCy Schubert 40*e0c4386eSCy SchubertEncoding = invalid 41*e0c4386eSCy SchubertOutput = "aGVsbG8\n" 42*e0c4386eSCy Schubert 43*e0c4386eSCy Schubert# Tolerate missing newline 44*e0c4386eSCy SchubertEncoding = valid 45*e0c4386eSCy SchubertInput = "hello" 46*e0c4386eSCy SchubertOutput = "aGVsbG8=" 47*e0c4386eSCy Schubert 48*e0c4386eSCy Schubert# Don't tolerate extra trailing '=' 49*e0c4386eSCy SchubertEncoding = invalid 50*e0c4386eSCy SchubertInput = "hello" 51*e0c4386eSCy SchubertOutput = "aGVsbG8==\n" 52*e0c4386eSCy Schubert 53*e0c4386eSCy SchubertEncoding = invalid 54*e0c4386eSCy SchubertOutput = "aGVsbG8===\n" 55*e0c4386eSCy Schubert 56*e0c4386eSCy Schubert# Don't tolerate data after '=' 57*e0c4386eSCy SchubertEncoding = invalid 58*e0c4386eSCy SchubertOutput = "aGV=sbG8=\n" 59*e0c4386eSCy Schubert 60*e0c4386eSCy Schubert# Newlines are ignored 61*e0c4386eSCy SchubertEncoding = valid 62*e0c4386eSCy SchubertInput = "hello" 63*e0c4386eSCy SchubertOutput = "aGV\nsbG8=\n" 64*e0c4386eSCy Schubert 65*e0c4386eSCy SchubertEncoding = canonical 66*e0c4386eSCy SchubertInput = "hello" 67*e0c4386eSCy SchubertOutput = 614756736247383d0a 68*e0c4386eSCy Schubert 69*e0c4386eSCy Schubert# Invalid characters 70*e0c4386eSCy SchubertEncoding = invalid 71*e0c4386eSCy SchubertOutput = 614756736247383d0a00 72*e0c4386eSCy Schubert 73*e0c4386eSCy SchubertEncoding = invalid 74*e0c4386eSCy SchubertOutput = 61475600736247383d0a 75*e0c4386eSCy Schubert 76*e0c4386eSCy SchubertEncoding = invalid 77*e0c4386eSCy SchubertOutput = 61475601736247383d0a 78*e0c4386eSCy Schubert 79*e0c4386eSCy SchubertEncoding = invalid 80*e0c4386eSCy SchubertOutput = 61475680736247383d0a 81*e0c4386eSCy Schubert 82*e0c4386eSCy SchubertEncoding = invalid 83*e0c4386eSCy SchubertOutput = e14756736247383d0a 84*e0c4386eSCy Schubert 85*e0c4386eSCy SchubertEncoding = canonical 86*e0c4386eSCy SchubertInput = "OpenSSLOpenSSL\n" 87*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0wK\n" 88*e0c4386eSCy Schubert 89*e0c4386eSCy SchubertEncoding = valid 90*e0c4386eSCy SchubertInput = "OpenSSLOpenSSL\n" 91*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0wK" 92*e0c4386eSCy Schubert 93*e0c4386eSCy Schubert# Truncate 1-3 chars 94*e0c4386eSCy SchubertEncoding = invalid 95*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0w" 96*e0c4386eSCy Schubert 97*e0c4386eSCy SchubertEncoding = invalid 98*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0" 99*e0c4386eSCy Schubert 100*e0c4386eSCy SchubertEncoding = invalid 101*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU" 102*e0c4386eSCy Schubert 103*e0c4386eSCy SchubertEncoding = invalid 104*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0wK====" 105*e0c4386eSCy Schubert 106*e0c4386eSCy SchubertEncoding = invalid 107*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0wK============================================\n" 108*e0c4386eSCy Schubert 109*e0c4386eSCy SchubertEncoding = invalid 110*e0c4386eSCy SchubertOutput = "YQ==YQ==YQ==\n" 111*e0c4386eSCy Schubert 112*e0c4386eSCy SchubertEncoding = invalid 113*e0c4386eSCy SchubertOutput = "A" 114*e0c4386eSCy Schubert 115*e0c4386eSCy SchubertEncoding = invalid 116*e0c4386eSCy SchubertOutput = "A\n" 117*e0c4386eSCy Schubert 118*e0c4386eSCy SchubertEncoding = invalid 119*e0c4386eSCy SchubertOutput = "A=" 120*e0c4386eSCy Schubert 121*e0c4386eSCy SchubertEncoding = invalid 122*e0c4386eSCy SchubertOutput = "A==\n" 123*e0c4386eSCy Schubert 124*e0c4386eSCy SchubertEncoding = invalid 125*e0c4386eSCy SchubertOutput = "A===\n" 126*e0c4386eSCy Schubert 127*e0c4386eSCy SchubertEncoding = invalid 128*e0c4386eSCy SchubertOutput = "A====\n" 129*e0c4386eSCy Schubert 130*e0c4386eSCy SchubertEncoding = valid 131*e0c4386eSCy SchubertInput = "OpenSSLOpenSSL\n" 132*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0wK\n\n" 133*e0c4386eSCy Schubert 134*e0c4386eSCy SchubertEncoding = valid 135*e0c4386eSCy SchubertInput = "OpenSSLOpenSSL\n" 136*e0c4386eSCy SchubertOutput = "T3BlblNTTE\n9wZW5TU0wK" 137*e0c4386eSCy Schubert 138*e0c4386eSCy Schubert# CVE 2015-0292 139*e0c4386eSCy SchubertEncoding = invalid 140*e0c4386eSCy SchubertOutput = "ZW5jb2RlIG1lCg==================================================================\n" 141*e0c4386eSCy Schubert 142*e0c4386eSCy SchubertEncoding = canonical 143*e0c4386eSCy SchubertInput = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 144*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\n" 145*e0c4386eSCy Schubert 146*e0c4386eSCy SchubertEncoding = valid 147*e0c4386eSCy SchubertInput = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 148*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA\n==\n" 149*e0c4386eSCy Schubert 150*e0c4386eSCy SchubertEncoding = valid 151*e0c4386eSCy SchubertInput = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 152*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=\n=\n" 153*e0c4386eSCy Schubert 154*e0c4386eSCy SchubertEncoding = invalid 155*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA====\n" 156*e0c4386eSCy Schubert 157*e0c4386eSCy Schubert# Multiline output without padding 158*e0c4386eSCy SchubertEncoding = canonical 159*e0c4386eSCy SchubertInput = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 160*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh4eHh4eHh4\n" 161*e0c4386eSCy Schubert 162*e0c4386eSCy Schubert# Multiline output with padding 163*e0c4386eSCy SchubertEncoding = canonical 164*e0c4386eSCy SchubertInput = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 165*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh4eHh4eHh4eHh4eA==\n" 166*e0c4386eSCy Schubert 167*e0c4386eSCy Schubert# Multiline output with line break in the middle of a b64 block is accepted 168*e0c4386eSCy SchubertEncoding = valid 169*e0c4386eSCy SchubertInput = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 170*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh\n4eHh4eHh4eHh4eHh4eHh4eA==\n" 171*e0c4386eSCy Schubert 172*e0c4386eSCy Schubert# Long lines are accepted 173*e0c4386eSCy SchubertEncoding = valid 174*e0c4386eSCy SchubertInput = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 175*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\n" 176*e0c4386eSCy Schubert 177*e0c4386eSCy Schubert# Multiline input with data after '='. 178*e0c4386eSCy SchubertEncoding = invalid 179*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\neHh4eHh4eHh4eHh4eHh4eHh4\n" 180*e0c4386eSCy Schubert 181*e0c4386eSCy SchubertEncoding = invalid 182*e0c4386eSCy SchubertOutput = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neA==eHh4eHh4eHh4eHh4eHh4\n" 183*e0c4386eSCy Schubert 184*e0c4386eSCy Schubert# B64_EOF ('-') terminates input and trailing bytes are ignored 185*e0c4386eSCy SchubertEncoding = valid 186*e0c4386eSCy SchubertInput = "OpenSSLOpenSSL\n" 187*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0wK\n-abcd" 188*e0c4386eSCy Schubert 189*e0c4386eSCy SchubertEncoding = valid 190*e0c4386eSCy SchubertInput = "OpenSSLOpenSSL\n" 191*e0c4386eSCy SchubertOutput = "T3BlblNTTE9wZW5TU0wK-abcd" 192*e0c4386eSCy Schubert 193