def test_codec_identity(self): # Not zero-destructive. self.assertEqual(codec.base64_decode(codec.base64_encode(ZERO_BYTES)), ZERO_BYTES) self.assertEqual(codec.base64_decode(codec.base64_encode(RANDOM_BYTES_1024)), RANDOM_BYTES_1024) self.assertEqual(codec.base64_decode(codec.base64_encode(RANDOM_BYTES_2048)), RANDOM_BYTES_2048) self.assertEqual(codec.base64_decode(codec.base64_encode(RANDOM_BYTES_4093)), RANDOM_BYTES_4093)
def test_codec_identity(self): # Not zero-destructive. self.assertEqual(base64_decode(base64_encode(zero_bytes)), zero_bytes) self.assertEqual(base64_decode(base64_encode(random_bytes_1024)), random_bytes_1024) self.assertEqual(base64_decode(base64_encode(random_bytes_2048)), random_bytes_2048) self.assertEqual(base64_decode(base64_encode(random_bytes_len_4093)), random_bytes_len_4093)
def test_correctness(self): self.assertEqual(codec.base64_urlsafe_encode(URL_SAFETY_TEST_BYTES), URL_SAFETY_TEST_SAFE_ENCODED) self.assertEqual(codec.base64_encode(URL_SAFETY_TEST_BYTES), URL_SAFETY_TEST_STANDARD_ENCODED) self.assertEqual(codec.base64_urlsafe_decode(URL_SAFETY_TEST_SAFE_ENCODED), URL_SAFETY_TEST_BYTES) self.assertEqual(codec.base64_decode(URL_SAFETY_TEST_STANDARD_ENCODED), URL_SAFETY_TEST_BYTES) # Tests whether this decoder can decode standard encoded base64 # representation too. self.assertEqual( codec.base64_urlsafe_decode(URL_SAFETY_TEST_STANDARD_ENCODED), URL_SAFETY_TEST_BYTES )
def test_correctness(self): self.assertEqual(base64_urlsafe_encode(url_safety_test_bytes), url_safety_test_safe_encoded) self.assertEqual(base64_encode(url_safety_test_bytes), url_safety_test_standard_encoded) self.assertEqual(base64_urlsafe_decode(url_safety_test_safe_encoded), url_safety_test_bytes) self.assertEqual(base64_decode(url_safety_test_standard_encoded), url_safety_test_bytes) # Tests whether this decoder can decode standard encoded base64 # representation too. self.assertEqual( base64_urlsafe_decode(url_safety_test_standard_encoded), url_safety_test_bytes )
def pem_to_der(pem_cert_string, pem_header, pem_footer): """ Extracts the DER as a byte sequence out of an ASCII PEM formatted certificate or key. Taken from the Python SSL module. :param pem_cert_string: The PEM certificate or key string. :param pem_header: The PEM header to find. :param pem_footer: The PEM footer to find. """ # Be a little lenient. pem_cert_string = pem_cert_string.strip() if not pem_cert_string.startswith(pem_header): raise ValueError("Invalid PEM encoding; must start with %s" % pem_header) if not pem_cert_string.endswith(pem_footer): raise ValueError("Invalid PEM encoding; must end with %s" % pem_footer) encoded = pem_cert_string[len(pem_header):-len(pem_footer)] return codec.base64_decode(encoded)
def verify_rsa_sha1_signature(signature, base_string, client_certificate, *args, **kwargs): """ Verifies a RSA-SHA1 OAuth signature. :see: RSA-SHA1 (http://tools.ietf.org/html/rfc5849#section-3.4.3) :param base_string: Base string. :param signature: RSA-SHA1 OAuth signature. :param client_certificate: PEM-encoded X.509 certificate or RSA public key. :returns: ``True`` if verified to be correct; ``False`` otherwise. """ from mom.security.rsa import parse_public_key key = parse_public_key(client_certificate) return key.pkcs1_v1_5_verify(sha1_digest(base_string), base64_decode(signature))
def pem_to_der(pem_cert_string, pem_header, pem_footer): """ Extracts the DER as a byte sequence out of an ASCII PEM formatted certificate or key. Taken from the Python SSL module. :param pem_cert_string: The PEM certificate or key string. :param pem_header: The PEM header to find. :param pem_footer: The PEM footer to find. """ # Be a little lenient. pem_cert_string = pem_cert_string.strip() if not pem_cert_string.startswith(pem_header): raise ValueError("Invalid PEM encoding; must start with %s" % pem_header) if not pem_cert_string.endswith(pem_footer): raise ValueError("Invalid PEM encoding; must end with %s" % pem_footer) encoded = pem_cert_string[len(pem_header):-len(pem_footer)] return base64_decode(encoded)
iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBK\ E0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==""") NO_META_DATA_URI = b("""\ data:;base64,\ iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBK\ E0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==""") RFC_BASE64_GIF = b("""R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ hhx4dbgYKAAA7""") RFC_GIF = codec.base64_decode(RFC_BASE64_GIF) RFC_GIF_DATA_URI = b("""\ data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ hhx4dbgYKAAA7""") RFC_NOTE_DATA_URI = b("data:,A%20brief%20note") RFC_NOTE_DECODED = (b("A brief note"), (b("text"), b("plain"), { b("charset"): b("US-ASCII") }))
data:;base64,\ iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBK\ E0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==""" ) RFC_BASE64_GIF = b( """R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ hhx4dbgYKAAA7""" ) RFC_GIF = codec.base64_decode(RFC_BASE64_GIF) RFC_GIF_DATA_URI = b( """\ data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ hhx4dbgYKAAA7""" ) RFC_NOTE_DATA_URI = b("data:,A%20brief%20note")
iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBK\ E0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==''') no_meta_data_url = b('''\ data:;base64,\ iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBK\ E0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==''') rfc_base64_gif = b('''R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ hhx4dbgYKAAA7''') rfc_gif = base64_decode(rfc_base64_gif) rfc_gif_data_url = b('''\ data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ hhx4dbgYKAAA7''') rfc_note_data_url = b('data:,A%20brief%20note') rfc_note_decoded = (b('A brief note'), (b('text'), b('plain'), {b('charset'): b('US-ASCII')})) class Test_encoding(unittest2.TestCase):
def test_range(self): for i in range(100): n_bits = 144 value = bytes_to_integer(base64_decode(generate_client_secret(144))) self.assertTrue(value >= 0 and value < (1 << n_bits)) # 2**n_bits