Methods Summary |
---|
private static void | Check(boolean success)
if (!success) {
StringBuilder sb = new StringBuilder("(openssl)ERR: ");
int cnt = consumeErrors(sb);
if (cnt > 0)
throw new ArithmeticException(sb.toString());
}
|
public void | add(java.math.BigInt a)
Check(NativeBN.BN_add(this.bignum, this.bignum, a.bignum));
|
public void | addPositiveInt(int w)
Check(NativeBN.BN_add_word(this.bignum, w));
|
public static java.math.BigInt | addition(java.math.BigInt a, java.math.BigInt b)
BigInt r = newBigInt();
Check(NativeBN.BN_add(r.bignum, a.bignum, b.bignum));
return r;
|
public byte[] | bigEndianMagnitude()
byte[] a = NativeBN.BN_bn2bin(this.bignum, null);
return a;
|
public byte[] | bigEndianTwosComplement()
byte[] a = NativeBN.bn2twosComp(this.bignum, null);
return a;
|
public static java.math.BigInt | bigExp(java.math.BigInt a, java.math.BigInt p, java.math.BigInt$Context t)
// Sign of p is ignored!
BigInt r = newBigInt();
Check(NativeBN.BN_exp(r.bignum, a.bignum, p.bignum, getCtx(t)));
return r;
|
public int | bitLength()
return NativeBN.bitLength(this.bignum);
|
public static int | cmp(java.math.BigInt a, java.math.BigInt b)
return NativeBN.BN_cmp(a.bignum, b.bignum);
|
public static int | consumeErrors(java.lang.StringBuilder sb)
int cnt = 0;
int e, reason;
boolean first = true;
while ((e = NativeBN.ERR_get_error()) != 0) {
reason = e & 255;
if (reason == 103) {
// math.17=BigInteger divide by zero
throw new ArithmeticException(Messages.getString("math.17")); //$NON-NLS-1$
}
if (reason == 108) {
// math.19=BigInteger not invertible.
throw new ArithmeticException(Messages.getString("math.19")); //$NON-NLS-1$
}
if (reason == 65) {
throw new OutOfMemoryError();
}
if (!first) { sb.append(" *** "); first = false; }
sb.append(e).append(": ");
String s = NativeBN.ERR_error_string(e);
sb.append(s);
cnt++;
}
return cnt;
|
public java.math.BigInt | copy()
BigInt bi = new BigInt();
bi.putCopy(this);
return bi;
|
public java.lang.String | decString()
String str = NativeBN.BN_bn2dec(this.bignum);
return str;
|
public void | dispose()
if (this.bignum != 0) {
NativeBN.BN_free(this.bignum);
this.bignum = 0;
}
|
public int | divideByPositiveInt(int w)
int rem = NativeBN.BN_div_word(this.bignum, w);
Check(rem != -1);
return rem;
|
public static void | division(java.math.BigInt dividend, java.math.BigInt divisor, java.math.BigInt$Context t, java.math.BigInt quotient, java.math.BigInt remainder)
int quot, rem;
if (quotient != null) {
quotient.makeValid();
quot = quotient.bignum;
}
else quot = 0;
if (remainder != null) {
remainder.makeValid();
rem = remainder.bignum;
}
else rem = 0;
Check(NativeBN.BN_div(quot, rem, dividend.bignum, divisor.bignum, getCtx(t)));
|
public static java.math.BigInt | exp(java.math.BigInt a, int p, java.math.BigInt$Context t)
// Sign of p is ignored!
BigInt power = new BigInt();
power.putLongInt(p);
return bigExp(a, power, t);
// OPTIONAL:
// public int BN_sqr(BigInteger r, BigInteger a, BN_CTX ctx);
// int BN_sqr(BIGNUM *r, const BIGNUM *a,BN_CTX *ctx);
|
protected void | finalize()
dispose();
|
public static java.math.BigInt | gcd(java.math.BigInt a, java.math.BigInt b, java.math.BigInt$Context t)
BigInt r = newBigInt();
Check(NativeBN.BN_gcd(r.bignum, a.bignum, b.bignum, getCtx(t)));
return r;
|
public static java.math.BigInt | generatePrimeDefault(int bitLength, java.util.Random rnd, java.math.BigInt$Context t)
BigInt r = newBigInt();
Check(NativeBN.BN_generate_prime_ex(r.bignum, bitLength, false, 0, 0, 0));
return r;
|
public static java.math.BigInt | generatePrimeSafe(int bitLength, java.util.Random rnd, java.math.BigInt$Context t)
BigInt r = newBigInt();
Check(NativeBN.BN_generate_prime_ex(r.bignum, bitLength, true, 0, 0, 0));
return r;
|
static int | getCtx(java.math.BigInt$Context t)
dummy = new BigInt();
defaultContext = dummy.new Context();
return (t != null) ? t.bnctx : defaultContext.bnctx;
|
public int | getNativeBIGNUM()
return this.bignum;
|
public java.lang.String | hexString()
String str = NativeBN.BN_bn2hex(this.bignum);
return str;
|
public boolean | isBitSet(int n)
return NativeBN.BN_is_bit_set(this.bignum, n);
|
public boolean | isPrime(int certainty, java.util.Random rnd, java.math.BigInt$Context t)
return NativeBN.BN_is_prime_ex(bignum, certainty, getCtx(t), 0);
|
public int[] | littleEndianIntsMagnitude()
int[] a = NativeBN.bn2litEndInts(this.bignum, null);
return a;
|
public long | longInt()
return NativeBN.longInt(this.bignum);
|
private void | makeValid()
if (this.bignum == 0) {
this.bignum = NativeBN.BN_new();
Check(this.bignum != 0);
}
|
public static java.math.BigInt | modExp(java.math.BigInt a, java.math.BigInt p, java.math.BigInt m, java.math.BigInt$Context t)
// Sign of p is ignored!
BigInt r = newBigInt();
Check(NativeBN.BN_mod_exp(r.bignum, a.bignum, p.bignum, m.bignum, getCtx(t)));
// OPTIONAL:
// int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
return r;
|
public static java.math.BigInt | modInverse(java.math.BigInt a, java.math.BigInt m, java.math.BigInt$Context t)
BigInt r = newBigInt();
Check(NativeBN.BN_mod_inverse(r.bignum, a.bignum, m.bignum, getCtx(t)));
return r;
|
public void | modifyBit(int n, int op)
// op: 0 = reset; 1 = set; -1 = flip
Check(NativeBN.modifyBit(this.bignum, n, op));
|
public static java.math.BigInt | modulus(java.math.BigInt a, java.math.BigInt m, java.math.BigInt$Context t)
// Sign of p is ignored! ?
BigInt r = newBigInt();
Check(NativeBN.BN_nnmod(r.bignum, a.bignum, m.bignum, getCtx(t)));
return r;
|
public void | multiplyBy(java.math.BigInt a, java.math.BigInt$Context t)
Check(NativeBN.BN_mul(this.bignum, this.bignum, a.bignum, getCtx(t)));
|
public void | multiplyByPositiveInt(int w)
Check(NativeBN.BN_mul_word(this.bignum, w));
|
private static java.math.BigInt | newBigInt()
BigInt bi = new BigInt();
bi.bignum = NativeBN.BN_new();
Check(bi.bignum != 0);
return bi;
|
public static java.math.BigInt | product(java.math.BigInt a, java.math.BigInt b, java.math.BigInt$Context t)
BigInt r = newBigInt();
Check(NativeBN.BN_mul(r.bignum, a.bignum, b.bignum, getCtx(t)));
return r;
|
public void | putBigEndian(byte[] a, boolean neg)
this.makeValid();
Check(NativeBN.BN_bin2bn(a, a.length, neg, this.bignum));
|
public void | putBigEndianTwosComplement(byte[] a)
this.makeValid();
Check(NativeBN.twosComp2bn(a, a.length, this.bignum));
|
public void | putCopy(java.math.BigInt from)
this.makeValid();
Check(NativeBN.BN_copy(this.bignum, from.bignum));
|
public void | putDecString(java.lang.String str)
if (str == null) throw new NullPointerException();
if (str.length() == 0) {
// math.12=Zero length BigInteger
throw new NumberFormatException(Messages.getString("math.12")); //$NON-NLS-1$
}
this.makeValid();
int usedLen = NativeBN.BN_dec2bn(this.bignum, str);
Check((usedLen > 0));
if (usedLen < str.length()) {
throw new NumberFormatException(str);
}
|
public void | putHexString(java.lang.String str)
if (str == null) throw new NullPointerException();
if (str.length() == 0) {
// math.12=Zero length BigInteger
throw new NumberFormatException(Messages.getString("math.12")); //$NON-NLS-1$
}
this.makeValid();
int usedLen = NativeBN.BN_hex2bn(this.bignum, str);
Check((usedLen > 0));
if (usedLen < str.length()) {
throw new NumberFormatException(str);
}
|
public void | putLittleEndianInts(int[] a, boolean neg)
this.makeValid();
Check(NativeBN.litEndInts2bn(a, a.length, neg, this.bignum));
|
public void | putLongInt(long val)
this.makeValid();
Check(NativeBN.putLongInt(this.bignum, val));
|
public void | putULongInt(long val, boolean neg)
this.makeValid();
Check(NativeBN.putULongInt(this.bignum, val, neg));
|
public static int | remainderByPositiveInt(java.math.BigInt a, int w)
int rem = NativeBN.BN_mod_word(a.bignum, w);
Check(rem != -1);
return rem;
|
public void | setSign(int val)
if (val > 0) NativeBN.BN_set_negative(this.bignum, 0);
else if (val < 0) NativeBN.BN_set_negative(this.bignum, 1);
|
public static java.math.BigInt | shift(java.math.BigInt a, int n)
BigInt r = newBigInt();
Check(NativeBN.BN_lshift(r.bignum, a.bignum, n));
return r;
|
public void | shift(int n)
Check(NativeBN.BN_lshift(this.bignum, this.bignum, n));
|
public int | sign()
return NativeBN.sign(this.bignum);
|
public void | subtractPositiveInt(int w)
Check(NativeBN.BN_sub_word(this.bignum, w));
|
public static java.math.BigInt | subtraction(java.math.BigInt a, java.math.BigInt b)
BigInt r = newBigInt();
Check(NativeBN.BN_sub(r.bignum, a.bignum, b.bignum));
return r;
|
public java.lang.String | toString()
return this.decString();
|
public boolean | twosCompFitsIntoBytes(int byteCnt)
return NativeBN.twosCompFitsIntoBytes(this.bignum, byteCnt);
|