Replace constructors fns with static methods
This commit is contained in:
parent
06b41612aa
commit
1ee6b87b2f
21
hash.rs
21
hash.rs
|
|
@ -59,18 +59,15 @@ pub struct Hasher {
|
||||||
priv len: uint,
|
priv len: uint,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Hasher(ht: HashType) -> Hasher {
|
|
||||||
let ctx = unsafe { libcrypto::EVP_MD_CTX_create() };
|
|
||||||
let (evp, mdlen) = evpmd(ht);
|
|
||||||
let h = Hasher { evp: evp, ctx: ctx, len: mdlen };
|
|
||||||
h.init();
|
|
||||||
h
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Hasher {
|
impl Hasher {
|
||||||
/// Initializes this hasher
|
pub fn new(ht: HashType) -> Hasher {
|
||||||
pub fn init(&self) {
|
let ctx = unsafe { libcrypto::EVP_MD_CTX_create() };
|
||||||
unsafe { libcrypto::EVP_DigestInit(self.ctx, self.evp) }
|
let (evp, mdlen) = evpmd(ht);
|
||||||
|
unsafe {
|
||||||
|
libcrypto::EVP_DigestInit(ctx, evp);
|
||||||
|
}
|
||||||
|
|
||||||
|
Hasher { evp: evp, ctx: ctx, len: mdlen }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update this hasher with more input bytes
|
/// Update this hasher with more input bytes
|
||||||
|
|
@ -110,7 +107,7 @@ impl Drop for Hasher {
|
||||||
* value
|
* value
|
||||||
*/
|
*/
|
||||||
pub fn hash(t: HashType, data: &[u8]) -> ~[u8] {
|
pub fn hash(t: HashType, data: &[u8]) -> ~[u8] {
|
||||||
let h = Hasher(t);
|
let h = Hasher::new(t);
|
||||||
h.update(data);
|
h.update(data);
|
||||||
h.final()
|
h.final()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
30
pkey.rs
30
pkey.rs
|
|
@ -74,15 +74,15 @@ pub struct PKey {
|
||||||
priv parts: Parts,
|
priv parts: Parts,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn PKey() -> PKey {
|
|
||||||
PKey {
|
|
||||||
evp: unsafe { libcrypto::EVP_PKEY_new() },
|
|
||||||
parts: Neither
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///Represents a public key, optionally with a private key attached.
|
///Represents a public key, optionally with a private key attached.
|
||||||
impl PKey {
|
impl PKey {
|
||||||
|
pub fn new() -> PKey {
|
||||||
|
PKey {
|
||||||
|
evp: unsafe { libcrypto::EVP_PKEY_new() },
|
||||||
|
parts: Neither,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn _tostr(&self, f: extern "C" unsafe fn(*EVP_PKEY, **mut u8) -> c_int) -> ~[u8] {
|
fn _tostr(&self, f: extern "C" unsafe fn(*EVP_PKEY, **mut u8) -> c_int) -> ~[u8] {
|
||||||
unsafe {
|
unsafe {
|
||||||
let len = f(self.evp, ptr::null());
|
let len = f(self.evp, ptr::null());
|
||||||
|
|
@ -350,8 +350,8 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_gen_pub() {
|
fn test_gen_pub() {
|
||||||
let mut k0 = PKey();
|
let mut k0 = PKey::new();
|
||||||
let mut k1 = PKey();
|
let mut k1 = PKey::new();
|
||||||
k0.gen(512u);
|
k0.gen(512u);
|
||||||
k1.load_pub(k0.save_pub());
|
k1.load_pub(k0.save_pub());
|
||||||
assert!(k0.save_pub() == k1.save_pub());
|
assert!(k0.save_pub() == k1.save_pub());
|
||||||
|
|
@ -368,8 +368,8 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_gen_priv() {
|
fn test_gen_priv() {
|
||||||
let mut k0 = PKey();
|
let mut k0 = PKey::new();
|
||||||
let mut k1 = PKey();
|
let mut k1 = PKey::new();
|
||||||
k0.gen(512u);
|
k0.gen(512u);
|
||||||
k1.load_priv(k0.save_priv());
|
k1.load_priv(k0.save_priv());
|
||||||
assert!(k0.save_priv() == k1.save_priv());
|
assert!(k0.save_priv() == k1.save_priv());
|
||||||
|
|
@ -386,8 +386,8 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_encrypt() {
|
fn test_encrypt() {
|
||||||
let mut k0 = PKey();
|
let mut k0 = PKey::new();
|
||||||
let mut k1 = PKey();
|
let mut k1 = PKey::new();
|
||||||
let msg = ~[0xdeu8, 0xadu8, 0xd0u8, 0x0du8];
|
let msg = ~[0xdeu8, 0xadu8, 0xd0u8, 0x0du8];
|
||||||
k0.gen(512u);
|
k0.gen(512u);
|
||||||
k1.load_pub(k0.save_pub());
|
k1.load_pub(k0.save_pub());
|
||||||
|
|
@ -398,8 +398,8 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_sign() {
|
fn test_sign() {
|
||||||
let mut k0 = PKey();
|
let mut k0 = PKey::new();
|
||||||
let mut k1 = PKey();
|
let mut k1 = PKey::new();
|
||||||
let msg = ~[0xdeu8, 0xadu8, 0xd0u8, 0x0du8];
|
let msg = ~[0xdeu8, 0xadu8, 0xd0u8, 0x0du8];
|
||||||
k0.gen(512u);
|
k0.gen(512u);
|
||||||
k1.load_pub(k0.save_pub());
|
k1.load_pub(k0.save_pub());
|
||||||
|
|
|
||||||
18
symm.rs
18
symm.rs
|
|
@ -61,13 +61,13 @@ pub struct Crypter {
|
||||||
priv blocksize: uint
|
priv blocksize: uint
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Crypter(t: Type) -> Crypter {
|
|
||||||
let ctx = unsafe { libcrypto::EVP_CIPHER_CTX_new() };
|
|
||||||
let (evp, keylen, blocksz) = evpc(t);
|
|
||||||
Crypter { evp: evp, ctx: ctx, keylen: keylen, blocksize: blocksz }
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Crypter {
|
impl Crypter {
|
||||||
|
pub fn new(t: Type) -> Crypter {
|
||||||
|
let ctx = unsafe { libcrypto::EVP_CIPHER_CTX_new() };
|
||||||
|
let (evp, keylen, blocksz) = evpc(t);
|
||||||
|
Crypter { evp: evp, ctx: ctx, keylen: keylen, blocksize: blocksz }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables or disables padding. If padding is disabled, total amount of
|
* Enables or disables padding. If padding is disabled, total amount of
|
||||||
* data encrypted must be a multiple of block size.
|
* data encrypted must be a multiple of block size.
|
||||||
|
|
@ -163,7 +163,7 @@ impl Drop for Crypter {
|
||||||
* specified key and iv; returns the resulting (encrypted) data.
|
* specified key and iv; returns the resulting (encrypted) data.
|
||||||
*/
|
*/
|
||||||
pub fn encrypt(t: Type, key: &[u8], iv: ~[u8], data: &[u8]) -> ~[u8] {
|
pub fn encrypt(t: Type, key: &[u8], iv: ~[u8], data: &[u8]) -> ~[u8] {
|
||||||
let c = Crypter(t);
|
let c = Crypter::new(t);
|
||||||
c.init(Encrypt, key, iv);
|
c.init(Encrypt, key, iv);
|
||||||
let r = c.update(data);
|
let r = c.update(data);
|
||||||
let rest = c.final();
|
let rest = c.final();
|
||||||
|
|
@ -175,7 +175,7 @@ pub fn encrypt(t: Type, key: &[u8], iv: ~[u8], data: &[u8]) -> ~[u8] {
|
||||||
* specified key and iv; returns the resulting (decrypted) data.
|
* specified key and iv; returns the resulting (decrypted) data.
|
||||||
*/
|
*/
|
||||||
pub fn decrypt(t: Type, key: &[u8], iv: ~[u8], data: &[u8]) -> ~[u8] {
|
pub fn decrypt(t: Type, key: &[u8], iv: ~[u8], data: &[u8]) -> ~[u8] {
|
||||||
let c = Crypter(t);
|
let c = Crypter::new(t);
|
||||||
c.init(Decrypt, key, iv);
|
c.init(Decrypt, key, iv);
|
||||||
let r = c.update(data);
|
let r = c.update(data);
|
||||||
let rest = c.final();
|
let rest = c.final();
|
||||||
|
|
@ -201,7 +201,7 @@ mod tests {
|
||||||
let c0 =
|
let c0 =
|
||||||
~[ 0x8eu8, 0xa2u8, 0xb7u8, 0xcau8, 0x51u8, 0x67u8, 0x45u8, 0xbfu8,
|
~[ 0x8eu8, 0xa2u8, 0xb7u8, 0xcau8, 0x51u8, 0x67u8, 0x45u8, 0xbfu8,
|
||||||
0xeau8, 0xfcu8, 0x49u8, 0x90u8, 0x4bu8, 0x49u8, 0x60u8, 0x89u8 ];
|
0xeau8, 0xfcu8, 0x49u8, 0x90u8, 0x4bu8, 0x49u8, 0x60u8, 0x89u8 ];
|
||||||
let c = Crypter(AES_256_ECB);
|
let c = Crypter::new(AES_256_ECB);
|
||||||
c.init(Encrypt, k0, []);
|
c.init(Encrypt, k0, []);
|
||||||
c.pad(false);
|
c.pad(false);
|
||||||
let r0 = c.update(p0) + c.final();
|
let r0 = c.update(p0) + c.final();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue