Search in sources :

Example 1 with CramerShoupPublicKeyParameters

use of com.github.zhenwei.core.crypto.params.CramerShoupPublicKeyParameters in project LinLong-Java by zhenwei1108.

the class CramerShoupCoreEngine method encryptBlock.

public CramerShoupCiphertext encryptBlock(BigInteger input) {
    CramerShoupCiphertext result = null;
    if (!key.isPrivate() && this.forEncryption && key instanceof CramerShoupPublicKeyParameters) {
        CramerShoupPublicKeyParameters pk = (CramerShoupPublicKeyParameters) key;
        BigInteger p = pk.getParameters().getP();
        BigInteger g1 = pk.getParameters().getG1();
        BigInteger g2 = pk.getParameters().getG2();
        BigInteger h = pk.getH();
        if (!isValidMessage(input, p)) {
            return result;
        }
        BigInteger r = generateRandomElement(p, random);
        BigInteger u1, u2, v, e, a;
        u1 = g1.modPow(r, p);
        u2 = g2.modPow(r, p);
        e = h.modPow(r, p).multiply(input).mod(p);
        Digest digest = pk.getParameters().getH();
        byte[] u1Bytes = u1.toByteArray();
        digest.update(u1Bytes, 0, u1Bytes.length);
        byte[] u2Bytes = u2.toByteArray();
        digest.update(u2Bytes, 0, u2Bytes.length);
        byte[] eBytes = e.toByteArray();
        digest.update(eBytes, 0, eBytes.length);
        if (this.label != null) {
            byte[] lBytes = this.label;
            digest.update(lBytes, 0, lBytes.length);
        }
        byte[] out = new byte[digest.getDigestSize()];
        digest.doFinal(out, 0);
        a = new BigInteger(1, out);
        v = pk.getC().modPow(r, p).multiply(pk.getD().modPow(r.multiply(a), p)).mod(p);
        result = new CramerShoupCiphertext(u1, u2, e, v);
    }
    return result;
}
Also used : CramerShoupPublicKeyParameters(com.github.zhenwei.core.crypto.params.CramerShoupPublicKeyParameters) Digest(com.github.zhenwei.core.crypto.Digest) BigInteger(java.math.BigInteger)

Example 2 with CramerShoupPublicKeyParameters

use of com.github.zhenwei.core.crypto.params.CramerShoupPublicKeyParameters in project LinLong-Java by zhenwei1108.

the class CramerShoupKeyPairGenerator method generateKeyPair.

public AsymmetricCipherKeyPair generateKeyPair() {
    CramerShoupParameters csParams = param.getParameters();
    CramerShoupPrivateKeyParameters sk = generatePrivateKey(param.getRandom(), csParams);
    CramerShoupPublicKeyParameters pk = calculatePublicKey(csParams, sk);
    sk.setPk(pk);
    return new AsymmetricCipherKeyPair(pk, sk);
}
Also used : CramerShoupParameters(com.github.zhenwei.core.crypto.params.CramerShoupParameters) CramerShoupPrivateKeyParameters(com.github.zhenwei.core.crypto.params.CramerShoupPrivateKeyParameters) CramerShoupPublicKeyParameters(com.github.zhenwei.core.crypto.params.CramerShoupPublicKeyParameters) AsymmetricCipherKeyPair(com.github.zhenwei.core.crypto.AsymmetricCipherKeyPair)

Example 3 with CramerShoupPublicKeyParameters

use of com.github.zhenwei.core.crypto.params.CramerShoupPublicKeyParameters in project LinLong-Java by zhenwei1108.

the class CramerShoupKeyPairGenerator method calculatePublicKey.

private CramerShoupPublicKeyParameters calculatePublicKey(CramerShoupParameters csParams, CramerShoupPrivateKeyParameters sk) {
    BigInteger g1 = csParams.getG1();
    BigInteger g2 = csParams.getG2();
    BigInteger p = csParams.getP();
    BigInteger c = g1.modPow(sk.getX1(), p).multiply(g2.modPow(sk.getX2(), p));
    BigInteger d = g1.modPow(sk.getY1(), p).multiply(g2.modPow(sk.getY2(), p));
    BigInteger h = g1.modPow(sk.getZ(), p);
    return new CramerShoupPublicKeyParameters(csParams, c, d, h);
}
Also used : CramerShoupPublicKeyParameters(com.github.zhenwei.core.crypto.params.CramerShoupPublicKeyParameters) BigInteger(java.math.BigInteger)

Aggregations

CramerShoupPublicKeyParameters (com.github.zhenwei.core.crypto.params.CramerShoupPublicKeyParameters)3 BigInteger (java.math.BigInteger)2 AsymmetricCipherKeyPair (com.github.zhenwei.core.crypto.AsymmetricCipherKeyPair)1 Digest (com.github.zhenwei.core.crypto.Digest)1 CramerShoupParameters (com.github.zhenwei.core.crypto.params.CramerShoupParameters)1 CramerShoupPrivateKeyParameters (com.github.zhenwei.core.crypto.params.CramerShoupPrivateKeyParameters)1