What encoding is the data in?
On Fri, Sep 4, 2015 at 8:42 PM, Corey Moncure <[email protected]>
wrote:
> Extremely new to Julia. My background is in Python and C.
> Working on implementing the Matasano crypto challenges in Julia to learn
> the ins and outs. The implementations require heavy use of string
> conversions, casting, and byte comparisons.
>
> Since Julia's built-in ascii() barfs on any byte that can't be represented
> in ASCII, it became useful to define a function that filters out all such
> bytes from a byte vector.
>
> function ascii_filter(s::Array{Uint8})
> if is_valid_ascii(s)
> return s
> end
> filter!(x -> is_valid_ascii([x]), s)
> @assert is_valid_ascii(s)
> s = ascii(s)
> @assert isa(s, ASCIIString) <--
> assertion OK
> return s
> end
>
>
>
> The fact that is_valid_ascii() only has a method for vectors of bytes, and
> not a single byte, is a minor annoyance that is worked around by an
> anonymous function that wraps a Uint8 as a Vector{Uint8} of length 1.
> However, I cannot seem to make this return a variable of type ASCIIString,
> which is necessary for later use with uppercase(), etc.
>
> function detect_xor_encryption(cipher_text::Array{Uint8}, keys::Vector,
> threshold::Int = 50)
> {...}
> clear_text = ascii_filter(repeating_xor(cipher_text, key))
> @assert isa(clear_text, ASCIIString) <--
> assertion fails
> s = score_candidate_language(clear_text, "english")
> {...}
>
>
>
> function score_candidate_language(test_str::ASCIIString, language::String)
> {...}
>
>
>
> At the time of assignment to clear_text, it seems the return value of
> ascii_filter() has fallen back to Array{Uint8}. No amount of monkeying
> around in ascii_filter() could solve the problem. I tried defining
> s::ASCIIString, and explicitly returning ascii(s) after the assert. It
> seems that no matter what I do, I have to explicitly define the type of a
> variable as ::ASCIIString or wrap ascii() in the *calling function* every
> time I want to use ascii_filter() to build an ASCIIString and pass it to a
> function that takes an ASCIIString as an argument.
>
> Is this intended? Am I missing something obvious?
>