ATLAS Offline Software
SimpleEncrypter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // system include:
6 #include <climits>
7 #include <vector>
8 #include <algorithm>
9 #include <cstdlib>
10 #include <ctime>
11 #include <cmath>
12 
13 // ROOT includes
14 #include <TString.h>
15 
16 // Local include(s):
18 
19 namespace xAOD {
20 
21  //--------------------------------------------------------------------------
22  // Private static constants
23  //--------------------------------------------------------------------------
24  // This gives 0x10000 on a 64-bit platform.
25  // ??? Would probably be better to write these using bit operations,
26  // rather than FP, to avoid potential rounding issues.
27  // (eg. the maximum uint64_t cannot be represented exactly as a double)
29  (SimpleEncrypter::ULLI_t)pow(static_cast<double>(std::numeric_limits<ULLI_t>::max()), 0.25);
32  const unsigned int SimpleEncrypter::m_MAXHEXDIGITS =
33  (unsigned int)(log(pow(SimpleEncrypter::m_MAXRANGE,2))/log(16.))+3;
34 
35  //--------------------------------------------------------------------------
36  // Public methods
37  //--------------------------------------------------------------------------
38 
39  //--------------------------------------------------------------------------
40  // Constructor
41  //--------------------------------------------------------------------------
42  SimpleEncrypter::SimpleEncrypter(const std::string& name) :
43  asg::AsgMessaging(name), m_n(0), m_e(0), m_d(0),
44  m_isOkForEnc(false), m_isOkForDec(false) {
45 
46  // initialize random number generator
47  srand(static_cast<unsigned>(time(0)));
48  }
49 
50  //--------------------------------------------------------------------------
51  // Destructor
52  //--------------------------------------------------------------------------
54 
55  }
56 
57  //--------------------------------------------------------------------------
58  // Generation of key pair as pair of hex strings
59  //--------------------------------------------------------------------------
60  std::pair<std::string, std::string> SimpleEncrypter::genKeyPair() {
61 
62  // default preset
63  std::pair<std::string, std::string> keys =
64  std::make_pair("__NO_PRIV_KEY__", "__NO_PUB_KEY__");
65 
66  // generate keys
68 
69  if ( isOkForEnc() && isOkForDec() ) {
70  keys = std::make_pair(getPrivKey(), getPubKey());
71  }
72  return keys;
73  }
74 
75  //--------------------------------------------------------------------------
76  // Set private key
77  //--------------------------------------------------------------------------
78  void SimpleEncrypter::setPrivKey(std::string keystr) {
79 
80  std::pair<ULLI_t, ULLI_t> keys = decodeKeyString(keystr);
81 
82  if ( m_n > 0 && m_n != keys.first ) {
83  ATH_MSG_WARNING("RSA module already set!");
84  }
85  m_n = keys.first;
86  m_d = keys.second;
87  m_isOkForDec = false;
88  }
89  //--------------------------------------------------------------------------
90  // Set public key
91  //--------------------------------------------------------------------------
92  void SimpleEncrypter::setPubKey(std::string keystr) {
93 
94  std::pair<ULLI_t, ULLI_t> keys = decodeKeyString(keystr);
95 
96  if ( m_n > 0 && m_n != keys.second ) {
97  ATH_MSG_WARNING("RSA module already set!");
98  }
99  m_e = keys.first;
100  m_n = keys.second;
101  m_isOkForEnc = false;
102  }
103  //--------------------------------------------------------------------------
104  // Get private key
105  //--------------------------------------------------------------------------
106  std::string SimpleEncrypter::getPrivKey() const {
107 
108  return keyToString(m_n, m_d);
109  }
110  //--------------------------------------------------------------------------
111  // Get public key
112  //--------------------------------------------------------------------------
113  std::string SimpleEncrypter::getPubKey() const {
114 
115  return keyToString(m_e, m_n);
116  }
117  //--------------------------------------------------------------------------
118  // Encrypt unsigned integer value
119  //--------------------------------------------------------------------------
121 
122  ULLI_t b = a;
123 
124  if ( isOkForEnc() ) {
125  b = encryptFPECycle(a);
126  }
127  return b;
128  }
129  //--------------------------------------------------------------------------
130  // Decrypt unsigned integer value
131  //--------------------------------------------------------------------------
133 
134  ULLI_t b = a;
135 
136  if ( isOkForDec() ) {
137  b = decryptFPECycle(a);
138  }
139  return b;
140  }
141  //--------------------------------------------------------------------------
142  // Encrypt positive float value
143  //--------------------------------------------------------------------------
145 
146  float b = a;
147 
148  if ( a > 0. ) {
149  if ( isOkForEnc() ) {
150  ULLI_t ia = floatBitsToInt(a);
151  ULLI_t ib = encryptFPECycle(ia);
152  b = intBitsToFloat(ib);
153  }
154  } else {
155  ATH_MSG_WARNING("Encrypt: Float value not positive: "
156  << a << Form(" (%a) !", a));
157  } // if a > 0
158  return b;
159  }
160 
161  //--------------------------------------------------------------------------
162  // Decrypt positive float value
163  //--------------------------------------------------------------------------
165 
166  float b = a;
167 
168  // As nan is a valid encrypted value, decrypt it as well.
169  if ( a > 0. || std::isnan(a) ) {
170  if ( isOkForDec() ) {
171  ULLI_t ia = floatBitsToInt(a);
172  ULLI_t ib = decryptFPECycle(ia);
173  b = intBitsToFloat(ib);
174  }
175  } else {
176  ATH_MSG_WARNING("Decrypt: Float value not positive: "
177  << a << Form(" (%a) !", a));
178  } // if a > 0
179  return b;
180  }
181 
182  //--------------------------------------------------------------------------
183  // Private methods
184  //--------------------------------------------------------------------------
185 
186  //--------------------------------------------------------------------------
187  // Generate numeric representation of the keys
188  //--------------------------------------------------------------------------
190 
191  // Generate prime numbers p != q
192  ULLI_t p(1);
193  ULLI_t q(1);
194  // Euler's phi function
195  ULLI_t phi(1);
196 
197  // reset encryption and decryption exponent
198  m_e = 0;
199  m_d = 0;
200  while ( p == q || m_e < 2 || m_e >= phi || m_d < 2
201  || m_e*m_d % phi != 1 ) {
202  double dlog2 = 0.;
203  while ( p == q || dlog2 < 0.1 || dlog2 > 30. ) {
204  p = genPrime();
205  q = genPrime();
206  dlog2 = fabs(log2(p)-log2(q));
207  } // inner while loop
208  phi = (p-1)*(q-1);
209  m_n = p*q;
210  m_e = genCoprime(phi);
212  } // outer while loop
213  m_isOkForDec = false;
214  m_isOkForEnc = false;
215  }
216  //--------------------------------------------------------------------------
217  // Find a prime number
218  //--------------------------------------------------------------------------
220 
221  ULLI_t t = (m_MINRANGE + rand()) % (m_MAXRANGE-1);
222  do {
223  t++;
224  } while ( !isPrime(t) || t < m_MINRANGE );
225  return t;
226  }
227  //--------------------------------------------------------------------------
228  // Test for being a prime number
229  //--------------------------------------------------------------------------
231 
232  bool isPrime = true;
233  if (n != 2) {
234  for (LLI_t i = 2; i < (LLI_t)sqrt(n) + 1; ++i) {
235  if (n % i == 0) {
236  isPrime = false;
237  break;
238  }
239  }
240  }
241  return isPrime;
242  }
243  //--------------------------------------------------------------------------
244  // Greatest common denominator
245  //--------------------------------------------------------------------------
248 
249  std::vector<LLI_t> r;
250  LLI_t i = 1;
251  r.push_back(std::max(n1, n2));
252  r.push_back(std::min(n1, n2));
253  while (r[i] != 0) {
254  ++i;
255  r.push_back(r[i-2] % r[i-1]);
256  }
257  return r[i-1];
258  }
259  //--------------------------------------------------------------------------
260  // Find coprime number
261  //--------------------------------------------------------------------------
263 
264  // make sure coprime is larger than 5th Fermat number (2^16+1 = 65537)
265  ULLI_t i = (65537 + rand()) % (m_MAXRANGE -1);
266  do {
267  ++i;
268  } while (greatestCommonDenominator(n, i) != 1);
269  return i;
270  }
271  //--------------------------------------------------------------------------
272  // Find decryption exponent
273  //--------------------------------------------------------------------------
276 
277  for (ULLI_t i=1; i<m_MAXRANGE; ++i) {
278  if ( ((phi * i + 1) % e) == 0 ) {
279  return (ULLI_t)((phi * i + 1) / e);
280  }
281  }
282  return 0;
283  }
284  //--------------------------------------------------------------------------
285  // Convert key to a hex string
286  //--------------------------------------------------------------------------
288 
289  // length of keys w.r.t. hex digits
290  unsigned int ra = (unsigned int)(log(a)/log(16.))+1;
291  unsigned int rb = (unsigned int)(log(b)/log(16.))+1;
292 
293  // random numbers for padding
294  unsigned int r1 = rand() & ((1 << 4*(m_MAXHEXDIGITS-ra))-1);
295  unsigned int r2 = rand() & ((1 << 4*(m_MAXHEXDIGITS-rb))-1);
296 
297  // format string
298  TString tstr = Form("%02x%02x%02x%0*x%0*llx%0*x%0*llx",
299  m_MAXHEXDIGITS, ra, rb,
300  m_MAXHEXDIGITS-ra, r1, ra, a,
301  m_MAXHEXDIGITS-rb, r2, rb, b);
302 
303  return std::string(tstr.Data());
304  }
305  //--------------------------------------------------------------------------
306  // Convert hex string to two integers
307  //--------------------------------------------------------------------------
308  std::pair<SimpleEncrypter::ULLI_t, SimpleEncrypter::ULLI_t>
309  SimpleEncrypter::decodeKeyString(std::string hstr) const {
310 
311  std::pair<ULLI_t, ULLI_t> keys(0,0);
312 
313  TString str(hstr);
314  if (str.IsHex() && str.Length() > 3) {
315  str.ToLower();
316  unsigned int ndigits = strtoul(TString(str(0,2)).Data(), nullptr, 16);
317  unsigned int ra = strtoul(TString(str(2,2)).Data(), nullptr, 16);
318  unsigned int rb = strtoul(TString(str(4,2)).Data(), nullptr, 16);
319  if ( str.Length() == (int)(2*ndigits + 6) ) {
320  keys.first = strtoll(TString(str(ndigits+6-ra, ra)).Data(),
321  nullptr, 16);
322  keys.second = strtoll(TString(str(2*ndigits+6-rb, rb)).Data(),
323  nullptr, 16);
324  } else {
325  ATH_MSG_ERROR("Private/public key must be a hex string of " <<
326  2*m_MAXHEXDIGITS+6 << " digits!");
327  } // if Length()
328  } else {
329  ATH_MSG_ERROR("Private/public key must be a hex string of " <<
330  2*m_MAXHEXDIGITS+6 << " digits!");
331  } // if IsHex() ...
332 
333  return keys;
334  }
335  //--------------------------------------------------------------------------
336  // Interpret bits of positive floating point number as integer
337  //--------------------------------------------------------------------------
339 
340  ULLI_t res(0);
341 
342  if ( val < 0. ) {
343  ATH_MSG_ERROR("Float value needs to be positive!");
344  } else {
345  // convert floating point number to ULLI_t if size fits
346  if ( sizeof(float) <= sizeof(ULLI_t) ) {
347  // check whether a quick conversion is possible
348  if ( sizeof(float) == sizeof(int) ) {
349  union {
350  float f;
351  int i;
352  } fint;
353  fint.f = val;
354  res = fint.i;
355  } else {
356  // do a slow conversion
357  char* pval = reinterpret_cast<char*>(&val);
358  // loop over bytes
359  for (unsigned int i=0; i<sizeof(float); ++i) {
360  // loop over bits
361  for (unsigned int j=0; j<CHAR_BIT; ++j) {
362  unsigned int n = i*CHAR_BIT + j;
363  unsigned int bit = (*(pval+i) >> j) & 1;
364  if ( bit > 0 ) res |= 1 << n;
365  } // for bits
366  } // for bytes
367  } // if sizeof
368  } else {
369  ATH_MSG_ERROR("sizeof(float) > sizeof(ULLI_t): "
370  << sizeof(float) << " > " << sizeof(LLI_t));
371  } // if sizeof
372  } // if val < 0.
373 
374  return res;
375  }
376  //--------------------------------------------------------------------------
377  // Interpret bits of positive integer as floating point number
378  //--------------------------------------------------------------------------
380 
381  float res(0.);
382 
383  // number of bits needed
384  unsigned int r = (int)(std::log2(val))+1;
385 
386  // convert ULLI_t to floating point number if size fits
387  if ( sizeof(float)*CHAR_BIT >= r ) {
388  // check whether a quick conversion is possible
389  if ( sizeof(float) == sizeof(int) ) {
390  union {
391  float f;
392  ULLI_t i;
393  } ficnv;
394  ficnv.i = val;
395  res = ficnv.f;
396  } else {
397  // do a slow conversion
398  char* pres = reinterpret_cast<char*>(&res);
399  // loop over bytes
400  for (unsigned int i=0; i<sizeof(float); ++i) {
401  // loop over bits
402  for (unsigned int j=0; j<CHAR_BIT; ++j) {
403  unsigned int n = i*CHAR_BIT + j;
404  unsigned int bit = (val >> n) & 1;
405  if ( bit > 0 ) *(pres+i) |= 1 << j;
406  } // for bits
407  } // for bytes
408  } // if sizeof
409  } else {
410  ATH_MSG_WARNING("sizeof(float)*CHAR_BIT < r: "
411  << sizeof(float)*CHAR_BIT << " < " << r);
412  } // if sizeof
413 
414  return res;
415  }
416  //--------------------------------------------------------------------------
417  // Encrypt using format preserving encryption w.r.t. RSA modulus
418  // via cycling
419  //--------------------------------------------------------------------------
421 
422  ULLI_t enc = 0;
423  if ( a > 0 ) {
424  ULLI_t r = (int)(std::log2(m_n));
425  ULLI_t rmask = pow(2,r)-1;
426  ULLI_t c = a & rmask;
427  ULLI_t b = a - c;
428  do {
429  c = encryptInternal(c);
430  } while ( c > rmask );
431  enc = b + c;
432  } // if
433  return enc;
434  }
435  //--------------------------------------------------------------------------
436  // Decrypt using format preserving encryption w.r.t. RSA modulus
437  // via cycling
438  //--------------------------------------------------------------------------
440 
441  ULLI_t dec = 0;
442  if ( enc > 0 ) {
443  ULLI_t r = (int)(std::log2(m_n));
444  ULLI_t rmask = pow(2,r)-1;
445  ULLI_t d = enc & rmask;
446  ULLI_t b = enc - d;
447  do {
448  d = decryptInternal(d);
449  } while ( d > rmask );
450  dec = d + b;
451  } // if
452  return dec;
453  }
454  //--------------------------------------------------------------------------
455  // Encrypt integer
456  //--------------------------------------------------------------------------
458 
459  return powerMod(x, m_e, m_n);
460  }
461  //--------------------------------------------------------------------------
462  // Decrypt integer
463  //--------------------------------------------------------------------------
465 
466  return powerMod(x, m_d, m_n);
467  }
468  //--------------------------------------------------------------------------
469  // Exponentiate a with d observing modulus n
470  //--------------------------------------------------------------------------
473 
474  int bin[sizeof(ULLI_t)*CHAR_BIT];
475  ULLI_t dec[sizeof(ULLI_t)*CHAR_BIT];
476 
477  ULLI_t r = (ULLI_t)(std::log2(d))+1;
478  ULLI_t tmp = d;
479  // decompose exponent into binary number (reverse order!)
480  for (ULLI_t i=0; i < r; ++i) {
481  bin[r-i-1] = tmp % 2;
482  tmp = (LLI_t)(tmp/2);
483  } // for i
484 
485  // perform the exponentiation taking modulus into account
486  dec[0] = a;
487  for (ULLI_t i=1; i < r; ++i) {
488  ULLI_t d2 = dec[i-1]*dec[i-1] % n;
489  if ( bin[i] > 0 ) d2 *= a;
490  dec[i] = d2 % n;
491  } // for i
492 
493  return dec[r-1];
494  }
495  //--------------------------------------------------------------------------
496  // Check setup readiness for encryption
497  //--------------------------------------------------------------------------
499 
500  if ( !m_isOkForEnc ) {
501  if ( m_n > 0 && m_e > 1 && m_e < m_n ) {
502  m_isOkForEnc = true;
503  } else {
504  ATH_MSG_ERROR("Setup not OK for encryption: public key set?");
505  }
506  } // if ! m_isOkForEnc
507 
508  return m_isOkForEnc;
509  }
510 
511  //--------------------------------------------------------------------------
512  // Check setup readiness for decryption
513  //--------------------------------------------------------------------------
515 
516  if ( !m_isOkForDec ) {
517  if ( m_n > 0 && m_d > 1 && m_d < m_n ) {
518  m_isOkForDec = true;
519  } else {
520  ATH_MSG_ERROR("Setup not OK for decryption: private key set?");
521  }
522  } // if ! m_isOkForDec
523 
524  return m_isOkForDec;
525  }
526 
527  //--------------------------------------------------------------------------
528 } // namespace xAOD
xAOD::SimpleEncrypter::decryptFPECycle
ULLI_t decryptFPECycle(ULLI_t a) const
Decrypt using format preserving encryption w.r.t.
Definition: SimpleEncrypter.cxx:439
xAOD::SimpleEncrypter::genPrime
virtual ULLI_t genPrime() const
Find a prime number.
Definition: SimpleEncrypter.cxx:219
xAOD::SimpleEncrypter::SimpleEncrypter
SimpleEncrypter(const std::string &name="SimpleEncrypter")
Main constructor.
Definition: SimpleEncrypter.cxx:42
xAOD::SimpleEncrypter::m_n
ULLI_t m_n
Definition: SimpleEncrypter.h:229
beamspotman.r
def r
Definition: beamspotman.py:676
xAOD::SimpleEncrypter::encrypt
virtual ULLI_t encrypt(ULLI_t x)
Encrypt a positive integer value.
Definition: SimpleEncrypter.cxx:120
xAOD::name
name
Definition: TriggerMenuJson_v1.cxx:29
max
#define max(a, b)
Definition: cfImp.cxx:41
xAOD::SimpleEncrypter::decodeKeyString
virtual std::pair< ULLI_t, ULLI_t > decodeKeyString(std::string str) const
Decode hex string to two integers.
Definition: SimpleEncrypter.cxx:309
xAOD::int
setRawEt setRawPhi int
Definition: TrigCaloCluster_v1.cxx:33
xAOD::float
float
Definition: BTagging_v1.cxx:168
WriteCellNoiseToCool.rb
rb
Definition: WriteCellNoiseToCool.py:229
hist_file_dump.d
d
Definition: hist_file_dump.py:137
Data
@ Data
Definition: BaseObject.h:11
xAOD::SimpleEncrypter::genDecryptionExponent
virtual ULLI_t genDecryptionExponent(ULLI_t phi, ULLI_t e) const
Find decryption exponent.
Definition: SimpleEncrypter.cxx:275
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
xAOD::SimpleEncrypter::setPubKey
virtual void setPubKey(std::string keystr)
Set public key.
Definition: SimpleEncrypter.cxx:92
xAOD::SimpleEncrypter::floatBitsToInt
virtual ULLI_t floatBitsToInt(float val) const
Definition: SimpleEncrypter.cxx:338
asg
Definition: DataHandleTestTool.h:28
bin
Definition: BinsDiffFromStripMedian.h:43
PlotCalibFromCool.ib
ib
Definition: PlotCalibFromCool.py:419
xAOD::SimpleEncrypter::genKeyPair
virtual std::pair< std::string, std::string > genKeyPair()
Generate private and public keys.
Definition: SimpleEncrypter.cxx:60
SimpleEncrypter.h
Provide simple asymmetric encryption for blinding of float values.
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
xAOD::SimpleEncrypter::encryptFPECycle
ULLI_t encryptFPECycle(ULLI_t a) const
Definition: SimpleEncrypter.cxx:420
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
x
#define x
xAOD::SimpleEncrypter::genCoprime
virtual ULLI_t genCoprime(ULLI_t n) const
Find a coprime number.
Definition: SimpleEncrypter.cxx:262
xAOD::SimpleEncrypter::powerMod
ULLI_t powerMod(ULLI_t a, ULLI_t d, ULLI_t n) const
Exponentiate a with d observing modulus n.
Definition: SimpleEncrypter.cxx:472
xAOD::SimpleEncrypter::isOkForEnc
bool isOkForEnc()
Check setup readiness for encryption.
Definition: SimpleEncrypter.cxx:498
xAOD::SimpleEncrypter::m_isOkForEnc
bool m_isOkForEnc
indicates that keys are set and range checks are ok
Definition: SimpleEncrypter.h:236
xAOD::SimpleEncrypter::setPrivKey
virtual void setPrivKey(std::string keystr)
Set private key.
Definition: SimpleEncrypter.cxx:78
xAOD::phi
setEt phi
Definition: TrigEMCluster_v1.cxx:29
xAOD::SimpleEncrypter::decryptInternal
ULLI_t decryptInternal(ULLI_t x) const
Decrypt integer (internal)
Definition: SimpleEncrypter.cxx:464
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
xAOD::SimpleEncrypter::greatestCommonDenominator
virtual ULLI_t greatestCommonDenominator(ULLI_t n1, ULLI_t n2) const
Find greatest common denominator.
Definition: SimpleEncrypter.cxx:247
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LArG4FSStartPointFilter.rand
rand
Definition: LArG4FSStartPointFilter.py:80
xAOD::SimpleEncrypter::~SimpleEncrypter
virtual ~SimpleEncrypter()
Default destructor.
Definition: SimpleEncrypter.cxx:53
lumiFormat.i
int i
Definition: lumiFormat.py:85
beamspotman.n
n
Definition: beamspotman.py:731
xAOD::e
setPy e
Definition: CompositeParticle_v1.cxx:166
xAOD::SimpleEncrypter::isPrime
virtual bool isPrime(ULLI_t n) const
Check for being a prime number.
Definition: SimpleEncrypter.cxx:230
xAOD::SimpleEncrypter::m_MAXHEXDIGITS
static const unsigned int m_MAXHEXDIGITS
maximum number of hex digits for key parts
Definition: SimpleEncrypter.h:223
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
hist_file_dump.f
f
Definition: hist_file_dump.py:135
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
xAOD::str
std::string str(const TrigT2MbtsBits_v1 &trigT2MbtsBits)
Definition: TrigT2MbtsBits_v1.cxx:37
min
#define min(a, b)
Definition: cfImp.cxx:40
xAOD::SimpleEncrypter::genKeyPairInternal
virtual void genKeyPairInternal()
Definition: SimpleEncrypter.cxx:189
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
xAOD::SimpleEncrypter::m_MAXRANGE
static const ULLI_t m_MAXRANGE
Definition: SimpleEncrypter.h:220
xAOD::SimpleEncrypter::ULLI_t
unsigned long long int ULLI_t
Definition: SimpleEncrypter.h:41
xAOD::SimpleEncrypter::m_isOkForDec
bool m_isOkForDec
Definition: SimpleEncrypter.h:237
xAOD::SimpleEncrypter::intBitsToFloat
virtual float intBitsToFloat(ULLI_t val) const
Interpret bits of integer as floating point number.
Definition: SimpleEncrypter.cxx:379
xAOD::SimpleEncrypter::getPrivKey
virtual std::string getPrivKey() const
Get private key.
Definition: SimpleEncrypter.cxx:106
Rtt_histogram.n1
n1
Definition: Rtt_histogram.py:21
a
TList * a
Definition: liststreamerinfos.cxx:10
xAOD::SimpleEncrypter::decrypt
virtual ULLI_t decrypt(ULLI_t x)
Decrypt a positive integer value.
Definition: SimpleEncrypter.cxx:132
xAOD::SimpleEncrypter::encryptInternal
ULLI_t encryptInternal(ULLI_t x) const
Encrypt integer (internal)
Definition: SimpleEncrypter.cxx:457
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::SimpleEncrypter::m_e
ULLI_t m_e
encryption exponent: public key part II
Definition: SimpleEncrypter.h:231
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
dq_defect_virtual_defect_validation.d2
d2
Definition: dq_defect_virtual_defect_validation.py:81
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
extractSporadic.q
list q
Definition: extractSporadic.py:98
str
Definition: BTagTrackIpAccessor.cxx:11
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
xAOD::SimpleEncrypter::LLI_t
long long int LLI_t
Useful typedefs.
Definition: SimpleEncrypter.h:40
xAOD::SimpleEncrypter::m_d
ULLI_t m_d
decryption exponent: private key part II
Definition: SimpleEncrypter.h:233
xAOD::SimpleEncrypter::getPubKey
virtual std::string getPubKey() const
Get public key.
Definition: SimpleEncrypter.cxx:113
python.compressB64.c
def c
Definition: compressB64.py:93
xAOD::SimpleEncrypter::isOkForDec
bool isOkForDec()
Check setup readiness for decryption.
Definition: SimpleEncrypter.cxx:514
xAOD::SimpleEncrypter::keyToString
virtual std::string keyToString(ULLI_t a, ULLI_t b) const
Definition: SimpleEncrypter.cxx:287
xAOD::SimpleEncrypter::m_MINRANGE
static const ULLI_t m_MINRANGE
Definition: SimpleEncrypter.h:221