Comment by johnisgood

Comment by johnisgood 2 days ago

6 replies

> IMO cryptographers should start using Rust for their reference implementations

IMO they should not, because if I look at a typical Rust code, I have no clue what is going on even with a basic understanding of Rust. C, however, is as simple as it gets and much closer to pseudocode.

Ar-Curunir 2 days ago

Good cryptographic code should match its algorithmic description. Rust enables abstractions that allow this. C does not. That you have some familiarity with C and not Rust should not be a contributing factor.

I say this as someone who has written cryptographic code that’s been downloaded millions of times.

  • johnisgood a day ago

    The problem in terms of reference implementations is exactly the abstractions. Reference implementations should be free of abstractions and should be understandable. Abstractions make code much less understandable.

    I say this as someone who has been involved in cryptography and has read through dozens of reference implementations. Stick to C, not Python or Rust, it is much easier to understand because the abstractions are just there to hide code. Less abstractions in reference implementations = better. If you do not think so, I will provide you a code snippet of a language of my own choosing that is full of abstractions, and let us see that you understand exactly what it does. You will not. That is the point.

    • Ar-Curunir a day ago

      Abstractions are the only way to make sense of cryptography. Pretending otherwise leads to cross layer bugs and vulnerabilities. Of course bad abstractions are bad, but that doesn’t mean no abstraction is good.

      Feel free to post your challenge snippet.

      • johnisgood 21 hours ago

          pub fn read<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> {
            fn inner(path: &Path) -> io::Result<Vec<u8>> {
              let mut file = File::open(path)?;
              let mut bytes = Vec::new();
              file.read_to_end(&mut bytes)?;
              Ok(bytes)
            }
            inner(path.as_ref())
          }
        
        "aBsTraCtiOnS aRe gOod"... Right.

        Reference implementations must NOT have abstractions like this. Rust encourages it. Lots of Rust codebase is filled with them. Your feelings for Rust is irrelevant. C is simple and easy to understand, therefore reference implementations must be in C. Period.

        ...or Common Lisp, or OCaml... why not?!