Skip to content

Commit

Permalink
2. [release:1.0.0]
Browse files Browse the repository at this point in the history
  • Loading branch information
just-do-halee committed Sep 2, 2021
1 parent 6f92f7d commit b84c4de
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 61 deletions.
58 changes: 58 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: CI

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
nightly:
name: Rust nightly
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
- run: cargo check

stable:
name: Rust stable
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- run: cargo check

rust51:
name: Rust 1.51.0
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.51.0
- run: cargo check

rust42:
name: Rust 1.42.0
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.42.0
- run: cargo check

rust36:
name: Rust 1.36.0
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.36.0
- run: cargo check
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
## 1.0.0 (September 3, 2021)

### Release 1.0.0
### No need to implement Digester trait

---

## 0.1.0 (August 23, 2021)

### Release 0.1.0
Expand Down
16 changes: 10 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "vep"
version = "0.1.0"
version = "1.0.0"
authors = ["just-do-halee <[email protected]>"]
homepage = "https://github.com/just-do-halee/vep"
repository = "https://github.com/just-do-halee/vep"
Expand All @@ -16,15 +16,19 @@ license = "MIT OR Apache-2.0"
edition = "2018"

[features]
default = []
default = ["std"]
std = []


[dependencies]
digest = "0.9.0"
typenum = { version = "1.14.0", features = ["no_std"] }


[dev-dependencies]
blake3 = "1.0.0"
sha3 = "0.9.1"
blake3 = { version = "1.0.0", features = ["traits-preview"] }
sha2 = "0.9.5"
hex = "0.4.3"
sha3 = "0.9.1"
hex = "0.4.3"

[package.metadata.docs.rs]
no-deps = true
22 changes: 9 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,46 +1,42 @@
# vep
# **`vep`**

Variable-length Expansion Pass function. ( i.e. short password to long hashed password )

(no dependencies, 22 lines pure safe codes, also supported no-std)
(supported no-std)

[![CI][ci-badge]][ci-url]
[![Crates.io][crates-badge]][crates-url]
[![Licensed][license-badge]][license-url]
[![Twitter][twitter-badge]][twitter-url]

[ci-badge]: https://github.com/just-do-halee/vep/actions/workflows/ci.yml/badge.svg
[crates-badge]: https://img.shields.io/crates/v/vep.svg?labelColor=383636
[license-badge]: https://img.shields.io/crates/l/vep?labelColor=383636
[twitter-badge]: https://img.shields.io/twitter/follow/do_halee?style=flat&logo=twitter&color=4a4646&labelColor=333131&label=just-do-halee

