From 7a707064d7d212cd4f2fbb7e90720cb3893686d1 Mon Sep 17 00:00:00 2001 From: Erwin Nindl Date: Tue, 11 Dec 2007 12:24:54 +0000 Subject: fixes in mpi class, keyderivation iv generation --- mpi.cpp | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'mpi.cpp') diff --git a/mpi.cpp b/mpi.cpp index 510a17f..c22e503 100644 --- a/mpi.cpp +++ b/mpi.cpp @@ -55,6 +55,7 @@ Mpi::Mpi(const u_int8_t * src, u_int32_t len) { gcry_mpi_scan( &val_, GCRYMPI_FMT_STD, src, len, NULL ); } + void Mpi::operator=(const Mpi &src) { val_ = gcry_mpi_copy(src.val_); @@ -72,18 +73,27 @@ Mpi Mpi::operator+(const Mpi &b) const return res; } -Mpi Mpi::operator^(const Mpi &b) const +Mpi Mpi::operator*(const unsigned long int n) const { - u_int32_t len = 0; + Mpi res; + gcry_mpi_mul_ui(res.val_, val_, n); + return res; +} - Mpi res(gcry_mpi_get_nbits(val_)); +Mpi Mpi::operator^(const Mpi &b) const +{ + u_int32_t a_len=0, b_len=0; + Mpi res; - if(gcry_mpi_get_nbits(val_) != gcry_mpi_get_nbits(b.val_)) - throw std::length_error("mpi::operator^ const"); + a_len = gcry_mpi_get_nbits(val_); + b_len = gcry_mpi_get_nbits(b.val_); - len = gcry_mpi_get_nbits(val_); + if(a_len>=b_len) + res = Mpi(*this); + else + res = Mpi(b); - for(u_int32_t i=0; i