📄 utilities.cpp
字号:
/* borZoi - An Elliptic Curve Cryptography Library Copyright (C) 2001 Anthony Mulcahy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. \You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include "borzoi.h"BigInt OS2IP (OCTETSTR o) { BigInt i, result; for (long j=o.size()-1; j>=0; j--) { i<<=8; i |= BigInt (o[j]); } return i;}OCTETSTR I2OSP (BigInt i) { BigInt mask (0xff); OCTETSTR o(i.numBits()/8+1); for (OCTETSTR::size_type j=0; j<o.size(); j++) { o[j] = (i&mask).toOctet(); i>>=8; } return o;}OCTETSTR BS2OSP (F2M b) { long size = (getModulus().numBits()-1)/8; if ((getModulus().numBits()-1)%8 > 0) size++; OCTETSTR o(size); for (long i=0; i<b.numBits(); i++) { o[size-1-i/8] |= (b.getCoeff(i)<<(i%8)); } return o;}F2M I2FEP (BigInt z) { F2X x; long size=z.numBits(); for (long i=0; i<size; i++) { if (z.getBit (i)) x.setCoeff (i, 1); } return F2M (x);}OCTETSTR operator|| (const OCTETSTR& a, const OCTETSTR& b) { // concatenate OCTETSTR c (a.size()+b.size()); for (int i=0; i<a.size();i++) { c[i] = a[i]; } for (int j=0; j<b.size();j++) { c[j+a.size()] = b[j]; } return c;}OCTETSTR operator^ (OCTETSTR a, OCTETSTR b) { int i; if (b.size()>a.size()) { OCTETSTR tempa(b.size()); for (i=0; i<a.size();i++) { tempa[i] = a[i]; } a = tempa; } else { OCTETSTR tempb(a.size()); for (i=0; i<b.size();i++) { tempb[i] = b[i]; } b = tempb; } OCTETSTR c (a.size()); for (i=0; i<a.size();i++) { c[i] = a[i]^b[i]; } return c;}void str_to_F2M (const std::string& s, F2M& f) { F2X x; std::string::const_iterator p = s.end ()-1; long val; unsigned short i = 0; while (p >= s.begin ()) { if (!isspace (*p)) { //val = strtoul ((std::string (p, 1)).c_str (), NULL, 0x10);
val = strtoul ((std::string (p, p+1)).c_str (), NULL, 0x10);
if (val&1) x.setCoeff (i, 1); i++; if (val&2) x.setCoeff (i, 1); i++; if (val&4) x.setCoeff (i, 1); i++; if (val&8) x.setCoeff (i, 1); i++; } p--; } f = F2M (x);}void str_to_BigInt (const std::string& s, BigInt& z, int base) { z = BigInt(0); std::string::const_iterator p = s.begin(); long i = 0; while (p < s.end ()) { if (!isspace (*p)) { z *= BigInt (base); //z += BigInt (strtol ((std::string (p, 1)).c_str (), NULL, base)); z += BigInt (strtol ((std::string (p, p+1)).c_str (), NULL, base));
} p++; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -