/** @com.intel.drl.spec_ref */ public ECFieldF2m(int m, BigInteger rp) { this.m = m; if (this.m <= 0) { throw new IllegalArgumentException(Messages.getString("security.75")); // $NON-NLS-1$ } this.rp = rp; if (this.rp == null) { throw new NullPointerException(Messages.getString("security.76")); // $NON-NLS-1$ } // the leftmost bit must be (m+1)-th one, // set bits count must be 3 or 5, // bits 0 and m must be set int rp_bc = this.rp.bitCount(); if ((this.rp.bitLength() != (m + 1)) || (rp_bc != TPB_LEN && rp_bc != PPB_LEN) || (!this.rp.testBit(0) || !this.rp.testBit(m))) { throw new IllegalArgumentException(Messages.getString("security.77")); // $NON-NLS-1$ } // setup ks using rp: // allocate for mid terms only ks = new int[rp_bc - 2]; // find midterm orders and set ks accordingly BigInteger rpTmp = rp.clearBit(0); for (int i = ks.length - 1; i >= 0; i--) { ks[i] = rpTmp.getLowestSetBit(); rpTmp = rpTmp.clearBit(ks[i]); } }
public static void bitOps(int order) { int failCount1 = 0, failCount2 = 0, failCount3 = 0; for (int i = 0; i < size * 5; i++) { BigInteger x = fetchNumber(order); BigInteger y; /* Test setBit and clearBit (and testBit) */ if (x.signum() < 0) { y = BigInteger.valueOf(-1); for (int j = 0; j < x.bitLength(); j++) if (!x.testBit(j)) y = y.clearBit(j); } else { y = BigInteger.ZERO; for (int j = 0; j < x.bitLength(); j++) if (x.testBit(j)) y = y.setBit(j); } if (!x.equals(y)) failCount1++; /* Test flipBit (and testBit) */ y = BigInteger.valueOf(x.signum() < 0 ? -1 : 0); for (int j = 0; j < x.bitLength(); j++) if (x.signum() < 0 ^ x.testBit(j)) y = y.flipBit(j); if (!x.equals(y)) failCount2++; } report("clearBit/testBit", failCount1); report("flipBit/testBit", failCount2); for (int i = 0; i < size * 5; i++) { BigInteger x = fetchNumber(order); /* Test getLowestSetBit() */ int k = x.getLowestSetBit(); if (x.signum() == 0) { if (k != -1) failCount3++; } else { BigInteger z = x.and(x.negate()); int j; for (j = 0; j < z.bitLength() && !z.testBit(j); j++) ; if (k != j) failCount3++; } } report("getLowestSetBit", failCount3); }