Simple One-Time Pad in Rust The 2019 Stack Overflow Developer Survey Results Are InSimple cat in RustSimple TCP client in RustSimple graph in RustSimple virtual machine in RustSimple ASCII art in RustSimple Rust WebserverA simple maze generator written in RustSimple Sudoku solver in RustSimple interpreter written in RustSimple Brainfuck Interpreter in Rust
On the insanity of kings as an argument against monarchy
It's possible to achieve negative score?
Where to refill my bottle in India?
Access elements in std::string where positon of string is greater than its size
Why isn't airport relocation done gradually?
What is the meaning of Triage in Cybersec world?
Inline version of a function returns different value than non-inline version
Landlord wants to switch my lease to a "Land contract" to "get back at the city"
Spanish for "widget"
Why don't Unix/Linux systems traverse through directories until they find the required version of a linked library?
Why is my p-value correlated to difference between means in two sample tests?
Is there a name of the flying bionic bird?
Why is it "Tumoren" and not "Tumore"?
Where does the "burst of radiance" from Holy Weapon originate?
Which Sci-Fi work first showed weapon of galactic-scale mass destruction?
Geography at the pixel level
Could a US political party gain complete control over the government by removing checks & balances?
Is "plugging out" electronic devices an American expression?
Could JWST stay at L2 "forever"?
How to create dashed lines/arrows in Illustrator
Dual Citizen. Exited the US on Italian passport recently
What does "sndry explns" mean in one of the Hitchhiker's guide books?
I looked up a future colleague on LinkedIn before I started a job. I told my colleague about it and he seemed surprised. Should I apologize?
Why is the maximum length of OpenWrt’s root password 8 characters?
Simple One-Time Pad in Rust
The 2019 Stack Overflow Developer Survey Results Are InSimple cat in RustSimple TCP client in RustSimple graph in RustSimple virtual machine in RustSimple ASCII art in RustSimple Rust WebserverA simple maze generator written in RustSimple Sudoku solver in RustSimple interpreter written in RustSimple Brainfuck Interpreter in Rust
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
I am new to rust and to start learning the language I decided to implement a simple one-time pad encryption program.
The part I am least sure about is the reading and writing from the files. Ideally this would run efficiently on large files.
use clap::Arg, App;
use std::
error::Error,
fs::File,
io::
self,
Read,
Write,
,
;
const CAPACITY: usize = 1024;
fn main() -> Result<(), Box<dyn Error>>
let matches = App::new("onetime")
.version("0.1")
.author("Carlo Abelli <carlo@abelli.xyz>")
.about("Encrypts/decrypts a file using a one-time pad.")
.arg(Arg::with_name("FILE")
.required(true)
.help("The file to encrypt/decrypt"))
.arg(Arg::with_name("PAD")
.short("p")
.long("pad")
.takes_value(true)
.value_name("PAD")
.required(true)
.help("The pad to use for encryption/decryption"))
.arg(Arg::with_name("OUTPUT")
.short("o")
.long("output")
.value_name("OUT")
.help("The output file (default: stdout)"))
.get_matches();
let mut file = File::open(matches.value_of("FILE").unwrap())?;
let mut pad = File::open(matches.value_of("PAD").unwrap())?;
if file.metadata()?.len() > pad.metadata()?.len()
panic!("file is larger than pad!");
let mut out: Box<dyn Write> = match matches.value_of("OUTPUT")
Some(name) => Box::new(File::create(name)?),
None => Box::new(io::stdout()),
;
let mut file_buffer = vec![0u8; CAPACITY];
let mut pad_buffer = vec![0u8; CAPACITY];
loop (pad_byte, file_byte)
Ok(())
rust
$endgroup$
add a comment |
$begingroup$
I am new to rust and to start learning the language I decided to implement a simple one-time pad encryption program.
The part I am least sure about is the reading and writing from the files. Ideally this would run efficiently on large files.
use clap::Arg, App;
use std::
error::Error,
fs::File,
io::
self,
Read,
Write,
,
;
const CAPACITY: usize = 1024;
fn main() -> Result<(), Box<dyn Error>>
let matches = App::new("onetime")
.version("0.1")
.author("Carlo Abelli <carlo@abelli.xyz>")
.about("Encrypts/decrypts a file using a one-time pad.")
.arg(Arg::with_name("FILE")
.required(true)
.help("The file to encrypt/decrypt"))
.arg(Arg::with_name("PAD")
.short("p")
.long("pad")
.takes_value(true)
.value_name("PAD")
.required(true)
.help("The pad to use for encryption/decryption"))
.arg(Arg::with_name("OUTPUT")
.short("o")
.long("output")
.value_name("OUT")
.help("The output file (default: stdout)"))
.get_matches();
let mut file = File::open(matches.value_of("FILE").unwrap())?;
let mut pad = File::open(matches.value_of("PAD").unwrap())?;
if file.metadata()?.len() > pad.metadata()?.len()
panic!("file is larger than pad!");
let mut out: Box<dyn Write> = match matches.value_of("OUTPUT")
Some(name) => Box::new(File::create(name)?),
None => Box::new(io::stdout()),
;
let mut file_buffer = vec![0u8; CAPACITY];
let mut pad_buffer = vec![0u8; CAPACITY];
loop (pad_byte, file_byte)
Ok(())
rust
$endgroup$
add a comment |
$begingroup$
I am new to rust and to start learning the language I decided to implement a simple one-time pad encryption program.
The part I am least sure about is the reading and writing from the files. Ideally this would run efficiently on large files.
use clap::Arg, App;
use std::
error::Error,
fs::File,
io::
self,
Read,
Write,
,
;
const CAPACITY: usize = 1024;
fn main() -> Result<(), Box<dyn Error>>
let matches = App::new("onetime")
.version("0.1")
.author("Carlo Abelli <carlo@abelli.xyz>")
.about("Encrypts/decrypts a file using a one-time pad.")
.arg(Arg::with_name("FILE")
.required(true)
.help("The file to encrypt/decrypt"))
.arg(Arg::with_name("PAD")
.short("p")
.long("pad")
.takes_value(true)
.value_name("PAD")
.required(true)
.help("The pad to use for encryption/decryption"))
.arg(Arg::with_name("OUTPUT")
.short("o")
.long("output")
.value_name("OUT")
.help("The output file (default: stdout)"))
.get_matches();
let mut file = File::open(matches.value_of("FILE").unwrap())?;
let mut pad = File::open(matches.value_of("PAD").unwrap())?;
if file.metadata()?.len() > pad.metadata()?.len()
panic!("file is larger than pad!");
let mut out: Box<dyn Write> = match matches.value_of("OUTPUT")
Some(name) => Box::new(File::create(name)?),
None => Box::new(io::stdout()),
;
let mut file_buffer = vec![0u8; CAPACITY];
let mut pad_buffer = vec![0u8; CAPACITY];
loop (pad_byte, file_byte)
Ok(())
rust
$endgroup$
I am new to rust and to start learning the language I decided to implement a simple one-time pad encryption program.
The part I am least sure about is the reading and writing from the files. Ideally this would run efficiently on large files.
use clap::Arg, App;
use std::
error::Error,
fs::File,
io::
self,
Read,
Write,
,
;
const CAPACITY: usize = 1024;
fn main() -> Result<(), Box<dyn Error>>
let matches = App::new("onetime")
.version("0.1")
.author("Carlo Abelli <carlo@abelli.xyz>")
.about("Encrypts/decrypts a file using a one-time pad.")
.arg(Arg::with_name("FILE")
.required(true)
.help("The file to encrypt/decrypt"))
.arg(Arg::with_name("PAD")
.short("p")
.long("pad")
.takes_value(true)
.value_name("PAD")
.required(true)
.help("The pad to use for encryption/decryption"))
.arg(Arg::with_name("OUTPUT")
.short("o")
.long("output")
.value_name("OUT")
.help("The output file (default: stdout)"))
.get_matches();
let mut file = File::open(matches.value_of("FILE").unwrap())?;
let mut pad = File::open(matches.value_of("PAD").unwrap())?;
if file.metadata()?.len() > pad.metadata()?.len()
panic!("file is larger than pad!");
let mut out: Box<dyn Write> = match matches.value_of("OUTPUT")
Some(name) => Box::new(File::create(name)?),
None => Box::new(io::stdout()),
;
let mut file_buffer = vec![0u8; CAPACITY];
let mut pad_buffer = vec![0u8; CAPACITY];
loop (pad_byte, file_byte)
Ok(())
rust
rust
asked 2 mins ago
carloabellicarloabelli
1212
1212
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217182%2fsimple-one-time-pad-in-rust%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217182%2fsimple-one-time-pad-in-rust%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown