{.used.} import std/strutils, stew/[results, byteutils], testutils/unittests import ../../waku/common/base64 suite "Waku Common - stew base64 wrapper": const TestData = @[ # Test vectors from RFC 4648 # See: https://datatracker.ietf.org/doc/html/rfc4648#section-10 ("", Base64String("")), ("f", Base64String("Zg==")), ("fo", Base64String("Zm8=")), ("foo", Base64String("Zm9v")), ("foob", Base64String("Zm9vYg==")), ("fooba", Base64String("Zm9vYmE=")), ("foobar", Base64String("Zm9vYmFy")), # Custom test vectors ("\x01", Base64String("AQ==")), ("\x13", Base64String("Ew==")), ("\x01\x02\x03\x04", Base64String("AQIDBA==")), ] for (plaintext, encoded) in TestData: test "encode into base64 (" & escape(plaintext) & " -> \"" & string(encoded) & "\")": ## Given let data = plaintext ## When let encodedData = base64.encode(data) ## Then check: encodedData == encoded test "decode from base64 (\"" & string(encoded) & "\" -> " & escape(plaintext) & ")": ## Given let data = encoded ## When let decodedRes = base64.decode(data) ## Then check: decodedRes.isOk() let decoded = decodedRes.tryGet() check: decoded == toBytes(plaintext)