[ci-url]: https://github.com/just-do-halee/vep/actions
[twitter-url]: https://twitter.com/do_halee
[crates-url]: https://crates.io/crates/vep
[license-url]: https://github.com/just-do-halee/vep
| [Docs](https://docs.rs/vep) | [Latest Note](https://github.com/just-do-halee/vep/blob/main/CHANGELOG.md) |

```toml
[dependencies]
vep = "0.1.0"
vep = "1.0.0"
```

or

```toml
[dependencies]
vep = { version = "0.1.0", features = ["std"] }
vep = { version = "1.0.0", default-features = false } # no-std
```

## How to

```rust
use sha2::Sha256; // can be any hasher

impl vep::Digester for Sha256 {
fn digest(&mut self, bytes: &[u8]) -> Vec<u8> {
self.update(bytes);
self.finalize_reset().to_vec()
}
}

use vep::Vep;
use sha2::{Sha256, Digest}; // can be any hasher(dyn Digest from `digest` crate)

let src = b"hello vep!"; // <- 10 bytes
let expanded = Vep(Sha256::new()).expand(src); // -> 10 * 32 bytes == 320 bytes
Expand Down
82 changes: 40 additions & 42 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,56 +1,76 @@
// Licensed under either of Apache License, Version 2.0 or MIT license at your option.
// Copyright 2021 Hwakyeom Kim(=just-do-halee)

//! # `Vep`
//! # **`vep`**
//!
//! Variable-length Expansion Pass function.
//! ( i.e. short password to long hashed password )<br>
//! (no dependencies, 22 lines pure safe codes, also supported no-std)
//! (supported no-std)
//! <a href="https://i.ibb.co/kGnwXXf/vep.png">check algorithm</a>
//! ## How to
//! ```ignore
//! use sha2::Sha256;
//! impl vep::Digester for Sha256 {
//! fn digest(&mut self, bytes: &[u8]) -> Vec<u8> {
//! self.update(bytes);
//! self.finalize_reset().to_vec()
//! }
//! }
//! ```rust
//!
//! use vep::Vep;
//! use sha2::{Sha256, Digest}; // can be any hasher(dyn Digest from `digest` crate)
//!
//! let src = b"hello vep!"; // <- 10 bytes
//! let expanded = Vep(Sha256::new()).expand(src); // -> 10 * 32 bytes == 320 bytes
//!
//!
//! ```
#![deny(unsafe_code)]
#![no_std]
extern crate alloc;
#![cfg_attr(not(feature = "std"), not(test), no_std)]

#[cfg(feature = "default")]
#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::vec::Vec;

#[cfg(feature = "std")]
extern crate std;
#[cfg(feature = "std")]
use std::vec::Vec;

pub mod parts {
pub use digest::generic_array::{ArrayLength, GenericArray};
pub use digest::Digest;
pub use typenum as BytesSize;
}

pub trait Digester {
fn digest(&mut self, bytes: &[u8]) -> Vec<u8>;
type OutputSize: parts::ArrayLength<u8>;
fn digest(&mut self, bytes: &[u8]) -> parts::GenericArray<u8, Self::OutputSize>;
}

impl<D: parts::Digest> Digester for D {
type OutputSize = D::OutputSize;
#[inline]
fn digest(&mut self, bytes: &[u8]) -> parts::GenericArray<u8, Self::OutputSize> {
self.update(bytes);
self.finalize_reset()
}
}

pub struct Vep<D: Digester>(pub D);

impl<D: Digester> Vep<D> {
pub fn expand<T: AsRef<[u8]>>(mut self, bytes: T) -> Vec<u8> {
pub fn expand(mut self, bytes: impl AsRef<[u8]>) -> Vec<u8> {
let bytes = bytes.as_ref();
let rev_i = bytes.len() - 1;
let mut salt;
let mut buf = Vec::from(bytes);
let mut temp;
let mut final_output = Vec::new();
for (i, &byte) in bytes.iter().enumerate() {
salt = bytes[rev_i - i];
let times = byte + 1;
let times = byte;
buf.push(salt);
temp = self.0.digest(buf.as_slice());
for _ in 0..times {
buf.push(salt);
buf = self.0.digest(buf.as_slice());
temp = self.0.digest(temp.as_slice());
}
buf = temp.to_vec();
final_output.extend(buf.iter());
}
final_output
Expand All @@ -59,37 +79,15 @@ impl<D: Digester> Vep<D> {

#[cfg(test)]
mod tests {
extern crate std;
use std::eprintln;

use super::*;

// --------------- blake3 ---------------
use blake3::traits::digest::Digest;
use blake3::Hasher;
impl Digester for Hasher {
fn digest(&mut self, bytes: &[u8]) -> Vec<u8> {
self.reset();
self.update(bytes);
self.finalize().as_bytes().to_vec()
}
}
// --------------- sha3_512 ---------------
use sha3::{Digest, Sha3_512};
impl Digester for Sha3_512 {
fn digest(&mut self, bytes: &[u8]) -> Vec<u8> {
self.update(bytes);
self.finalize_reset().to_vec()
}
}

use sha3::Sha3_512;
// --------------- sha2_384 ---------------
use sha2::Sha384 as Sha2_384;
impl Digester for Sha2_384 {
fn digest(&mut self, bytes: &[u8]) -> Vec<u8> {
self.update(bytes);
self.finalize_reset().to_vec()
}
}

#[test]
fn it_works() {
Expand Down

0 comments on commit b84c4de

Please sign in to comment.