reverie-zk 0.3.2

An efficient implementation of the NIZKPoK outlined in KKW 2018
Documentation
use std::fs::File;
use std::io::{self, prelude::*, BufReader};

use reverie::algebra::gf2;

use super::Parser;

pub struct WitParser {
    reader: BufReader<File>,
}

impl Parser<bool> for WitParser {
    fn new(reader: BufReader<File>) -> io::Result<Self> {
        Ok(WitParser { reader })
    }

    fn next(&mut self) -> io::Result<Option<bool>> {
        loop {
            let mut buf: [u8; 1] = [0];
            let n = self.reader.read(&mut buf)?;
            if n == 0 {
                return Ok(None);
            }
            match buf[0] as char {
                '0' => {
                    return Ok(Some(false));
                }
                '1' => {
                    return Ok(Some(true));
                }
                _ => (),
            }
        }
    }
}

impl Parser<gf2::Recon> for WitParser {
    fn new(reader: BufReader<File>) -> io::Result<Self> {
        Ok(WitParser { reader })
    }

    fn next(&mut self) -> io::Result<Option<gf2::Recon>> {
        loop {
            let mut buf: [u8; 1] = [0];
            let n = self.reader.read(&mut buf)?;
            if n == 0 {
                return Ok(None);
            }
            match buf[0] as char {
                '0' => {
                    return Ok(Some(false.into()));
                }
                '1' => {
                    return Ok(Some(true.into()));
                }
                _ => (),
            }
        }
    }
}